X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FNewGeom%2FNewGeom_Module.cpp;h=c9d875f1373ed6781255f440c61e6cfbdc2e6a38;hb=3f19a9c3fb9c6fc844229db1f925a8a2b0b8a96f;hp=a02f119989853835610bf25b378e42f023a03613;hpb=0f145438da5fda64544d77b9ed25b6124d067571;p=modules%2Fshaper.git diff --git a/src/NewGeom/NewGeom_Module.cpp b/src/NewGeom/NewGeom_Module.cpp index a02f11998..c9d875f13 100644 --- a/src/NewGeom/NewGeom_Module.cpp +++ b/src/NewGeom/NewGeom_Module.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + #include "NewGeom_Module.h" #include "NewGeom_DataModel.h" @@ -6,11 +8,16 @@ #include #include #include -#include +#include +#include + +#include +#include #include #include #include +#include #include #include @@ -26,6 +33,8 @@ #include #include +#include + extern "C" { NewGeom_EXPORT CAM_Module* createModule() @@ -39,7 +48,7 @@ NewGeom_EXPORT char* getModuleVersion() } } -class NewGeom_PrefMgr: public XGUI_IPrefMgr +class NewGeom_PrefMgr: public ModuleBase_IPrefMgr { public: NewGeom_PrefMgr(LightApp_Preferences* theMgr, const QString& theModName):myMgr(theMgr), myModName(theModName) {} @@ -51,6 +60,14 @@ public: return myMgr->addPreference(myModName, theLbl, pId, theType, theSection, theName); } + virtual void setItemProperty(const QString& thePropName, + const QVariant& theValue, + const int theId = -1) + { + myMgr->setItemProperty(thePropName, theValue, theId); + } + + virtual SUIT_PreferenceMgr* prefMgr() const { return myMgr; } private: @@ -64,13 +81,16 @@ private: //****************************************************** NewGeom_Module::NewGeom_Module() : LightApp_Module("NewGeom"), - mySelector(0) + mySelector(0), myIsOpened(0), myPopupMgr(0) { myWorkshop = new XGUI_Workshop(this); + connect(myWorkshop, SIGNAL(commandStatusUpdated()), + this, SLOT(onUpdateCommandStatus())); + myProxyViewer = new NewGeom_SalomeViewer(this); - XGUI_Preferences::setResourceMgr(application()->resourceMgr()); - XGUI_Preferences::loadCustomProps(); + ModuleBase_Preferences::setResourceMgr(application()->resourceMgr()); + ModuleBase_Preferences::loadCustomProps(); } //****************************************************** @@ -84,6 +104,9 @@ void NewGeom_Module::initialize(CAM_Application* theApp) LightApp_Module::initialize(theApp); myWorkshop->startApplication(); + LightApp_Application* anApp = dynamic_cast(theApp); + if (anApp) + connect(anApp, SIGNAL(preferenceResetToDefaults()), this, SLOT(onDefaultPreferences())); } //****************************************************** @@ -106,6 +129,15 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy) setMenuShown(true); setToolShown(true); + QObject* aObj = myWorkshop->objectBrowser()->parent(); + QDockWidget* aObjDoc = dynamic_cast(aObj); + if (aObjDoc) { + QAction* aViewAct = aObjDoc->toggleViewAction(); + aViewAct->setEnabled(true); + myWorkshop->objectBrowser()->setVisible(true); + aObjDoc->setVisible(true); + } + if (!mySelector) { ViewManagerList OCCViewManagers; application()->viewManagers(OCCViewer_Viewer::Type(), OCCViewManagers); @@ -113,10 +145,30 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy) mySelector = createSelector(OCCViewManagers.first()); } } - myWorkshop->propertyPanel()->hide(); - QtxPopupMgr* aMgr = popupMgr(); // Create popup manager - action(myEraseAll)->setEnabled(false); + //action(myEraseAll)->setEnabled(false); + + if (myIsOpened) { + myWorkshop->objectBrowser()->rebuildDataTree(); + myWorkshop->updateCommandStatus(); + myIsOpened = false; + QTimer::singleShot(1000, myWorkshop, SLOT(displayAllResults())); + } + else + myWorkshop->updateCommandStatus(); } + SUIT_ResourceMgr* aResMgr = application()->resourceMgr(); + myIsStorePositions = aResMgr->booleanValue("Study", "store_positions", true); + myIsEditEnabled = getApp()->isEditEnabled(); + getApp()->setEditEnabled(false); + + // 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; } @@ -125,7 +177,38 @@ bool NewGeom_Module::deactivateModule(SUIT_Study* theStudy) { setMenuShown(false); setToolShown(false); + + QObject* aObj = myWorkshop->objectBrowser()->parent(); + QDockWidget* aObjDoc = dynamic_cast(aObj); + if (aObjDoc) { + aObjDoc->setVisible(false); + myWorkshop->objectBrowser()->setVisible(false); + QAction* aViewAct = aObjDoc->toggleViewAction(); + 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); + delete mySelector; + mySelector = 0; + } + //myWorkshop->contextMenuMgr()->disconnectViewer(); + + SUIT_ResourceMgr* aResMgr = application()->resourceMgr(); + aResMgr->setValue("Study", "store_positions", myIsStorePositions); + getApp()->setEditEnabled(myIsEditEnabled); + return LightApp_Module::deactivateModule(theStudy); } @@ -137,6 +220,31 @@ void NewGeom_Module::onViewManagerAdded(SUIT_ViewManager* theMgr) } } +//****************************************************** +QtxPopupMgr* NewGeom_Module::popupMgr() +{ + if (!myPopupMgr) + myPopupMgr = new QtxPopupMgr( 0, this ); + return myPopupMgr; +} + +//****************************************************** +void NewGeom_Module::onDefaultPreferences() +{ + ModuleBase_Preferences::resetConfig(); + ModuleBase_Preferences::updateResourcesByConfig(); + + LightApp_Preferences* pref = preferences(); + if (pref) + pref->retrieve(); +} + +//****************************************************** +void NewGeom_Module::onUpdateCommandStatus() +{ + getApp()->updateActions(); +} + //****************************************************** NewGeom_OCCSelector* NewGeom_Module::createSelector(SUIT_ViewManager* theMgr) { @@ -159,7 +267,13 @@ NewGeom_OCCSelector* NewGeom_Module::createSelector(SUIT_ViewManager* theMgr) //****************************************************** CAM_DataModel* NewGeom_Module::createDataModel() { - return new NewGeom_DataModel(this); + NewGeom_DataModel* aDataModel = new NewGeom_DataModel(this); + + // Calling addComponent() for persistent functionality work in the SalomeApp_Study + LightApp_Study* aStudy = dynamic_cast(application()->activeStudy() ); + aStudy->addComponent(aDataModel); + + return aDataModel; } //****************************************************** @@ -186,11 +300,12 @@ QAction* NewGeom_Module::addFeature(const QString& theWBName, const QString& the } //****************************************************** -QAction* NewGeom_Module::addEditCommand(const QString& theId, const QString& theTitle, - const QString& theTip, const QIcon& theIcon, - const QKeySequence& theKeys, bool isCheckable) +QAction* NewGeom_Module::addDesktopCommand(const QString& theId, const QString& theTitle, + const QString& theTip, const QIcon& theIcon, + const QKeySequence& theKeys, bool isCheckable, + const char* theMenuSourceText, const int theMenuPosition) { - int aMenu = createMenu(tr("MEN_DESK_EDIT"), -1, -1); + int aMenu = createMenu(tr(theMenuSourceText), -1, -1); int aId = myActionsList.size(); myActionsList.append(theId); @@ -201,15 +316,15 @@ QAction* NewGeom_Module::addEditCommand(const QString& theId, const QString& the QAction* aAction = createAction(aId, theTip, theIcon, theTitle, theTip, aKeys, aDesk, isCheckable); aAction->setData(theId); - createMenu(aId, aMenu, 10); + createMenu(aId, aMenu, theMenuPosition); return aAction; } //****************************************************** -void NewGeom_Module::addEditMenuSeparator() +void NewGeom_Module::addDesktopMenuSeparator(const char* theMenuSourceText, const int theMenuPosition) { - int aMenu = createMenu(tr("MEN_DESK_EDIT"), -1, -1); - createMenu(separator(), aMenu, -1, 10); + int aMenu = createMenu(tr(theMenuSourceText), -1, -1); + createMenu(separator(), aMenu, -1, theMenuPosition); } //****************************************************** @@ -266,6 +381,21 @@ QStringList NewGeom_Module::nestedActions(const QString& theId) const return QStringList(); } +//****************************************************** +void NewGeom_Module::setDocumentKind(const QString& theId, const QString& theKind) +{ + myDocumentType[theId] = theKind; +} + +//****************************************************** +QString NewGeom_Module::documentKind(const QString& theId) const +{ + if (myDocumentType.contains(theId)) + return myDocumentType[theId]; + return QString(); + +} + //****************************************************** void NewGeom_Module::selectionChanged() { @@ -287,7 +417,7 @@ void NewGeom_Module::createPreferences() LightApp_Preferences* pref = preferences(); if (!pref) return; - XGUI_Preferences::updateCustomProps(); + ModuleBase_Preferences::updateConfigByResources(); QString aModName = moduleName(); QtxPreferenceItem* item = pref->findItem(aModName, true ); @@ -300,7 +430,7 @@ void NewGeom_Module::createPreferences() if ( catId == -1 ) return; NewGeom_PrefMgr aMgr(pref, aModName); - XGUI_Preferences::createEditContent(&aMgr, catId); + ModuleBase_Preferences::createEditContent(&aMgr, catId); pref->retrieve(); } @@ -309,8 +439,16 @@ void NewGeom_Module::preferencesChanged(const QString& theSection, const QString { SUIT_ResourceMgr* aResMgr = application()->resourceMgr(); QString aVal = aResMgr->stringValue(theSection, theParam); - if (!aVal.isNull()) { - Config_Prop* aProp = Config_PropManager::findProp(theSection.toStdString(), theParam.toStdString()); - aProp->setValue(aVal.toStdString()); + Config_Prop* aProp = Config_PropManager::findProp(theSection.toStdString(), theParam.toStdString()); + std::string aValue = aVal.toStdString(); + if (aValue.empty()) { + aValue = aProp->defaultValue(); + aResMgr->setValue(theSection, theParam, QString(aValue.c_str())); + + LightApp_Preferences* pref = preferences(); + if (pref) + pref->retrieve(); } + aProp->setValue(aValue); + }