From: sbh Date: Mon, 28 Apr 2014 16:55:50 +0000 (+0400) Subject: Open, Save, Exit, etc. actions processing. X-Git-Tag: V_0.2~111 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=f6d4c45800f7e0cfb2ab1e30d1067ed87bace36a;p=modules%2Fshaper.git Open, Save, Exit, etc. actions processing. --- diff --git a/src/XGUI/XGUI_Workshop.cpp b/src/XGUI/XGUI_Workshop.cpp index 127949282..6186aaedd 100644 --- a/src/XGUI/XGUI_Workshop.cpp +++ b/src/XGUI/XGUI_Workshop.cpp @@ -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 aMgr = ModelAPI_PluginManager::get(); + boost::shared_ptr aDoc = aMgr->rootDocument(); + aDoc->save(theName.toLatin1().constData()); + QApplication::restoreOverrideCursor(); +} + //****************************************************** void XGUI_Workshop::onExit() { + boost::shared_ptr aMgr = ModelAPI_PluginManager::get(); + boost::shared_ptr 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 aMgr = ModelAPI_PluginManager::get(); + boost::shared_ptr 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(); } //****************************************************** diff --git a/src/XGUI/XGUI_Workshop.h b/src/XGUI/XGUI_Workshop.h index 551f23c50..bedb8bbe1 100644 --- a/src/XGUI/XGUI_Workshop.h +++ b/src/XGUI/XGUI_Workshop.h @@ -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; };