]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
*** empty log message ***
authorvsr <vsr@opencascade.com>
Thu, 10 Jan 2008 14:50:01 +0000 (14:50 +0000)
committervsr <vsr@opencascade.com>
Thu, 10 Jan 2008 14:50:01 +0000 (14:50 +0000)
src/LightApp/resources/LightApp.xml
src/Qtx/Qtx.cxx
src/Qtx/QtxSplash.cxx
src/Qtx/QtxSplash.h
src/SalomeApp/resources/SalomeApp.xml

index e3bdc84de7e5f9b6e251afc6882e343ea6f412bc..347903fc775e869cdc9804eb50565867941c4242 100644 (file)
     <!-- Splash screen settings -->
     <parameter name="image"             value="${GUI_ROOT_DIR}/share/salome/resources/gui/icon_about.png" />
     <parameter name="constant_info"     value="%A [ %V ]" />
-    <parameter name="text_colors"       value="#EEEEFF|#555555" />
+    <parameter name="text_colors"       value="#eeeeff|#555555" />
     <parameter name="hide_on_click"     value="no" />
+    <parameter name="show_progress"     value="yes" />
+    <parameter name="show_message"      value="yes" />
+    <parameter name="show_percents"     value="yes" />
     <parameter name="margin"            value="40" />
     <parameter name="progress_width"    value="20" />
     <parameter name="progress_flags"    value="bottom,left_to_right" />
     <parameter name="opacity"           value="0.70" />
     <parameter name="font"              value="Tahoma,12,normal" />
     <parameter name="alignment"         value="top,left" />
-    <parameter name="progress_gradient" value="linear|0.0|0.0|1.0|1.0|reflect|0.0|#747964|1.0|#c5d4e3" />
-    <parameter name="progress_colors"   value="#20408F|#5A81BF|vertical" />
+    <parameter name="progress_colors"   value="#3b3e5d|#d14949|v" />
   </section>
   <section name="resources">
     <!-- Resource directories (resource manager)-->
index 38f85882e8bad9daa1d977d67fe1d8b9e07c23e9..a60911fd7262491824ff138ced39147743728070 100755 (executable)
@@ -1036,9 +1036,9 @@ QString Qtx::gradientToString( const QRadialGradient& gradient )
   data << "radial";
   data << QString::number( gradient.center().x() );
   data << QString::number( gradient.center().y() );
-  data << QString::number( gradient.radius() );
   data << QString::number( gradient.focalPoint().x() );
   data << QString::number( gradient.focalPoint().y() );
+  data << QString::number( gradient.radius() );
   switch( gradient.spread() ) 
   {
   case QGradient::PadSpread:
@@ -1171,9 +1171,9 @@ bool Qtx::stringToRadialGradient( const QString& str, QRadialGradient& gradient
     bool bOk1, bOk2, bOk3, bOk4, bOk5;
     cx = vals[1].toDouble( &bOk1 );
     cy = vals[2].toDouble( &bOk2 );
-    r  = vals[3].toDouble( &bOk3 );
-    fx = vals[4].toDouble( &bOk4 );
-    fy = vals[5].toDouble( &bOk5 );
+    fx = vals[3].toDouble( &bOk4 );
+    fy = vals[4].toDouble( &bOk5 );
+    r  = vals[5].toDouble( &bOk3 );
     if ( bOk1 && bOk2 && bOk3 && bOk4 && bOk5 )
     {
       gradient = QRadialGradient( cx, cy, r, fx, fy );
index 5eed10e5e424d99534c390b627486bed9d498856..044d8fe88c9592a667618219601f618aef34d374 100644 (file)
@@ -70,20 +70,25 @@ private:
 
 /*!
   \class QtxSplash
-  \brief The QtxSplash widget provides a splash screen that can be shown during application startup..
-
-  A splash screen is a widget that is usually displayed when an application is being started. 
-  Splash screens are often used for applications that have long start up times to provide 
-  the user with feedback that the application is loading.
-
-  Only one instance of the QtxSplash widget can be created. To access to the splash screen widget,
-  use static method QtxSplash::splash(), which creates and instance of the QtxSplash widget if
-  necessary and returns pointer to it. You should not destroy yhis instance - it is done automatically
-  after application main window is shown. Just use methods finish() to make splash screen wait untill 
-  main window is shown.
-
-  The splash screen appears in the center of the screen. The most common usage is to show a splash 
-  screen before the main widget is displayed on the screen. 
+  \brief The QtxSplash widget provides a splash screen that can be shown
+  during application startup.
+
+  A splash screen is a widget that is usually displayed when an application
+  is being started. 
+  Splash screens are often used for applications that have long start up times
+  to provide the user with feedback that the application is loading.
+
+  Only one instance of the QtxSplash widget can be created. To access the splash
+  screen widget, use static method QtxSplash::splash(), which creates an
+  instance of the QtxSplash widget (if it is not yet creaed) and returns a
+  pointer to it.
+  You should not destroy this instance - it is done automatically after
+  application main window is shown. Just use methods finish() to make splash
+  screen wait untill main window is shown.
+
+  The splash screen appears in the center of the screen. 
+  The most common usage is to show a splash screen before the main widget
+  is displayed on the screen. 
   For example,
   \code
   int main(int argc, char *argv[])
@@ -101,55 +106,71 @@ private:
   }
   \endcode
   
-  The user can hide the splash screen by clicking on it with the mouse. Since the splash screen is 
-  typically displayed before the event loop has started running, it is necessary to periodically call 
+  The user can hide the splash screen by clicking on it with the mouse.
+  Since the splash screen is typically displayed before the event loop
+  has started running, it is necessary to periodically call
   QApplication::processEvents() to receive the mouse clicks.
-  This feature can be switched off by using method setHideOnClick() with \c false parameter.
+  To activate the possibility of hiding the splash screen on the mouse
+  click, use setHideOnClick() method passing \c true as parameter.
+  By default, this feature is switched off.
 
-  It is sometimes useful to update the splash screen with messages and/or progress information, 
-  for example, announcing connections established or modules loaded as the application starts up.
-  QtxSplash class provides the functionality to show status messages and(or) progress bar.
+  It is sometimes useful to update the splash screen with any status messages
+  and/or progress information, for example, announcing connections established
+  or modules loaded as the application starts up.
+  QtxSplash class provides the functionality to show status messages
+  and(or) progress bar.
 
   \code
   QPixmap pixmap(":/splash.png");
   QtxSplash* splash = QtxSplash::splash(pixmap);
-  splash->setProgress(0, 5);
+  splash->setProgress(0, 5); // progress from 0 to 5
   splash->show();
   app.processEvents();
   // doing first step
   splash->setMessage("Step 1");
-  splash->ress(1);
+  splash->setProgress(1); // progress is 20%
   qApp->processEvents();
   // ... perform some actions
   // doing second step
   splash->setMessage("Step 2");
-  splash->setProgress(2);
+  splash->setProgress(2); // progress is 40%
   qApp->processEvents();
   // ... perform some actions
   ... et cetera
   \endcode
 
-  There is a static function QtxSplash::setStatus() which allows to put next status message
-  and progress with one call. It can substitue two calls: setMessage() and setProgress().
-
-  QtxSplash class provides alos a lot of functions to set-up its behavior. Set progress
-  bar width with setProgressWidth() method, its position and direction with setProgressFlags().
-  It can be single-colored or gradient-colored. Use setProgressColors() method for this. 
-  You can even set your own gradient scale with QLinearGradient and use it for the progress
-  bar coloring: setProgressGradient(). In addition, it is possible to enable/disable displaying
+  There is a static function QtxSplash::setStatus() which allows to put the
+  next status message and current progress with one call.
+  It can substitue two calls: setMessage() and setProgress().
+
+  QtxSplash class provides also a lot of functions to customize its behavior.
+  Set progress bar width with setProgressWidth() method, its position and
+  direction with setProgressFlags().
+  It can be single-colored or gradient-colored. Use setProgressColors() methods
+  for this. You can even set your own gradient scale with QLinearGradient, 
+  QRadialGradient or QConicalGradient and use it for the progress
+  bar coloring. In addition, it is possible to enable/disable displaying
   of the progress percentage with setPercentageVisible() method.
 
-  To change the progress bar and status message transparency, use setOpacity() function.
-  The methods setTextAlignment(), setTextColor() and setTextColors() can be used to change
-  the attributes of the status message.
+  Displaying of the progress bar and status messages can be switched on/off with
+  setProgressVisible() and setMessageVisible() methods.
+
+  To change the progress bar and status message transparency, use
+  setOpacity() function. The methods setTextAlignment() and setTextColors()
+  can be used to change the attributes of the status messages.
 
-  The displayed message text includes constant info and status message. The constant info
-  is set by setConstantInfo() method and status message is set by setMessage().
+  The displayed message text can include constant info and status message.
+  The constant info is set by setConstantInfo() method and status message
+  is set by setMessage().
 
-  Sometimes it is useful to splay an error message above the splash screen window.
-  For example, it can be necessary if an error occurs when loading the application.
-  Method setError() can be used to show the error message and set the error code which
-  can be then retrieved with the error() function.
+  Sometimes it is useful to display an error message above the splash screen
+  window. For example, it can be necessary if an error occurs when loading
+  the application. Method setError() can be used to show the error message
+  and set the error code which can be then retrieved with the error() function.
+
+  There is one more helpful feature. The QtxSplash class can read all the
+  settings from the resource file with help of resource manager 
+  (QtxResourceMgr class). Refer to the method readSettings() for more details.
 */
 
 //! The only one instance of splash screen
@@ -157,8 +178,11 @@ QtxSplash* QtxSplash::mySplash = 0;
 
 /*!
   \brief Constructor.
-  \brief Construct a splash screen that will display the \a pixmap.
+  
+  Construct a splash screen that will display the \a pixmap.
+  
   \param pixmap splash screen pixmap
+  \sa setPixmap(), pixmap()
 */
 QtxSplash::QtxSplash( const QPixmap& pixmap )
 : QWidget( 0, Qt::SplashScreen | Qt::WindowStaysOnTopHint ),
@@ -167,15 +191,14 @@ QtxSplash::QtxSplash( const QPixmap& pixmap )
   myHideOnClick( false ),
   myProgress( 0 ),
   myTotal( 0 ),
-  myStartColor( Qt::red ),
-  myGradientType( Vertical ),
   myProgressWidth( 10 ),
   myProgressFlags( BottomSide | LeftToRight ),
   myMargin( 5 ),
   myOpacity( 1.0 ),
   myError( 0 ),
-  myGradientUsed( false ),
-  myShowPercent( true )
+  myShowPercent( true ),
+  myShowProgress( true ),
+  myShowMessage( true )
 {
   setAttribute( Qt::WA_DeleteOnClose, true );
   setPixmap( pixmap );
@@ -197,6 +220,7 @@ QtxSplash::~QtxSplash()
 
   \param px splash screen pixmap
   \return splash screen widget
+  \sa setPixmap(), pixmap()
 */
 QtxSplash* QtxSplash::splash( const QPixmap& px )
 {
@@ -315,6 +339,69 @@ bool QtxSplash::hideOnClick() const
   return myHideOnClick;
 }
 
+/*!
+  \brief Enable/disable displaying of the progress bar.
+  \param on if \c true, progress bar will be enabled
+  \sa progressVisible(), setMessageVisible()
+*/
+void QtxSplash::setProgressVisible( const bool on )
+{
+  myShowProgress = on;
+  repaint();
+}
+
+/*!
+  \brief Check if the progress bar is displayed.
+  \return \c true if progress bar is enabled
+  \sa setProgressVisible()
+*/
+bool QtxSplash::progressVisible() const
+{
+  return myShowProgress;
+}
+
+/*!
+  \brief Enable/disable displaying of the status message.
+  \param on if \c true, status message will be enabled
+  \sa messageVisible(), setProgressVisible()
+*/
+void QtxSplash::setMessageVisible( const bool on )
+{
+  myShowMessage = on;
+  repaint();
+}
+
+/*!
+  \brief Check if the status message is displayed.
+  \return \c true if status message is enabled
+  \sa setMessageVisible()
+*/
+bool QtxSplash::messageVisible() const
+{
+  return myShowMessage;
+}
+
+/*!
+  \brief Enable/disable displaying progress percentage.
+  \param enable if \c true, percentage will be displayed
+  \sa percentageVisible()
+*/
+void QtxSplash::setPercentageVisible( const bool enable )
+{
+  myShowPercent = enable;
+  repaint();
+}
+
+/*!
+  \brief Check if the progress percentage is displayed.
+  \return \c true if percentage displaying is enabled
+  \sa setPercentageVisible()
+*/
+bool QtxSplash::percentageVisible() const
+{
+  return myShowPercent;
+}
+
 /*!
   \brief Set total progress steps to \a total.
   \param total total number of progress steps
@@ -371,7 +458,11 @@ void QtxSplash::setProgress( const int progress, const int total )
 }
 
 /*!
-  \brief Set margin (a border width).
+  \brief Set splash window margin (a border width).
+
+  Note, that margin is used only for drawing the progress bar and status 
+  messages.
+
   \param margin new margin width
   \sa margin()
 */
@@ -382,7 +473,7 @@ void QtxSplash::setMargin( const int margin )
 }
 
 /*!
-  \brief Get margin (a border width).
+  \brief Get splash window margin (a border width).
   \return current margin width
   \sa setMargin()
 */
@@ -412,32 +503,11 @@ int QtxSplash::progressWidth() const
   return myProgressWidth;
 }
 
-/*!
-  \brief Enable/disable displaying progress percentage.
-  \param enable if \c true, percentage will be displayed
-  \sa percentageVisible()
-*/
-void QtxSplash::setPercentageVisible( const bool enable )
-{
-  myShowPercent = enable;
-  repaint();
-}
-
-/*!
-  \brief Check if the progress percentage is displayed.
-  \return \c true if percentage displaying is enabled
-  \sa setPercentageVisible()
-*/
-bool QtxSplash::percentageVisible() const
-{
-  return myShowPercent;
-}
-
 /*!
   \brief Set progress bar position and direction.
 
   By default, progress bar is displayed at the bottom side and
-  shows progress from left to right.
+  shows progress from left to right but this behaviour can be changed.
 
   \param flags ORed progress bar flags (QtxSplash::ProgressBarFlags)
   \sa progressFlags()
@@ -465,54 +535,57 @@ int QtxSplash::progressFlags() const
 /*!
   \brief Set progress bar colors.
 
-  If the colors differ the gradient color bar is drawn.
+  If the colors differ the two-colored gradient bar is drawn.
   
   If the \a endColor is not valid, \a startColor is used instead
-  (no gradient coloring).
+  (i.e. simple, one-colored progress bar is drawn).
   
-  The parameter \a gradientType defines the type of gradient 
+  The parameter \a orientation defines the type of gradient 
   to be drawn - horizontal or vertical. Default is vertical.
 
-  Note, that methods setProgressGradient() and setProgressColors() are
-  alternative. Only the latest used is taken into account.
-
   \param startColor start gradient color (or mono-color)
   \param endColor end gradient color
-  \param gradientType gradient type (QtxSplash::GradientType)
-  \sa progressColors(), setProgressGradient()
+  \param orientation gradient type (Qt::Orientation)
+  \sa progressColors()
 */
-void QtxSplash::setProgressColors( const QColor&      startColor, 
-                                  const QColor&      endColor,
-                                   const GradientType gradientType )
+void QtxSplash::setProgressColors( const QColor&         startColor, 
+                                  const QColor&         endColor,
+                                   const Qt::Orientation orientation )
 {
-  if ( startColor.isValid() )
-    myStartColor = startColor;
-  myEndColor     = endColor;
-  myGradientType = gradientType;
-  myGradientUsed = false;
-  repaint();
-}
+  if ( !startColor.isValid() )
+    return;
 
-/*!
-  \brief Get progress colors and gradient type.
-  \param startColor start gradient color (or mono-color)
-  \param endColor end gradient color
-  \return gradient type (QtxSplash::GradientType)
-  \sa setProgressColors()
-*/
-QtxSplash::GradientType QtxSplash::progressColors( QColor& startColor, 
-                                                  QColor& endColor ) const
-{
-  startColor = myStartColor;
-  endColor   = myEndColor;
-  return myGradientType;
+  QLinearGradient l;
+  if ( orientation == Qt::Vertical ) {
+    l.setStart( 0., 0. );
+    l.setFinalStop( 0., 1. );
+  }
+  else {
+    l.setStart( 0., 0. );
+    l.setFinalStop( 1., 0. );
+  }
+  l.setColorAt( 0., startColor );
+  l.setColorAt( 1., endColor.isValid() ? endColor : startColor );
+
+  setProgressColors( l );
 }
 
 /*!
-  \brief Set custom progress bar colors.
+  \brief Set progress bar colors.
 
-  The gradient start and final stops are scaled to the actual progress
-  bar size. For example:
+  Use this method to display multi-colored gradient progress bar.
+  You have to use QLinearGradient, QRadialGradient or QConicalGradient
+  classes to define the gradient.
+
+  Note, that progress bar coordinates can be defined in absolute or
+  relative mode.
+  In absolute mode the actual coordinates of the gradient key points
+  (like start and final point for linear gradient, center and focal point
+  for radial gradient, etc) are calculated from the top-left progress bar's corner.
+  In relative mode you have to use values from 0 to 1 (including) to define
+  the key points positions.
+  
+  For example:
   \code
   QLinearGradient lg(0.5, 0, 1, 1);
   lg.setColorAt(0.2, Qt::blue);
@@ -521,31 +594,26 @@ QtxSplash::GradientType QtxSplash::progressColors( QColor& startColor,
   splash->setProgressGradient(lg);
   \endcode
   The above code creates linear gradient, which sets start stop to the
-  center of the progress bar; the final stop is always in the end of
-  the progress bar. The color scale (blue to red) is changed by the 
-  progress bar diagonal.
-
-  Note, that methods setProgressGradient() and setProgressColors() are
-  alternative. Only the latest used is taken into account.
+  center of the progress bar; the final stop is assigned to its right-bottom corner.
+  The color scale (blue to red) is changed by the progress bar diagonal.
 
   \param gradient color gradient to be used for progress bar coloring
-  \sa progressGradient(), setProgressColors()
+  \sa progressColors()
 */
-void QtxSplash::setProgressGradient( const QLinearGradient& gradient )
+void QtxSplash::setProgressColors( const QGradient& gradient )
 {
   myGradient = gradient;
-  myGradientUsed = true;
   repaint();
 }
 
 /*!
   \brief Get custom progress bar colors.
   \return color gradient used for progress bar coloring
-  \sa setProgressGradient()
+  \sa setProgressColors()
 */
-QLinearGradient QtxSplash::progressGradient() const
+const QGradient* QtxSplash::progressColors() const
 {
-  return myGradient;
+  return &myGradient;
 }
 
 /*!
@@ -598,50 +666,32 @@ int QtxSplash::textAlignment() const
 }
 
 /*!
-  \brief Set message text color.
+  \brief Set message text colors.
 
-  Default message color is white.
-  
-  \param color message text color
-  \sa setTextColors()
-*/
-void QtxSplash::setTextColor( const QColor& color )
-{
-  if ( myColor.isValid() )
-    myColor = color;
-  myShadowColor = QColor();
-  repaint();
-}
-
-/*!
-  \brief Get message text color.
-  \return color message text color
-  \sa setTextColor()
-*/
-QColor QtxSplash::textColor() const
-{
-  return myColor;
-}
+  If \a shadow parameter is invalid color, the simple one-colored
+  text is drawn. Otherwise, second parameter is used to draw the text
+  shadow.
 
-/*!
-  \brief Set message text color and text shadow color.
   \param color message text color
   \param shadow message text shadow color
-  \sa textColors(), textColor(), setTextColor()
+  \sa textColors()
 */
 void QtxSplash::setTextColors( const QColor& color, const QColor& shadow )
 {
-  if ( myColor.isValid() )
-    myColor = color;
+  if ( !myColor.isValid() )
+    return;
+
+  myColor = color;
   myShadowColor = shadow;
+
   repaint();
 }
 
 /*!
-  \brief Get message text color and text shadow color.
+  \brief Get message text colors.
   \param color message text color
   \param shadow message text shadow color
-  \sa setTextColors(), textColor(), setTextColor()
+  \sa setTextColors()
 */
 void QtxSplash::textColors( QColor& color, QColor& shadow ) const
 {
@@ -657,7 +707,7 @@ void QtxSplash::textColors( QColor& color, QColor& shadow ) const
   message is set by setMessage().
 
   \param info constant info text
-  \sa constantInfo(), message(), setMessage()
+  \sa constantInfo(), message(), setMessage(), option(), setOption()
 */
 void QtxSplash::setConstantInfo( const QString& info )
 {
@@ -682,14 +732,22 @@ QString QtxSplash::constantInfo() const
   which is replaced at the time of the displaying.
 
   The following options are supported:
-  - %A - could be used as application name
-  - %V - could be used as application version
-  - %L - could be used as application license information
-  - %C - could be used as application copyright information
+  - \c \%A - could be used as application name
+  - \c \%V - could be used as application version
+  - \c \%L - could be used as application license information
+  - \c \%C - could be used as application copyright information
 
+  For example,
+  \code
+  splash->setContantInfo("%A [%V]\n%C");
+  splash->setOption("%A", "MyApplication" );
+  splash->setOption("%V", "Version 1.0" );
+  splash->setOption("%C", "Copyright (C) MyCompany 2008" );
+  \endcode
+  
   \param name option name
   \param option value
-  \sa option()
+  \sa option(), setConstantInfo(), constantInfo()
 */
 void QtxSplash::setOption( const QString& name, const QString& value )
 {
@@ -701,7 +759,7 @@ void QtxSplash::setOption( const QString& name, const QString& value )
   \brief Get constant information option value.
   \param name option name
   \return option value or empty string if option is not set
-  \sa setOption()
+  \sa setOption(), setConstantInfo(), constantInfo()
 */
 QString QtxSplash::option( const QString& name ) const
 {
@@ -724,8 +782,8 @@ QString QtxSplash::message() const
 /*!
   \brief Get error code.
 
-  This function returns error code, set previoiusly with 
-  error(const QString&, const QString&, const int) method.
+  This function returns error code, set previously with 
+  setError() method.
   If no error code has been set, 0 is returned.
 
   \return last error code
@@ -767,12 +825,33 @@ void QtxSplash::repaint()
 
 /*!
   \brief Read splash settings from the resources manager.
+  
+  This method can be used to setup the splash screen look-n-feel.
+  By default, "splash" section of the resources file is used, but you can
+  use any other section.
+  All the splash screen parameters can be defined via resources file:
+  - \c "image" : splash screen image, see setPixmap()
+  - \c "margin" : splash window margin, see setMargin()
+  - \c "show_progress" : show progress bar flag, see setProgressVisible()
+  - \c "show_message" : show status messages flag, see setMessageVisible()
+  - \c "show_percents" : show progress percentage flag, see setPercentageVisible()
+  - \c "progress_width" : progress bar width(), see setProgressWidth()
+  - \c "progress_flags" : progress bar position and direction, see setProgressFlags()
+  - \c "constant_info" : status messages constant info, see setConstantInfo()
+  - \c "text_colors" : status messages color(s), see setTextColors()
+  - \c "progress_colors" : progress bar color(s), see setProgressColors()
+  - \c "opacity" : progress bar and status messages opacity, see setOpacity()
+  - \c "font" : status messages font
+  - \c "alignment" : status messages alignment flags, see setTextAlignment()
+  - \c "hide_on_click" : hide-on-click flag, see setHideOnClick()
+
   \param resMgr resources manager
-  \param section resources file section name (if empty, the default name is used).
+  \param section resources file section name (if empty, the default "splash"
+  section is used).
 */
 void QtxSplash::readSettings( QtxResourceMgr* resMgr, const QString& section )
 {
-  QString resSection = section.isEmpty() ? "splash" : section;
+  QString resSection = section.isEmpty() ? QString( "splash" ) : section;
   
   // pixmap
   QString pxname;
@@ -792,6 +871,18 @@ void QtxSplash::readSettings( QtxResourceMgr* resMgr, const QString& section )
   }
 #endif
 
+  // enable progress bar
+  bool bShowProgress;
+  if ( resMgr->value( resSection, "show_progress", bShowProgress ) ) {
+    setProgressVisible( bShowProgress );
+  }
+  
+  // enable status message
+  bool bShowMessage;
+  if ( resMgr->value( resSection, "show_message", bShowMessage ) ) {
+    setMessageVisible( bShowMessage );
+  }
+  
   // margin
   int m;
   if ( resMgr->value( resSection, "margin", m ) ) {
@@ -873,20 +964,32 @@ void QtxSplash::readSettings( QtxResourceMgr* resMgr, const QString& section )
     }
     setTextAlignment( fl );
   }
-
   // progress color(s)
   QString pc;
-  QLinearGradient grad;
-  if ( resMgr->value( resSection, "progress_gradient", grad ) ) {
-    // gradient-colored progress bar
-    setProgressGradient( grad );
+  QLinearGradient  lgrad;
+  QRadialGradient  rgrad;
+  QConicalGradient cgrad;
+  if ( resMgr->value( resSection, "progress_color",  lgrad ) || 
+       resMgr->value( resSection, "progress_colors", lgrad ) ) {
+    // linear gradient-colored progress bar
+    setProgressColors( lgrad );
+  }
+  else if ( resMgr->value( resSection, "progress_color",  rgrad ) || 
+           resMgr->value( resSection, "progress_colors", rgrad ) ) {
+    // radial gradient-colored progress bar
+    setProgressColors( rgrad );
+  }
+  else if ( resMgr->value( resSection, "progress_color",  cgrad ) || 
+           resMgr->value( resSection, "progress_colors", cgrad ) ) {
+    // conical gradient-colored progress bar
+    setProgressColors( cgrad );
   }
   else if ( resMgr->value( resSection, "progress_color",  pc ) || 
            resMgr->value( resSection, "progress_colors", pc ) ) {
     // one/two-colored progress bar
     QStringList colors = pc.split( "|", QString::SkipEmptyParts );
     QColor c1, c2;
-    QtxSplash::GradientType gradType = QtxSplash::Vertical;
+    Qt::Orientation o = Qt::Vertical;
     if ( colors.count() > 0 ) c1 = QColor( colors[0] );
     if ( colors.count() > 1 ) c2 = QColor( colors[1] );
     int gt;
@@ -894,19 +997,16 @@ void QtxSplash::readSettings( QtxResourceMgr* resMgr, const QString& section )
       bool bOk;
       gt = colors[2].toInt( &bOk );
       if ( bOk ) {
-       if ( gt >= QtxSplash::Horizontal && gt <= QtxSplash::Vertical )
-         gradType = (QtxSplash::GradientType)gt;
+       if ( gt == 0 )
+         o = Qt::Horizontal;
       }
       else {
-       if ( colors[2].toLower() == "horizontal" )
-         gradType = QtxSplash::Horizontal;
-       else if ( colors[2].toLower() == "vertical" )
-         gradType = QtxSplash::Vertical;
+       if ( colors[2].toLower().startsWith( "h" ) )
+         o = Qt::Horizontal;
       }
     }
-    setProgressColors( c1, c2, gradType );
+    setProgressColors( c1, c2, o );
   }
-
   // show percents
   bool bPercent;
   if ( resMgr->value( resSection, "show_percents", bPercent ) ) {
@@ -967,7 +1067,10 @@ void QtxSplash::setMessage( const QString& msg )
 
 /*!
   \brief Remove the message being displayed on the splash screen.
-  \sa message()
+
+  This is equivalent to setMessage("");
+
+  \sa message(), setMessage()
 */
 void QtxSplash::clear()
 {
@@ -977,19 +1080,19 @@ void QtxSplash::clear()
 
 /*!
   \brief Draw the contents of the splash screen.
-  \param painter painter
+  \param p painter
 */
 void QtxSplash::drawContents( QPainter* p )
 {
   // draw progress bar
-  if ( myTotal > 0 ) {
+  if ( myTotal > 0 && progressVisible() ) {
     p->save();
     drawProgressBar( p );
     p->restore();
   }
 
   // draw status message
-  if ( !fullMessage().isEmpty() ) {
+  if ( !fullMessage().isEmpty() && messageVisible() ) {
     p->save();
     drawMessage( p );
     p->restore();
@@ -1042,9 +1145,40 @@ void QtxSplash::customEvent( QEvent* ce )
   }
 }
 
+/*!
+  \brief Check if the gradient is defined in the relative coordinates [static].
+  \internal
+  \return \c true if gradient is defined in the relative coordinates
+*/
+static bool checkGradient( const QGradient* g )
+{
+#define BOUNDED( a, min, max ) ( a >= min && a <= max )
+  if ( g->type() == QGradient::LinearGradient ) {
+    const QLinearGradient* lg = static_cast<const QLinearGradient*>( g );
+    return BOUNDED( lg->start().x(), 0.0, 1.0 ) && 
+           BOUNDED( lg->start().y(), 0.0, 1.0 ) && 
+           BOUNDED( lg->finalStop().x(), 0.0, 1.0 ) && 
+           BOUNDED( lg->finalStop().y(), 0.0, 1.0 );
+  }
+  if ( g->type() == QGradient::RadialGradient ) {
+    const QRadialGradient* rg = static_cast<const QRadialGradient*>( g );
+    return BOUNDED( rg->center().x(), 0.0, 1.0 ) && 
+           BOUNDED( rg->center().y(), 0.0, 1.0 ) && 
+           BOUNDED( rg->focalPoint().x(), 0.0, 1.0 ) && 
+           BOUNDED( rg->focalPoint().y(), 0.0, 1.0 ); // && BOUNDED( rg->radius(), 0.0, 1.0 );
+  }
+  if ( g->type() == QGradient::ConicalGradient ) {
+    const QConicalGradient* cg = static_cast<const QConicalGradient*>( g );
+    return BOUNDED( cg->center().x(), 0.0, 1.0 ) && 
+           BOUNDED( cg->center().y(), 0.0, 1.0 );
+  }
+  return false;
+}
+
 /*!
   \brief Draw progress bar.
   \param p painter
+  \sa drawMessage()
 */
 void QtxSplash::drawProgressBar( QPainter* p )
 {
@@ -1075,32 +1209,89 @@ void QtxSplash::drawProgressBar( QPainter* p )
     if ( myProgressFlags & RightToLeft)
       cr.translate( 0, r.height() - cr.height() );
   }
-  int x1, x2, y1, y2;
-  if ( myGradientType == Horizontal ) {
-    x1 = r.left(); x2 = r.right(); y1 = y2 = 0;
-  }
-  else {
-    x1 = x2 = 0; y1 = r.top(); y2 = r.bottom();
-  }
-  QLinearGradient lg;
-  if ( myGradientUsed ) {
-    QPointF start = myGradient.start();
-    QPointF final = myGradient.finalStop();
-    qreal xd = final.x() - start.x();
-    qreal yd = final.y() - start.y();
-    lg.setStart( xd != 0 ? r.left() + r.width() * start.x() / xd : 0, 
-                 yd != 0 ? r.top() + r.height() * start.y() / yd : 0 );
-    lg.setFinalStop( xd != 0 ? r.right() : 0, yd != 0 ? r.bottom() : 0 );
-    lg.setStops( myGradient.stops() );
-    lg.setSpread( myGradient.spread() );
-  }
-  else {
-    lg.setStart( x1, y1 );
-    lg.setFinalStop( x2, y2 );
-    lg.setColorAt( 0, myStartColor );
-    lg.setColorAt( 1, myEndColor.isValid() ? myEndColor : myStartColor );
-  }
+  QBrush b;
+  switch ( progressColors()->type() ) {
+    case QGradient::LinearGradient:
+    {
+      QLinearGradient lg;
+      const QLinearGradient* other = static_cast<const QLinearGradient*>( progressColors() );
+      if ( checkGradient( other ) ) {
+       // gradient is defined in relative coordinates [0.0 - 1.0]
+       lg.setStart( r.left() + r.width()  * other->start().x(), 
+                    r.top()  + r.height() * other->start().y() );
+       lg.setFinalStop( r.left() + r.width()  * other->finalStop().x(), 
+                        r.top()  + r.height() * other->finalStop().y() );
+      }
+      else {
+       // gradient is defined in absolute coordinates
+       // according to its dimensions
+       lg.setStart( r.topLeft() + other->start() );
+       lg.setFinalStop( r.topLeft() + other->finalStop() );
+      }
+      
+      lg.setStops( other->stops() );
+      lg.setSpread( other->spread() );
+      
+      b = QBrush( lg );
+      
+      break;
+    } // case QGradient::LinearGradient
+    case QGradient::RadialGradient:
+    {
+      QRadialGradient rg;
+      const QRadialGradient* other = static_cast<const QRadialGradient*>( progressColors() );
+      if ( checkGradient( other ) ) {
+       // gradient is defined in relative coordinates [0.0 - 1.0]
+       rg.setCenter( r.left() + r.width()  * other->center().x(),
+                     r.top()  + r.height() * other->center().y() );
+       rg.setFocalPoint( r.left() + r.width()  * other->focalPoint().x(),
+                         r.top()  + r.height() * other->focalPoint().y() );
+      }
+      else {
+       // gradient is defined in absolute coordinates
+       // according to its dimensions
+       rg.setCenter( r.topLeft() + other->center() );
+       rg.setFocalPoint( r.topLeft() + other->focalPoint() );
+      }
+      
+      // only width is taken into account for the radius in relative mode
+      rg.setRadius( other->radius() > 1.0 ? other->radius() : r.width() * other->radius() );
+      
+      rg.setStops( other->stops() );
+      rg.setSpread( other->spread() );
+      
+      b = QBrush( rg );
+      
+      break;
+    } // case QGradient::RadialGradient
+    case QGradient::ConicalGradient:
+    {
+      QConicalGradient cg;
+      const QConicalGradient* other = static_cast<const QConicalGradient*>( progressColors() );
+      if ( checkGradient( other ) ) {
+       // gradient is defined in relative coordinates [0.0 - 1.0]
+       cg.setCenter( r.left() + r.width()  * other->center().x(),
+                     r.top()  + r.height() * other->center().y() );
+      }
+      else {
+       // gradient is defined in absolute coordinates
+       // according to its dimensions
+       cg.setCenter( r.topLeft() + other->center() );
+      }
 
+      cg.setAngle( other->angle() );
+      cg.setStops( other->stops() );
+      cg.setSpread( other->spread() );
+      
+      b = QBrush( cg );
+      
+      break;
+    } // case QGradient::RadialGradient
+  default:
+    b = QBrush( Qt::red ); // default is simple red-colored progress bar
+    break;
+  }
+  
   p->setOpacity( myOpacity );
 
   // draw progress bar outline rectangle
@@ -1113,7 +1304,7 @@ void QtxSplash::drawProgressBar( QPainter* p )
 
   r.setCoords( r.left()+1, r.top()+1, r.right()-1, r.bottom()-1 );
   p->setClipRect( cr );
-  p->fillRect( r, lg );
+  p->fillRect( r, b );
   p->setClipping( false );
 
   if ( myShowPercent ) {
@@ -1136,13 +1327,14 @@ void QtxSplash::drawProgressBar( QPainter* p )
 /*!
   \brief Draw status message.
   \param p painter
+  \sa drawProgressBar()
 */
 void QtxSplash::drawMessage( QPainter* p )
 {
   // get rect, margin, progress bar width
   QRect r = rect();
   int m   = margin();
-  int pw  = progressWidth();
+  int pw  = progressVisible() ? progressWidth() : 0;
 
   // calculate drawing rect
   QFontMetrics f( font() );
@@ -1190,6 +1382,7 @@ void QtxSplash::drawMessage( QPainter* p )
 
 /*!
   \brief Draw the splash screen window contents.
+  \internal
 */
 void QtxSplash::drawContents()
 {
@@ -1205,6 +1398,7 @@ void QtxSplash::drawContents()
 /*!
   \brief Sets error code.
   \param code error code
+  \internal
 */
 void QtxSplash::setError( const int code )
 {
@@ -1215,6 +1409,7 @@ void QtxSplash::setError( const int code )
   \brief Get full message which includes constant info and status message.
   \return get fill message text
   \sa constantInfo(), setConstantInfo(), message(), setMessage()
+  \internal
 */
 QString QtxSplash::fullMessage() const
 {
index 3e0160ed486ad71ba165799378dcd0a2810099f0..cfebac158dac139a0a38d1fbe7d74d43abfe6122 100644 (file)
@@ -27,7 +27,7 @@
 
 #include <QWidget>
 #include <QPixmap>
-#include <QLinearGradient>
+#include <QGradient>
 #include <QMap>
 
 #ifdef WIN32
@@ -44,12 +44,6 @@ private:
   QtxSplash( const QPixmap& );
 
 public:
-  //! Gradient type
-  typedef enum { 
-    Horizontal, //!< horizontal
-    Vertical    //!< vertical
-  } GradientType;
-  
   //! Progress bar position and direction
   typedef enum {
     LeftSide     = 0x0001,      //!< progress bar is displayed at the left side
@@ -72,7 +66,16 @@ public:
   
   void              setHideOnClick( const bool );
   bool              hideOnClick() const;
-  
+
+  void              setProgressVisible( const bool );
+  bool              progressVisible() const;
+
+  void              setMessageVisible( const bool );
+  bool              messageVisible() const;
+
+  void              setPercentageVisible( const bool );
+  bool              percentageVisible() const;
+
   void              setTotalSteps( const int );
   int               totalSteps() const;
   
@@ -86,19 +89,14 @@ public:
   void              setProgressWidth( const int );
   int               progressWidth() const; 
 
-  void              setPercentageVisible( const bool );
-  bool              percentageVisible() const;
-
   void              setProgressFlags( const int );
   int               progressFlags() const;
   
   void              setProgressColors( const QColor&, 
                                       const QColor& = QColor(),
-                                      const GradientType = Vertical );
-  GradientType      progressColors( QColor&, QColor& ) const;
-  
-  void              setProgressGradient( const QLinearGradient& );
-  QLinearGradient   progressGradient() const;
+                                      const Qt::Orientation = Qt::Vertical );
+  void              setProgressColors( const QGradient& );
+  const QGradient*  progressColors() const;
   
   void              setOpacity( const double );
   double            opacity() const;
@@ -106,8 +104,6 @@ public:
   void              setTextAlignment( const int );
   int               textAlignment() const;
   
-  void              setTextColor( const QColor& );
-  QColor            textColor() const;
   void              setTextColors( const QColor&, const QColor& = QColor() );
   void              textColors( QColor&, QColor& ) const;
   
@@ -163,18 +159,16 @@ private:
   bool              myHideOnClick;      //!< 'hide on click' flag
   int               myProgress;         //!< current progress
   int               myTotal;            //!< total progress steps
-  QColor            myStartColor;       //!< progress bar gradient starting color
-  QColor            myEndColor;         //!< progress bar gradient ending color
-  GradientType      myGradientType;     //!< progress bar gradient direction
-  QLinearGradient   myGradient;         //!< progress bar custom gradient
+  QGradient         myGradient;         //!< progress bar custom gradient
   int               myProgressWidth;    //!< progress bar width
   int               myProgressFlags;    //!< progress bar flags (QtxSplash::ProgressBarFlags)
   int               myMargin;           //!< margin (for progress bar and status message)
   double            myOpacity;          //!< progress bar / status message opacity
   int               myError;            //!< error code
-  bool              myGradientUsed;     //!< 'use custom gradient color scale' flag
-  bool              myShowPercent;      //!< 'show percentage' flag
   OptMap            myOptions;          //!< constant info options
+  bool              myShowProgress;     //!< 'show progress bar' flag
+  bool              myShowMessage;      //!< 'show status message' flag
+  bool              myShowPercent;      //!< 'show percentage' flag
 };
 
 #endif
index 338354dbadfd3b53406099ba6abd62229f0128e0..4596bb20a15ff47d12d191a78e3522f991be9d68 100644 (file)
     <!-- Splash screen settings -->
     <parameter name="image"             value="${GUI_ROOT_DIR}/share/salome/resources/gui/icon_about.png" />
     <parameter name="constant_info"     value="%A [ %V ]" />
-    <parameter name="text_colors"       value="#EEEEFF|#555555" />
+    <parameter name="text_colors"       value="#eeeeff|#555555" />
     <parameter name="hide_on_click"     value="no" />
+    <parameter name="show_progress"     value="yes" />
+    <parameter name="show_message"      value="yes" />
+    <parameter name="show_percents"     value="yes" />
     <parameter name="margin"            value="40" />
     <parameter name="progress_width"    value="20" />
     <parameter name="progress_flags"    value="bottom,left_to_right" />
     <parameter name="opacity"           value="0.70" />
     <parameter name="font"              value="Tahoma,12,normal" />
     <parameter name="alignment"         value="top,left" />
-    <parameter name="progress_gradient" value="linear|0.0|0.0|1.0|1.0|reflect|0.0|#747964|1.0|#c5d4e3" />
-    <parameter name="progress_colors"   value="#20408F|#5A81BF|vertical" />
+    <parameter name="progress_colors"   value="#3b3e5d|#d14949|v" />
   </section>
   <section name="resources">
     <!-- Resource directories (resource manager)-->