Salome HOME
Implementation of open/save documents functionality
[modules/shaper.git] / src / XGUI / XGUI_Workshop.cpp
index 49bf2a2bad6ea372d58700f246a529ce840db2fe..aeb505f9d7cde160ff24152a6922ca618768320a 100644 (file)
@@ -34,6 +34,7 @@
 #include <Config_Common.h>
 #include <Config_FeatureMessage.h>
 #include <Config_PointerMessage.h>
+#include <Config_ModuleReader.h>
 
 #include <QApplication>
 #include <QFileDialog>
@@ -78,7 +79,6 @@ XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector)
   myDisplayer = new XGUI_Displayer(this);
 
   mySelector = new XGUI_SelectionMgr(this);
-  connect(mySelector, SIGNAL(selectionChanged()), this, SLOT(changeCurrentDocument()));
 
   myOperationMgr = new XGUI_OperationMgr(this);
   myActionsMgr = new XGUI_ActionsMgr(this);
@@ -283,7 +283,7 @@ void XGUI_Workshop::addFeature(const Config_FeatureMessage* theMessage)
     return;
   }
   // Remember features icons
-  myIcons[QString(theMessage->id().c_str())] = QString(theMessage->icon().c_str());
+  myIcons[QString::fromStdString(theMessage->id())] = QString::fromStdString(theMessage->icon());
 
   //Find or create Workbench
   QString aWchName = QString::fromStdString(theMessage->workbenchId());
@@ -421,7 +421,7 @@ void XGUI_Workshop::onOpen()
   }
 
   //show file dialog, check if readable and open
-  myCurrentFile = QFileDialog::getOpenFileName(mainWindow());
+  myCurrentFile = QFileDialog::getExistingDirectory(mainWindow());
   if(myCurrentFile.isEmpty())
     return;
   QFileInfo aFileInfo(myCurrentFile);
@@ -499,7 +499,6 @@ XGUI_Module* XGUI_Workshop::loadModule(const QString& theModule)
   CREATE_FUNC crtInst = 0;
 
 #ifdef WIN32
-
   HINSTANCE modLib = ::LoadLibrary((LPTSTR) qPrintable(libName));
   if (!modLib) {
     LPVOID lpMsgBuf;
@@ -524,23 +523,24 @@ XGUI_Module* XGUI_Workshop::loadModule(const QString& theModule)
   }
 #else
   void* modLib = dlopen( libName.toLatin1(), RTLD_LAZY );
-  if ( !modLib )
-  err = QString( "Can not load library %1. %2" ).arg( libName ).arg( dlerror() );
-  else
-  {
+  if ( !modLib ) {
+    err = QString( "Can not load library %1. %2" ).arg( libName ).arg( dlerror() );
+  } else {
     crtInst = (CREATE_FUNC)dlsym( modLib, CREATE_MODULE );
-    if ( !crtInst )
-    err = QString( "Failed to find function %1. %2" ).arg( CREATE_MODULE ).arg( dlerror() );
+    if ( !crtInst ) {
+      err = QString( "Failed to find function %1. %2" ).arg( CREATE_MODULE ).arg( dlerror() );
+    }
   }
 #endif
 
   XGUI_Module* aModule = crtInst ? crtInst(this) : 0;
 
   if (!err.isEmpty()) {
-    if (mainWindow() && mainWindow()->isVisible())
+    if (mainWindow()) {
       QMessageBox::warning(mainWindow(), tr("Error"), err);
-    else
+    } else {
       qWarning( qPrintable( err ));
+    }
   }
   return aModule;
 }
@@ -548,7 +548,9 @@ XGUI_Module* XGUI_Workshop::loadModule(const QString& theModule)
 //******************************************************
 bool XGUI_Workshop::activateModule()
 {
-  myPartSetModule = loadModule("PartSet");
+  Config_ModuleReader aModuleReader;
+  QString moduleName = QString::fromStdString(aModuleReader.getModuleName());
+  myPartSetModule = loadModule(moduleName);
   if (!myPartSetModule)
     return false;
   myPartSetModule->createFeatures();
@@ -599,6 +601,7 @@ QDockWidget* XGUI_Workshop::createObjectBrowser(QWidget* theParent)
   aObjDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
   aObjDock->setWindowTitle(tr("Object browser"));
   myObjectBrowser = new XGUI_ObjectsBrowser(aObjDock);
+  connect(myObjectBrowser, SIGNAL(activePartChanged(FeaturePtr)), this, SLOT(changeCurrentDocument(FeaturePtr)));
   aObjDock->setWidget(myObjectBrowser);
   return aObjDock;
 }
@@ -664,18 +667,15 @@ void XGUI_Workshop::onFeatureTriggered()
 }
 
 //******************************************************
-void XGUI_Workshop::changeCurrentDocument()
+void XGUI_Workshop::changeCurrentDocument(FeaturePtr thePart)
 {
-  QFeatureList aFeatures = objectBrowser()->selectedFeatures();
-  
-  // Set current document
-  if (aFeatures.size() > 0) {
-    FeaturePtr aFeature = aFeatures.first();
-
-    boost::shared_ptr<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
-    boost::shared_ptr<ModelAPI_AttributeDocRef> aDocRef = aFeature->data()->docRef("PartDocument");
+  boost::shared_ptr<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
+  if (thePart) {
+    boost::shared_ptr<ModelAPI_AttributeDocRef> aDocRef = thePart->data()->docRef("PartDocument");
     if (aDocRef)
       aMgr->setCurrentDocument(aDocRef->value());
+  } else {
+    aMgr->setCurrentDocument(aMgr->rootDocument());
   }
 }