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.
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*, ... );
/*!Constructor.*/
SalomeApp_Application::SalomeApp_Application()
- : LightApp_Application()
+ : LightApp_Application(),
+ myIsSiman( false ),
+ myIsCloseFromExit( false )
{
- myIsSiman = false; // default
}
/*!Destructor.
killServers = dlg.isServersShutdown();
}
- if ( result )
+ if ( result ) {
+ if ( !killServers ) myIsCloseFromExit = true;
SUIT_Session::session()->closeSession( SUIT_Session::ASK, killServers );
+ myIsCloseFromExit = false;
+ }
}
/*!SLOT. Load document.*/
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 )
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;
}