]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #2358: Preserve state of folders on move in/out objects to a folder
authorvsv <vsv@opencascade.com>
Tue, 16 Jan 2018 14:40:34 +0000 (17:40 +0300)
committervsv <vsv@opencascade.com>
Tue, 16 Jan 2018 14:40:54 +0000 (17:40 +0300)
src/XGUI/XGUI_DataModel.h
src/XGUI/XGUI_ObjectsBrowser.cpp
src/XGUI/XGUI_ObjectsBrowser.h
src/XGUI/XGUI_Workshop.cpp

index e89546161dda5a6b3a564dcc0fe37741a607a222..d7178aa436ece05b076aece93cc87fed50b54201 100644 (file)
@@ -64,7 +64,7 @@ public:
 
   //! Returns index of the object
   //! \param theObject object to find
-  virtual QModelIndex objectIndex(const ObjectPtr theObject, int theColumn = 1) const;
+  virtual QModelIndex objectIndex(const ObjectPtr theObject, int theColumn = 0) const;
 
   //! Clear internal data
   virtual void clear();
@@ -131,7 +131,7 @@ public:
 
   /// Returns an index which is root of the given document
   /// \param theDoc a document
-  QModelIndex documentRootIndex(DocumentPtr theDoc, int theColumn = 1) const;
+  QModelIndex documentRootIndex(DocumentPtr theDoc, int theColumn = 0) const;
 
   /// Returns last history object index
   virtual QModelIndex lastHistoryIndex() const;
index f3f53962692511480fff8747ed96435ad7370815..6c2e61ffae991a90c92db7162c75805d6497d0cf 100644 (file)
@@ -603,7 +603,7 @@ std::list<bool> XGUI_ObjectsBrowser::getStateForDoc(DocumentPtr theDoc) const
   QModelIndex aRootIdx = aModel->documentRootIndex(theDoc);
   int aNbChild = aModel->rowCount(aRootIdx);
   for (int i = 0; i < aNbChild; i++) {
-    QModelIndex aIdx = aModel->index(i, 1, aRootIdx);
+    QModelIndex aIdx = aModel->index(i, 0, aRootIdx);
     aStates.push_back(myTreeView->isExpanded(aIdx));
   }
   return aStates;
@@ -638,3 +638,26 @@ void XGUI_ObjectsBrowser::updateAllIndexes(int theColumn, const QModelIndex& the
     }
   }
 }
+
+QMap<ObjectPtr, bool> XGUI_ObjectsBrowser::getFoldersState(DocumentPtr theDoc) const
+{
+  QMap<ObjectPtr, bool> aMap;
+
+  int aNb = theDoc->size(ModelAPI_Folder::group());
+  ObjectPtr aObj;
+  for (int i = 0; i < aNb; i++) {
+    aObj = theDoc->object(ModelAPI_Folder::group(), i);
+    QModelIndex aIdx = myDocModel->objectIndex(aObj);
+    aMap[aObj] = myTreeView->isExpanded(aIdx);
+  }
+  return aMap;
+}
+
+void XGUI_ObjectsBrowser::setFoldersState(const QMap<ObjectPtr, bool>& theStates)
+{
+  QMap<ObjectPtr, bool>::const_iterator aIt;
+  for (aIt = theStates.constBegin(); aIt != theStates.constEnd(); aIt++) {
+    QModelIndex aIdx = myDocModel->objectIndex(aIt.key());
+    myTreeView->setExpanded(aIdx, aIt.value());
+  }
+}
index 372d4bb76402395ec1a7a286abace45cf66a999a..c5eb366de8d07e9ea75208a2fd7b07f8742c5cfe 100644 (file)
 #include <ModelAPI_Object.h>
 #include <ModelAPI_ResultPart.h>
 #include <ModelAPI_Events.h>
+#include <ModelAPI_Folder.h>
 
 #include <QWidget>
 #include <QTreeView>
 #include <QLabel>
+#include <QMap>
 
 class ModuleBase_IDocumentDataModel;
 class XGUI_DataModel;
@@ -211,6 +213,10 @@ Q_OBJECT
   /// \param theParent - a parent item (by default from root)
   void updateAllIndexes(int theColumn = 0, const QModelIndex& theParent = QModelIndex());
 
+  QMap<ObjectPtr, bool> getFoldersState(DocumentPtr theDoc) const;
+
+  void setFoldersState(const QMap<ObjectPtr, bool>& theStates);
+
 public slots:
   //! Called on Edit command request
   void onEditItem();
index e55494d77bb45f26be0bba2d24ba54841c36a34f..5969a96fc812422b6dd3f29d9f732fc82cd557c6 100755 (executable)
@@ -2675,10 +2675,14 @@ void XGUI_Workshop::insertToFolder(bool isBefore)
   QString aDescription = contextMenuMgr()->action(
     isBefore ? "ADD_TO_FOLDER_BEFORE_CMD" : "ADD_TO_FOLDER_AFTER_CMD")->text();
 
+  QMap<ObjectPtr, bool> aStates = myObjectBrowser->getFoldersState(aDoc);
+
   aMgr->startOperation(aDescription.toStdString());
   aDoc->moveToFolder(aFeatures, aFolder);
   aMgr->finishOperation();
 
+  myObjectBrowser->setFoldersState(aStates);
+
   updateCommandStatus();
 }
 
@@ -2691,13 +2695,16 @@ void XGUI_Workshop::moveOutFolder(bool isBefore)
   SessionPtr aMgr = ModelAPI_Session::get();
   DocumentPtr aDoc = aMgr->activeDocument();
 
-
   QString aDescription = contextMenuMgr()->action(
     isBefore ? "ADD_OUT_FOLDER_BEFORE_CMD" : "ADD_OUT_FOLDER_AFTER_CMD")->text();
 
+  QMap<ObjectPtr, bool> aStates = myObjectBrowser->getFoldersState(aDoc);
+
   aMgr->startOperation(aDescription.toStdString());
   aDoc->removeFromFolder(aFeatures, isBefore);
   aMgr->finishOperation();
 
+  myObjectBrowser->setFoldersState(aStates);
+
   updateCommandStatus();
 }