]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Show save document status in window title
authorvsv <vitaly.smetannikov@opencascade.com>
Thu, 11 Sep 2014 08:19:22 +0000 (12:19 +0400)
committervsv <vitaly.smetannikov@opencascade.com>
Thu, 11 Sep 2014 08:19:22 +0000 (12:19 +0400)
src/NewGeom/NewGeom_DataModel.cpp
src/NewGeom/NewGeom_DataModel.h
src/NewGeom/NewGeom_Module.h
src/XGUI/XGUI_IPrefMgr.h
src/XGUI/XGUI_MainWindow.cpp
src/XGUI/XGUI_MainWindow.h
src/XGUI/XGUI_Preferences.h
src/XGUI/XGUI_Workshop.cpp
src/XGUI/XGUI_Workshop.h

index 99327c50c4fef35da0a2e4b9e6168fcf9afe4693..cfe08465507394b261954c9bce9c7ae6a7904531 100644 (file)
@@ -1,7 +1,8 @@
 #include "NewGeom_DataModel.h"
+#include "NewGeom_Module.h"
 
-NewGeom_DataModel::NewGeom_DataModel(CAM_Module* theModule)
-    : LightApp_DataModel(theModule)
+NewGeom_DataModel::NewGeom_DataModel(NewGeom_Module* theModule)
+    : LightApp_DataModel(theModule), myModule(theModule)
 {
 }
 
index 7beaf392fcf16fad598ccfe10f49f446214c2878..fbd90dd44353a32f5585f7b434e4295114b42486 100644 (file)
@@ -5,11 +5,13 @@
 #include "NewGeom.h"
 #include <LightApp_DataModel.h>
 
+class NewGeom_Module;
+
 class NewGeom_EXPORT NewGeom_DataModel : public LightApp_DataModel
 {
   Q_OBJECT
  public:
-  NewGeom_DataModel(CAM_Module* theModule);
+  NewGeom_DataModel(NewGeom_Module* theModule);
   virtual ~NewGeom_DataModel();
 
   virtual bool open(const QString& thePath, CAM_Study* theStudy, QStringList theFiles);
@@ -25,7 +27,7 @@ class NewGeom_EXPORT NewGeom_DataModel : public LightApp_DataModel
 
  private:
   QString myStudyPath;
-
+  NewGeom_Module* myModule;
 };
 
 #endif
index b4b52e626cfa316c76631b6687e86a5e1b74c6f5..86c32772cc2d6ad695ab1305dfd30dca3492aa5e 100644 (file)
@@ -75,6 +75,8 @@ Q_OBJECT
   virtual void createPreferences();
   virtual void preferencesChanged(const QString& theSection, const QString& theParam);
 
+  XGUI_Workshop* workshop() const { return myWorkshop; }
+
  public slots:
   virtual bool activateModule(SUIT_Study* theStudy);
   virtual bool deactivateModule(SUIT_Study* theStudy);
index 1a4f8481cf4053c20a6e1087ffab300af4c300d7..af0752d6f36d438409f18ee9af8a0408ac7206cd 100644 (file)
@@ -9,13 +9,28 @@
 #include <QString>
 #include <SUIT_PreferenceMgr.h>
 
+/** 
+* An interface class which provides incapsulation of SUIT_PreferenceMgr class instance 
+* It is used in order to make common interface to Preference manager in Salome 
+* and this application
+*/
 class XGUI_IPrefMgr
 {
 public:
+  /** 
+  * Add preference item into preference dialog box
+  * \param theLbl - label of the item
+  * \param pId - id of container item
+  * \param theType - type of the item
+  * \param theSection - resouce section name
+  * \param theName - name of the resource
+  * Returns Id of the ctreated item
+  */
   virtual int addPreference(const QString& theLbl, int pId, 
                             SUIT_PreferenceMgr::PrefItemType theType,
                             const QString& theSection, const QString& theName ) = 0;
 
+  /// Returns incapsulated preference manager
   virtual SUIT_PreferenceMgr* prefMgr() const = 0;
 };
 
index b1171dc64e1c02076b9f6984c2d87ffd62f725ff..67edcd05917fea45ef155f8563c6f2e684510254 100644 (file)
 #include <QTimer>
 #include <QCloseEvent>
 
+
 XGUI_MainWindow::XGUI_MainWindow(QWidget* parent)
     : QMainWindow(parent),
-      myPythonConsole(0)
+      myPythonConsole(0), myIsModified(false)
 {
-  setWindowTitle(tr("New Geom"));
+  myTitle = tr("New Geom");
+  updateTitle();
   createMainMenu();
   QMdiArea* aMdiArea = new QMdiArea(this);
   aMdiArea->setContextMenuPolicy(Qt::ActionsContextMenu);
@@ -250,6 +252,31 @@ void XGUI_MainWindow::createMainMenu()
   addDockWidget(Qt::TopDockWidgetArea, aMenuDock);
 }
 
+
+void XGUI_MainWindow::updateTitle()
+{
+  QString aTitle = myTitle;
+  if (!myCurrentDir.isNull())
+    aTitle += ":" + myCurrentDir;
+  if (myIsModified)
+    aTitle += "*";
+  setWindowTitle(aTitle);
+}
+
+void XGUI_MainWindow::setCurrentDir(const QString& theDir, bool toUpdate)
+{
+  myCurrentDir = theDir;
+  if (toUpdate)
+    updateTitle();
+}
+
+void XGUI_MainWindow::setModifiedState(bool isModified, bool toUpdate)
+{
+  myIsModified = isModified;
+  if (toUpdate)
+    updateTitle();
+}
+
 CloseEventWatcher::CloseEventWatcher(QObject* theParent)
     : QObject(theParent)
 {
index a8a067cf6b17930e057a47bb0e1431cec987a00c..3294f58ac5fd276945c1cd31e6a1b36c9c9c807b 100644 (file)
@@ -51,6 +51,17 @@ Q_OBJECT
 
   void createSubWindow();
 
+  /// Add name of current directory into title of desktop window
+  void setCurrentDir(const QString& theDir, bool toUpdate = true);
+
+  /// Add asterisk to a title of the window
+  void setModifiedState(bool isModified, bool toUpdate = true);
+
+  /// Returns current state of modification
+  bool isModifiedState() const { return myIsModified; }
+
+  void updateTitle();
+
  private slots:
   void cascadeWindows();
   void onViewCreated(XGUI_ViewWindow* theWindow);
@@ -69,6 +80,10 @@ signals:
   XGUI_MainMenu* myMenuBar;
   XGUI_Viewer* myViewer;
 
+  QString myTitle;
+  QString myCurrentDir;
+  bool myIsModified;
+
   PyConsole_EnhConsole* myPythonConsole;
 };
 
index 2493414bfe5104ace938431342c2c11225ff34f2..a6fbc8a2b2faa2675bb944ff7506e5b531b43745 100644 (file)
@@ -98,12 +98,14 @@ Q_OBJECT
   virtual void accept();
 
  private:
-  void createEditors();
-  void createViewerPage(int thePageId);
-  void createMenuPage(int thePageId);
-  //void createCustomPage(int thePageId);
-
-  void updateCustomProps();
+   /// Create editors for aplication properties
+   void createEditors();
+
+   /// Create a viewer page in dialog box
+   void createViewerPage(int thePageId);
+   
+   /// Create menu properties page in the dialog box
+   void createMenuPage(int thePageId);
 
   XGUI_PreferencesMgr* myPreferences;
   bool myIsChanged;
index 4bd292de7fcd7459df0e1c9f91e07bbb84aeea0b..967f560f2d517e2864990bc7afdd20bdd3d259b6 100644 (file)
@@ -237,11 +237,10 @@ void XGUI_Workshop::processEvent(const Events_Message* theMessage)
     if (!aFeatureMsg->isInternal()) {
       addFeature(aFeatureMsg);
     }
-    return;
   }
 
   // Process creation of Part
-  if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED)) {
+  else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED)) {
     const ModelAPI_ObjectUpdatedMessage* aUpdMsg =
         dynamic_cast<const ModelAPI_ObjectUpdatedMessage*>(theMessage);
     onFeatureCreatedMsg(aUpdMsg);
@@ -250,48 +249,42 @@ void XGUI_Workshop::processEvent(const Events_Message* theMessage)
         mySalomeConnector->createPreferences();
       myUpdatePrefs = false;
     }
-    return;
   }
-  if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_PLUGIN_LOADED)) {
+  else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_PLUGIN_LOADED)) {
     myUpdatePrefs = true;
-    return;
   }
 
   // Redisplay feature
-  if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY)) {
+  else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY)) {
     const ModelAPI_ObjectUpdatedMessage* aUpdMsg =
         dynamic_cast<const ModelAPI_ObjectUpdatedMessage*>(theMessage);
     onFeatureRedisplayMsg(aUpdMsg);
-    return;
   }
 
   //Update property panel on corresponding message. If there is no current operation (no
   //property panel), or received message has different feature to the current - do nothing.
-  if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) {
+  else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_UPDATED)) {
     const ModelAPI_ObjectUpdatedMessage* anUpdateMsg =
         dynamic_cast<const ModelAPI_ObjectUpdatedMessage*>(theMessage);
     onFeatureUpdatedMsg(anUpdateMsg);
-    return;
   }
 
-  if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED)) {
+  else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_DELETED)) {
     const ModelAPI_ObjectDeletedMessage* aDelMsg =
         dynamic_cast<const ModelAPI_ObjectDeletedMessage*>(theMessage);
     onObjectDeletedMsg(aDelMsg);
-    return;
   }
 
-  if (theMessage->eventID() == Events_LongOp::eventID()) {
+  else if (theMessage->eventID() == Events_LongOp::eventID()) {
     if (Events_LongOp::isPerformed())
       QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
     //QTimer::singleShot(10, this, SLOT(onStartWaiting()));
     else
       QApplication::restoreOverrideCursor();
-    return;
   }
 
   //An operation passed by message. Start it, process and commit.
-  if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OPERATION_LAUNCHED)) {
+  else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OPERATION_LAUNCHED)) {
     const Config_PointerMessage* aPartSetMsg =
         dynamic_cast<const Config_PointerMessage*>(theMessage);
     //myPropertyPanel->cleanContent();
@@ -304,12 +297,18 @@ void XGUI_Workshop::processEvent(const Events_Message* theMessage)
           updateCommandStatus();
       }
     }
-    return;
+  } else {
+    //Show error dialog if error message received.
+    const Events_Error* anAppError = dynamic_cast<const Events_Error*>(theMessage);
+    if (anAppError) {
+      emit errorOccurred(QString::fromLatin1(anAppError->description()));
+    }
   }
-  //Show error dialog if error message received.
-  const Events_Error* anAppError = dynamic_cast<const Events_Error*>(theMessage);
-  if (anAppError) {
-    emit errorOccurred(QString::fromLatin1(anAppError->description()));
+  if (!isSalomeMode()) {
+    PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
+    DocumentPtr aDoc = aMgr->rootDocument();
+    if (aDoc->isModified() != myMainWindow->isModifiedState())
+      myMainWindow->setModifiedState(aDoc->isModified());
   }
 }
 
@@ -528,13 +527,12 @@ void XGUI_Workshop::connectWithOperation(ModuleBase_Operation* theOperation)
 /*
  * Saves document with given name.
  */
-void XGUI_Workshop::saveDocument(QString theName)
+void XGUI_Workshop::saveDocument(const QString& theName, std::list<std::string>& theFileNames)
 {
   QApplication::restoreOverrideCursor();
   PluginManagerPtr aMgr = ModelAPI_PluginManager::get();
   DocumentPtr aDoc = aMgr->rootDocument();
-  std::list<std::string> aFileNames;
-  aDoc->save(theName.toLatin1().constData(), aFileNames);
+  aDoc->save(theName.toLatin1().constData(), theFileNames);
   QApplication::restoreOverrideCursor();
 }
 
@@ -624,8 +622,10 @@ bool XGUI_Workshop::onSave()
   if (myCurrentDir.isEmpty()) {
     return onSaveAs();
   }
-  saveDocument(myCurrentDir);
+  std::list<std::string> aFiles;
+  saveDocument(myCurrentDir, aFiles);
   updateCommandStatus();
+  myMainWindow->setModifiedState(false);
   return true;
 }
 
@@ -656,6 +656,10 @@ bool XGUI_Workshop::onSaveAs()
     }
   }
   myCurrentDir = aTempDir;
+  if (!isSalomeMode()) {
+    myMainWindow->setCurrentDir(myCurrentDir, false);
+    myMainWindow->setModifiedState(false);
+  }
   return onSave();
 }
 
index dbf160d15105689a1fcf31346a25f7752e00e628..cf1c709a08b1510cf4fb219b19ea987dcba7c274 100644 (file)
@@ -162,6 +162,19 @@ Q_OBJECT
     return myModule;
   }
 
+  /// Returns current directory whic contains data files
+  QString currentDataDir() const { return myCurrentDir; }
+
+  /// Returns current directory whic contains data files
+  void setCurrentDataDir(const QString& theDir) { myCurrentDir = theDir; }
+
+  /**
+  * Save the current document into a directory
+  * \param theName - path to the directory
+  * \param theFileNames - returned file names created in this directory
+  */
+  void saveDocument(const QString& theName, std::list<std::string>& theFileNames);
+
 signals:
   void salomeViewerSelection();
   void errorOccurred(const QString&);
@@ -193,7 +206,6 @@ signals:
   //Event-loop processing methods:
   void addFeature(const Config_FeatureMessage*);
   void connectWithOperation(ModuleBase_Operation* theOperation);
-  void saveDocument(QString theName);
 
   void onFeatureUpdatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);
   void onFeatureCreatedMsg(const ModelAPI_ObjectUpdatedMessage* theMsg);