X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FNewGeom%2FNewGeom_Module.cpp;h=56e7b52025dc11d1a6b1f34564284b38d473523f;hb=4e9ce2a95c42fc2c33c8d7de75c26f2208bf73b7;hp=8d1b9624646b31d0c800b0b3a199c4ed6b607518;hpb=25b7f8a69048e0fb0cc3840d2bb5f4f887749a53;p=modules%2Fshaper.git diff --git a/src/NewGeom/NewGeom_Module.cpp b/src/NewGeom/NewGeom_Module.cpp index 8d1b96246..56e7b5202 100644 --- a/src/NewGeom/NewGeom_Module.cpp +++ b/src/NewGeom/NewGeom_Module.cpp @@ -1,38 +1,106 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D #include "NewGeom_Module.h" #include "NewGeom_DataModel.h" #include "NewGeom_OCCSelector.h" +#include #include +#include +#include +#include +#include +#include + +#include +#include +#include #include #include #include +#include #include -#include +#include #include #include +#include +#include #include +#include + +#include +#include + +#include +#include +#include + extern "C" { - NewGeom_EXPORT CAM_Module* createModule() { - return new NewGeom_Module(); +NewGeom_EXPORT CAM_Module* createModule() +{ + return new NewGeom_Module(); +} + +NewGeom_EXPORT char* getModuleVersion() +{ + return "0.0"; +} +} + +/** +* Class for preferences management +*/ +class NewGeom_PrefMgr: public ModuleBase_IPrefMgr +{ +public: + /// Constructor + /// \param theMgr preferences manager of SALOME + /// \param theModName name of the module + NewGeom_PrefMgr(LightApp_Preferences* theMgr, const QString& theModName):myMgr(theMgr), myModName(theModName) {} + + virtual int addPreference(const QString& theLbl, int pId, + SUIT_PreferenceMgr::PrefItemType theType, + const QString& theSection, const QString& theName ) + { + return myMgr->addPreference(myModName, theLbl, pId, theType, theSection, theName); } - - NewGeom_EXPORT char* getModuleVersion() { - return "0.0"; + + 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: + LightApp_Preferences* myMgr; + QString myModName; +}; + + //****************************************************** NewGeom_Module::NewGeom_Module() -: LightApp_Module( "NewGeom" ), mySelector(0) + : LightApp_Module("NewGeom"), + mySelector(0), myIsOpened(0), myPopupMgr(0) { myWorkshop = new XGUI_Workshop(this); + connect(myWorkshop, SIGNAL(commandStatusUpdated()), + this, SLOT(onUpdateCommandStatus())); + + myProxyViewer = new NewGeom_SalomeViewer(this); + + ModuleBase_Preferences::setResourceMgr(application()->resourceMgr()); + ModuleBase_Preferences::loadCustomProps(); } //****************************************************** @@ -44,20 +112,24 @@ NewGeom_Module::~NewGeom_Module() void NewGeom_Module::initialize(CAM_Application* theApp) { LightApp_Module::initialize(theApp); - + inspectSalomeModules(); + myWorkshop->startApplication(); + LightApp_Application* anApp = dynamic_cast(theApp); + if (anApp) + connect(anApp, SIGNAL(preferenceResetToDefaults()), this, SLOT(onDefaultPreferences())); } //****************************************************** void NewGeom_Module::windows(QMap& theWndMap) const { - theWndMap.insert( LightApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea ); + theWndMap.insert(LightApp_Application::WT_PyConsole, Qt::BottomDockWidgetArea); } //****************************************************** void NewGeom_Module::viewManagers(QStringList& theList) const { - theList.append( OCCViewer_Viewer::Type() ); + theList.append(OCCViewer_Viewer::Type()); } //****************************************************** @@ -65,8 +137,17 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy) { bool isDone = LightApp_Module::activateModule(theStudy); if (isDone) { - setMenuShown( true ); - setToolShown( true ); + 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; @@ -75,60 +156,169 @@ bool NewGeom_Module::activateModule(SUIT_Study* theStudy) mySelector = createSelector(OCCViewManagers.first()); } } + //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; } //****************************************************** -void NewGeom_Module::onViewManagerAdded( SUIT_ViewManager* theMgr ) +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(); + while (anOperation) { + anOperation->abort(); + anOperation = myWorkshop->operationMgr()->currentOperation(); + } + // 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); +} + +//****************************************************** +void NewGeom_Module::onViewManagerAdded(SUIT_ViewManager* theMgr) { - if ((!mySelector)) { + if (!mySelector) { mySelector = createSelector(theMgr); } } +//****************************************************** +void NewGeom_Module::onViewManagerRemoved(SUIT_ViewManager* theMgr) +{ + if (mySelector) { + if (theMgr->getType() == OCCViewer_Viewer::Type()) { + OCCViewer_Viewer* aViewer = static_cast(theMgr->getViewModel()); + if (mySelector->viewer() == aViewer) { + myWorkshop->displayer()->eraseAll(false); + myProxyViewer->setSelector(0); + delete mySelector; + mySelector = 0; + } + } + } +} + +//****************************************************** +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) { if (theMgr->getType() == OCCViewer_Viewer::Type()) { OCCViewer_Viewer* aViewer = static_cast(theMgr->getViewModel()); - NewGeom_OCCSelector* aSelector = new NewGeom_OCCSelector(aViewer, - getApp()->selectionMgr()); + NewGeom_OCCSelector* aSelector = new NewGeom_OCCSelector(aViewer, getApp()->selectionMgr()); LightApp_SelectionMgr* aMgr = getApp()->selectionMgr(); QList aList; aMgr->selectors(aList); - foreach(SUIT_Selector* aSel, aList) { + foreach(SUIT_Selector* aSel, aList) + { aSel->setEnabled(aSel == aSelector); } + myProxyViewer->setSelector(aSelector); return aSelector; } return 0; } //****************************************************** -bool NewGeom_Module::deactivateModule(SUIT_Study* theStudy) +CAM_DataModel* NewGeom_Module::createDataModel() { - setMenuShown( false ); - setToolShown( false ); - return LightApp_Module::deactivateModule(theStudy); + 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; } -//****************************************************** -CAM_DataModel* NewGeom_Module::createDataModel() +QAction* NewGeom_Module::addFeature(const QString& theWBName, const ActionInfo& theInfo) { - return new NewGeom_DataModel( this ); + return addFeature(theWBName, + theInfo.id, + theInfo.text, + theInfo.toolTip, + theInfo.icon, + theInfo.shortcut); } //****************************************************** -void NewGeom_Module::addFeature(const QString& theWBName, - const QString& theId, - const QString& theTitle, - const QString& theTip, - const QIcon& theIcon, - bool isCheckable, - QObject* theReciever, - const char* theMember, - const QKeySequence& theKeys) +QAction* NewGeom_Module::addFeature(const QString& theWBName, const QString& theId, + const QString& theTitle, const QString& theTip, + const QIcon& theIcon, const QKeySequence& theKeys, + bool isCheckable) { int aMenu = createMenu(theWBName, -1, -1, 50); int aTool = createTool(theWBName); @@ -137,42 +327,88 @@ void NewGeom_Module::addFeature(const QString& theWBName, myActionsList.append(theId); SUIT_Desktop* aDesk = application()->desktop(); int aKeys = 0; - for (int i = 0; i < theKeys.count(); i++) + for (unsigned int i = 0; i < theKeys.count(); i++) aKeys += theKeys[i]; - createAction(aId, theTip, theIcon, theTitle, theTip, aKeys, aDesk, - isCheckable, theReciever, theMember); - int aItemId = createMenu( aId, aMenu, -1, 10 ); - int aToolId = createTool( aId, aTool ); + QAction* aAction = createAction(aId, theTip, theIcon, theTitle, theTip, aKeys, aDesk, + isCheckable); + aAction->setData(theId); + int aItemId = createMenu(aId, aMenu, -1, 10); + int aToolId = createTool(aId, aTool); + + return aAction; } + +QAction* NewGeom_Module::addNestedFeature(const QString& theWBName, + const ActionInfo& theInfo, + const QList& theNestedActions) +{ + int aMenu = createMenu(theWBName, -1, -1, 50); + int aTool = createTool(theWBName); + + int aId = myActionsList.size(); + myActionsList.append(theInfo.id); + SUIT_Desktop* aDesk = application()->desktop(); + NewGeom_NestedButton* anAction = new NewGeom_NestedButton(aDesk, theNestedActions); + anAction->setData(theInfo.id); + anAction->setCheckable(theInfo.checkable); + anAction->setChecked(theInfo.checked); + anAction->setEnabled(theInfo.enabled); + anAction->setVisible(theInfo.visible); + anAction->setIcon(theInfo.icon); + anAction->setText(theInfo.text); + anAction->setToolTip(theInfo.toolTip); + anAction->setShortcut(theInfo.shortcut); + anAction->setFont(theInfo.font); + + //int aItemId = createMenu(aId, aMenu, -1, 10); + int aToolId = createTool(anAction, aTool, aId); + + return anAction; +} + + //****************************************************** -void NewGeom_Module::addEditCommand(const QString& theId, - const QString& theTitle, - const QString& theTip, - const QIcon& theIcon, - bool isCheckable, - QObject* theReciever, - const char* theMember, - const QKeySequence& theKeys) +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); SUIT_Desktop* aDesk = application()->desktop(); int aKeys = 0; - for (int i = 0; i < theKeys.count(); i++) + for (unsigned int i = 0; i < theKeys.count(); i++) aKeys += theKeys[i]; - createAction(aId, theTip, theIcon, theTitle, theTip, aKeys, aDesk, - isCheckable, theReciever, theMember); - createMenu( aId, aMenu, 10 ); + QAction* aAction = createAction(aId, theTip, theIcon, theTitle, theTip, aKeys, aDesk, + isCheckable); + aAction->setData(theId); + createMenu(aId, aMenu, theMenuPosition); + return aAction; +} + +//****************************************************** +void NewGeom_Module::addDesktopMenuSeparator(const char* theMenuSourceText, const int theMenuPosition) +{ + int aMenu = createMenu(tr(theMenuSourceText), -1, -1); + createMenu(separator(), aMenu, -1, theMenuPosition); +} + +//****************************************************** +QList NewGeom_Module::commandList() const +{ + QList aActions; + for (int i = 0; i < myActionsList.size(); i++) + aActions.append(action(i)); + return aActions; } //****************************************************** -void NewGeom_Module::addEditMenuSeparator() +QStringList NewGeom_Module::commandIdList() const { - int aMenu = createMenu(tr( "MEN_DESK_EDIT" ), -1, -1); - createMenu( separator(), aMenu, -1, 10 ); + return myActionsList; } //****************************************************** @@ -215,14 +451,18 @@ QStringList NewGeom_Module::nestedActions(const QString& theId) const } //****************************************************** -Handle(AIS_InteractiveContext) NewGeom_Module::AISContext() const +void NewGeom_Module::setDocumentKind(const QString& theId, const QString& theKind) { - Handle(AIS_InteractiveContext) aContext; - OCCViewer_Viewer* aViewer = mySelector->viewer(); - if (aViewer) { - aContext = aViewer->getAISContext(); - } - return aContext; + myDocumentType[theId] = theKind; +} + +//****************************************************** +QString NewGeom_Module::documentKind(const QString& theId) const +{ + if (myDocumentType.contains(theId)) + return myDocumentType[theId]; + return QString(); + } //****************************************************** @@ -231,3 +471,62 @@ void NewGeom_Module::selectionChanged() LightApp_Module::selectionChanged(); myWorkshop->salomeViewerSelectionChanged(); } + +//****************************************************** +void NewGeom_Module::contextMenuPopup(const QString& theClient, QMenu* theMenu, QString& theTitle) +{ + myWorkshop->contextMenuMgr()->addViewerItems(theMenu); + LightApp_Module::contextMenuPopup(theClient, theMenu, theTitle); +} + + +//****************************************************** +void NewGeom_Module::createPreferences() +{ + LightApp_Preferences* pref = preferences(); + if (!pref) + return; + ModuleBase_Preferences::updateConfigByResources(); + QString aModName = moduleName(); + + QtxPreferenceItem* item = pref->findItem(aModName, true ); + if ( item && (!item->isEmpty() )) { + item->parentItem()->removeItem(item); + delete item; + } + + int catId = pref->addPreference(aModName, -1 ); + if ( catId == -1 ) + return; + NewGeom_PrefMgr aMgr(pref, aModName); + ModuleBase_Preferences::createEditContent(&aMgr, catId); + pref->retrieve(); +} + +//****************************************************** +void NewGeom_Module::preferencesChanged(const QString& theSection, const QString& theParam) +{ + SUIT_ResourceMgr* aResMgr = application()->resourceMgr(); + QString aVal = aResMgr->stringValue(theSection, theParam); + 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); + +} + +void NewGeom_Module::inspectSalomeModules() +{ + QStringList aModuleNames; + getApp()->modules(aModuleNames, false); + foreach(QString eachModule, aModuleNames) { + Config_ModuleReader::addDependencyModule(eachModule.toStdString()); + } +}