src/gui/itemviews/qtreewidget.h

Go to the documentation of this file.
00001 /****************************************************************************
00002 **
00003 ** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.
00004 **
00005 ** This file is part of the QtGui module of the Qt Toolkit.
00006 **
00007 ** This file may be used under the terms of the GNU General Public
00008 ** License version 2.0 as published by the Free Software Foundation
00009 ** and appearing in the file LICENSE.GPL included in the packaging of
00010 ** this file.  Please review the following information to ensure GNU
00011 ** General Public Licensing requirements will be met:
00012 ** http://www.trolltech.com/products/qt/opensource.html
00013 **
00014 ** If you are unsure which license is appropriate for your use, please
00015 ** review the following information:
00016 ** http://www.trolltech.com/products/qt/licensing.html or contact the
00017 ** sales department at sales@trolltech.com.
00018 **
00019 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
00020 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
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     // Qt 5 add private class and move private data into it
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     // One item has a vector of column entries. Each column has a vector of (role, value) pairs.
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); // ### Qt 5: remove me
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 &current))
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

Generated on Thu Mar 15 11:55:01 2007 for Qt 4.2 User's Guide by  doxygen 1.5.1