]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Implementation of NPAL15860 (EDF PAL 409: to have in file menu a history of the open... TG_start_ELNO_visualization
authorrnv <rnv@opencascade.com>
Tue, 25 Mar 2008 07:21:16 +0000 (07:21 +0000)
committerrnv <rnv@opencascade.com>
Tue, 25 Mar 2008 07:21:16 +0000 (07:21 +0000)
src/LightApp/LightApp_Application.cxx
src/LightApp/LightApp_Application.h
src/LightApp/resources/LightApp.xml
src/LightApp/resources/LightApp_msg_en.po
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/resources/SalomeApp.xml

index 2e59728d023febeb1f739a63ea596adcb42519fb..d69115d96d7850b570297a334aa56e20213c9843 100644 (file)
@@ -516,8 +516,12 @@ void LightApp_Application::createActions()
   }
 
   //! MRU
+  int maxMostRecentlyStudies = resMgr->integerValue("MaxMRU", "MaxValue", 5);
   QtxMRUAction* mru = new QtxMRUAction( tr( "TOT_DESK_MRU" ), tr( "MEN_DESK_MRU" ), desk );
+  mru->setVisibleCount(maxMostRecentlyStudies);
+  mru->setInsertMode(QtxMRUAction::AddFirst);
   connect( mru, SIGNAL( activated( QString ) ), this, SLOT( onMRUActivated( QString ) ) );
+  mru->loadLinks(resMgr, "MostRecentlyStudies");
   registerAction( MRUId, mru );
 
   // default icon for neutral point ('SALOME' module)
@@ -628,11 +632,10 @@ void LightApp_Application::createActions()
   createMenu( PreferencesId, fileMenu, 15, -1 );
   createMenu( separator(), fileMenu, -1, 15, -1 );
 
-  /*
   createMenu( separator(), fileMenu, -1, 100, -1 );
   createMenu( MRUId, fileMenu, 100, -1 );
   createMenu( separator(), fileMenu, -1, 100, -1 );
-  */
+  
 }
 
 /*!On module activation action.*/
@@ -821,16 +824,8 @@ bool LightApp_Application::onOpenDoc( const QString& aName )
   }
 
   bool res = CAM_Application::onOpenDoc( aName );
-
-  QAction* a = action( MRUId );
-  if ( a && a->inherits( "QtxMRUAction" ) )
-  {
-    QtxMRUAction* mru = (QtxMRUAction*)a;
-    if ( res )
-      mru->insert( aName );
-    else
-      mru->remove( aName );
-  }
+  if(res)
+    addMRUStudy(aName);
   return res;
 }
 
@@ -887,6 +882,61 @@ void LightApp_Application::setActiveStudy( SUIT_Study* study )
   activateWindows();
 }
 
+/*!
+  Remove items from the "File -> Most recently used" sub menu
+*/
+void LightApp_Application::removeMRUStudy( const QString& studyName ){
+  QAction* a = action( MRUId );
+  SUIT_ResourceMgr* resMgr = resourceMgr();
+  if ( a && a->inherits( "QtxMRUAction" ) && resMgr ) {
+    QtxMRUAction* mru = (QtxMRUAction*)a;
+    mru->remove( studyName );    
+    mru->saveLinks(resMgr, "MostRecentlyStudies");      
+    SUIT_Session* aSession = SUIT_Session::session();
+    QPtrList<SUIT_Application> aAppList = aSession->applications();
+    LightApp_Application* theApp = 0;
+    for ( QPtrListIterator<SUIT_Application> it( aAppList ); it.current() ; ++it ) {
+      theApp = (LightApp_Application*)it.current();
+      if(theApp)
+        theApp->updateMRUStudies();
+    }
+  }
+}
+
+/*!
+  Add items in the "File -> Most recently used" sub menu
+*/
+void LightApp_Application::addMRUStudy(const QString& studyName){
+  QAction* a = action( MRUId );
+  SUIT_ResourceMgr* resMgr = resourceMgr();
+  if ( a && a->inherits( "QtxMRUAction" ) && !studyName.isNull() && resMgr) {
+    QtxMRUAction* mru = (QtxMRUAction*)a;
+    mru->insert( studyName );
+    mru->saveLinks(resMgr, "MostRecentlyStudies",false);
+    
+    SUIT_Session* aSession = SUIT_Session::session();
+    QPtrList<SUIT_Application> aAppList = aSession->applications();
+    LightApp_Application* theApp = 0;
+    for ( QPtrListIterator<SUIT_Application> it( aAppList ); it.current() ; ++it ) {
+      theApp = (LightApp_Application*)it.current();
+      if(theApp)
+        theApp->updateMRUStudies();
+    }  
+  }
+}
+
+/*!
+  Update items in the "File -> Most recently used" sub menu
+*/
+void LightApp_Application::updateMRUStudies(){
+  QAction* a = action( MRUId );
+  SUIT_ResourceMgr* resMgr = resourceMgr();
+  if ( a && a->inherits( "QtxMRUAction" ) && resMgr) {
+    QtxMRUAction* mru = (QtxMRUAction*)a;
+    mru->loadLinks(resMgr, "MostRecentlyStudies");
+  }
+}
+
 /*!
   Enables/Disables menu items and toolbar buttons. Rebuild menu
 */
@@ -1507,9 +1557,13 @@ void LightApp_Application::onStudyOpened( SUIT_Study* theStudy )
 }
 
 /*!Protected SLOT. On study saved.*/
-void LightApp_Application::onStudySaved( SUIT_Study* )
+void LightApp_Application::onStudySaved( SUIT_Study* )
 {
   emit studySaved();
+  if( s ){
+    QString aStudyName = s->studyName();
+    addMRUStudy( aStudyName );
+  }
 }
 
 /*!Protected SLOT. On study closed.*/
@@ -1622,7 +1676,21 @@ void LightApp_Application::onPreferenceChanged( QString& modName, QString& secti
 /*!Private SLOT. On open document with name \a aName.*/
 void LightApp_Application::onMRUActivated( QString aName )
 {
-  onOpenDoc( aName );
+  if ( aName.isNull() )
+    return;
+  
+  QFile aFile(aName);
+  if(!aFile.exists()) {
+    // displaying a message box as SUIT_Validator in case file can't be open
+    SUIT_MessageBox::error1( desktop(),
+                             tr( "ERR_ERROR" ),
+                             tr( "ERR_DOC_NOT_EXISTS" ).arg( aName ),
+                             tr( "BUT_OK" ) );
+    removeMRUStudy(aName);
+  }
+  else {
+    onOpenDoc( aName );
+  }
 }
 
 /*!Remove all windows from study.*/
index e83e3c2fdbec22c56e005441bcf8bd26932f4145..fb83e0608bc59bc5c4fda3b86f5662e28a984be4 100644 (file)
@@ -133,7 +133,7 @@ public:
                                                        const QString& caption, QWidget* parent );
 
   void                                updateActions();
-
+  
   SUIT_ViewManager*                   getViewManager( const QString&, const bool );
   virtual void                        addViewManager( SUIT_ViewManager* );
   virtual void                        removeViewManager( SUIT_ViewManager* );
@@ -162,6 +162,10 @@ public:
   virtual bool                        event( QEvent* );
   
   virtual bool                        checkDataObject( LightApp_DataObject* theObj );
+  
+  virtual void                        updateMRUStudies();
+  virtual void                        addMRUStudy( const QString& studyName );
+  virtual void                        removeMRUStudy( const QString& studyName );
 
 signals:
   void                                studyOpened();
index 0c2f9ee0c8af820c79929167ecdeb6edc15e49e2..16a566b965d9f0e00c04ec99eb75e7efb9405014 100644 (file)
     <!-- "Open/Save File" dialog box preferences-->
     <parameter name="QuickDirList" value=""/>
   </section>
+  <section name="MaxMRU" >
+    <!-- Max number of "Most recently used" studies-->
+    <parameter name="MaxValue" value="7"/>
+  </section>
   <section name="Study">
     <!-- General study settings -->
     <parameter name="store_positions" value="true" />
@@ -90,4 +94,8 @@
     <parameter name="Background" value="144, 208, 211" />
     <parameter name="Title"      value="63, 213, 255"  />
   </section>
+  <section name="RecentStudies" >
+    <parameter name="MaxRecentStudies"  value="10"/>
+    <parameter name="RecentStudiesList" value=""  />
+  </section>
 </document>
index c138bb49fedecad27fdf5afe6fafbcfcea2d6ba8..340601cc76b6ccc2e9b83354a8653b75ac173c7b 100644 (file)
@@ -350,3 +350,5 @@ msgstr "&Open..."
 msgid "LightApp_Application::ACTIVATE_MODULE_OP_NEW"
 msgstr "&New"
 
+msgid "LightApp_Application::ERR_DOC_NOT_EXISTS"
+msgstr "Can not open %1.\n File does not exist"
index 0a4f4e18dea46fe65074b5240161daf246e5968b..4fbe1d0b9ef81bb5acc8f6f5c5ab3cdb446dd978 100644 (file)
@@ -369,8 +369,7 @@ bool SalomeApp_Application::onOpenDoc( const QString& aName )
 
   if (toOpen)
     res = CAM_Application::onOpenDoc( aName );
-
-  QAction* a = action( MRUId );
+  /*  QAction* a = action( MRUId );
   if ( a && a->inherits( "QtxMRUAction" ) )
   {
     QtxMRUAction* mru = (QtxMRUAction*)a;
@@ -378,8 +377,11 @@ bool SalomeApp_Application::onOpenDoc( const QString& aName )
       mru->insert( aName );
     else
       mru->remove( aName );
-  }
+      }*/
+  if(res)
+    addMRUStudy(aName);
   return res;
+
 }
 
 /*!SLOT. Load document.*/
index b4da14ade74a1c052b62cee9bb06bfbdbdd3f0bc..95368e9bceb455a9e317c69fad4ebb6d131c25fb 100644 (file)
     <parameter name="Title"      value="63, 213, 255"  />
     <parameter name="NodeBody"   value="255, 249, 147" />
   </section>
+  <section name="MaxMRU" >
+    <!-- Max number of "Most recently used" studies-->
+    <parameter name="MaxValue" value="7"/>
+  </section> 
   <section name="QxGraph" >
     <!-- QxGraph viewer preferences -->
     <parameter name="Background" value="144, 208, 211" />