X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FXGUI%2FXGUI_DocumentDataModel.h;h=c49c6696535871e683459407e8214527a01de0a4;hb=6d20077610031fdaf7b61bb382da72e012df36ec;hp=796a8e51a750f694176a8607d18c1ed028fdd5ee;hpb=c5a608bb7f2f754085388cd0fa4e3971239f95c5;p=modules%2Fshaper.git diff --git a/src/XGUI/XGUI_DocumentDataModel.h b/src/XGUI/XGUI_DocumentDataModel.h index 796a8e51a..c49c66965 100644 --- a/src/XGUI/XGUI_DocumentDataModel.h +++ b/src/XGUI/XGUI_DocumentDataModel.h @@ -2,25 +2,35 @@ #ifndef XGUI_DocumentDataModel_H #define XGUI_DocumentDataModel_H -#include -#include +#include "XGUI.h" +#include +#include + +#include +#include #include class ModelAPI_Document; -class XGUI_PartDataModel; +class XGUI_PartModel; class XGUI_TopDataModel; - -class XGUI_DocumentDataModel : public QAbstractItemModel, public Event_Listener +/**\class XGUI_DocumentDataModel + * \ingroup GUI + * \brief This is a proxy data model for Object Browser (QTreeView). + * It contains several sub-models for generation of each sub-part of data tree. + */ +class XGUI_EXPORT XGUI_DocumentDataModel : public QAbstractItemModel, public Events_Listener { Q_OBJECT public: + + XGUI_DocumentDataModel(QObject* theParent); virtual ~XGUI_DocumentDataModel(); // Event Listener method - virtual void processEvent(const Event_Message* theMessage); + virtual void processEvent(const Events_Message* theMessage); virtual QVariant data(const QModelIndex& theIndex, int theRole) const; @@ -37,16 +47,83 @@ public: virtual bool hasChildren(const QModelIndex& theParent = QModelIndex()) const; + bool insertRows(int theRow, int theCount, const QModelIndex& theParent = QModelIndex()); + + bool removeRows(int theRow, int theCount, const QModelIndex& theParent = QModelIndex()); + + Qt::ItemFlags flags(const QModelIndex& theIndex) const; + + //! Returns an object by the given Model index. + //! Returns 0 if the given index is not index of an object + ObjectPtr object(const QModelIndex& theIndex) const; + + QModelIndex objectIndex(const ObjectPtr theObject) const; + + //! Returns QModelIndex which corresponds to the given part + //! If the object is not found then index is not valid + QModelIndex partIndex(const ResultPartPtr& thePart) const; + + //! Activates a part data model if the index is a Part node index. + //! Returns true if active part changed. + bool activatedIndex(const QModelIndex& theIndex); + + //! Retrurns active part + ResultPartPtr activePart() const; + + //! Retrurns QModelIndex of active part + QModelIndex activePartIndex() const { return myActivePartIndex; } + + //! Deactivates a Part + void deactivatePart(); + + void rebuildDataTree(); + private: - QModelIndex toSourceModel(const QModelIndex& theProxy) const; - QModelIndex fromSourceModel(const QModelIndex& theSource) const; + enum {PartsFolder, HistoryNode}; + + + //! Converts QModelIndex of this model to QModelIndex of a one of sub-models. + QModelIndex* toSourceModelIndex(const QModelIndex& theProxy) const; + + //! Finds a pointer on QModelIndex which is equal to the given one + QModelIndex* findModelIndex(const QModelIndex& theIndex) const; + + //! Returns pointer on QModelIndex which is equal to the given one. + QModelIndex* getModelIndex(const QModelIndex& theIndex) const; + + //! Deletes all saved pointers on QModelIndex objects. + void clearModelIndexes(); + + //! Removes sub-model on removing a part object. Also it removes QModelIndex-es which refer to this model + void removeSubModel(int theModelId); + + //! Returns true if the given model is a one of sub-models (of both types) + bool isSubModel(const QAbstractItemModel* theModel) const; + //! Returns true if the given model is a one of sub-models of Part type + bool isPartSubModel(const QAbstractItemModel* theModel) const; - std::shared_ptr myDocument; + //! Returns Parts Folder node + QModelIndex partFolderNode() const; + int historyOffset() const; + + + //! Data model of top part of data tree (not parts object) XGUI_TopDataModel* myModel; - QList myPartModels; + + //! Data models for Parts data tree representation (one data model per a one part) + QList myPartModels; + + //! Active part in part editing mode + XGUI_PartModel* myActivePart; + + QModelIndex myActivePartIndex; + + //! List of saved QModelIndexes created by sub-models + QList myIndexes; + }; #endif \ No newline at end of file