]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Multi-study support removal: finalization
authorvsr <vsr@opencascade.com>
Thu, 2 Oct 2014 08:07:36 +0000 (12:07 +0400)
committervsr <vsr@opencascade.com>
Thu, 2 Oct 2014 08:07:36 +0000 (12:07 +0400)
- additional change: show "Save & Disconnect" & "Disconnect w/o saving" buttons in the "Close active study" dialog box when exiting application

src/LightApp/resources/LightApp_msg_en.ts
src/SUIT/SUIT_MessageBox.cxx
src/SUIT/SUIT_MessageBox.h
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/SalomeApp/resources/SalomeApp_msg_ja.ts

index 7922e42b94b788b9d60129350bd5130bcedfe9b8..9272921f6259aeb3519a35abf1030784a7ce9512 100644 (file)
@@ -64,7 +64,7 @@ CEA/DEN, CEDRAT, EDF R&amp;D, LEG, PRINCIPIA R&amp;D, BUREAU VERITAS</translatio
     </message>
     <message>
         <source>APPCLOSE_CLOSE</source>
-        <translation>&amp;Close w/o saving</translation>
+        <translation>Close &amp;w/o saving</translation>
     </message>
     <message>
         <source>APPCLOSE_CANCEL</source>
index bbc7701d718dfd372b7827a1e643aacd5e1f637e..77e244fd6a0daf3ea8706737acdf6483b2696d54 100755 (executable)
@@ -762,6 +762,150 @@ int SUIT_MessageBox::question( QWidget* parent, const QString& title, const QStr
                      defaultButton, escapeButton );
 }
 
+/*!
+  \brief Show critical message box with arbitrary number of user-specified
+         buttons.
+
+  List of buttons to be shown is specified via \a buttons parameter.
+  
+  The function returns clicked button id. The identifiers for the buttons
+  are assigned automatically. The first button is identified as 0, the
+  second one as 1, etc.
+
+  The \a defaultButton parameter allows to specify the button which is assigned
+  for the \c Return or \c Enter key. Similarly, \a escapeButton parameter
+  allows specifing the button which is assigned for \c Escape key.
+  If these parameters are not specified (-1 by default), the first button
+  is set as default button and the last one is defined as escape button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \param buttons list of buttons to be shown
+  \return button used button id
+*/
+int SUIT_MessageBox::critical( QWidget* parent, const QString& title, const QString& text,
+                              const QStringList& buttons,
+                              const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  Q_FOREACH( QString button, buttons )
+    lst.append( ButtonInfo( id++, button ) );
+  return messageBox( SUIT_MessageBox::Critical, parent, title, text, lst,
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show warning message box with arbitrary number of user-specified
+         buttons.
+
+  List of buttons to be shown is specified via \a buttons parameter.
+  
+  The function returns clicked button id. The identifiers for the buttons
+  are assigned automatically. The first button is identified as 0, the
+  second one as 1, etc.
+
+  The \a defaultButton parameter allows to specify the button which is assigned
+  for the \c Return or \c Enter key. Similarly, \a escapeButton parameter
+  allows specifing the button which is assigned for \c Escape key.
+  If these parameters are not specified (-1 by default), the first button
+  is set as default button and the last one is defined as escape button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \param buttons list of buttons to be shown
+  \return button used button id
+*/
+int SUIT_MessageBox::warning( QWidget* parent, const QString& title, const QString& text,
+                             const QStringList& buttons,
+                             const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  Q_FOREACH( QString button, buttons )
+    lst.append( ButtonInfo( id++, button ) );
+  return messageBox( SUIT_MessageBox::Warning, parent, title, text, lst,
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show information message box with arbitrary number of user-specified
+         buttons.
+
+  List of buttons to be shown is specified via \a buttons parameter.
+  
+  The function returns clicked button id. The identifiers for the buttons
+  are assigned automatically. The first button is identified as 0, the
+  second one as 1, etc.
+
+  The \a defaultButton parameter allows to specify the button which is assigned
+  for the \c Return or \c Enter key. Similarly, \a escapeButton parameter
+  allows specifing the button which is assigned for \c Escape key.
+  If these parameters are not specified (-1 by default), the first button
+  is set as default button and the last one is defined as escape button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \param buttons list of buttons to be shown
+  \return button used button id
+*/
+int SUIT_MessageBox::information( QWidget* parent, const QString& title, const QString& text,
+                                 const QStringList& buttons,
+                                 const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  Q_FOREACH( QString button, buttons )
+    lst.append( ButtonInfo( id++, button ) );
+  return messageBox( SUIT_MessageBox::Information, parent, title, text, lst,
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show question message box with arbitrary number of user-specified
+         buttons.
+
+  List of buttons to be shown is specified via \a buttons parameter.
+  
+  The function returns clicked button id. The identifiers for the buttons
+  are assigned automatically. The first button is identified as 0, the
+  second one as 1, etc.
+
+  The \a defaultButton parameter allows to specify the button which is assigned
+  for the \c Return or \c Enter key. Similarly, \a escapeButton parameter
+  allows specifing the button which is assigned for \c Escape key.
+  If these parameters are not specified (-1 by default), the first button
+  is set as default button and the last one is defined as escape button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \param buttons list of buttons to be shown
+  \return button used button id
+*/
+int SUIT_MessageBox::question( QWidget* parent, const QString& title, const QString& text,
+                              const QStringList& buttons,
+                              const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  Q_FOREACH( QString button, buttons )
+    lst.append( ButtonInfo( id++, button ) );
+  return messageBox( SUIT_MessageBox::Question, parent, title, text, lst,
+                     defaultButton, escapeButton );
+}
+
 /*!
   \brief Show critical message box with arbitrary number of user-specified
          buttons.
index d52308833ed25b0cf21c8521a1dc47fc6a8c99f2..29bfc10f8edafa966b619cfbed4e86b61ac543d2 100755 (executable)
@@ -110,6 +110,19 @@ public:
                                   const int defaultButton = -1, const int escapeButton = -1 );
   
   // message boxes with arbitrary number of buttons
+  static int            critical( QWidget* parent, const QString& title, const QString& text,
+                                  const QStringList& buttons,
+                                  const int defaultButton = -1, const int escapeButton = -1 );
+  static int            warning( QWidget* parent, const QString& title, const QString& text,
+                                const QStringList& buttons,
+                                 const int defaultButton = -1, const int escapeButton = -1 );
+  static int            information( QWidget* parent, const QString& title, const QString& text,
+                                    const QStringList& buttons,
+                                     const int defaultButton = -1, const int escapeButton = -1 );
+  static int            question( QWidget* parent, const QString& title, const QString& text,
+                                  const QStringList& buttons,
+                                  const int defaultButton = -1, const int escapeButton = -1 );
+
   static int            critical( QWidget* parent, const QString& title, const QString& text, 
                                   const int defaultButton, const int escapeButton, 
                                   char*, ... );
index 32d2f1d5d62271084f49fc87de8916c4080136b9..d8a18ca83015b944200ff88255fd6c762bcf6716 100644 (file)
@@ -162,9 +162,10 @@ extern "C" SALOMEAPP_EXPORT SUIT_Application* createApplication()
 
 /*!Constructor.*/
 SalomeApp_Application::SalomeApp_Application()
-  : LightApp_Application()
+  : LightApp_Application(), 
+    myIsSiman( false ),
+    myIsCloseFromExit( false )
 {
-  myIsSiman = false; // default
 }
 
 /*!Destructor.
@@ -401,8 +402,11 @@ void SalomeApp_Application::onExit()
     killServers = dlg.isServersShutdown();
   }
 
-  if ( result )
+  if ( result ) {
+    if ( !killServers ) myIsCloseFromExit = true;
     SUIT_Session::session()->closeSession( SUIT_Session::ASK, killServers );
+    myIsCloseFromExit = false;
+  }
 }
 
 /*!SLOT. Load document.*/
@@ -1193,20 +1197,25 @@ void SalomeApp_Application::updateDesktopTitle() {
 
 int SalomeApp_Application::closeChoice( const QString& docName )
 {
-  int answer = SUIT_MessageBox::question( desktop(), tr( "APPCLOSE_CAPTION" ), tr( "APPCLOSE_DESCRIPTION" ),
-                                          tr ("APPCLOSE_SAVE"), tr ("APPCLOSE_CLOSE"),
-                                         //tr ("APPCLOSE_UNLOAD"), 
-                                         tr ("APPCLOSE_CANCEL"), 0 );
-
-  int res = CloseCancel;
-  if ( answer == 0 )
-    res = CloseSave;
-  else if ( answer == 1 )
-    res = CloseDiscard;
-  // else if ( answer == 2 )
-  //   res = CloseUnload;
+  QStringList buttons;
+  QMap<int, int> choices;
+  int idx = 0;
+  buttons << tr ("APPCLOSE_SAVE");                // Save & Close
+  choices.insert( idx++, CloseSave );             // ...
+  buttons << tr ("APPCLOSE_CLOSE");               // Close w/o saving
+  choices.insert( idx++, CloseDiscard );          // ...
+  if ( myIsCloseFromExit ) {
+    buttons << tr ("APPCLOSE_UNLOAD_SAVE");       // Save & Disconnect
+    choices.insert( idx++, CloseDisconnectSave );     // ...
+    buttons << tr ("APPCLOSE_UNLOAD");            // Disconnect
+    choices.insert( idx++, CloseDisconnect );         // ...
+  }
+  buttons << tr ("APPCLOSE_CANCEL");              // Cancel
+  choices.insert( idx++, CloseCancel );           // ...
 
-  return res;
+  int answer = SUIT_MessageBox::question( desktop(), tr( "APPCLOSE_CAPTION" ),
+                                         tr( "APPCLOSE_DESCRIPTION" ), buttons, 0 );
+  return choices[answer];
 }
 
 bool SalomeApp_Application::closeAction( const int choice, bool& closePermanently )
@@ -1222,14 +1231,19 @@ bool SalomeApp_Application::closeAction( const int choice, bool& closePermanentl
     break;
   case CloseDiscard:
     break;
-  case CloseUnload:
+  case CloseDisconnectSave:
+    if ( activeStudy()->isSaved() )
+      onSaveDoc();
+    else if ( !onSaveAsDoc() )
+      res = false;
+  case CloseDisconnect:
+    closeActiveDoc( false );
     closePermanently = false;
     break;
   case CloseCancel:
   default:
     res = false;
   }
-
   return res;
 }
 
index d54a6b8c2fa72e00f2adfa0c5a6d29fdc312ad26..b9833a1dcdb797d96bd2f549adbfcf19db157cb6 100644 (file)
@@ -79,7 +79,7 @@ public:
 
 protected:
   enum { OpenRefresh = LightApp_Application::OpenReload + 1 };
-  enum { CloseUnload = LightApp_Application::CloseDiscard + 1 };
+  enum { CloseDisconnectSave = LightApp_Application::CloseDiscard + 1, CloseDisconnect };
   enum { LoadStudyId = LightApp_Application::OpenStudyId + 1, NewAndScriptId };
 
 public:
@@ -192,10 +192,11 @@ private:
 
 private:
 #ifndef DISABLE_PYCONSOLE
-  QPointer<SalomeApp_NoteBook>        myNoteBook;
+  QPointer<SalomeApp_NoteBook>        myNoteBook;        // Notebook instance
 #endif
-  QMap<QString, QAction*>             myExtActions; // Map <AttributeUserID, QAction>
-  bool                                myIsSiman; // application corresponds to the siman study flag
+  QMap<QString, QAction*>             myExtActions;      // Map <AttributeUserID, QAction>
+  bool                                myIsSiman;         // application corresponds to the siman study flag
+  bool                                myIsCloseFromExit; // "Close from Exit" flag
 
 signals:
   void                                dumpedStudyClosed( const QString& theDumpScript, 
index d73f741055925c37515577c0c1049f7bfb3c996f..8eaa1aaa7a90abe6b265c8b1dae1bf49ebea6c3d 100644 (file)
@@ -143,7 +143,11 @@ Launch a new session or close the study.</translation>
     </message>
     <message>
         <source>APPCLOSE_UNLOAD</source>
-        <translation>&amp;Unload</translation>
+        <translation>&amp;Disconnect w/o saving</translation>
+    </message>
+    <message>
+        <source>APPCLOSE_UNLOAD_SAVE</source>
+        <translation>S&amp;ave &amp;&amp; Disconnect</translation>
     </message>
     <message>
         <source>MEN_WINDOWS_NEW</source>
index dade025d22ebad47ece557f4145f44a636d422c7..7aa34a06be1f24d515ce6e7f7027c49f540fcf55 100755 (executable)
@@ -131,7 +131,11 @@ Lancez une nouvelle session ou fermez l&apos;étude en cours.</translation>
     </message>
     <message>
         <source>APPCLOSE_UNLOAD</source>
-        <translation>&amp;Déconnecter</translation>
+        <translation>&amp;Déconnecter sans sauvegarder</translation>
+    </message>
+    <message>
+        <source>APPCLOSE_UNLOAD_SAVE</source>
+        <translation>Sauvegarder &amp;&amp; D&amp;éconnecter</translation>
     </message>
     <message>
         <source>MEN_WINDOWS_NEW</source>
index c11f45b104310baf8b150ecada9b475687250e0c..3c4804f36b1383a7aa3b8f108d2478473560e038 100644 (file)
       <translation>すべてのファイル (*. *)</translation>
     </message>
     <message>
-      <source>APPCLOSE_UNLOAD</source>
-      <translation>アンロード(&amp;U)</translation>
+        <source>APPCLOSE_UNLOAD</source>
+        <translation type="unfinished">&amp;Disconnect w/o saving</translation>
+    </message>
+    <message>
+        <source>APPCLOSE_UNLOAD_SAVE</source>
+        <translation type="unfinished">S&amp;ave &amp;&amp; Disconnect</translation>
     </message>
     <message>
       <source>MEN_WINDOWS_NEW</source>