+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
#include "NewGeom_Module.h"
#include "NewGeom_DataModel.h"
#include <XGUI_Workshop.h>
#include <XGUI_PropertyPanel.h>
#include <XGUI_ContextMenuMgr.h>
-#include <XGUI_Preferences.h>
+#include <XGUI_ObjectsBrowser.h>
+#include <XGUI_OperationMgr.h>
+#include <XGUI_Displayer.h>
+
+#include <ModuleBase_Operation.h>
+#include <ModuleBase_Preferences.h>
#include <LightApp_Application.h>
#include <LightApp_SelectionMgr.h>
#include <LightApp_OCCSelector.h>
+#include <LightApp_Study.h>
#include <OCCViewer_ViewModel.h>
#include <SUIT_Selector.h>
#include <QtxResourceMgr.h>
#include <Config_PropManager.h>
+#include <Config_ModuleReader.h>
#include <QDockWidget>
#include <QAction>
+#include <QTimer>
+
extern "C" {
NewGeom_EXPORT CAM_Module* createModule()
}
}
-class NewGeom_PrefMgr: public XGUI_IPrefMgr
+/**
+* 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,
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:
//******************************************************
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();
}
//******************************************************
void NewGeom_Module::initialize(CAM_Application* theApp)
{
LightApp_Module::initialize(theApp);
+ inspectSalomeModules();
myWorkshop->startApplication();
+ LightApp_Application* anApp = dynamic_cast<LightApp_Application*>(theApp);
+ if (anApp)
+ connect(anApp, SIGNAL(preferenceResetToDefaults()), this, SLOT(onDefaultPreferences()));
}
//******************************************************
setMenuShown(true);
setToolShown(true);
+ QObject* aObj = myWorkshop->objectBrowser()->parent();
+ QDockWidget* aObjDoc = dynamic_cast<QDockWidget*>(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);
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;
}
{
setMenuShown(false);
setToolShown(false);
+
+ QObject* aObj = myWorkshop->objectBrowser()->parent();
+ QDockWidget* aObjDoc = dynamic_cast<QDockWidget*>(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<OCCViewer_Viewer*>(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)
{
//******************************************************
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<LightApp_Study*>(application()->activeStudy() );
+ aStudy->addComponent(aDataModel);
+
+ return aDataModel;
}
//******************************************************
return aAction;
}
+QAction* NewGeom_Module::addFeature(const QString& theWBName, const ActionInfo& theInfo)
+{
+ return addFeature(theWBName,
+ theInfo.id,
+ theInfo.text,
+ theInfo.toolTip,
+ theInfo.icon,
+ theInfo.shortcut);
+}
+
+
//******************************************************
-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);
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);
}
//******************************************************
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()
{
LightApp_Preferences* pref = preferences();
if (!pref)
return;
- XGUI_Preferences::updateCustomProps();
+ ModuleBase_Preferences::updateConfigByResources();
QString aModName = moduleName();
QtxPreferenceItem* item = pref->findItem(aModName, true );
if ( catId == -1 )
return;
NewGeom_PrefMgr aMgr(pref, aModName);
- XGUI_Preferences::createEditContent(&aMgr, catId);
+ ModuleBase_Preferences::createEditContent(&aMgr, catId);
pref->retrieve();
}
{
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);
+
+}
+
+void NewGeom_Module::inspectSalomeModules()
+{
+ QStringList aModuleNames;
+ getApp()->modules(aModuleNames, false);
+ foreach(QString eachModule, aModuleNames) {
+ Config_ModuleReader::addDependencyModule(eachModule.toStdString());
}
}