From 4fd9c7f6ba1a50f67aff94581cc04f1ca6466b3c Mon Sep 17 00:00:00 2001 From: nds Date: Tue, 28 Oct 2014 09:53:12 +0300 Subject: [PATCH] refs #187: Property panel is in SALOME desktop The property for widget's states is switched off in order to provide hidden property panel widget even if it was shown before the module deactivation. There was an attemp to react on visibilityChanged of the property panel, but the current SALOME/Qt realization gives invalid painted area in the application on the last place of the panel. --- src/NewGeom/NewGeom_Module.cpp | 31 +++++++++++++++++++++++++++---- src/NewGeom/NewGeom_Module.h | 2 ++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/NewGeom/NewGeom_Module.cpp b/src/NewGeom/NewGeom_Module.cpp index 5d614069f..dae250cc3 100644 --- a/src/NewGeom/NewGeom_Module.cpp +++ b/src/NewGeom/NewGeom_Module.cpp @@ -8,6 +8,9 @@ #include #include #include +#include + +#include #include #include @@ -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(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); } diff --git a/src/NewGeom/NewGeom_Module.h b/src/NewGeom/NewGeom_Module.h index 9da3e31af..eab0275af 100644 --- a/src/NewGeom/NewGeom_Module.h +++ b/src/NewGeom/NewGeom_Module.h @@ -104,6 +104,8 @@ Q_OBJECT QMap myNestedActions; bool myIsOpened; + bool myIsStorePositions; + }; #endif -- 2.39.2