]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Open, Save, Exit, etc. actions processing.
authorsbh <sergey.belash@opencascade.com>
Mon, 28 Apr 2014 16:55:50 +0000 (20:55 +0400)
committersbh <sergey.belash@opencascade.com>
Mon, 28 Apr 2014 16:55:50 +0000 (20:55 +0400)
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index 127949282264d046762516c3e67a01ff0d1b46b7..6186aaedd3ab39aff8b9dc2fb383174999d7a8fb 100644 (file)
@@ -46,7 +46,8 @@
 #endif
 
 XGUI_Workshop::XGUI_Workshop(XGUI_SalomeConnector* theConnector)
-  : QObject(), 
+  : QObject(),
+  myCurrentFile(QString()),
   myPartSetModule(NULL),
   mySalomeConnector(theConnector),
   myPropertyPanelDock(0),
@@ -306,9 +307,34 @@ void XGUI_Workshop::connectWithOperation(ModuleBase_Operation* theOperation)
   connect(aCommand, SIGNAL(triggered(bool)), theOperation, SLOT(setRunning(bool)));
 }
 
+/*
+ * Saves document with given name.
+ */
+void XGUI_Workshop::saveDocument(QString theName)
+{
+  QApplication::restoreOverrideCursor();
+  boost::shared_ptr<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
+  boost::shared_ptr<ModelAPI_Document> aDoc = aMgr->rootDocument();
+  aDoc->save(theName.toLatin1().constData());
+  QApplication::restoreOverrideCursor();
+}
+
 //******************************************************
 void XGUI_Workshop::onExit()
 {
+  boost::shared_ptr<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
+  boost::shared_ptr<ModelAPI_Document> aDoc = aMgr->rootDocument();
+  if(aDoc->isModified()) {
+    int anAnswer = QMessageBox::question(
+        myMainWindow, tr("Save current file"),
+        tr("The document is modified, save before exit?"),
+        QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel);
+    if(anAnswer == QMessageBox::Save) {
+      onSave();
+    } else if (anAnswer == QMessageBox::Cancel) {
+      return;
+    }
+  }
   qApp->exit();
 }
 
@@ -333,21 +359,66 @@ void XGUI_Workshop::onNew()
 //******************************************************
 void XGUI_Workshop::onOpen()
 {
-  //QString aFileName = QFileDialog::getOpenFileName(mainWindow());
+  //save current file before close if modified
+  boost::shared_ptr<ModelAPI_PluginManager> aMgr = ModelAPI_PluginManager::get();
+  boost::shared_ptr<ModelAPI_Document> aDoc = aMgr->rootDocument();
+  if(aDoc->isModified()) {
+    //TODO(sbh): re-launch the app?
+    int anAnswer = QMessageBox::question(
+        myMainWindow, tr("Save current file"),
+        tr("The document is modified, save before opening another?"),
+        QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, QMessageBox::Cancel);
+    if(anAnswer == QMessageBox::Save) {
+      onSave();
+    } else if (anAnswer == QMessageBox::Cancel) {
+      return;
+    }
+    aDoc->close();
+    myCurrentFile = "";
+  }
+
+  //show file dialog, check if readable and open
+  myCurrentFile = QFileDialog::getOpenFileName(mainWindow());
+  if(myCurrentFile.isEmpty())
+    return;
+  QFileInfo aFileInfo(myCurrentFile);
+  if(!aFileInfo.exists() || !aFileInfo.isReadable()) {
+    QMessageBox::critical(myMainWindow, tr("Warning"), tr("Unable to open the file."));
+    myCurrentFile = "";
+    return;
+  }
+  QApplication::setOverrideCursor(Qt::WaitCursor);
+  aDoc->load(myCurrentFile.toLatin1().constData());
+  QApplication::restoreOverrideCursor();
   updateCommandStatus();
 }
 
 //******************************************************
 void XGUI_Workshop::onSave()
 {
+  if(myCurrentFile.isEmpty()) {
+    onSaveAs();
+    return;
+  }
+  saveDocument(myCurrentFile);
   updateCommandStatus();
 }
 
 //******************************************************
 void XGUI_Workshop::onSaveAs()
 {
-  //QString aFileName = QFileDialog::getSaveFileName(mainWindow());
-  updateCommandStatus();
+  QString aTemp = myCurrentFile;
+  myCurrentFile = QFileDialog::getSaveFileName(mainWindow());
+  if(myCurrentFile.isEmpty()) {
+    myCurrentFile = aTemp;
+    return;
+  }
+  QFileInfo aFileInfo(myCurrentFile);
+  if(aFileInfo.exists() && !aFileInfo.isWritable()) {
+    QMessageBox::critical(myMainWindow, tr("Warning"), tr("Unable to save the file."));
+    return;
+  }
+  onSave();
 }
 
 //******************************************************
index 551f23c50d1432e84aa30eb93b185576be30370a..bedb8bbe119f481fd71ce60b847127104dfe6c9f 100644 (file)
@@ -94,6 +94,7 @@ protected:
   //Event-loop processing methods:
   void addFeature(const Config_FeatureMessage*);
   void connectWithOperation(ModuleBase_Operation* theOperation);
+  void saveDocument(QString theName);
 
 protected slots:
   /// SLOT, that is called after the operation is started. Update workshop state according to
@@ -117,20 +118,15 @@ private:
   void createDockWidgets();
   void setPropertyPannelTitle(const QString& theTitle);
 
-
+  QString myCurrentFile;
   XGUI_MainWindow* myMainWindow;
   XGUI_Module* myPartSetModule;
-
   XGUI_ObjectsBrowser* myObjectBrowser;
   QDockWidget* myPropertyPanelDock;
-
   XGUI_SelectionMgr* mySelector;
   XGUI_Displayer* myDisplayer;
-
   XGUI_OperationMgr* myOperationMgr; ///< manager to manipulate through the operations
   XGUI_ActionsMgr* myActionsMgr;
-
-
   XGUI_SalomeConnector* mySalomeConnector;
 };