]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Issue 20430: EDF 1012 ALL : Automatic save
authorvsr <vsr@opencascade.com>
Tue, 18 Aug 2009 07:54:03 +0000 (07:54 +0000)
committervsr <vsr@opencascade.com>
Tue, 18 Aug 2009 07:54:03 +0000 (07:54 +0000)
12 files changed:
doc/salome/gui/images/pref11.png
doc/salome/gui/images/studymanagement.png
doc/salome/gui/input/salome_preferences.doc
doc/salome/gui/input/study_management_chapter.doc
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Application.h
src/LightApp/resources/LightApp.xml
src/LightApp/resources/LightApp_msg_en.ts
src/STD/STD_Application.cxx
src/STD/STD_Application.h
src/STD/resources/STD_msg_en.ts
src/SalomeApp/resources/SalomeApp.xml

index 634da539e4f5de9e6a3da1aed5dd52dc876d13f9..39755e71076737e4e59b198f5b4ec4762835489a 100755 (executable)
Binary files a/doc/salome/gui/images/pref11.png and b/doc/salome/gui/images/pref11.png differ
index f6b20973dc8a868f7b44fc5f788f1987bc073afc..e50858a278ab59d02f0fdaad14a28e996e61bcd8 100755 (executable)
Binary files a/doc/salome/gui/images/studymanagement.png and b/doc/salome/gui/images/studymanagement.png differ
index dc5aba11a1ca43a99765b39f527de362371d2350..8d37c64f5f92d20bc7107fddb74aa5944e908ff1 100644 (file)
@@ -30,6 +30,10 @@ ASCII format file (or files).</li>
 <li><b>Store positions of windows</b> -  if checked in, positions of windows
 will be saved in a special file at the end of the current session and
 then restored for a new session.</li>
+<li><b>Auto-save interval (min)</b> - allows specify time interval (in
+minutes) for automatic study saving operation. If the time interval is
+equal to 0 ("Disabled" value is shown) the automatic saving is not
+performed.</li>
 <li><b>Store/restore last GUI state</b> - if checked in, all GUI settings are
 saved with the rest of the data whenever you save the study. When the
 study is reopened, the GUI state is restored.</li>
@@ -204,4 +208,4 @@ resizing columns on expanding an object browser item.</li>
 <b>Entry</b>, <b>IOR</b> and <b>Reference entry</b> columns in the Object Browser.</li>
 </ul>
 
-*/
\ No newline at end of file
+*/
index 524a4f121774edb56cc20332de35c1ec77d876d4..b1d88af2cbc7cc0938b495c7e82c995df84af7a9 100644 (file)
@@ -16,9 +16,14 @@ All operations with studies are available from the \b File menu.
 \b New - creates a new study. The study will be created
 with default name \b Study1. It is possible to create
 several studies, each accessible from the task bar.
+
 \b Open - allows to open an existing study by browsing for it in a
 standard Search File dialog box, choosing the required
 *.hdf file and clicking \b Open button.
+
+\b Reopen - reloads the current study from the *.hdf file. This menu command
+can be used to reverse the study to the latest saved state.
+
 \b Connect - allows to open an unloaded study.
 \image html loadstudy2.png
 Select one of the studies, which has been previously
@@ -110,4 +115,4 @@ studies, giving the possibility to fast load the required study.
 \b Exit - unlike \b Close, closes not only the current, but all opened
 Salome studies.
 
-*/
\ No newline at end of file
+*/
index 5f5a86d7359e6bdcec3a644fe5df8abd53ab138d..7465cf714c52f6be3dc30472711e6a9859e06845 100644 (file)
 #include <QByteArray>
 #include <QMenu>
 #include <QProcess>
+#include <QTimer>
 
 #include <utilities.h>
 
@@ -227,6 +228,11 @@ LightApp_Application::LightApp_Application()
 
   setDesktop( desk );
 
+  // initialize auto save timer
+  myAutoSaveTimer = new QTimer( this );
+  myAutoSaveTimer->setSingleShot( true );
+  connect( myAutoSaveTimer, SIGNAL( timeout() ), this, SLOT( onSaveDoc() ) );
+
   SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
   QPixmap aLogo = aResMgr->loadPixmap( "LightApp", tr( "APP_DEFAULT_ICO" ), false );
 
@@ -1418,6 +1424,9 @@ void LightApp_Application::onStudySaved( SUIT_Study* s )
 /*!Protected SLOT. On study closed.*/
 void LightApp_Application::onStudyClosed( SUIT_Study* s )
 {
+  // stop auto-save timer
+  myAutoSaveTimer->stop();
+
   // Bug 10396: clear selection
   mySelMgr->clearSelected();
 
@@ -1444,6 +1453,16 @@ void LightApp_Application::studyOpened( SUIT_Study* s )
   updateViewManagers();
 }
 
+void LightApp_Application::studySaved( SUIT_Study* s )
+{
+  CAM_Application::studyOpened( s );
+  SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
+  if ( aResMgr && activeStudy() ) {
+    int autoSaveInterval = aResMgr->integerValue( "Study", "auto_save_interval", 0 );
+    if ( autoSaveInterval > 0 ) myAutoSaveTimer->start( autoSaveInterval*60000 );
+  }
+}
+
 void LightApp_Application::studyCreated( SUIT_Study* s )
 {
   CAM_Application::studyCreated( s );
@@ -1783,6 +1802,12 @@ void LightApp_Application::createPreferences( LightApp_Preferences* pref )
   pref->addPreference( tr( "PREF_ASCII_FILE" ), studyGroup, LightApp_Preferences::Bool, "Study", "ascii_file" );
   pref->addPreference( tr( "PREF_STORE_POS" ),  studyGroup, LightApp_Preferences::Bool, "Study", "store_positions" );
 
+  int autoSaveInterval = pref->addPreference( tr( "PREF_AUTO_SAVE" ),  studyGroup, 
+                                             LightApp_Preferences::IntSpin, "Study", "auto_save_interval" );
+  pref->setItemProperty( "min",        0, autoSaveInterval );
+  pref->setItemProperty( "max",     1440, autoSaveInterval );
+  pref->setItemProperty( "special", tr( "PREF_AUTO_SAVE_DISABLED" ), autoSaveInterval );
+
   int extgroup = pref->addPreference( tr( "PREF_GROUP_EXT_BROWSER" ), genTab );
   QString platform;
 #ifdef WIN32
@@ -2264,6 +2289,11 @@ void LightApp_Application::preferencesChanged( const QString& sec, const QString
   {
     if( param=="store_positions" )
       updateWindows();
+    if( param=="auto_save_interval" ) {
+      myAutoSaveTimer->stop();
+      int autoSaveInterval = resMgr->integerValue( "Study", "auto_save_interval", 0 );
+      if ( activeStudy() && autoSaveInterval > 0 ) myAutoSaveTimer->start( autoSaveInterval*60000 );
+    }
   }
 
 #ifndef DISABLE_PYCONSOLE
@@ -2754,6 +2784,12 @@ void LightApp_Application::createEmptyStudy()
 
   if ( objectBrowser() )
     objectBrowser()->updateTree();
+  
+  SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
+  if ( aResMgr && activeStudy() ) {
+    int autoSaveInterval = aResMgr->integerValue( "Study", "auto_save_interval", 0 );
+    if ( autoSaveInterval > 0 ) myAutoSaveTimer->start( autoSaveInterval*60000 );
+  }
 }
 
 /*!
index 953947f13468d787c5c999bb25da2c0319c482fa..a1d1911e15fd8a87765db684ee5b5c16195e8b81 100644 (file)
@@ -52,6 +52,7 @@ class QString;
 class QWidget;
 class QStringList;
 class QDockWidget;
+class QTimer;
 
 #ifdef WIN32
 #pragma warning( disable:4251 )
@@ -229,6 +230,7 @@ protected:
 
   virtual void                        studyOpened( SUIT_Study* );
   virtual void                        studyCreated( SUIT_Study* );
+  virtual void                        studySaved( SUIT_Study* );
 
   void                                updatePreference( const QString&, const QString&, const QString& );
 
@@ -268,6 +270,7 @@ protected:
   WinGeom                             myWinGeom;
 
   SUIT_Accel*                         myAccel;
+  QTimer*                             myAutoSaveTimer;
 
   static LightApp_Preferences*        _prefs_;
 
index ebfc4ab4b58b689130c1d28183e3223214ddb9dc..348795f7a07b19ae248f5ceba3ef3e5df83d6b62 100644 (file)
   </section>
   <section name="Study">
     <!-- General study settings -->
-    <parameter name="store_positions" value="true" />
+    <parameter name="store_positions"    value="true" />
+    <parameter name="auto_save_interval" value="0" />
   </section>
   <section name="OCCViewer" >
     <!-- OCC viewer preferences -->
index c8851468187889f0309e743afcb26babc93d23a4..e1ddc72f0e6bec3aca729e27bb8d89737c187d78 100644 (file)
@@ -118,6 +118,14 @@ CEA/DEN, CEDRAT, EDF R&amp;D, LEG, PRINCIPIA R&amp;D, BUREAU VERITAS</translatio
         <source>PREF_STORE_POS</source>
         <translation>Store positions of windows</translation>
     </message>
+    <message>
+        <source>PREF_AUTO_SAVE</source>
+        <translation>Auto-save interval (min)</translation>
+    </message>
+    <message>
+        <source>PREF_AUTO_SAVE_DISABLED</source>
+        <translation>Disabled</translation>
+    </message>
     <message>
         <source>PREF_PROJECTION_MODE</source>
         <translation>Projection mode:</translation>
index eefdd5165818556bfb57c471d6e26f25c13fdb2c..c78579f0fce055d849395e40e25a29218702a0c5 100755 (executable)
@@ -161,6 +161,10 @@ void STD_Application::createActions()
                 tr( "MEN_DESK_FILE_OPEN" ), tr( "PRP_DESK_FILE_OPEN" ),
                 Qt::CTRL+Qt::Key_O, desk, false, this, SLOT( onOpenDoc() ) );
 
+  createAction( FileReopenId, tr( "TOT_DESK_FILE_REOPEN" ), QIcon(),
+               tr( "MEN_DESK_FILE_REOPEN" ), tr( "PRP_DESK_FILE_REOPEN" ),
+               0, desk, false, this, SLOT( onReopenDoc() ) );
+
   createAction( FileCloseId, tr( "TOT_DESK_FILE_CLOSE" ),
                 resMgr->loadPixmap( "STD", tr( "ICON_FILE_CLOSE" ) ),
                 tr( "MEN_DESK_FILE_CLOSE" ), tr( "PRP_DESK_FILE_CLOSE" ),
@@ -222,6 +226,7 @@ void STD_Application::createActions()
 
   createMenu( FileNewId,    fileMenu, 0 );
   createMenu( FileOpenId,   fileMenu, 0 );
+  createMenu( FileReopenId, fileMenu, 0 ); 
   createMenu( FileCloseId,  fileMenu, 5 );
   createMenu( separator(),  fileMenu, -1, 5 );
   createMenu( FileSaveId,   fileMenu, 5 );
@@ -326,6 +331,45 @@ bool STD_Application::onOpenDoc( const QString& aName )
   return res;
 }
 
+/*! Reload document from the file.*/
+bool STD_Application::onReopenDoc()
+{
+  bool res = false;
+
+  SUIT_Study* study = activeStudy();
+  if ( study && study->isSaved() ) {
+    // remember study name
+    QString studyName = study->studyName();
+
+    // close study
+    beforeCloseDoc( study );
+    study->closeDocument( true );
+
+    // update views / windows / status bar / title
+    clearViewManagers();
+    setActiveStudy( 0 );
+    updateDesktopTitle();
+    updateCommandsStatus();
+
+    // delete study
+    delete study;
+    study = 0;
+    
+    // post closing actions
+    afterCloseDoc();
+
+    // reload study from the file
+    res = useFile( studyName ) && activeStudy();
+
+    // if reloading is failed, close the desktop
+    if ( !res ) {
+      setDesktop( 0 );
+      closeApplication();
+    }
+  }
+  return res;
+}
+
 /*!Virtual function. Not implemented here.*/
 void STD_Application::beforeCloseDoc( SUIT_Study* )
 {
@@ -621,12 +665,14 @@ void STD_Application::updateCommandsStatus()
 {
   SUIT_Application::updateCommandsStatus();
 
-  bool aHasStudy = activeStudy() != 0;
-  bool aIsNeedToSave = false;
-  if ( aHasStudy )
-    aIsNeedToSave = !activeStudy()->isSaved() || activeStudy()->isModified();
+  bool aHasStudy     = activeStudy() != 0;
+  bool aSaved        = aHasStudy && activeStudy()->isSaved();
+  bool aModified     = aHasStudy && activeStudy()->isModified();
+  bool aIsNeedToSave = aHasStudy && ( !aSaved || aModified );
 
-  if ( action( FileSaveId ) )
+ if ( action( FileReopenId ) )
+    action( FileReopenId )->setEnabled( aSaved );
+ if ( action( FileSaveId ) )
     action( FileSaveId )->setEnabled( aIsNeedToSave );
   if ( action( FileSaveAsId ) )
     action( FileSaveAsId )->setEnabled( aHasStudy );
index 41ba71a88e36fae21e035f31af268eca79c67268..08d3369180970d3620d56eab052e6e7edb9a4257 100755 (executable)
@@ -52,7 +52,7 @@ class STD_EXPORT STD_Application : public SUIT_Application
   Q_OBJECT
 
 public:
-  enum { MenuFileId, FileNewId, FileOpenId, FileCloseId, FileSaveId, FileSaveAsId, FileExitId,
+  enum { MenuFileId, FileNewId, FileOpenId, FileReopenId, FileCloseId, FileSaveId, FileSaveAsId, FileExitId,
          MenuViewId, ViewWindowsId, ViewToolBarsId, ViewStatusBarId, NewWindowId,
          MenuEditId, EditCutId, EditCopyId, EditPasteId,
          MenuHelpId, HelpAboutId,
@@ -121,6 +121,8 @@ public slots:
   virtual void          onOpenDoc();
   virtual bool          onOpenDoc( const QString& );
 
+  virtual bool          onReopenDoc();
+
   virtual void          onExit();
 
   virtual void          onCopy();
index cfa9e93f4765bfaeedfa5946b075f3f485dd285f..30c0e5919e5a70119ff2fd6fe8e4c299389d2150 100644 (file)
@@ -387,6 +387,10 @@ Do you want to overwrite it?</translation>
         <source>TOT_DESK_FILE_OPEN</source>
         <translation>Open document</translation>
     </message>
+    <message>
+        <source>TOT_DESK_FILE_REOPEN</source>
+        <translation>Reopen document</translation>
+    </message>
     <message>
         <source>PRP_DESK_FILE_EXIT</source>
         <translation>Exits the application</translation>
@@ -395,6 +399,10 @@ Do you want to overwrite it?</translation>
         <source>PRP_DESK_FILE_OPEN</source>
         <translation>Opens an existing document</translation>
     </message>
+    <message>
+        <source>PRP_DESK_FILE_REOPEN</source>
+        <translation>Reload the current document from the file</translation>
+    </message>
     <message>
         <source>PRP_DESK_FILE_SAVE</source>
         <translation>Saves the active document</translation>
@@ -423,6 +431,10 @@ Do you want to overwrite it?</translation>
         <source>MEN_DESK_FILE_OPEN</source>
         <translation>&amp;Open...</translation>
     </message>
+    <message>
+        <source>MEN_DESK_FILE_REOPEN</source>
+        <translation>Reopen</translation>
+    </message>
     <message>
         <source>MEN_DESK_FILE_LOAD</source>
         <translation>Conn&amp;ect...</translation>
index 601889331efd074e2626f3d041e33eea5adf9f4d..391fce0bafb80017ac71dc15b8e8faa0e5b5e964 100644 (file)
     <!-- General study settings -->
     <parameter name="store_positions"     value="false" />
     <parameter name="store_visual_state"  value="false" />
+    <parameter name="auto_save_interval"  value="0" />
   </section>
   <section name="ExternalBrowser" >
     <!-- External HELP browser settings -->