+signals:
+ /// Signal about tree had been rebuilt
+ void treeRebuilt();
+
+private:
+ enum VisibilityState {
+ NoneState,
+ Visible,
+ SemiVisible,
+ Hidden };
+
+ /// Find a root index which contains objects of the given document
+ /// \param theDoc the document object
+ QModelIndex findDocumentRootIndex(const ModelAPI_Document* theDoc, int aColumn = 1) const;
+
+ /// Returns number of folders in document.
+ /// Considered folders which has to be shown only if they are not empty.
+ /// \param theDoc document which has to be checked. If 0 then Root document will be considered
+ int foldersCount(ModelAPI_Document* theDoc = 0) const;
+
+ /// Retrurns indexes of folders which can not be shown because they are empty
+ /// \param theDoc document which has to be checked. If 0 then Root document will be considered
+ QIntList missedFolderIndexes(ModelAPI_Document* theDoc = 0) const;
+
+ /// Returns Id (row) of a folder taking into consideration
+ /// folders which can not be shown non empty
+ /// \param theType Type of the folder
+ /// \param theDoc a document which contains this folder
+ int folderId(std::string theType, ModelAPI_Document* theDoc = 0) const;
+
+ /// Removes a row from branch of tree
+ /// \param theStart - start row to update indexes
+ /// \param theSize - number of indexes in the folder
+ /// \param theParent - index of parent folder
+ void rebuildBranch(int theRow, int theCount, const QModelIndex& theParent = QModelIndex());
+
+ /// Returns list of folders types which can not be shown empty
+ /// \param fromRoot - root document flag
+ QStringList listOfShowNotEmptyFolders(bool fromRoot = true) const;
+
+ int getNumberOfFolderItems(const ModelAPI_Folder* theFolder) const;
+ ObjectPtr getObjectInFolder(const ModelAPI_Folder* theFolder, int theId) const;
+
+ VisibilityState getVisibilityState(const QModelIndex& theIndex) const;
+
+ void addShownFolder(DocumentPtr theDoc, QString theFolder)
+ {
+ if (!myShownFolders.contains(theDoc)) {
+ myShownFolders[theDoc] = QStringList();
+ }
+ myShownFolders[theDoc].append(theFolder);
+ }
+
+ void removeShownFolder(DocumentPtr theDoc, QString theFolder)
+ {
+ if (myShownFolders.contains(theDoc)) {
+ myShownFolders[theDoc].removeAll(theFolder);
+ if (myShownFolders[theDoc].isEmpty())
+ myShownFolders.remove(theDoc);
+ }
+ }
+
+ bool hasShownFolder(DocumentPtr theDoc, QString theFolder) const
+ {
+ if (myShownFolders.contains(theDoc))
+ return myShownFolders[theDoc].contains(theFolder);
+ return false;
+ }
+
+ Config_DataModelReader* myXMLReader;
+
+ XGUI_Workshop* myWorkshop;
+ QMap<DocumentPtr, QStringList> myShownFolders;
+ //bool myIsEventsProcessingBlocked;