]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Storing/restoring selection during the module update.
authorouv <ouv@opencascade.com>
Wed, 18 Sep 2013 12:26:00 +0000 (12:26 +0000)
committerouv <ouv@opencascade.com>
Wed, 18 Sep 2013 12:26:00 +0000 (12:26 +0000)
src/HYDROGUI/HYDROGUI_Module.cxx

index b6d25267eb1bb6b8cabdad52163d8823a4499501..509fc2e357c31af76299d8ea46cf3b6f89fe1794 100644 (file)
@@ -47,6 +47,7 @@
 #include <ImageComposer_FuseOperator.h>
 
 #include <LightApp_Application.h>
+#include <LightApp_DataOwner.h>
 #include <LightApp_GVSelector.h>
 #include <LightApp_SelectionMgr.h>
 #include <LightApp_UpdateFlags.h>
@@ -364,6 +365,9 @@ void HYDROGUI_Module::update( const int flags )
   // from one of the methods called below
   setUpdateEnabled( false );
 
+  // store selected objects
+  QStringList aSelectedEntries = storeSelection();
+
   if( ( flags & UF_Viewer ) )
     updateGV( flags & UF_GV_Init,
               flags & UF_GV_Forced );
@@ -387,6 +391,9 @@ void HYDROGUI_Module::update( const int flags )
   if( ( flags & UF_Controls ) && getApp() )
     getApp()->updateActions();
 
+  // restore selected objects
+  restoreSelection( aSelectedEntries );
+
   setUpdateEnabled( true );
 
   QApplication::restoreOverrideCursor();
@@ -704,3 +711,34 @@ bool HYDROGUI_Module::isUpdateEnabled() const
 {
   return myIsUpdateEnabled;
 }
+
+QStringList HYDROGUI_Module::storeSelection() const
+{
+  QStringList anEntryList;
+  if( LightApp_SelectionMgr* aSelectionMgr = getApp()->selectionMgr() )
+  {
+    SUIT_DataOwnerPtrList aList( true );
+    aSelectionMgr->selected( aList );
+
+    SUIT_DataOwnerPtrList::iterator anIter;
+    for( anIter = aList.begin(); anIter != aList.end(); anIter++ )
+    {
+      const LightApp_DataOwner* anOwner = 
+        dynamic_cast<const LightApp_DataOwner*>( (*anIter).operator->() );
+      if( anOwner )
+        anEntryList.append( anOwner->entry() );
+    }
+  }
+  return anEntryList;
+}
+
+void HYDROGUI_Module::restoreSelection( const QStringList& theEntryList )
+{
+  if( LightApp_SelectionMgr* aSelectionMgr = getApp()->selectionMgr() )
+  {
+    SUIT_DataOwnerPtrList aList( true );
+    for( int anIndex = 0, aSize = theEntryList.size(); anIndex < aSize; anIndex++ )
+      aList.append( SUIT_DataOwnerPtr( new LightApp_DataOwner( theEntryList[ anIndex ] ) ) );
+    aSelectionMgr->setSelected( aList );
+  }
+}