// $Id: ClientDlg.hpp $ // // class ClientDlg : public QDialog (or something) // class ClientDlg::EntityItemModel : public QAbstractItemModel // class ClientDlg::EntityItemData // //-- #ifndef ClientDlgINCLUDED #define ClientDlgINCLUDED #include #include #include class QTreeView; class RwQSortFilterProxyModel; #ifndef CallbackINCLUDED #include "Callback.hpp" #endif //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- class ClientDlg : public QDialog { Q_OBJECT private: class EntityItemModel; // declared below. (:: QAbstractItemModel) class EntityItemData; // declared below. private: ... ... ... QTreeView* _entityTreeView; EntityItemModel* _entityItemModel; RwQSortFilterProxyModel* _entitySortProxyModel; ... ... ... public: ClientDlg(); virtual ~ClientDlg(); ... ... ... private: void buildEntityTreeView(); QList allEntityItems() const; QList selectedEntityItems() const; ... ... ... private slots: void entityTreeView_doubleClicked (const QModelIndex&); void entityTreeView_customContextMenuReqAtPoint (const QPoint&); void entityTreeView_selectionChanged (const QItemSelection& selected, const QItemSelection& deselected); ... ... ... }; //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- class ClientDlg::EntityItemModel : public QAbstractItemModel { // ********************* // *** Definitions *** // ********************* public: // Column Indices enum { COL_OBJECT = 0, // XXX -- EXAMPLE COL_SLOT, // XXX -- EXAMPLE COL_SLOTCOL, // XXX -- EXAMPLE ... ... ... COLUMN_COUNT // number of columns }; // Special Data Role for Sort Order enum { UserSortRole = Qt::UserRole + 0 }; // ****************************** // *** EntityItemModel Data *** // ****************************** QList _itemDataList; // ****************************************** // *** EntityItemModel Client Interface *** // ****************************************** public: EntityItemModel (QObject* parentObj); virtual ~EntityItemModel(); int itemCount() const { return (_itemDataList.size()); } EntityItemData* getEntityItemData (int inx) const; int findEntityItemDataIndex (const EntityItemData*) const; void addItem (const SlotColRef& slotColRef); // XXX -- EXAMPLE void markItemForDeletion (int inx); void deleteMarkedItems(); void clear(); // ************************************** // *** QAbstractItemModel Interface *** // ************************************** public: // virtual from QAbstractItemModel -- Basic Methods virtual QModelIndex index (int row, int col, const QModelIndex& parent = QModelIndex()) const; // virtual from QAbstractItemModel -- Display Methods int rowCount (const QModelIndex& parent = QModelIndex()) const; int columnCount (const QModelIndex& parent = QModelIndex()) const; QVariant data (const QModelIndex&, int role = Qt::DisplayRole) const; QVariant headerData (int section, Qt::Orientation, int role = Qt::DisplayRole) const; private: // virtual from QAbstractItemModel -- Basic Private Methods QModelIndex parent (const QModelIndex& childInx) const; bool hasChildren (const QModelIndex& parentInx) const; // ****************************************** // *** EntityItemModel Internal Methods *** // ****************************************** private: void itemDeleted (const EntityItemData*); }; //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- class ClientDlg::EntityItemData { public: EntityItemData (EntityItemModel* parentModel, ... data ...); virtual ~EntityItemData(); public: // Primary Data Fields ... ... ... ... ... ... private: // Secondary Data Fields (implementation support) EntityItemModel* _parentModel; bool _markedForDeletion; Callback* _entityCallback; // XXX -- IF APPLICABLE public: double numericValue (int col, bool& supported) const; QString displayText (int col) const; QPixmap displayPmap (int col) const; QVariant sortKey (int col) const; void updateItemDisplay() const; void markForDeletion (bool doMark=true); bool markedForDeletion() const { return _markedForDeletion; } // equality operator: consider only Primary Data Fields bool operator== (const ItemData& rhs) const; private: // Callback handling -- XXX -- IF APPLICABLE void addEntityCallback(); void deleteEntityCallback(); int entityCallbackHandler (CallbackType, CallbackData*, void*); }; #endif // ClientDlgINCLUDED //--- (end Template-EntityItemModel.hpp) ---