00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042 #ifndef QTREEWIDGET_H
00043 #define QTREEWIDGET_H
00044
00045 #include <QtGui/qtreeview.h>
00046 #include <QtGui/qtreewidgetitemiterator.h>
00047 #include <QtCore/qvariant.h>
00048 #include <QtCore/qvector.h>
00049
00050 QT_BEGIN_HEADER
00051
00052 QT_BEGIN_NAMESPACE
00053
00054 QT_MODULE(Gui)
00055
00056 #ifndef QT_NO_TREEWIDGET
00057
00058 class QTreeWidget;
00059 class QTreeModel;
00060 class QWidgetItemData;
00061 class QTreeWidgetItemPrivate;
00062
00063 class Q_GUI_EXPORT QTreeWidgetItem
00064 {
00065 friend class QTreeModel;
00066 friend class QTreeWidget;
00067 friend class QTreeWidgetPrivate;
00068 friend class QTreeWidgetItemIterator;
00069 friend class QTreeWidgetItemPrivate;
00070 public:
00071 enum ItemType { Type = 0, UserType = 1000 };
00072 explicit QTreeWidgetItem(int type = Type);
00073 QTreeWidgetItem(const QStringList &strings, int type = Type);
00074 explicit QTreeWidgetItem(QTreeWidget *view, int type = Type);
00075 QTreeWidgetItem(QTreeWidget *view, const QStringList &strings, int type = Type);
00076 QTreeWidgetItem(QTreeWidget *view, QTreeWidgetItem *after, int type = Type);
00077 explicit QTreeWidgetItem(QTreeWidgetItem *parent, int type = Type);
00078 QTreeWidgetItem(QTreeWidgetItem *parent, const QStringList &strings, int type = Type);
00079 QTreeWidgetItem(QTreeWidgetItem *parent, QTreeWidgetItem *after, int type = Type);
00080 QTreeWidgetItem(const QTreeWidgetItem &other);
00081 virtual ~QTreeWidgetItem();
00082
00083 virtual QTreeWidgetItem *clone() const;
00084
00085 inline QTreeWidget *treeWidget() const { return view; }
00086
00087 inline void setSelected(bool select);
00088 inline bool isSelected() const;
00089
00090 inline void setHidden(bool hide);
00091 inline bool isHidden() const;
00092
00093 inline void setExpanded(bool expand);
00094 inline bool isExpanded() const;
00095
00096 inline void setFirstColumnSpanned(bool span);
00097 inline bool isFirstColumnSpanned() const;
00098
00099 inline void setDisabled(bool disabled);
00100 inline bool isDisabled() const;
00101
00102 enum ChildIndicatorPolicy { ShowIndicator, DontShowIndicator, DontShowIndicatorWhenChildless };
00103 void setChildIndicatorPolicy(QTreeWidgetItem::ChildIndicatorPolicy policy);
00104 QTreeWidgetItem::ChildIndicatorPolicy childIndicatorPolicy() const;
00105
00106 Qt::ItemFlags flags() const;
00107 void setFlags(Qt::ItemFlags flags);
00108
00109 inline QString text(int column) const
00110 { return data(column, Qt::DisplayRole).toString(); }
00111 inline void setText(int column, const QString &text);
00112
00113 inline QIcon icon(int column) const
00114 { return qvariant_cast<QIcon>(data(column, Qt::DecorationRole)); }
00115 inline void setIcon(int column, const QIcon &icon);
00116
00117 inline QString statusTip(int column) const
00118 { return data(column, Qt::StatusTipRole).toString(); }
00119 inline void setStatusTip(int column, const QString &statusTip);
00120
00121 #ifndef QT_NO_TOOLTIP
00122 inline QString toolTip(int column) const
00123 { return data(column, Qt::ToolTipRole).toString(); }
00124 inline void setToolTip(int column, const QString &toolTip);
00125 #endif
00126
00127 #ifndef QT_NO_WHATSTHIS
00128 inline QString whatsThis(int column) const
00129 { return data(column, Qt::WhatsThisRole).toString(); }
00130 inline void setWhatsThis(int column, const QString &whatsThis);
00131 #endif
00132
00133 inline QFont font(int column) const
00134 { return qvariant_cast<QFont>(data(column, Qt::FontRole)); }
00135 inline void setFont(int column, const QFont &font);
00136
00137 inline int textAlignment(int column) const
00138 { return data(column, Qt::TextAlignmentRole).toInt(); }
00139 inline void setTextAlignment(int column, int alignment)
00140 { setData(column, Qt::TextAlignmentRole, alignment); }
00141
00142 inline QColor backgroundColor(int column) const
00143 { return qvariant_cast<QColor>(data(column, Qt::BackgroundColorRole)); }
00144 inline void setBackgroundColor(int column, const QColor &color)
00145 { setData(column, Qt::BackgroundColorRole, color); }
00146
00147 inline QBrush background(int column) const
00148 { return qvariant_cast<QBrush>(data(column, Qt::BackgroundRole)); }
00149 inline void setBackground(int column, const QBrush &brush)
00150 { setData(column, Qt::BackgroundRole, brush); }
00151
00152 inline QColor textColor(int column) const
00153 { return qvariant_cast<QColor>(data(column, Qt::TextColorRole)); }
00154 inline void setTextColor(int column, const QColor &color)
00155 { setData(column, Qt::TextColorRole, color); }
00156
00157 inline QBrush foreground(int column) const
00158 { return qvariant_cast<QBrush>(data(column, Qt::ForegroundRole)); }
00159 inline void setForeground(int column, const QBrush &brush)
00160 { setData(column, Qt::ForegroundRole, brush); }
00161
00162 inline Qt::CheckState checkState(int column) const
00163 { return static_cast<Qt::CheckState>(data(column, Qt::CheckStateRole).toInt()); }
00164 inline void setCheckState(int column, Qt::CheckState state)
00165 { setData(column, Qt::CheckStateRole, state); }
00166
00167 inline QSize sizeHint(int column) const
00168 { return qvariant_cast<QSize>(data(column, Qt::SizeHintRole)); }
00169 inline void setSizeHint(int column, const QSize &size)
00170 { setData(column, Qt::SizeHintRole, size); }
00171
00172 virtual QVariant data(int column, int role) const;
00173 virtual void setData(int column, int role, const QVariant &value);
00174
00175 virtual bool operator<(const QTreeWidgetItem &other) const;
00176
00177 #ifndef QT_NO_DATASTREAM
00178 virtual void read(QDataStream &in);
00179 virtual void write(QDataStream &out) const;
00180 #endif
00181 QTreeWidgetItem &operator=(const QTreeWidgetItem &other);
00182
00183 inline QTreeWidgetItem *parent() const { return par; }
00184 inline QTreeWidgetItem *child(int index) const {
00185 if (index < 0 || index >= children.size())
00186 return 0;
00187 executePendingSort();
00188 return children.at(index);
00189 }
00190 inline int childCount() const { return children.count(); }
00191 inline int columnCount() const { return values.count(); }
00192 inline int indexOfChild(QTreeWidgetItem *child) const;
00193
00194 void addChild(QTreeWidgetItem *child);
00195 void insertChild(int index, QTreeWidgetItem *child);
00196 void removeChild(QTreeWidgetItem *child);
00197 QTreeWidgetItem *takeChild(int index);
00198
00199 void addChildren(const QList<QTreeWidgetItem*> &children);
00200 void insertChildren(int index, const QList<QTreeWidgetItem*> &children);
00201 QList<QTreeWidgetItem*> takeChildren();
00202
00203 inline int type() const { return rtti; }
00204 inline void sortChildren(int column, Qt::SortOrder order)
00205 { sortChildren(column, order, false); }
00206
00207 protected:
00208 void emitDataChanged();
00209
00210 private:
00211 void sortChildren(int column, Qt::SortOrder order, bool climb);
00212 QVariant childrenCheckState(int column) const;
00213 void itemChanged();
00214 void executePendingSort() const;
00215
00216 int rtti;
00217
00218 QVector< QVector<QWidgetItemData> > values;
00219 QTreeWidget *view;
00220 QTreeWidgetItemPrivate *d;
00221 QTreeWidgetItem *par;
00222 QList<QTreeWidgetItem*> children;
00223 Qt::ItemFlags itemFlags;
00224 };
00225
00226 inline void QTreeWidgetItem::setText(int column, const QString &atext)
00227 { setData(column, Qt::DisplayRole, atext); }
00228
00229 inline void QTreeWidgetItem::setIcon(int column, const QIcon &aicon)
00230 { setData(column, Qt::DecorationRole, aicon); }
00231
00232 #ifndef QT_NO_STATUSTIP
00233 inline void QTreeWidgetItem::setStatusTip(int column, const QString &astatusTip)
00234 { setData(column, Qt::StatusTipRole, astatusTip); }
00235 #endif
00236
00237 #ifndef QT_NO_TOOLTIP
00238 inline void QTreeWidgetItem::setToolTip(int column, const QString &atoolTip)
00239 { setData(column, Qt::ToolTipRole, atoolTip); }
00240 #endif
00241
00242 #ifndef QT_NO_WHATSTHIS
00243 inline void QTreeWidgetItem::setWhatsThis(int column, const QString &awhatsThis)
00244 { setData(column, Qt::WhatsThisRole, awhatsThis); }
00245 #endif
00246
00247 inline void QTreeWidgetItem::setFont(int column, const QFont &afont)
00248 { setData(column, Qt::FontRole, afont); }
00249
00250 inline int QTreeWidgetItem::indexOfChild(QTreeWidgetItem *achild) const
00251 { executePendingSort(); return children.indexOf(achild); }
00252
00253 #ifndef QT_NO_DATASTREAM
00254 Q_GUI_EXPORT QDataStream &operator<<(QDataStream &out, const QTreeWidgetItem &item);
00255 Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item);
00256 #endif
00257
00258 class QTreeWidgetPrivate;
00259
00260 class Q_GUI_EXPORT QTreeWidget : public QTreeView
00261 {
00262 Q_OBJECT
00263 Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount)
00264 Q_PROPERTY(int topLevelItemCount READ topLevelItemCount)
00265
00266 friend class QTreeModel;
00267 friend class QTreeWidgetItem;
00268 public:
00269 explicit QTreeWidget(QWidget *parent = 0);
00270 ~QTreeWidget();
00271
00272 int columnCount() const;
00273 void setColumnCount(int columns);
00274
00275 QTreeWidgetItem *invisibleRootItem() const;
00276 QTreeWidgetItem *topLevelItem(int index) const;
00277 int topLevelItemCount() const;
00278 void insertTopLevelItem(int index, QTreeWidgetItem *item);
00279 void addTopLevelItem(QTreeWidgetItem *item);
00280 QTreeWidgetItem *takeTopLevelItem(int index);
00281 int indexOfTopLevelItem(QTreeWidgetItem *item);
00282 int indexOfTopLevelItem(QTreeWidgetItem *item) const;
00283
00284 void insertTopLevelItems(int index, const QList<QTreeWidgetItem*> &items);
00285 void addTopLevelItems(const QList<QTreeWidgetItem*> &items);
00286
00287 QTreeWidgetItem *headerItem() const;
00288 void setHeaderItem(QTreeWidgetItem *item);
00289 void setHeaderLabels(const QStringList &labels);
00290 inline void setHeaderLabel(const QString &label);
00291
00292 QTreeWidgetItem *currentItem() const;
00293 int currentColumn() const;
00294 void setCurrentItem(QTreeWidgetItem *item);
00295 void setCurrentItem(QTreeWidgetItem *item, int column);
00296 void setCurrentItem(QTreeWidgetItem *item, int column, QItemSelectionModel::SelectionFlags command);
00297
00298 QTreeWidgetItem *itemAt(const QPoint &p) const;
00299 inline QTreeWidgetItem *itemAt(int x, int y) const;
00300 QRect visualItemRect(const QTreeWidgetItem *item) const;
00301
00302 int sortColumn() const;
00303 void sortItems(int column, Qt::SortOrder order);
00304 void setSortingEnabled(bool enable);
00305 bool isSortingEnabled() const;
00306
00307 void editItem(QTreeWidgetItem *item, int column = 0);
00308 void openPersistentEditor(QTreeWidgetItem *item, int column = 0);
00309 void closePersistentEditor(QTreeWidgetItem *item, int column = 0);
00310
00311 QWidget *itemWidget(QTreeWidgetItem *item, int column) const;
00312 void setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget);
00313 inline void removeItemWidget(QTreeWidgetItem *item, int column);
00314
00315 bool isItemSelected(const QTreeWidgetItem *item) const;
00316 void setItemSelected(const QTreeWidgetItem *item, bool select);
00317 QList<QTreeWidgetItem*> selectedItems() const;
00318 QList<QTreeWidgetItem*> findItems(const QString &text, Qt::MatchFlags flags,
00319 int column = 0) const;
00320
00321 bool isItemHidden(const QTreeWidgetItem *item) const;
00322 void setItemHidden(const QTreeWidgetItem *item, bool hide);
00323
00324 bool isItemExpanded(const QTreeWidgetItem *item) const;
00325 void setItemExpanded(const QTreeWidgetItem *item, bool expand);
00326
00327 bool isFirstItemColumnSpanned(const QTreeWidgetItem *item) const;
00328 void setFirstItemColumnSpanned(const QTreeWidgetItem *item, bool span);
00329
00330 QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const;
00331 QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const;
00332
00333 void setSelectionModel(QItemSelectionModel *selectionModel);
00334
00335 public Q_SLOTS:
00336 void scrollToItem(const QTreeWidgetItem *item,
00337 QAbstractItemView::ScrollHint hint = EnsureVisible);
00338 void expandItem(const QTreeWidgetItem *item);
00339 void collapseItem(const QTreeWidgetItem *item);
00340 void clear();
00341
00342 Q_SIGNALS:
00343 void itemPressed(QTreeWidgetItem *item, int column);
00344 void itemClicked(QTreeWidgetItem *item, int column);
00345 void itemDoubleClicked(QTreeWidgetItem *item, int column);
00346 void itemActivated(QTreeWidgetItem *item, int column);
00347 void itemEntered(QTreeWidgetItem *item, int column);
00348 void itemChanged(QTreeWidgetItem *item, int column);
00349 void itemExpanded(QTreeWidgetItem *item);
00350 void itemCollapsed(QTreeWidgetItem *item);
00351 void currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous);
00352 void itemSelectionChanged();
00353
00354 protected:
00355 bool event(QEvent *e);
00356 virtual QStringList mimeTypes() const;
00357 virtual QMimeData *mimeData(const QList<QTreeWidgetItem*> items) const;
00358 virtual bool dropMimeData(QTreeWidgetItem *parent, int index,
00359 const QMimeData *data, Qt::DropAction action);
00360 virtual Qt::DropActions supportedDropActions() const;
00361 QList<QTreeWidgetItem*> items(const QMimeData *data) const;
00362
00363 QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const;
00364 QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const;
00365 void dropEvent(QDropEvent *event);
00366
00367 private:
00368 void setModel(QAbstractItemModel *model);
00369
00370 Q_DECLARE_PRIVATE(QTreeWidget)
00371 Q_DISABLE_COPY(QTreeWidget)
00372
00373 Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index))
00374 Q_PRIVATE_SLOT(d_func(), void _q_emitItemClicked(const QModelIndex &index))
00375 Q_PRIVATE_SLOT(d_func(), void _q_emitItemDoubleClicked(const QModelIndex &index))
00376 Q_PRIVATE_SLOT(d_func(), void _q_emitItemActivated(const QModelIndex &index))
00377 Q_PRIVATE_SLOT(d_func(), void _q_emitItemEntered(const QModelIndex &index))
00378 Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &index))
00379 Q_PRIVATE_SLOT(d_func(), void _q_emitItemExpanded(const QModelIndex &index))
00380 Q_PRIVATE_SLOT(d_func(), void _q_emitItemCollapsed(const QModelIndex &index))
00381 Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex ¤t))
00382 Q_PRIVATE_SLOT(d_func(), void _q_sort())
00383 Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight))
00384 Q_PRIVATE_SLOT(d_func(), void _q_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected))
00385 };
00386
00387 inline void QTreeWidget::removeItemWidget(QTreeWidgetItem *item, int column)
00388 { setItemWidget(item, column, 0); }
00389
00390 inline QTreeWidgetItem *QTreeWidget::itemAt(int ax, int ay) const
00391 { return itemAt(QPoint(ax, ay)); }
00392
00393 inline void QTreeWidget::setHeaderLabel(const QString &alabel)
00394 { setHeaderLabels(QStringList(alabel)); }
00395
00396 inline void QTreeWidgetItem::setSelected(bool aselect)
00397 { if (view) view->setItemSelected(this, aselect); }
00398
00399 inline bool QTreeWidgetItem::isSelected() const
00400 { return (view ? view->isItemSelected(this) : false); }
00401
00402 inline void QTreeWidgetItem::setHidden(bool ahide)
00403 { if (view) view->setItemHidden(this, ahide); }
00404
00405 inline bool QTreeWidgetItem::isHidden() const
00406 { return (view ? view->isItemHidden(this) : false); }
00407
00408 inline void QTreeWidgetItem::setExpanded(bool aexpand)
00409 { if (view) view->setItemExpanded(this, aexpand); }
00410
00411 inline bool QTreeWidgetItem::isExpanded() const
00412 { return (view ? view->isItemExpanded(this) : false); }
00413
00414 inline void QTreeWidgetItem::setFirstColumnSpanned(bool aspan)
00415 { if (view) view->setFirstItemColumnSpanned(this, aspan); }
00416
00417 inline bool QTreeWidgetItem::isFirstColumnSpanned() const
00418 { return (view ? view->isFirstItemColumnSpanned(this) : false); }
00419
00420 inline void QTreeWidgetItem::setDisabled(bool disabled)
00421 { setFlags(disabled ? (flags() & ~Qt::ItemIsEnabled) : flags() | Qt::ItemIsEnabled); }
00422
00423 inline bool QTreeWidgetItem::isDisabled() const
00424 { return !(flags() & Qt::ItemIsEnabled); }
00425
00426 #endif // QT_NO_TREEWIDGET
00427
00428 QT_END_NAMESPACE
00429
00430 QT_END_HEADER
00431
00432 #endif // QTREEWIDGET_H