Salome HOME
Updated copyright comment
[modules/gui.git] / src / SUIT / SUIT_MessageBox.cxx
old mode 100755 (executable)
new mode 100644 (file)
index e80ff74..82568fa
-// Copyright (C) 2005  OPEN CASCADE, CEA/DEN, EDF R&D, PRINCIPIA R&D
-// 
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
+//
+// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
-// License as published by the Free Software Foundation; either 
-// version 2.1 of the License.
-// 
-// This library is distributed in the hope that it will be useful 
-// but WITHOUT ANY WARRANTY; without even the implied warranty of 
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 // Lesser General Public License for more details.
 //
-// You should have received a copy of the GNU Lesser General Public  
-// License along with this library; if not, write to the Free Software 
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
+#include "SUIT_MessageBox.h"
+
+#include "SUIT_OverrideCursor.h"
+
+#include <QMessageBox>
+#include <QPushButton>
+#include <QApplication>
+#include <QString>
+
+#include <stdarg.h>
+
 /*!
-  \class:   SUIT_MessageBox
-  Message dialog box for SUIT-based application
-  Module:  SUIT
-  Created: UI team, 02.10.00
+  \class SUIT_MessageBox
+  \brief Message dialog box for SUIT-based application
+
+  The class provides a modal dialog with a short message, an icon, 
+  and buttons laid out depending on the current style.
+  
+  Message boxes are used to provide informative messages and to ask 
+  simple questions.
+
+  The easiest way to pop up a message box is to call one of the static
+  functions information(), question(), critical(), and warning().
+
+  The class provides the static functions to show message boxes with
+  standard buttons (like \c Ok, \c Cancel, \c Apply, \c Close, \c Yes, 
+  \c No, \c Abort, \c Retry, etc). These methods accept ORed buttons
+  flags as one of the parameters. The buttons layouting type and order
+  is system-dependant and defined by the current style. In addition,
+  these methods allow to define default button (where input focus is
+  set by default and which is clicked when user presses \c Enter key).
+
+  Another set of static functions allows to show message boxes with 
+  up to four user-defined buttons. It is possible to define default 
+  and escape buttons using additional parameters.
+
+  And finally, the last group of static functions allow displaying
+  the message boxes with an arbitrary number of buttons.
+
+  For example:
+  \code
+  // show question message box with two standard buttons
+  int result = SUIT_MessageBox::question(desktop(), "Error",
+                                         "File already exists? Overwrite?",
+                                         SUIT_MessageBox::Yes | SUIT_MessageBox::No,
+                                         SUIT_MessageBox::No );
+  if ( result == SUIT_MessageBox::Yes )
+    overwriteFileFunction();
+
+  // show critical message box with user-defined buttons
+  // default is second button and escape is third button
+  int result = SUIT_MessageBox::critical(desktop(), "Hazard!",
+                                         "The situation is critical! What to do?",
+                                         "Hide", "Run Away", "Stand still", 1, 2);
+  switch ( result )
+  {
+  case 0:
+    hideMyself(); break;
+  case 1:
+    runAwayFromHere(); break;
+  case 2:
+    sitDownAndPray(); break;
+  default:
+    break;
+  }
+
+  // show message box with 6 buttons
+  // both default and escape buttons are set to first button ("Zero")
+  int result = SUIT_MessageBox::information(desktop(), "Question",
+                                            "Select your favourite number",
+                                            0, 0,
+                                            "Zero", "One", "Two", "Three", "Four", "Five");
+  useMyFavouriteNumberSomewhere( result );
+  \endcode
 */
 
-#include "SUIT_MessageBox.h"
-#include "SUIT_OverrideCursor.h"
+/*!
+  \brief Constructor.
+  \param parent parent widget
+*/
+SUIT_MessageBox::SUIT_MessageBox( QWidget* parent )
+: QMessageBox( parent )
+{
+}
 
-#include <qmessagebox.h>
-#include <qapplication.h>
+/*!
+  \brief Constructor.
+  \param icon message box icon (QMessageBox::Icon)
+  \param title message box title
+  \param text message box text
+  \param buttons ORed message box standard buttons (QMessageBox::StandardButton)
+  \param parent parent widget
+  \param f window flags
+*/
+SUIT_MessageBox::SUIT_MessageBox( Icon icon, const QString& title, const QString& text,
+                                  StandardButtons buttons, QWidget* parent, Qt::WindowFlags f )
+: QMessageBox( icon, title, text, buttons, parent, f )
+{
+}
 
 /*!
-    Shows info message box with one button [ static ]
+  \brief Destructor.
 */
-int SUIT_MessageBox::info1( QWidget* parent, 
-                           const QString& caption, 
-                           const QString& text,
-                           const QString& textButton0 )
+SUIT_MessageBox::~SUIT_MessageBox()
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
-  int ret = QMessageBox::information( parent, caption, text, textButton0,
-                                     QString::null, QString::null, 0, 0 );
-  qApp->processEvents();
-  return ret;
 }
 
 /*!
-    Shows warning message box with one button [ static ]
+  \brief Get the standard button text.
+  \param btn standard button id
+  \return button text
 */
-int SUIT_MessageBox::warn1( QWidget* parent, 
-                           const QString& caption, 
-                           const QString& text,
-                           const QString& textButton0 )
+QString SUIT_MessageBox::buttonText( StandardButton btn ) const
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
-  int ret = QMessageBox::warning( parent, caption, text, textButton0,
-                                 QString::null, QString::null, 0, 0 );
-  qApp->processEvents();
-  return ret;
+  QString res;
+  QAbstractButton* b = button( btn );
+  if ( b )
+    res = b->text();
+  return res;
 }
 
 /*!
-    Shows error message box with one button [ static ]
+  \brief Set the standard button text.
+  \param btn standard button id
+  \param text new button text
 */
-int SUIT_MessageBox::error1( QWidget* parent, 
-                            const QString& caption,
-                            const QString& text,
-                            const QString& textButton0 )
+void SUIT_MessageBox::setButtonText( StandardButton btn, const QString& text )
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
-  int ret = QMessageBox::critical( parent, caption, text, textButton0,
-                                  QString::null, QString::null, 0, 0 );
-  qApp->processEvents();
-  return ret;
+  QAbstractButton* b = button( btn );
+  if ( b )
+    b->setText( text );
 }
 
 /*!
-    Shows question message box with one button [ static ]
+  \brief Show critical message box with specified standard buttons.
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param buttons ORed message box buttons (QMessageBox::StandardButton)
+  \param defaultButton default button (QMessageBox::StandardButton)
+  \return button id clicked by the user (QMessageBox::StandardButton)
 */
-int SUIT_MessageBox::question1( QWidget* parent, 
-                               const QString& caption,
-                               const QString& text, 
-                               const QString& textButton0 )
+SUIT_MessageBox::StandardButton SUIT_MessageBox::critical( QWidget* parent, const QString& title, const QString& text,
+                                                           StandardButtons buttons, StandardButton defaultButton )
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
-  int ret = QMessageBox::question( parent, caption, text, textButton0,
-                                  QString::null, QString::null, 0, 0 );
-  qApp->processEvents();
-  return ret;
+  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
+  return QMessageBox::critical( parent, title, text, buttons, defaultButton );
 }
 
 /*!
-    Shows info message box with two buttons.
-    Returns id of the pressed button or -1 if escaped [ static ]
+  \brief Show warning message box with specified standard buttons.
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param buttons ORed message box buttons (QMessageBox::StandardButton)
+  \param defaultButton default button (QMessageBox::StandardButton)
+  \return button id clicked by the user (QMessageBox::StandardButton)
 */
-int SUIT_MessageBox::info2( QWidget* parent, 
-                           const QString& caption,
-                           const QString& text, 
-                           const QString& textButton0,
-                           const QString& textButton1, 
-                           int idButton0, int idButton1, int idDefault )
+SUIT_MessageBox::StandardButton SUIT_MessageBox::warning( QWidget* parent, const QString& title, const QString& text,
+                                                          SUIT_MessageBox::StandardButtons buttons, StandardButton defaultButton )
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
-  if ( idDefault == idButton0 )
-    idDefault = 0;
-  else if ( idDefault == idButton1 )
-    idDefault = 1;
-  else
-    idDefault = 0;
-  
-  int ret = QMessageBox::information( parent, caption, text, textButton0,
-                                     textButton1, QString::null, idDefault );
-  qApp->processEvents();
-  return ( ret == 0 ? idButton0 : idButton1 );
+  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
+  return QMessageBox::warning( parent, title, text, buttons, defaultButton );
 }
 
 /*!
-  Shows warning message box with two buttons.
-    Returns id of the pressed button or -1 if escaped [ static ]
+  \brief Show information message box with specified standard buttons.
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param buttons ORed message box buttons (QMessageBox::StandardButton)
+  \param defaultButton default button (QMessageBox::StandardButton)
+  \return button id clicked by the user (QMessageBox::StandardButton)
 */
-int SUIT_MessageBox::warn2( QWidget* parent, 
-                           const QString& caption,
-                           const QString& text,
-                           const QString& textButton0, 
-                           const QString& textButton1,
-                           int idButton0, int idButton1, int idDefault )
+SUIT_MessageBox::StandardButton SUIT_MessageBox::information( QWidget* parent, const QString& title, const QString& text,
+                                                              StandardButtons buttons, StandardButton defaultButton )
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
-  
-  if ( idDefault == idButton0 )
-    idDefault = 0;
-  else if ( idDefault == idButton1 )
-    idDefault = 1;
-  else
-    idDefault = 0;
-  
-  int ret = QMessageBox::warning( parent, caption, text, textButton0,
-                                 textButton1, QString::null, idDefault );
-  qApp->processEvents();
-  return ( ret == 0 ? idButton0 : idButton1 );
+  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
+  return QMessageBox::information( parent, title, text, buttons, defaultButton );
 }
 
 /*!
-    Shows error message box with two buttons
-    Returns id of the pressed button or -1 if escaped [ static ]
+  \brief Show question message box with specified standard buttons.
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param buttons ORed message box buttons (QMessageBox::StandardButton)
+  \param defaultButton default button (QMessageBox::StandardButton)
+  \return button id clicked by the user (QMessageBox::StandardButton)
 */
-int SUIT_MessageBox::error2( QWidget* parent, 
-                            const QString& caption, 
-                            const QString& text,
-                            const QString& textButton0, 
-                            const QString& textButton1,
-                            int idButton0, int idButton1, int idDefault )
+SUIT_MessageBox::StandardButton SUIT_MessageBox::question( QWidget* parent, const QString& title, const QString& text,
+                                                           StandardButtons buttons, StandardButton defaultButton )
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
-  
-  if ( idDefault == idButton0 )
-    idDefault = 0;
-  else if ( idDefault == idButton1 )
-    idDefault = 1;
-  else
-    idDefault = 0;
-  
-  int ret = QMessageBox::critical( parent, caption, text, textButton0,
-                                  textButton1, QString::null, idDefault );
-  qApp->processEvents();
-  return ( ret == 0 ? idButton0 : idButton1 );
+  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
+  return QMessageBox::question( parent, title, text, buttons, defaultButton );
 }
 
 /*!
-    Shows question message box with two buttons
-    Returns id of the pressed button or -1 if escaped [ static ]
+  \brief Show critical message box with one custom button.
+
+  Specified button becomes "default" button and "escape" button, i.e.
+  pressing \c Return or \c Enter and \c Escape keys is equivalent to clicking
+  this button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param button button text
+  \return button id clicked by the user (QMessageBox::StandardButton)
 */
-int SUIT_MessageBox::question2( QWidget* parent, 
-                               const QString& caption, 
-                               const QString& text,
-                               const QString& textButton0, 
-                               const QString& textButton1,
-                               int idButton0, int idButton1, int idDefault )
+int SUIT_MessageBox::critical( QWidget* parent, const QString& title, const QString& text,
+                               const QString& button )
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
-  
-  if ( idDefault == idButton0 )
-    idDefault = 0;
-  else if ( idDefault == idButton1 )
-    idDefault = 1;
-  else
-    idDefault = 0;
+  ButtonInfos lst;
+  lst.append( ButtonInfo( 0, button ) );
+  return messageBox( SUIT_MessageBox::Critical, parent, title, text, lst );
+}
+
+/*!
+  \brief Show warning message box with one custom button.
   
-  int ret = QMessageBox::question( parent, caption, text, textButton0,
-                                  textButton1, QString::null, idDefault );
-  qApp->processEvents();
-  return ( ret == 0 ? idButton0 : idButton1 );
+  Specified button becomes "default" button and "escape" button, i.e.
+  pressing \c Return or \c Enter and \c Escape keys is equivalent to clicking
+  this button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param button button text
+  \return button id clicked by the user (QMessageBox::StandardButton)
+*/
+int SUIT_MessageBox::warning( QWidget* parent, const QString& title, const QString& text,
+                              const QString& button )
+{
+  ButtonInfos lst;
+  lst.append( ButtonInfo( 0, button ) );
+  return messageBox( SUIT_MessageBox::Warning, parent, title, text, lst );
 }
 
 /*!
-    Shows info message box with three buttons.
-    Returns id of the pressed button or -1 if escaped [ static ]
+  \brief Show information message box with one custom button.
+
+  Specified button becomes "default" button and "escape" button, i.e.
+  pressing \c Return or \c Enter and \c Escape keys is equivalent to clicking
+  this button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param button button text
+  \return button id clicked by the user (QMessageBox::StandardButton)
 */
-int SUIT_MessageBox::info3( QWidget* parent, 
-                           const QString& caption,
-                           const QString& text,
-                           const QString& textButton0, 
-                           const QString& textButton1,
-                           const QString& textButton2, 
-                           int idButton0, int idButton1,
-                           int idButton2, int idDefault )
+int SUIT_MessageBox::information( QWidget* parent, const QString& title, const QString& text,
+                                  const QString& button )
 {
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+  ButtonInfos lst;
+  lst.append( ButtonInfo( 0, button ) );
+  return messageBox( SUIT_MessageBox::Information, parent, title, text, lst );
+}
+
+/*!
+  \brief Show question message box with one custom button.
+
+  \warning This function does not make a lot of sense because it provides
+  message box with only one  button, i.e. it is impossible to give several
+  answers for the question (at least 'yes'/'no').
+  This function is implemented only for completeness.
+
+  Specified button becomes "default" button and "escape" button, i.e.
+  pressing \c Return or \c Enter and \c Escape keys is equivalent to clicking
+  this button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param button button text
+  \return button id clicked by the user (QMessageBox::StandardButton)
+*/
+int SUIT_MessageBox::question( QWidget* parent, const QString& title, const QString& text,
+                               const QString& button )
+{
+  ButtonInfos lst;
+  lst.append( ButtonInfo( 0, button ) );
+  return messageBox( SUIT_MessageBox::Question, parent, title, text, lst );
+}
+
+/*!
+  \brief Show critical message box with two custom buttons.
+
+  Parameters \a button1 and \a button2 specify the buttons text.
+  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.
+
+  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 second one is defined as escape button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param button1 first button text
+  \param button2 second button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::critical( QWidget* parent, const QString& title, const QString& text,
+                               const QString& button1, const QString& button2,
+                               const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  return messageBox( SUIT_MessageBox::Critical, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show warning message box with two custom buttons.
+
+  Parameters \a button1 and \a button2 specify the buttons text.
+  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.
+
+  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 second one is defined as escape button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param button1 first button text
+  \param button2 second button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::warning( QWidget* parent, const QString& title, const QString& text,
+                              const QString& button1, const QString& button2,
+                              const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  return messageBox( SUIT_MessageBox::Warning, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show information message box with two custom buttons.
+
+  Parameters \a button1 and \a button2 specify the buttons text.
+  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.
+
+  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 second one is defined as escape button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param button1 first button text
+  \param button2 second button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::information( QWidget* parent, const QString& title, const QString& text,
+                                  const QString& button1, const QString& button2,
+                                  const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  return messageBox( SUIT_MessageBox::Information, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show question message box with two custom buttons.
+
+  Parameters \a button1 and \a button2 specify the buttons text.
+  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.
+
+  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 second one is defined as escape button.
+
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param button1 first button text
+  \param button2 second button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::question( QWidget* parent, const QString& title, const QString& text,
+                               const QString& button1, const QString& button2,
+                               const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  return messageBox( SUIT_MessageBox::Question, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show critical message box with three custom buttons.
+
+  Parameters \a button1, \a button2 and \a button3 specify the buttons text.
+  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 button1 first button text
+  \param button2 second button text
+  \param button3 third button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::critical( QWidget* parent, const QString& title, const QString& text,
+                               const QString& button1, const QString& button2, 
+                               const QString& button3,
+                               const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  lst.append( ButtonInfo( id++, button3 ) );
+  return messageBox( SUIT_MessageBox::Critical, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show warning message box with three custom buttons.
+
+  Parameters \a button1, \a button2 and \a button3 specify the buttons text.
+  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 button1 first button text
+  \param button2 second button text
+  \param button3 third button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::warning( QWidget* parent, const QString& title, const QString& text,
+                              const QString& button1, const QString& button2,
+                              const QString& button3,
+                              const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  lst.append( ButtonInfo( id++, button3 ) );
+  return messageBox( SUIT_MessageBox::Warning, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show information message box with three custom buttons.
+
+  Parameters \a button1, \a button2 and \a button3 specify the buttons text.
+  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 button1 first button text
+  \param button2 second button text
+  \param button3 third button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::information( QWidget* parent, const QString& title, const QString& text,
+                                  const QString& button1, const QString& button2,
+                                  const QString& button3,
+                                  const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  lst.append( ButtonInfo( id++, button3 ) );
+  return messageBox( SUIT_MessageBox::Information, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show question message box with three custom buttons.
+
+  Parameters \a button1, \a button2 and \a button3 specify the buttons text.
+  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 button1 first button text
+  \param button2 second button text
+  \param button3 third button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::question( QWidget* parent, const QString& title, const QString& text,
+                               const QString& button1, const QString& button2,
+                               const QString& button3,
+                               const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  lst.append( ButtonInfo( id++, button3 ) );
+  return messageBox( SUIT_MessageBox::Question, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show critical message box with four custom buttons.
+
+  Parameters \a button1, \a button2, \a button3 and \a button4 specify 
+  the buttons text.
+  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 button1 first button text
+  \param button2 second button text
+  \param button3 third button text
+  \param button4 fourth button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::critical( QWidget* parent, const QString& title, const QString& text,
+                               const QString& button1, const QString& button2, 
+                               const QString& button3, const QString& button4,
+                               const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  lst.append( ButtonInfo( id++, button3 ) );
+  lst.append( ButtonInfo( id++, button4 ) );
+  return messageBox( SUIT_MessageBox::Critical, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show warning message box with four custom buttons.
+
+  Parameters \a button1, \a button2, \a button3 and \a button4 specify 
+  the buttons text.
+  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 button1 first button text
+  \param button2 second button text
+  \param button3 third button text
+  \param button4 fourth button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::warning( QWidget* parent, const QString& title, const QString& text,
+                              const QString& button1, const QString& button2, 
+                              const QString& button3, const QString& button4,
+                              const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  lst.append( ButtonInfo( id++, button3 ) );
+  lst.append( ButtonInfo( id++, button4 ) );
+  return messageBox( SUIT_MessageBox::Warning, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show information message box with four custom buttons.
+
+  Parameters \a button1, \a button2, \a button3 and \a button4 specify 
+  the buttons text.
+  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 button1 first button text
+  \param button2 second button text
+  \param button3 third button text
+  \param button4 fourth button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::information( QWidget* parent, const QString& title, const QString& text,
+                                  const QString& button1, const QString& button2, 
+                                  const QString& button3, const QString& button4,
+                                  const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  lst.append( ButtonInfo( id++, button3 ) );
+  lst.append( ButtonInfo( id++, button4 ) );
+  return messageBox( SUIT_MessageBox::Information, parent, title, text, lst, 
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show question message box with four custom buttons.
+
+  Parameters \a button1, \a button2, \a button3 and \a button4 specify 
+  the buttons text.
+  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 button1 first button text
+  \param button2 second button text
+  \param button3 third button text
+  \param button4 fourth button text
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::question( QWidget* parent, const QString& title, const QString& text,
+                               const QString& button1, const QString& button2, 
+                               const QString& button3, const QString& button4,
+                               const int defaultButton, const int escapeButton )
+{
+  ButtonInfos lst;
+  int id = 0;
+  lst.append( ButtonInfo( id++, button1 ) );
+  lst.append( ButtonInfo( id++, button2 ) );
+  lst.append( ButtonInfo( id++, button3 ) );
+  lst.append( ButtonInfo( id++, button4 ) );
+  return messageBox( SUIT_MessageBox::Question, parent, title, text, lst, 
+                     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.
   
-  if ( idDefault == idButton0 )
-    idDefault = 0;
-  else if ( idDefault == idButton1 )
-    idDefault = 1;
-  else if ( idDefault == idButton2 )
-    idDefault = 2;
-  else
-    idDefault = 0;
+  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.
   
-  int ret = QMessageBox::information( parent, caption, text, textButton0,
-                                     textButton1, textButton2, idDefault );
-  qApp->processEvents();
-  switch ( ret )
-    {
-    case 0:
-      return idButton0;
-    case 1:
-      return idButton1;
-    case 2:
-      return idButton2;
-    }
-  return -1;
-}
-
-/*!
-    Shows warning message box with three buttons.
-    Returns id of the pressed button or -1 if escaped [ static ]
-*/
-int SUIT_MessageBox::warn3( QWidget* parent, 
-                           const QString& caption, 
-                           const QString& text,
-                           const QString& textButton0, 
-                           const QString& textButton1,
-                           const QString& textButton2, 
-                           int idButton0, int idButton1,
-                           int idButton2, int idDefault )
-{
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+  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.
   
-  if ( idDefault == idButton0 )
-    idDefault = 0;
-  else if ( idDefault == idButton1 )
-    idDefault = 1;
-  else if ( idDefault == idButton2 )
-    idDefault = 2;
-  else
-    idDefault = 0;
+  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.
   
-  int ret = QMessageBox::warning( parent, caption, text, textButton0,
-                                 textButton1, textButton2, idDefault );
-  qApp->processEvents();
-  switch ( ret )
-    {
-    case 0:
-      return idButton0;
-    case 1:
-      return idButton1;
-    case 2:
-      return idButton2;
-    }
-  return -1;
-}
-
-/*!
-    Shows error message box with three buttons.
-    Returns id of the pressed button or -1 if escaped [ static ]
-*/
-int SUIT_MessageBox::error3( QWidget* parent, 
-                            const QString& caption, 
-                            const QString& text,
-                            const QString& textButton0, 
-                            const QString& textButton1,
-                            const QString& textButton2, 
-                            int idButton0, int idButton1,
-                            int idButton2, int idDefault )
-{
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+  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.
+
+  The function accepts arbitrary number of parameters. Each parameter starting
+  from \a btn should be of type const char* to specify the button text.
+  After the last button parameter and additional 0 (zero) value should be 
+  specified.
   
-  if ( idDefault == idButton0 )
-    idDefault = 0;
-  else if ( idDefault == idButton1 )
-    idDefault = 1;
-  else if ( idDefault == idButton2 )
-    idDefault = 2;
-  else
-    idDefault = 0;
+  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 btn first button text
+  \return button used button id
+*/
+int SUIT_MessageBox::critical( QWidget* parent, const QString& title, const QString& text, 
+                               const int defaultButton, const int escapeButton, 
+                               char* btn, ... )
+{
+  va_list args;
+  va_start( args, btn );
+  return messageBox( SUIT_MessageBox::Critical, parent, title, text,
+                     messageList( btn, args ),
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show warning message box with arbitrary number of user-specified
+         buttons.
+
+  The function accepts arbitrary number of parameters. Each parameter starting
+  from \a btn should be of type const char* to specify the button text.
+  After the last button parameter and additional 0 (zero) value should be 
+  specified.
   
-  int ret = QMessageBox::critical( parent, caption, text, textButton0,
-                                  textButton1, textButton2, idDefault );
-  qApp->processEvents();
-  switch ( ret )
-    {
-    case 0:
-      return idButton0;
-    case 1:
-      return idButton1;
-    case 2:
-      return idButton2;
-    }
-  return -1;
-}
-
-/*!
-    Shows question message box with three buttons.
-    Returns id of the pressed button or -1 if escaped [ static ]
-*/
-int SUIT_MessageBox::question3( QWidget* parent, 
-                               const QString& caption, 
-                               const QString& text,
-                               const QString& textButton0, 
-                               const QString& textButton1,
-                               const QString& textButton2, 
-                               int idButton0, int idButton1,
-                               int idButton2, int idDefault )
-{
-  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::arrowCursor );
+  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 btn first button text
+  \return button used button id
+*/
+int SUIT_MessageBox::warning( QWidget* parent, const QString& title, const QString& text, 
+                              const int defaultButton, const int escapeButton, 
+                              char* btn, ... )
+{
+  va_list args;
+  va_start( args, btn );
+  return messageBox( SUIT_MessageBox::Warning, parent, title, text,
+                     messageList( btn, args ),
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show information message box with arbitrary number of user-specified
+         buttons.
+
+  The function accepts arbitrary number of parameters. Each parameter starting
+  from \a btn should be of type const char* to specify the button text.
+  After the last button parameter and additional 0 (zero) value should be 
+  specified.
   
-  if ( idDefault == idButton0 )
-    idDefault = 0;
-  else if ( idDefault == idButton1 )
-    idDefault = 1;
-  else if ( idDefault == idButton2 )
-    idDefault = 2;
-  else
-    idDefault = 0;
+  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 btn first button text
+  \return button used button id
+*/
+int SUIT_MessageBox::information( QWidget* parent, const QString& title, const QString& text, 
+                                  const int defaultButton, const int escapeButton, 
+                                  char* btn, ... )
+{
+  va_list args;
+  va_start( args, btn );
+  return messageBox( SUIT_MessageBox::Information, parent, title, text,
+                     messageList( btn, args ),
+                     defaultButton, escapeButton );
+}
+
+/*!
+  \brief Show question message box with arbitrary number of user-specified
+         buttons.
+
+  The function accepts arbitrary number of parameters. Each parameter starting
+  from \a btn should be of type const char* to specify the button text.
+  After the last button parameter and additional 0 (zero) value should be 
+  specified.
   
-  int ret = QMessageBox::question( parent, caption, text, textButton0,
-                                  textButton1, textButton2, idDefault );
-  qApp->processEvents();
-  switch ( ret )
-    {
-    case 0:
-      return idButton0;
-    case 1:
-      return idButton1;
-    case 2:
-      return idButton2;
-    }
-  return -1;
+  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 btn first button text
+  \return button used button id
+*/
+int SUIT_MessageBox::question( QWidget* parent, const QString& title, const QString& text, 
+                               const int defaultButton, const int escapeButton, 
+                               char* btn, ... )
+{
+  va_list args;
+  va_start( args, btn );
+  return messageBox( SUIT_MessageBox::Question, parent, title, text,
+                     messageList( btn, args ),
+                     defaultButton, escapeButton );
 }
+
+/*!
+  \brief Parse arbitrary arguments list.
+
+  The last parameter in a sequence should be 0 (zero) value.
+
+  \param txt first argument which starts arbitrary sequence
+  \param args arguments list from the stack
+  \return list of buttons infos
+*/
+SUIT_MessageBox::ButtonInfos SUIT_MessageBox::messageList( char* txt, va_list& args )
+{
+  int i = 0;
+  ButtonInfos lst;
+  char* cur = txt;
+  while ( cur )
+  {
+    lst.append( ButtonInfo( i++, cur ) );
+    cur = va_arg( args, char* );
+  }
+
+  va_end( args );
+
+  return lst;
+}
+
+/*!
+  \brief Create and show the message box.
+  \param icon icon type
+  \param parent parent widget
+  \param title message box title
+  \param text message box text
+  \param lst list of buttons infos
+  \param defaultButton default button
+  \param escapeButton escape button
+  \return button used button id
+*/
+int SUIT_MessageBox::messageBox( Icon icon, QWidget* parent, 
+                                 const QString& title, const QString& text, 
+                                 const ButtonInfos& lst, 
+                                 const int defaultButton, 
+                                 const int escapeButton )
+{
+  SUIT_MessageBox msgBox( icon, title, text, NoButton, parent );
+
+  QMap<QAbstractButton*, int> bm;
+  for ( int i = 0; i < lst.count(); i++ )
+  {
+    int btn         = lst[i].id();
+    QString txt     = lst[i].text();
+    ButtonRole role = lst[i].role();
+
+    QPushButton* pb = msgBox.addButton( txt, role );
+    bm.insert( pb, btn );
+
+    if ( ( defaultButton == -1 && i == 0 ) || btn == defaultButton )
+      msgBox.setDefaultButton( pb );
+    if ( ( escapeButton == -1 && i == lst.count() - 1 ) || btn == escapeButton )
+      msgBox.setEscapeButton( pb );
+  }
+    
+  SUIT_OverrideCursor cw( parent ? parent->cursor() : Qt::ArrowCursor );
+
+  int res = msgBox.exec();
+  if ( res != -1 )
+    res = bm[msgBox.clickedButton()];
+
+  QApplication::processEvents();
+
+  return res;
+}
+