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