]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Merge from BR_siman_phase1 14/02/2013 V7_siman Delivery_V1_0_2013_07_12
authorvsr <vsr@opencascade.com>
Thu, 14 Feb 2013 12:20:31 +0000 (12:20 +0000)
committervsr <vsr@opencascade.com>
Thu, 14 Feb 2013 12:20:31 +0000 (12:20 +0000)
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/SalomeApp_Application.h
src/SalomeApp/resources/SalomeApp_msg_en.ts
src/SalomeApp/resources/SalomeApp_msg_fr.ts
src/Session/Session_Session_i.cxx

index f36c4796d5fe5ba477371e0a2b46021663656b89..bf44620c084b6fcd6cb40f90d1b57f3884fc0bee 100644 (file)
@@ -163,6 +163,11 @@ SalomeApp_Application::SalomeApp_Application()
 {
   connect( desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
            this,      SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
+  // used for simanCheckoutDone signal processing
+  connect( desktop(), SIGNAL( message( const QString& ) ),
+           this, SLOT( onLoadDocMessage( const QString& ) ), Qt::UniqueConnection );
+
+  myIsSiman = false; // default
 }
 
 /*!Destructor.
@@ -177,16 +182,14 @@ SalomeApp_Application::~SalomeApp_Application()
 /*!Start application.*/
 void SalomeApp_Application::start()
 {
-  LightApp_Application::start();
-
-  SALOME_EventFilter::Init();
-
+  // process the command line options before start: to createActions in accordance to the options
   static bool isFirst = true;
   if ( isFirst ) {
     isFirst = false;
 
     QString hdffile;
     QStringList pyfiles;
+    QString loadStudy;
 
     for (int i = 1; i < qApp->argc(); i++) {
       QRegExp rxs ("--study-hdf=(.+)");
@@ -202,14 +205,27 @@ void SalomeApp_Application::start()
         if ( rxp.indexIn( QString(qApp->argv()[i]) ) >= 0 && rxp.capturedTexts().count() > 1 ) {
           QStringList files = rxp.capturedTexts()[1].split(",",QString::SkipEmptyParts);
           pyfiles += files;
+        } else {
+          QRegExp rxl ("--siman-study=(.+)");
+          if ( rxl.indexIn( QString(qApp->argv()[i]) ) >= 0 && rxl.capturedTexts().count() > 1 ) {
+            loadStudy = rxl.capturedTexts()[1];
+            myIsSiman = true;
+          }
         }
       }
     }
 
+    LightApp_Application::start();
+    SALOME_EventFilter::Init();
+
     if ( !hdffile.isEmpty() )       // open hdf file given as parameter
       onOpenDoc( hdffile );
     else if ( pyfiles.count() > 0 ) // create new study
       onNewDoc();
+    else if (!loadStudy.isEmpty()) {// load study by name
+      if (onLoadDoc(loadStudy))
+        updateObjectBrowser(true);
+    }
 
     // import/execute python scripts
     if ( pyfiles.count() > 0 && activeStudy() ) {
@@ -258,6 +274,9 @@ void SalomeApp_Application::start()
         }
       }
     }
+  } else {
+    LightApp_Application::start();
+    SALOME_EventFilter::Init();
   }
 }
 
@@ -306,6 +325,15 @@ void SalomeApp_Application::createActions()
                 Qt::CTRL+Qt::Key_L, desk, false, this, SLOT( onLoadDoc() ) );
   //SRN: BugID IPAL9021: End
 
+  if (myIsSiman) { // check in operation for SIMAN study
+    createAction( SimanCheckInId, tr( "TOT_SIMAN_CHECK_IN" ), QIcon(),
+                tr( "MEN_SIMAN_CHECK_IN" ), tr( "PRP_SIMAN_CHECK_IN" ),
+                0, desk, false, this, SLOT( onCheckIn() ) );
+    createAction( SimanLocalCheckInId, tr( "TOT_SIMAN_LOCAL_CHECK_IN" ), QIcon(),
+                tr( "MEN_SIMAN_LOCAL_CHECK_IN" ), tr( "PRP_SIMAN_LOCAL_CHECK_IN" ),
+                0, desk, false, this, SLOT( onLocalCheckIn() ) );
+  }
+
 
   int fileMenu = createMenu( tr( "MEN_DESK_FILE" ), -1 );
 
@@ -315,6 +343,12 @@ void SalomeApp_Application::createActions()
 
   createMenu( FileLoadId,   fileMenu, 0 );  //SRN: BugID IPAL9021, add a menu item "Load"
 
+  if (myIsSiman) { // check in operation for SIMAN study
+    // last argument "5" locates this just after "Save As" but certain constant is bad => insert after the separator
+    createMenu( SimanCheckInId, fileMenu, 5);
+    createMenu( SimanLocalCheckInId, fileMenu, 5);
+    createMenu( separator(), fileMenu, 5 );
+  }
   createMenu( DumpStudyId, fileMenu, 10, -1 );
   createMenu( separator(), fileMenu, -1, 10, -1 );
   createMenu( LoadScriptId, fileMenu, 10, -1 );
@@ -350,6 +384,9 @@ void SalomeApp_Application::setDesktop( SUIT_Desktop* desk )
   if ( desk ) {
     connect( desk, SIGNAL( windowActivated( SUIT_ViewWindow* ) ),
              this, SLOT( onWindowActivated( SUIT_ViewWindow* ) ), Qt::UniqueConnection );
+    // used for simanCheckoutDone signal processing
+    connect( desk, SIGNAL( message( const QString& ) ),
+             this, SLOT( onLoadDocMessage( const QString& ) ), Qt::UniqueConnection );
   }
 }
 
@@ -477,6 +514,14 @@ bool SalomeApp_Application::onLoadDoc( const QString& aName )
   return res;
 }
 
+/*!SLOT. Load document with a name, specified in \a aMessage.*/
+void SalomeApp_Application::onLoadDocMessage(const QString& aMessage)
+{
+  if (aMessage.indexOf("simanCheckoutDone ") == 0) {
+    onLoadDoc(aMessage.section(' ', 1));
+  }
+}
+
 /*!SLOT. Copy objects to study maneger from selection maneger..*/
 void SalomeApp_Application::onCopy()
 {
@@ -826,6 +871,15 @@ void SalomeApp_Application::onLoadScript( )
   QString anInitialPath = "";
   if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
     anInitialPath = QDir::currentPath();
+  
+  // MPV: if it is SIMAN study, make the initial path as the path to the Siman scripts storage
+  if (myIsSiman) {
+    SALOMEDSClient_StudyManager* aMgr = studyMgr();
+    aMgr->GetSimanStudy()->StudyId();
+    anInitialPath = QString(QDir::separator()) + "tmp" + QDir::separator() + "SimanSalome" + QDir::separator() + 
+      aMgr->GetSimanStudy()->StudyId().c_str() + QDir::separator() +
+      aMgr->GetSimanStudy()->ScenarioId().c_str() + QDir::separator() + aMgr->GetSimanStudy()->UserId().c_str();
+  }
 
   QString aFile = SUIT_FileDlg::getFileName( desktop(), anInitialPath, filtersList, tr( "TOT_DESK_FILE_LOAD_SCRIPT" ), true, true );
 
@@ -852,6 +906,28 @@ void SalomeApp_Application::onSaveGUIState()
   updateActions();
 }
 
+/*!Public SLOT. On SIMAN check in operation.*/
+void SalomeApp_Application::onCheckIn()
+{
+  setMenuShown(SimanCheckInId, false); // check in may be performed only once
+  setMenuShown(SimanLocalCheckInId, false);
+  SALOMEDSClient_StudyManager* aMgr = studyMgr();
+  aMgr->GetSimanStudy()->CheckIn("");
+}
+
+/*!Public SLOT. On SIMAN local check in operation.*/
+void SalomeApp_Application::onLocalCheckIn()
+{
+  // get the active module
+  CAM_Module* aModule = activeModule();
+  if (!aModule) return; // there is no active module
+  
+  setMenuShown(SimanCheckInId, false); // check in may be performed only once
+  setMenuShown(SimanLocalCheckInId, false);
+  SALOMEDSClient_StudyManager* aMgr = studyMgr();
+  aMgr->GetSimanStudy()->CheckIn(aModule->name().toLatin1().data());
+}
+
 /*!Gets file filter.
  *\retval QString "(*.hdf)"
  */
index fbd778537bb1c05bc4c0b3a361b9257bf4e194c6..05efd1d37942c4abd9c64015e92334e64a2e682d 100644 (file)
@@ -69,7 +69,8 @@ class SALOMEAPP_EXPORT SalomeApp_Application : public LightApp_Application
 public:
   enum { MenuToolsId = 5 };
   enum { DumpStudyId = LightApp_Application::UserID, LoadScriptId, PropertiesId,
-         CatalogGenId, RegDisplayId, SaveGUIStateId, FileLoadId, UserID };
+         CatalogGenId, RegDisplayId, SaveGUIStateId, FileLoadId, UserID,
+         SimanCheckInId, SimanLocalCheckInId };
 
   typedef enum { WT_NoteBook = LightApp_Application::WT_User } WindowTypes;
 
@@ -123,6 +124,7 @@ public slots:
   virtual void                        onNewWithScript();
   virtual bool                        onLoadDoc( const QString& );
   virtual void                        onCloseDoc( bool ask = true);
+  virtual void                        onLoadDocMessage(const QString&);
 
   virtual void                        onExit();
   virtual void                        onCopy();
@@ -133,6 +135,9 @@ public slots:
                                                      const QString& theStudyName,
                                                      bool theIsStudySaved );
 
+  virtual void                        onCheckIn();
+  virtual void                        onLocalCheckIn();
+
 protected slots:
   void                                onStudyCreated( SUIT_Study* );
   void                                onStudySaved( SUIT_Study* );
@@ -191,6 +196,7 @@ private:
 private:
   SalomeApp_NoteBook*                 myNoteBook;
   QMap<QString, QAction*>             myExtActions; // Map <AttributeUserID, QAction>
+  bool                                myIsSiman; // application corresponds to the siman study flag
 
 signals:
   void                                dumpedStudyClosed( const QString& theDumpScript, 
index 285ff023b191775d8f9ac08a2940213d36c48d63..ee092821e1cdffc2a4642d0243ed6d50917e00ff 100644 (file)
@@ -344,6 +344,30 @@ Do you want to reload it ?</translation>
         <source>ACTIVATE_MODULE_OP_SCRIPT</source>
         <translation>Load &amp;Script...</translation>
     </message>
+    <message>
+        <source>TOT_SIMAN_CHECK_IN</source>
+        <translation>Check In</translation>
+    </message>
+    <message>
+        <source>MEN_SIMAN_CHECK_IN</source>
+        <translation>Check In</translation>
+    </message>
+    <message>
+        <source>PRP_SIMAN_CHECK_IN</source>
+        <translation>Check In</translation>
+    </message>
+    <message>
+        <source>TOT_SIMAN_LOCAL_CHECK_IN</source>
+        <translation>Check In for module</translation>
+    </message>
+    <message>
+        <source>MEN_SIMAN_LOCAL_CHECK_IN</source>
+        <translation>Check In for module</translation>
+    </message>
+    <message>
+        <source>PRP_SIMAN_LOCAL_CHECK_IN</source>
+        <translation>Check In for module</translation>
+    </message>
 </context>
 <context>
     <name>SalomeApp_StudyPropertiesDlg</name>
index fdfb53ee305ab31ca04d18771685a0d9202f6fb3..e8cf54aebeaa071fb62ee57ed0ef9856c0180bf4 100755 (executable)
@@ -344,6 +344,31 @@ Voulez-vous le recharger ?</translation>
         <source>ACTIVATE_MODULE_OP_SCRIPT</source>
         <translation>Charger un &amp;script...</translation>
     </message>
+    <message>
+        <source>TOT_SIMAN_CHECK_IN</source>
+        <translation>Check In</translation>
+    </message>
+    <message>
+        <source>MEN_SIMAN_CHECK_IN</source>
+        <translation>Check In</translation>
+    </message>
+    <message>
+        <source>PRP_SIMAN_CHECK_IN</source>
+        <translation>Check In</translation>
+    </message>
+    <message>
+      <source>TOT_SIMAN_LOCAL_CHECK_IN</source>
+      <translation>Check In pour la module</translation>
+    </message>
+    <message>
+      <source>MEN_SIMAN_LOCAL_CHECK_IN</source>
+      <translation>Check In pour la module</translation>
+    </message>
+    <message>
+      <source>PRP_SIMAN_LOCAL_CHECK_IN</source>
+      <translation>Check In pour la module"</translation>
+    </message>
+                                                                
 </context>
 <context>
     <name>SalomeApp_StudyPropertiesDlg</name>
index a075efc134e5b70387b5f1878a12233d0ef1598d..076352e79fe67608d1c2e15001abea9c340b9191 100755 (executable)
@@ -303,8 +303,17 @@ void SALOME_Session_i::emitMessage(const char* theMessage)
       if ( SUIT_Session::session()->activeApplication()->desktop() ) {
         ProcessVoidEvent( new TEvent(theMessage) );
       }
+      else {
+       MESSAGE("try to emit message '"<<theMessage<<"' but there is no desktop");
+      }
+    }
+    else {
+      MESSAGE("try to emit message '"<<theMessage<<"' but there is no application");
     }
   }
+  else {
+    MESSAGE("try to emit message '"<<theMessage<<"' but there is no session");
+  }
 }
 
 void SALOME_Session_i::emitMessageOneWay(const char* theMessage)