Salome HOME
Merge branch 'master' of newgeom:newgeom
authornds <natalia.donis@opencascade.com>
Tue, 28 Oct 2014 06:53:24 +0000 (09:53 +0300)
committernds <natalia.donis@opencascade.com>
Tue, 28 Oct 2014 06:53:24 +0000 (09:53 +0300)
src/NewGeom/NewGeom_Module.cpp
src/NewGeom/NewGeom_Module.h

index 5d614069f0268226d3613ee501afe2137f5c7c55..dae250cc3290d778e64485c4169fcf3e4c640c72 100644 (file)
@@ -8,6 +8,9 @@
 #include <XGUI_ContextMenuMgr.h>
 #include <XGUI_Preferences.h>
 #include <XGUI_ObjectsBrowser.h>
+#include <XGUI_OperationMgr.h>
+
+#include <ModuleBase_Operation.h>
 
 #include <LightApp_Application.h>
 #include <LightApp_SelectionMgr.h>
@@ -128,7 +131,6 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy)
         mySelector = createSelector(OCCViewManagers.first());
       }
     }
-    myWorkshop->propertyPanel()->hide();
     QtxPopupMgr* aMgr = popupMgr();  // Create popup manager
     action(myEraseAll)->setEnabled(false);
 
@@ -139,6 +141,17 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy)
       QTimer::singleShot(1000, myWorkshop, SLOT(displayAllResults()));
     }
   }
+  SUIT_ResourceMgr* aResMgr = application()->resourceMgr();
+  myIsStorePositions = aResMgr->booleanValue("Study", "store_positions", true);
+
+  // this following row is caused by #187 bug.
+  // SALOME saves the dock widget positions before deactivateModule() and
+  // load it after the module activation. So, if the panel is visible before
+  // deactivate, it becomes visible after activate.
+  // In order to avoid the visible property panel, the widget position save is
+  // switch off in this module
+  aResMgr->setValue("Study", "store_positions", false);
+
   return isDone;
 }
 
@@ -148,9 +161,6 @@ bool NewGeom_Module::deactivateModule(SUIT_Study* theStudy)
   setMenuShown(false);
   setToolShown(false);
 
-  myWorkshop->propertyPanel()->setVisible(false);
-  desktop()->removeDockWidget(myWorkshop->propertyPanel());
-
   QObject* aObj = myWorkshop->objectBrowser()->parent();
   QDockWidget* aObjDoc = dynamic_cast<QDockWidget*>(aObj);
   if (aObjDoc) {
@@ -160,6 +170,15 @@ bool NewGeom_Module::deactivateModule(SUIT_Study* theStudy)
     aViewAct->setEnabled(false);
   }
 
+  // the active operation should be stopped for the next activation.
+  // There should not be active operation and visualized preview.
+  // Abort operation should be performed before the selection's remove
+  // because the displayed objects should be removed from the viewer, but
+  // the AIS context is obtained from the selector.
+  ModuleBase_Operation* anOperation = myWorkshop->operationMgr()->currentOperation();
+  if (anOperation)
+    anOperation->abort();
+
   // Delete selector because it has to be redefined on next activation
   if (mySelector) {
     myProxyViewer->setSelector(0);
@@ -168,6 +187,10 @@ bool NewGeom_Module::deactivateModule(SUIT_Study* theStudy)
   }
 
   //myWorkshop->contextMenuMgr()->disconnectViewer();
+
+  SUIT_ResourceMgr* aResMgr = application()->resourceMgr();
+  aResMgr->setValue("Study", "store_positions", myIsStorePositions);
+
   return LightApp_Module::deactivateModule(theStudy);
 }
 
index 9da3e31af221efd2fd7d52c19f2fbde2d92e1e34..eab0275afc184cf369ae5b485ee49ee6274fd0d0 100644 (file)
@@ -104,6 +104,8 @@ Q_OBJECT
   QMap<QString, QStringList> myNestedActions;
 
   bool myIsOpened;
+  bool myIsStorePositions;
+
 };
 
 #endif