Salome HOME
Join modifications from branch OCC_development_for_3_2_0a2
[modules/visu.git] / src / VISUGUI / VisuGUI_ScalarBarDlg.cxx
index 3b9b32eea17880caaab4e2d4fb273e43f4ab7ef6..54c96b88ecbbc46435ecdaf58da03ad7f1d09f24 100644 (file)
@@ -1,40 +1,87 @@
-using namespace std;
-//  File      : VisuGUI_ScalarBarDlg.cxx
-//  Created   : Wed Aug 01 10:23:06 2001
-//  Author    : Laurent CORNABE & Hubert ROLLAND 
-//  Project   : SALOME
-//  Module    : VISUGUI
-//  Copyright : PRINCIPIA
+//  VISU VISUGUI : GUI of VISU component
+//
+//  Copyright (C) 2003  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
+//  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
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
+//
+//
+//
+//  File   : VisuGUI_ScalarBarDlg.cxx
+//  Author : Laurent CORNABE & Hubert ROLLAND
+//  Module : VISU
 //  $Header$
 
 #include "VisuGUI_ScalarBarDlg.h"
-#include <qlayout.h>
-#include "QAD_Application.h"
-#include "QAD_Desktop.h"
-#include "QAD_Config.h"
+
+#include "VisuGUI.h"
+#include "VisuGUI_Tools.h"
+#include "VisuGUI_ViewTools.h"
+
+#include "SVTK_ViewWindow.h"
+#include "SVTK_FontWidget.h"
+
+#include "VISUConfig.hh"
 #include "VISU_Convertor.hxx"
 
+#include "VISU_ScalarMapPL.hxx"
+#include "VISU_ScalarMap_i.hh"
+#include "VISU_ScalarMapAct.h"
 
-static double MAXVALUE = 1.0E+300;
-/*!
-  Constructor
-*/
-VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg(bool SetPref)
-    : QDialog( QAD_Application::getDesktop(), 0, true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu )
+#include "SalomeApp_Application.h"
+
+#include "SUIT_MessageBox.h"
+#include "SUIT_ResourceMgr.h"
+
+#include <limits.h>
+#include <qlayout.h>
+#include <qvalidator.h>
+#include <qcolordialog.h>
+
+#include <vtkTextProperty.h>
+
+using namespace std;
+
+
+VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane (QWidget * parent, bool SetPref):
+  QVBox(parent), myPreviewActor(0)
 {
-  setName( "VisuGUI_ScalarBarDlg" );
-  setCaption( SetPref ? tr( "Scalar Bar Preferences" ) : tr( "Scalar Bar Properties" ) );
-  setSizeGripEnabled( TRUE );
+  SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
+  QString propertyName;
+  propertyName = QString("scalar_bar_vertical_");
+  myVerX = aResourceMgr->doubleValue("VISU", propertyName + "x", myVerX);
+  myVerY = aResourceMgr->doubleValue("VISU", propertyName + "y", myVerY);
+  myVerW = aResourceMgr->doubleValue("VISU", propertyName + "width", myVerW);
+  myVerH = aResourceMgr->doubleValue("VISU", propertyName + "height",myVerH);
   
-  myVerX = 0.01;  myVerY = 0.10;  myVerW = 0.10;  myVerH = 0.80;
-  myHorX = 0.20;  myHorY = 0.01;  myHorW = 0.60;  myHorH = 0.12;
+  propertyName = QString("scalar_bar_horizontal_");
+  myHorX = aResourceMgr->doubleValue("VISU", propertyName + "x", myHorX);
+  myHorY = aResourceMgr->doubleValue("VISU", propertyName + "y", myHorY);
+  myHorW = aResourceMgr->doubleValue("VISU", propertyName + "width", myHorW);
+  myHorH = aResourceMgr->doubleValue("VISU", propertyName + "height",myHorH);
   
-  QVBoxLayout* TopLayout = new QVBoxLayout( this ); 
-  TopLayout->setSpacing( 6 );
-  TopLayout->setMargin( 11 );
+  Imin = 0.0; Imax = 0.0; /*Fmin = 0.0; Fmax = 0.0;*/ Rmin = 0.0; Rmax = 0.0;
+  myRangeMode = -1;
+
+  setSpacing(6);
+  //setMargin(11);
 
   // Range ============================================================
-  QButtonGroup* RangeGroup = new QButtonGroup( tr( "Scalar range" ), this, "RangeGroup" );
+  RangeGroup = new QButtonGroup (tr("SCALAR_RANGE_GRP"), this, "RangeGroup");
   RangeGroup->setColumnLayout(0, Qt::Vertical );
   RangeGroup->layout()->setSpacing( 0 );
   RangeGroup->layout()->setMargin( 0 );
@@ -42,35 +89,33 @@ VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg(bool SetPref)
   RangeGroupLayout->setAlignment( Qt::AlignTop );
   RangeGroupLayout->setSpacing( 6 );
   RangeGroupLayout->setMargin( 11 );
-  
+
   myModeLbl = new QLabel("Scalar Mode", RangeGroup);
-  
+
   myModeCombo = new QComboBox(RangeGroup);
-  myModeCombo->insertItem("Modulus");
-  myModeCombo->insertItem("Component 1");
-  myModeCombo->insertItem("Component 2");
-  myModeCombo->insertItem("Component 3");
 
-  CBLog = new QCheckBox( tr( "Logarithmic scaling" ), RangeGroup );
+  CBLog = new QCheckBox (tr("LOGARITHMIC_SCALING"), RangeGroup);
   CBLog->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-  
-  RBFrange = new QRadioButton( tr( "Use field range" ), RangeGroup, "RBFrange" );
-  RBIrange = new QRadioButton( tr( "Use imposed range" ), RangeGroup, "RBIrange" );
-  RBIrange->setChecked( true );
-
-  MinSpin = new QAD_SpinBoxDbl( RangeGroup, -MAXVALUE, MAXVALUE, 0.1 );
-  MinSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-  MinSpin->setMinimumWidth( 70 );
-  MinSpin->setValue( 0 );
-  QLabel* MinLabel = new QLabel( tr( "Min:" ), RangeGroup, "MinLabel" );
-  MinLabel->setBuddy(MinSpin);
-
-  MaxSpin = new QAD_SpinBoxDbl( RangeGroup, -MAXVALUE, MAXVALUE, 0.1 );
-  MaxSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
-  MaxSpin->setMinimumWidth( 70 );
-  MaxSpin->setValue( 0 );
-  QLabel* MaxLabel = new QLabel( tr( "Max:" ), RangeGroup, "MaxLabel" );
-  MaxLabel->setBuddy(MaxSpin);
+
+  RBFrange = new QRadioButton (tr("FIELD_RANGE_BTN"), RangeGroup, "RBFrange");
+  RBIrange = new QRadioButton (tr("IMPOSED_RANGE_BTN"), RangeGroup, "RBIrange");
+  RBFrange->setChecked( true );
+
+  MinEdit = new QLineEdit( RangeGroup, "MinEdit" );
+  MinEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  MinEdit->setMinimumWidth( 70 );
+  MinEdit->setValidator( new QDoubleValidator(this) );
+  MinEdit->setText( "0.0" );
+  QLabel* MinLabel = new QLabel (tr("LBL_MIN"), RangeGroup, "MinLabel");
+  MinLabel->setBuddy(MinEdit);
+
+  MaxEdit = new QLineEdit( RangeGroup, "MaxEdit" );
+  MaxEdit->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  MaxEdit->setMinimumWidth( 70 );
+  MaxEdit->setValidator( new QDoubleValidator(this) );
+  MaxEdit->setText( "0.0" );
+  QLabel* MaxLabel = new QLabel (tr("LBL_MAX"), RangeGroup, "MaxLabel");
+  MaxLabel->setBuddy(MaxEdit);
 
   RangeGroupLayout->addWidget( myModeLbl, 0, 0 );
   RangeGroupLayout->addMultiCellWidget( myModeCombo, 0, 0, 1, 3);
@@ -78,14 +123,14 @@ VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg(bool SetPref)
   RangeGroupLayout->addMultiCellWidget( RBFrange, 2, 2, 0, 1);
   RangeGroupLayout->addMultiCellWidget( RBIrange, 2, 2, 2, 3);
   RangeGroupLayout->addWidget( MinLabel, 3, 0 );
-  RangeGroupLayout->addWidget( MinSpin,  3, 1 );
+  RangeGroupLayout->addWidget( MinEdit,  3, 1 );
   RangeGroupLayout->addWidget( MaxLabel, 3, 2 );
-  RangeGroupLayout->addWidget( MaxSpin,  3, 3 );
+  RangeGroupLayout->addWidget( MaxEdit,  3, 3 );
 
-  TopLayout->addWidget( RangeGroup );
+  //TopLayout->addWidget( RangeGroup );
 
   // Colors and Labels ========================================================
-  QGroupBox* ColLabGroup = new QGroupBox( tr( "Colors and labels" ), this, "ColLabGroup" );
+  QGroupBox* ColLabGroup = new QGroupBox (tr("COLORS_LABELS_GRP"), this, "ColLabGroup");
   ColLabGroup->setColumnLayout(0, Qt::Vertical );
   ColLabGroup->layout()->setSpacing( 0 );
   ColLabGroup->layout()->setMargin( 0 );
@@ -94,27 +139,27 @@ VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg(bool SetPref)
   ColLabGroupLayout->setSpacing( 6 );
   ColLabGroupLayout->setMargin( 11 );
 
-  QLabel* ColorLabel = new QLabel( tr( "Nb. of colors:" ), ColLabGroup, "ColorLabel" );
-  ColorSpin = new QSpinBox( 2, 64, 1, ColLabGroup );
+  QLabel* ColorLabel = new QLabel (tr("LBL_NB_COLORS"), ColLabGroup, "ColorLabel");
+  ColorSpin = new QSpinBox( 2, 256, 1, ColLabGroup );
   ColorSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   ColorSpin->setMinimumWidth( 70 );
   ColorSpin->setValue( 64 );
 
-  QLabel* LabelLabel = new QLabel( tr( "Nb. of labels:" ), ColLabGroup, "LabelLabel" );
+  QLabel* LabelLabel = new QLabel (tr("LBL_NB_LABELS"), ColLabGroup, "LabelLabel");
   LabelSpin = new QSpinBox( 2, 65, 1, ColLabGroup );
   LabelSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   LabelSpin->setMinimumWidth( 70 );
   LabelSpin->setValue( 5 );
-  
+
   ColLabGroupLayout->addWidget( ColorLabel, 0, 0);
   ColLabGroupLayout->addWidget( ColorSpin,  0, 1);
   ColLabGroupLayout->addWidget( LabelLabel, 0, 2);
   ColLabGroupLayout->addWidget( LabelSpin,  0, 3);
 
-  TopLayout->addWidget( ColLabGroup );
+  //TopLayout->addWidget( ColLabGroup );
 
   // Orientation ==========================================================
-  QButtonGroup* OrientGroup = new QButtonGroup( tr( "Orientation" ), this, "OrientGroup" );
+  QButtonGroup* OrientGroup = new QButtonGroup (tr("ORIENTATION_GRP"), this, "OrientGroup");
   OrientGroup->setColumnLayout(0, Qt::Vertical );
   OrientGroup->layout()->setSpacing( 0 );
   OrientGroup->layout()->setMargin( 0 );
@@ -123,16 +168,16 @@ VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg(bool SetPref)
   OrientGroupLayout->setSpacing( 6 );
   OrientGroupLayout->setMargin( 11 );
 
-  RBvert = new QRadioButton( tr( "Vertical" ), OrientGroup, "RBvert" );
+  RBvert = new QRadioButton (tr("VERTICAL_BTN"), OrientGroup, "RBvert");
   RBvert->setChecked( true );
-  RBhori = new QRadioButton( tr( "Horizontal" ), OrientGroup, "RBhori" );
+  RBhori = new QRadioButton (tr("HORIZONTAL_BTN"), OrientGroup, "RBhori");
   OrientGroupLayout->addWidget( RBvert, 0, 0 );
   OrientGroupLayout->addWidget( RBhori, 0, 1 );
-  
-  TopLayout->addWidget( OrientGroup );
+
+  //  TopLayout->addWidget( OrientGroup );
 
   // Origin ===============================================================
-  QGroupBox* OriginGroup = new QGroupBox( tr( "Origin" ), this, "OriginGroup" );
+  QGroupBox* OriginGroup = new QGroupBox (tr("ORIGIN_GRP"), this, "OriginGroup");
   OriginGroup->setColumnLayout(0, Qt::Vertical );
   OriginGroup->layout()->setSpacing( 0 );
   OriginGroup->layout()->setMargin( 0 );
@@ -141,27 +186,27 @@ VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg(bool SetPref)
   OriginGroupLayout->setSpacing( 6 );
   OriginGroupLayout->setMargin( 11 );
 
-  QLabel* XLabel = new QLabel( tr( "X:" ), OriginGroup, "XLabel" );
-  XSpin = new QAD_SpinBoxDbl( OriginGroup, 0.0, 1.0, 0.1 );
+  QLabel* XLabel = new QLabel (tr("LBL_X"), OriginGroup, "XLabel");
+  XSpin = new QtxDblSpinBox( 0.0, 1.0, 0.1, OriginGroup );
   XSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   XSpin->setMinimumWidth( 70 );
   XSpin->setValue( 0.01 );
 
-  QLabel* YLabel = new QLabel( tr( "Y:" ), OriginGroup, "YLabel" );
-  YSpin = new QAD_SpinBoxDbl( OriginGroup, 0.0, 1.0, 0.1 );
+  QLabel* YLabel = new QLabel (tr("LBL_Y"), OriginGroup, "YLabel");
+  YSpin = new QtxDblSpinBox( 0.0, 1.0, 0.1, OriginGroup );
   YSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   YSpin->setMinimumWidth( 70 );
   YSpin->setValue( 0.01 );
-  
+
   OriginGroupLayout->addWidget( XLabel, 0, 0);
   OriginGroupLayout->addWidget( XSpin,  0, 1);
   OriginGroupLayout->addWidget( YLabel, 0, 2);
   OriginGroupLayout->addWidget( YSpin,  0, 3);
 
-  TopLayout->addWidget( OriginGroup );
+  //TopLayout->addWidget( OriginGroup );
 
   // Dimensions =========================================================
-  QGroupBox* DimGroup = new QGroupBox( tr( "Dimensions" ), this, "DimGroup" );
+  QGroupBox* DimGroup = new QGroupBox (tr("DIMENSIONS_GRP"), this, "DimGroup");
   DimGroup->setColumnLayout(0, Qt::Vertical );
   DimGroup->layout()->setSpacing( 0 );
   DimGroup->layout()->setMargin( 0 );
@@ -170,142 +215,124 @@ VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg(bool SetPref)
   DimGroupLayout->setSpacing( 6 );
   DimGroupLayout->setMargin( 11 );
 
-  QLabel* WidthLabel = new QLabel( tr( "Width:" ), DimGroup, "WidthLabel" );
-  WidthSpin = new QAD_SpinBoxDbl( DimGroup, 0.0, 1.0, 0.1 );
+  QLabel* WidthLabel = new QLabel (tr("LBL_WIDTH"), DimGroup, "WidthLabel");
+  WidthSpin = new QtxDblSpinBox( 0.0, 1.0, 0.1, DimGroup );
   WidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   WidthSpin->setMinimumWidth( 70 );
   WidthSpin->setValue( 0.1 );
 
-  QLabel* HeightLabel = new QLabel( tr( "Height:" ), DimGroup, "HeightLabel" );
-  HeightSpin = new QAD_SpinBoxDbl( DimGroup, 0.0, 1.0, 0.1 );
+  QLabel* HeightLabel = new QLabel (tr("LBL_HEIGHT"), DimGroup, "HeightLabel");
+  HeightSpin = new QtxDblSpinBox( 0.0, 1.0, 0.1, DimGroup );
   HeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
   HeightSpin->setMinimumWidth( 70 );
   HeightSpin->setValue( 0.8 );
-  
+
   DimGroupLayout->addWidget( WidthLabel, 0, 0);
   DimGroupLayout->addWidget( WidthSpin,  0, 1);
   DimGroupLayout->addWidget( HeightLabel, 0, 2);
   DimGroupLayout->addWidget( HeightSpin,  0, 3);
 
-  TopLayout->addWidget( DimGroup );
+  //TopLayout->addWidget( DimGroup );
 
   // Save check box ===========================================================
-  if ( !SetPref ) {
-    CBSave = new QCheckBox( tr( "Save as default values" ), this, "CBSave" );
-    TopLayout->addWidget( CBSave );
+  QHBox* aSaveBox = new QHBox(this);
+  if (!SetPref) {
+    CBSave = new QCheckBox (tr("SAVE_DEFAULT_CHK"), aSaveBox, "CBSave");
+    //TopLayout->addWidget(CBSave);
   }
   else {
     CBSave = 0;
   }
-
-  // Common buttons ===========================================================
-  QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
-  GroupButtons->setColumnLayout(0, Qt::Vertical );
-  GroupButtons->layout()->setSpacing( 0 );
-  GroupButtons->layout()->setMargin( 0 );
-  QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
-  GroupButtonsLayout->setAlignment( Qt::AlignTop );
-  GroupButtonsLayout->setSpacing( 6 );
-  GroupButtonsLayout->setMargin( 11 );
-
-  QPushButton* buttonOk = new QPushButton( tr( "&OK" ), GroupButtons, "buttonOk" );
-  buttonOk->setAutoDefault( TRUE );
-  buttonOk->setDefault( TRUE );
-  GroupButtonsLayout->addWidget( buttonOk, 0, 0 );
-  GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
-
-  QPushButton* buttonCancel = new QPushButton( tr( "&Cancel" ) , GroupButtons, "buttonCancel" );
-  buttonCancel->setAutoDefault( TRUE );
-  GroupButtonsLayout->addWidget( buttonCancel, 0, 2 );
-
-  TopLayout->addWidget( GroupButtons );
+  myTextBtn = new QPushButton("Text properties...", aSaveBox);
+  myTextDlg = new VisuGUI_TextPrefDlg(this);
+  myTextDlg->setTitleVisible(!SetPref);
+
+  QGroupBox* CheckGroup = new QGroupBox("", this, "CheckGroup");
+  CheckGroup->setColumnLayout(0, Qt::Vertical );
+  CheckGroup->layout()->setSpacing( 0 );
+  CheckGroup->layout()->setMargin( 0 );
+  QGridLayout* CheckGroupLayout = new QGridLayout( CheckGroup->layout() );
+  
+  myPreviewCheck = new QCheckBox(tr("LBL_SHOW_PREVIEW"), CheckGroup);
+  myPreviewCheck->setChecked(false);
+  CheckGroupLayout->addWidget(myPreviewCheck , 0, 0 );
 
   // signals and slots connections ===========================================
   connect( RangeGroup,   SIGNAL( clicked( int ) ), this, SLOT( changeRange( int ) ) );
+  connect( myModeCombo,   SIGNAL( activated( int ) ), this, SLOT( changeScalarMode( int ) ) );
   connect( OrientGroup,  SIGNAL( clicked( int ) ), this, SLOT( changeDefaults( int ) ) );
   connect( XSpin,        SIGNAL( valueChanged( double ) ), this, SLOT( XYChanged( double ) ) );
   connect( YSpin,        SIGNAL( valueChanged( double ) ), this, SLOT( XYChanged( double ) ) );
-  connect( buttonOk,     SIGNAL( clicked() ),      this, SLOT( accept() ) );
-  connect( buttonCancel, SIGNAL( clicked() ),      this, SLOT( reject() ) );
-
+  connect( myTextBtn,    SIGNAL( clicked() ), this, SLOT( onTextPref() ) );
+  connect( myPreviewCheck, SIGNAL( toggled( bool )), this, SLOT( onPreviewCheck( bool ) ) );
+  connect( ColorSpin,    SIGNAL( valueChanged( int ) ), this, SLOT( updatePreview() ));
+  connect( LabelSpin,    SIGNAL( valueChanged( int ) ), this, SLOT( updatePreview() ));
+  connect( WidthSpin,    SIGNAL( valueChanged( double ) ), this, SLOT( updatePreview() ));
+  connect( HeightSpin,   SIGNAL( valueChanged( double ) ), this, SLOT( updatePreview() ));
+  connect( CBLog,        SIGNAL( toggled( bool ) ), this, SLOT( updatePreview() ));
   changeRange( 0 );
   changeDefaults( 0 );
+  myIsStoreTextProp = false;
+  myBusy = false;
 }
 
-/*!
-  Destructor
-*/
-VisuGUI_ScalarBarDlg::~VisuGUI_ScalarBarDlg()
-{
-}
-
-
 /**
  * Initializes dialog box values from resources
  */
-void VisuGUI_ScalarBarDlg::initFromResources() {
-  int sbCol=64,sbLab=5,orient=1;
+void VisuGUI_ScalarBarPane::initFromResources() {
+  int sbCol=64,sbLab=5,orient=0;
   float sbX1=0.01,sbY1=0.1,sbW=0.1,sbH=0.8;
   float sbVmin=0., sbVmax=0.;
   bool sbRange=false;
-  
-  QString Orientation = QAD_CONFIG->getSetting("Visu:SBOrientation");
-  if ( !Orientation.isEmpty() ) {
-    orient = Orientation.toInt();
-    if(orient != 1) {
-      orient=0;
-      sbX1=0.2;
-      sbY1=0.01;
-      sbW=0.6;
-      sbH=0.12;
-    }
+  QString aString;
+
+  SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
+
+  bool anIsArrangeBar = aResourceMgr->booleanValue("VISU", "scalar_bars_default_position", 0);
+  int aPlace = 1;
+  if (anIsArrangeBar){
+    aPlace = aResourceMgr->integerValue("VISU", "scalar_bar_position_num",0);
   }
 
-  QString SBXorigin = QAD_CONFIG->getSetting("Visu:SBXorigin");
-  if ( !SBXorigin.isEmpty() )
-    sbX1 = SBXorigin.toFloat();
-  
-  QString SBYorigin = QAD_CONFIG->getSetting("Visu:SBYorigin");
-  if ( !SBYorigin.isEmpty() )
-    sbY1 = SBYorigin.toFloat();
-  
-  QString SBWidth = QAD_CONFIG->getSetting("Visu:SBWidth");
-  if ( !SBWidth.isEmpty() )
-    sbW = SBWidth.toFloat();
-  
-  QString SBHeight = QAD_CONFIG->getSetting("Visu:SBHeight");
-  if ( !SBHeight.isEmpty() )
-    sbH = SBHeight.toFloat();
-  
-  QString SBColors = QAD_CONFIG->getSetting("Visu:SBNumberOfColors");
-  if ( !SBColors.isEmpty() )
-    sbCol = SBColors.toInt();
-  
-  QString SBLabels = QAD_CONFIG->getSetting("Visu:SBNumberOfLabels");
-  if ( !SBLabels.isEmpty() )
-    sbLab = SBLabels.toInt();
-  
-  QString ImpRange = QAD_CONFIG->getSetting("Visu:SBImposeRange");
-  if ( ImpRange.compare("true") == 0 )
-    sbRange=true;
-  
-  QString SBVmin = QAD_CONFIG->getSetting("Visu:SBMinimumValue");
-  if ( !SBVmin.isEmpty() )
-    sbVmin = SBVmin.toFloat();
+  int aScalarMode = aResourceMgr->integerValue("VISU", "scalar_bar_mode", 0);
+  myModeCombo->setCurrentItem(aScalarMode);
+
+  orient = aResourceMgr->integerValue("VISU", "scalar_bar_orientation", orient);
+  if(orient != 0){
+    orient=1;
+    sbX1=0.2;
+    sbY1=0.01;
+    sbW=0.6;
+    sbH=0.12;
+  }
   
-  QString SBVmax = QAD_CONFIG->getSetting("Visu:SBMaximumValue");
-  if ( !SBVmax.isEmpty() )
-    sbVmax = SBVmax.toFloat();
+  QString propertyName = QString( "scalar_bar_%1_" ).arg( orient == 0 ? "vertical" : "horizontal" );
+
+  sbX1 = aResourceMgr->doubleValue("VISU", propertyName + "x", sbX1);
+  sbY1 = aResourceMgr->doubleValue("VISU", propertyName + "y", sbY1);
+
+  sbW = aResourceMgr->doubleValue("VISU", propertyName + "width", sbW);
+  sbH = aResourceMgr->doubleValue("VISU", propertyName + "height",sbH);
   
-  QString aScaling = QAD_CONFIG->getSetting("Visu:SBScaling");
-  if(aScaling.compare("LOGARITHMIC") == 0) 
-    setLogarithmic(true);
-  else 
-    setLogarithmic(false);
+  if(orient){
+    sbY1 += sbH*(aPlace-1);
+  } else {
+    sbX1 += sbW*(aPlace-1);
+  }
+  sbCol = aResourceMgr->integerValue("VISU" ,"scalar_bar_num_colors", sbCol);
+  sbLab = aResourceMgr->integerValue("VISU", "scalar_bar_num_labels", sbLab);
 
-  if((sbX1 < 0.) || (sbY1 < 0.) || 
+  int rangeType = aResourceMgr->integerValue("VISU" , "scalar_range_type", 0);
+  if (rangeType == 1) sbRange = true;
+  sbVmin = aResourceMgr->doubleValue("VISU", "scalar_range_min", sbVmin);
+  sbVmax = aResourceMgr->doubleValue("VISU", "scalar_range_max", sbVmax);
+
+  bool isLog = aResourceMgr->booleanValue("VISU", "scalar_bar_logarithmic", false);
+  setLogarithmic(isLog);
+  
+  if((sbX1 < 0.) || (sbY1 < 0.) ||
      ((sbX1+sbW) > 1.) || ((sbY1+sbH) > 1.)) {
-    if(orient == 1) {
+    if(orient == 0) {
       sbX1=0.01;
       sbY1=0.1;
       sbW=0.1;
@@ -326,28 +353,74 @@ void VisuGUI_ScalarBarDlg::initFromResources() {
     sbVmin=0.;
     sbVmax=0.;
   }
-  
-  setRange( sbVmin, sbVmax, 0.0, 0.0, sbRange );
-  setPosAndSize( sbX1, sbY1, sbW, sbH, orient == 1);
-  setScalarBarData( sbCol, sbLab );
-}
 
+  setRange( sbVmin, sbVmax, /*0.0, 0.0,*/ sbRange );
+  setPosAndSize( sbX1, sbY1, sbW, sbH, orient == 0);
+  setScalarBarData( sbCol, sbLab );
 
+  // "Title"
+  bool isBold = false, isItalic = false, isShadow = false;
+  int aFontFamily = VTK_ARIAL;
+
+  if ( aResourceMgr->hasValue( "VISU", "scalar_bar_title_font" ) )
+    {
+      QFont f = aResourceMgr->fontValue( "VISU", "scalar_bar_title_font" );
+      
+      if ( f.family() == "Arial" )
+       aFontFamily = VTK_ARIAL;
+      else if ( f.family() == "Courier" )
+       aFontFamily = VTK_COURIER;
+      else if ( f.family() == "Times" )
+       aFontFamily = VTK_TIMES;
+      
+      isBold = f.bold();
+      isItalic = f.italic();
+      isShadow =  f.underline();
+    }
+  
+  QColor aTextColor = aResourceMgr->colorValue( "VISU", "scalar_bar_title_color", QColor( 255, 255, 255 ) );
+  
+  myTextDlg->myTitleFont->SetData(aTextColor, aFontFamily, isBold, isItalic, isShadow);
+
+  // "Labels"
+  isBold = isItalic = isShadow = false;
+  aFontFamily = VTK_ARIAL;
+
+  if ( aResourceMgr->hasValue( "VISU", "scalar_bar_label_font" ) )
+    {
+      QFont f = aResourceMgr->fontValue( "VISU", "scalar_bar_label_font" );
+      
+      if ( f.family() == "Arial" )
+       aFontFamily = VTK_ARIAL;
+      else if ( f.family() == "Courier" )
+       aFontFamily = VTK_COURIER;
+      else if ( f.family() == "Times" )
+       aFontFamily = VTK_TIMES;
+      
+      isBold = f.bold();
+      isItalic = f.italic();
+      isShadow =  f.underline();
+    }
+  
+  aTextColor = aResourceMgr->colorValue( "VISU", "scalar_bar_label_color", QColor( 255, 255, 255 ) );
+  
+  myTextDlg->myLabelFont->SetData(aTextColor, aFontFamily, isBold, isItalic, isShadow);
+}
 
 /**
  * Stores dialog values to resources
  */
-void VisuGUI_ScalarBarDlg::storeToResources() {
-  int orient = (RBvert->isChecked())? 1 : 0;
+void VisuGUI_ScalarBarPane::storeToResources() {
+  int orient = (RBvert->isChecked())? 0 : 1;
   float sbX1   = XSpin->value();
   float sbY1   = YSpin->value();
   float sbW    = WidthSpin->value();
   float sbH    = HeightSpin->value();
   int sbCol  = ColorSpin->value();
   int sbLab  = LabelSpin->value();
-  
+
   if((sbX1 < 0.) || (sbY1 < 0.) || ((sbX1+sbW) > 1.) || ((sbY1+sbH) > 1.)) {
-    if(orient == 1) {
+    if(orient == 0) {
       sbX1=0.01;
       sbY1=0.1;
       sbW=0.17;
@@ -359,92 +432,403 @@ void VisuGUI_ScalarBarDlg::storeToResources() {
       sbH=0.12;
     }
   }
-  
+
   bool sbRange = RBIrange->isChecked();
-  float sbVmin = MinSpin->value();
-  float sbVmax = MaxSpin->value();
-  
+  float sbVmin = (float)(MinEdit->text().toDouble());
+  float sbVmax = (float)(MaxEdit->text().toDouble());
+
   if(sbVmin > sbVmax) {
     sbVmin=0.;
     sbVmax=0.;
   }
-  
-  QAD_CONFIG->addSetting("Visu:SBOrientation",orient);
-  QAD_CONFIG->addSetting("Visu:SBXorigin",sbX1);
-  QAD_CONFIG->addSetting("Visu:SBYorigin",sbY1);
-  QAD_CONFIG->addSetting("Visu:SBWidth",sbW);
-  QAD_CONFIG->addSetting("Visu:SBHeight",sbH);
-  QAD_CONFIG->addSetting("Visu:SBNumberOfColors",sbCol);
-  QAD_CONFIG->addSetting("Visu:SBNumberOfLabels",sbLab);
+
+  SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
+
+  aResourceMgr->setValue("VISU", "scalar_bar_orientation", orient);
+
+  QString propertyName = QString( "scalar_bar_%1_" ).arg( orient == 0 ? "vertical" : "horizontal" );
+
+  aResourceMgr->setValue("VISU", propertyName + "x", sbX1);
+  aResourceMgr->setValue("VISU", propertyName + "y", sbY1);
+  aResourceMgr->setValue("VISU", propertyName + "width", sbW);
+  aResourceMgr->setValue("VISU", propertyName + "height", sbH);
+
+  aResourceMgr->setValue("VISU", "scalar_bar_num_colors", sbCol);
+  aResourceMgr->setValue("VISU", "scalar_bar_num_labels", sbLab);
+
   if(sbRange)
-    QAD_CONFIG->addSetting("Visu:SBImposeRange", "true");
-  else
-    QAD_CONFIG->addSetting("Visu:SBImposeRange", "false");
-  QAD_CONFIG->addSetting("Visu:SBMinimumValue",sbVmin);
-  QAD_CONFIG->addSetting("Visu:SBMaximumValue",sbVmax);
-  if(isLogarithmic())
-    QAD_CONFIG->addSetting("Visu:SBScaling", "LOGARITHMIC");
+    {
+      aResourceMgr->setValue("VISU", "scalar_range_type", 1);
+      aResourceMgr->setValue("VISU", "scalar_range_min" ,sbVmin);
+      aResourceMgr->setValue("VISU", "scalar_range_max" ,sbVmax);
+    }
   else
-    QAD_CONFIG->addSetting("Visu:SBScaling", "LINEAR");
-}
+    aResourceMgr->setValue("VISU", "scalar_range_type", 0);
+  
+  aResourceMgr->setValue("VISU", "scalar_bar_logarithmic", isLogarithmic());
+  ////
+
+  if (myIsStoreTextProp) {
+    // "Title"
+    QColor aTitleColor (255, 255, 255);
+    int aTitleFontFamily = VTK_ARIAL;
+    bool isTitleBold = false;
+    bool isTitleItalic = false;
+    bool isTitleShadow = false;
+
+    myTextDlg->myTitleFont->GetData(aTitleColor, aTitleFontFamily,
+                                    isTitleBold, isTitleItalic, isTitleShadow);
+
+    QFont aTitleFont;
+    
+    aTitleFont.setBold(isTitleBold);
+    aTitleFont.setItalic(isTitleItalic);
+    aTitleFont.setUnderline(isTitleShadow);
+    
+    QString titleFontFamily;
+    switch (aTitleFontFamily) {
+    case VTK_ARIAL:
+      titleFontFamily = "Arial";
+      break;
+    case VTK_COURIER:
+      titleFontFamily = "Courier";
+      break;
+    case VTK_TIMES:
+      titleFontFamily = "Times";
+      break;
+    }
+    aTitleFont.setFamily(titleFontFamily);
+    
+    aResourceMgr->setValue("VISU", "scalar_bar_title_font", aTitleFont);
+    
+    aResourceMgr->setValue("VISU", "scalar_bar_title_color", aTitleColor);
+    
+    // "Label"
+    QColor aLabelColor (255, 255, 255);
+    int aLabelFontFamily = VTK_ARIAL;
+    bool isLabelBold = false;
+    bool isLabelItalic = false;
+    bool isLabelShadow = false;
+
+    myTextDlg->myLabelFont->GetData(aLabelColor, aLabelFontFamily,
+                                    isLabelBold, isLabelItalic, isLabelShadow);
+
+
+    QFont aLabelFont;
+    
+    aLabelFont.setBold(isLabelBold);
+    aLabelFont.setItalic(isLabelItalic);
+    aLabelFont.setUnderline(isLabelShadow);
+
+    QString labelFontFamily;
+    switch (aLabelFontFamily) {
+    case VTK_ARIAL:
+      labelFontFamily = "Arial";
+      break;
+    case VTK_COURIER:
+      labelFontFamily = "Courier";
+      break;
+    case VTK_TIMES:
+      labelFontFamily = "Times";
+      break;
+    }
+
+    aLabelFont.setFamily(labelFontFamily);
+    
+    aResourceMgr->setValue("VISU", "scalar_bar_label_font", aLabelFont);
 
+    aResourceMgr->setValue("VISU", "scalar_bar_label_color", aLabelColor);
+  }
+}
 
 /**
  * Initialise dialog box from presentation object
  */
-void VisuGUI_ScalarBarDlg::initFromPrsObject(VISU::ScalarMap_i* thePrs) {
-  myModeCombo->setCurrentItem(thePrs->GetScalarMode());
-  setPosAndSize( thePrs->GetPosX(), 
-                thePrs->GetPosY(), 
-                thePrs->GetWidth(), 
-                thePrs->GetHeight(), 
-                thePrs->GetOrientation());
+void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ScalarMap_i* thePrs) {
+  initFromResources();
+  myScalarMap = thePrs;
+  setPosAndSize( thePrs->GetPosX(),
+                thePrs->GetPosY(),
+                thePrs->GetWidth(),
+                thePrs->GetHeight(),
+                thePrs->GetBarOrientation());
   switch(thePrs->GetScaling()){
-  case VISU::LOGARITHMIC : 
+  case VISU::LOGARITHMIC :
     setLogarithmic(true);
     break;
-  default:  
+  default:
     setLogarithmic(false);
   }
-  setRange( thePrs->GetMin(), thePrs->GetMax(), 
-           0.0, 0.0, thePrs->isRangeFixed() );
+  float aRange[2];
+  thePrs->GetScalarMapPL()->GetSourceRange(aRange);
+  Rmin = aRange[0]; Rmax = aRange[1];
+  setRange( thePrs->GetMin(), thePrs->GetMax(),
+           /*0.0, 0.0,*/ thePrs->IsRangeFixed() );
   setScalarBarData( thePrs->GetNbColors(), thePrs->GetLabels() );
-  bool isScalarMode = (thePrs->GetField()->myNbComp > 1);
+
+  // Update myModeCombo
+  int aNbComp = thePrs->GetField()->myNbComp;
+  bool isScalarMode = (aNbComp > 1);
+  myModeCombo->clear();
+  myModeCombo->insertItem("<Modulus>");
+  const VISU::PField& aField = thePrs->GetField();
+  const VISU::TNames& aCompNames = aField->myCompNames;
+  const VISU::TNames& aUnitNames = aField->myUnitNames;
+  for(int i = 0; i < aNbComp; i++){
+    QString aComponent = QString(aCompNames[i]).simplifyWhiteSpace();
+    if(aComponent.isNull() || aComponent == "")
+      aComponent = "Component " + QString::number(i+1);
+    else
+      aComponent = "[" + QString::number(i+1) + "] " + aComponent;
+
+    QString anUnit = QString(aUnitNames[i]).simplifyWhiteSpace();
+    if(anUnit.isNull() || anUnit == "")
+      anUnit = "-";
+    
+    aComponent = aComponent + ", " + anUnit;
+
+    myModeCombo->insertItem(aComponent);
+  }
+  //
+  myModeCombo->setCurrentItem(thePrs->GetScalarMode());
+  if (aNbComp==1){
+    myModeCombo->setCurrentItem(1);
+  }
+  //
   myModeLbl->setEnabled(isScalarMode);
   myModeCombo->setEnabled(isScalarMode);
+
+  // "Title"
+  myTextDlg->setTitleText(QString(thePrs->GetTitle()));
+
+  float R, G, B;
+  thePrs->GetTitleColor(&R, &G, &B);
+
+  myTextDlg->myTitleFont->SetData(QColor((int)(R*255.), (int)(G*255.), (int)(B*255.)),
+                                  thePrs->GetTitFontType(),
+                                  thePrs->IsBoldTitle(),
+                                  thePrs->IsItalicTitle(),
+                                  thePrs->IsShadowTitle());
+
+  // "Labels"
+  thePrs->GetLabelColor(&R, &G, &B);
+
+  myTextDlg->myLabelFont->SetData(QColor((int)(R*255.), (int)(G*255.), (int)(B*255.)),
+                                  thePrs->GetLblFontType(),
+                                  thePrs->IsBoldLabel(),
+                                  thePrs->IsItalicLabel(),
+                                  thePrs->IsShadowLabel());
+
+  // Draw Preview
+  if (myPreviewCheck->isChecked()) {
+    createScalarBar();
+    updatePreview();
+  }
+
+}
+/*! Slot update preview of scalar bar, if preview is checked
+ */
+void VisuGUI_ScalarBarPane::updatePreview()
+{
+  if (myPreviewCheck->isChecked()) {
+    if (SVTK_ViewWindow* vf = VISU::GetActiveViewWindow<SVTK_ViewWindow>()) {
+      deleteScalarBar();
+      createScalarBar();
+      vf->Repaint();
+    }
+  }
 }
 
+/*! Creating preview scalar bar
+ */
+void VisuGUI_ScalarBarPane::createScalarBar()
+{
+  if (VISU::GetActiveViewWindow<SVTK_ViewWindow>() == NULL) return;
+  if (myPreviewActor != 0) return;
+  if (myScalarMap == NULL) return;
+
+  if (!check()) return;
+
+  if ( myBusy ) return;
 
+  myBusy = true;
+
+  int sbCol,sbLab;
+  sbCol = getNbColors();
+  sbLab = getNbLabels();
+  if(sbCol < 2) sbCol=2;
+  if(sbCol > 64) sbCol=64;
+  if(sbLab < 2) sbLab=2;
+  if(sbLab > 65) sbLab=65;
+  myPreviewActor = VISU_ScalarMapAct::New();
+  VISU_ScalarBarActor* aScalarBarActor = myPreviewActor->GetScalarBar();
+  myPreviewActor->GetScalarBar()->VisibilityOn();
+  myPreviewActor->PickableOff();
+  
+  myScalarMap->SetScalarMode(myModeCombo->currentItem());
+  myScalarMap->SetPosition(getX(),getY());
+  myScalarMap->SetSize(getWidth(),getHeight());
+  myScalarMap->SetBarOrientation((RBvert->isChecked())? VISU::ScalarMap::VERTICAL : VISU::ScalarMap::HORIZONTAL);
+  if(isLogarithmic())
+    myScalarMap->SetScaling(VISU::LOGARITHMIC);
+  else
+    myScalarMap->SetScaling(VISU::LINEAR);
+  if (RBFrange->isChecked()) {
+    myScalarMap->SetSourceRange();
+  } else {
+    myScalarMap->SetRange(MinEdit->text().toDouble(), MaxEdit->text().toDouble());
+  }
+  myScalarMap->SetNbColors(sbCol);
+  myScalarMap->SetLabels(sbLab); 
+  
+  myScalarMap->GetScalarMapPL()->SetNbColors(sbCol);
+  myScalarMap->GetScalarMapPL()->Update();
+    
+  aScalarBarActor->SetLookupTable(myScalarMap->GetScalarMapPL()->GetBarTable());
+  
+  if (myTextDlg->getTitleText().latin1() != "") 
+    aScalarBarActor->SetTitle(myTextDlg->getTitleText().latin1());
+  else
+    aScalarBarActor->SetTitle(myScalarMap->GetTitle());
+  aScalarBarActor->SetOrientation(getOrientation());
+  aScalarBarActor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport();
+  aScalarBarActor->GetPositionCoordinate()->SetValue(getX(),getY());
+  aScalarBarActor->SetWidth(getWidth());
+  aScalarBarActor->SetHeight(getHeight());
+  aScalarBarActor->SetNumberOfLabels(sbLab);
+  aScalarBarActor->SetMaximumNumberOfColors(sbCol);
+
+  // title text property
+  QColor aTitleColor;
+  int aTitleFontFamily;
+  bool isTitleBold;
+  bool isTitleItalic;
+  bool isTitleShadow;
+  myTextDlg->myTitleFont->GetData(aTitleColor,aTitleFontFamily,
+                                 isTitleBold,isTitleItalic,isTitleShadow);
+  vtkTextProperty* aTitleProp = aScalarBarActor->GetTitleTextProperty();
+  aTitleProp->SetFontFamily(aTitleFontFamily);
+  aTitleProp->SetColor(float(aTitleColor.red())/255.,
+                      float(aTitleColor.green())/255.,
+                      float(aTitleColor.blue())/255.);
+  (isTitleBold)? aTitleProp->BoldOn() : aTitleProp->BoldOff();
+  (isTitleItalic)? aTitleProp->ItalicOn() : aTitleProp->ItalicOff();
+  (isTitleShadow)? aTitleProp->ShadowOn() : aTitleProp->ShadowOff();
+  
+  // label text property
+  QColor aLabelColor;
+  int aLabelFontFamily;
+  bool isLabelBold;
+  bool isLabelItalic;
+  bool isLabelShadow;
+  myTextDlg->myLabelFont->GetData(aLabelColor, aLabelFontFamily,
+                                 isLabelBold, isLabelItalic, isLabelShadow);
+  vtkTextProperty* aLabelProp = aScalarBarActor->GetLabelTextProperty();
+  aLabelProp->SetFontFamily(aLabelFontFamily);
+  aLabelProp->SetColor(float(aLabelColor.red())/255.,
+                      float(aLabelColor.green())/255.,
+                      float(aLabelColor.blue())/255.);
+  (isLabelBold)? aLabelProp->BoldOn() : aLabelProp->BoldOff();
+  (isLabelItalic)? aLabelProp->ItalicOn() : aLabelProp->ItalicOff();
+  (isLabelShadow)? aLabelProp->ShadowOn() : aLabelProp->ShadowOff();
+
+  aScalarBarActor->Modified();
+
+  VISU::GetActiveViewWindow<SVTK_ViewWindow>()->AddActor(myPreviewActor);
+
+  myBusy = false;
+}
+/*! Deleting preview scalar bar
+ */
+void VisuGUI_ScalarBarPane::deleteScalarBar()
+{
+  if ( myBusy ) return;
+  
+  if (myPreviewActor == 0) return;
+  if (SVTK_ViewWindow* vf = VISU::GetActiveViewWindow<SVTK_ViewWindow>()){
+    vf->RemoveActor(myPreviewActor);
+    myPreviewActor->GetScalarBar()->VisibilityOff();
+  }
+  myPreviewActor->Delete();
+  myPreviewActor = 0;
+}
+/*! public: Deleting preview scalar bar
+ */
+void VisuGUI_ScalarBarPane::deletePreview()
+{
+  deleteScalarBar();
+}
 /**
  * Store values to presentation object
  */
-void VisuGUI_ScalarBarDlg::storeToPrsObject(VISU::ScalarMap_i* thePrs) {
+int VisuGUI_ScalarBarPane::storeToPrsObject(VISU::ScalarMap_i* thePrs) {
   thePrs->SetScalarMode(myModeCombo->currentItem());
   thePrs->SetPosition(XSpin->value(), YSpin->value());
   thePrs->SetSize(WidthSpin->value(), HeightSpin->value());
-  thePrs->SetOrientation((RBvert->isChecked())? VISU::ScalarMap::VERTICAL : VISU::ScalarMap::HORIZONTAL);
-  if(isLogarithmic()) 
-    thePrs->SetScaling(VISU::LOGARITHMIC); 
+  thePrs->SetBarOrientation((RBvert->isChecked())? VISU::ScalarMap::VERTICAL : VISU::ScalarMap::HORIZONTAL);
+  if(isLogarithmic())
+    thePrs->SetScaling(VISU::LOGARITHMIC);
   else
     thePrs->SetScaling(VISU::LINEAR);
+
   if (RBFrange->isChecked()) {
-    thePrs->CalculateRange();
+    thePrs->SetSourceRange();
   } else {
-    thePrs->SetRange(MinSpin->value(), MaxSpin->value());
-  }    
+    thePrs->SetRange(MinEdit->text().toDouble(), MaxEdit->text().toDouble());
+  }
   thePrs->SetNbColors(ColorSpin->value());
   thePrs->SetLabels(LabelSpin->value());
-  thePrs->Update();
 
   if (isToSave()) storeToResources();
-}
 
+  if (myIsStoreTextProp) {
+    // "Title"
+    thePrs->SetTitle(myTextDlg->getTitleText().latin1());
+
+    QColor aTitColor (255, 255, 255);
+    int aTitleFontFamily = VTK_ARIAL;
+    bool isTitleBold = false;
+    bool isTitleItalic = false;
+    bool isTitleShadow = false;
+
+    myTextDlg->myTitleFont->GetData(aTitColor, aTitleFontFamily,
+                                    isTitleBold, isTitleItalic, isTitleShadow);
+
+    thePrs->SetBoldTitle(isTitleBold);
+    thePrs->SetItalicTitle(isTitleItalic);
+    thePrs->SetShadowTitle(isTitleShadow);
+    thePrs->SetTitFontType(aTitleFontFamily);
+    thePrs->SetTitleColor(aTitColor.red()/255.,
+                         aTitColor.green()/255.,
+                         aTitColor.blue()/255.);
+
+    // "Label"
+    QColor aLblColor (255, 255, 255);
+    int aLabelFontFamily = VTK_ARIAL;
+    bool isLabelBold = false;
+    bool isLabelItalic = false;
+    bool isLabelShadow = false;
+
+    myTextDlg->myLabelFont->GetData(aLblColor, aLabelFontFamily,
+                                    isLabelBold, isLabelItalic, isLabelShadow);
+
+    thePrs->SetBoldLabel(isLabelBold);
+    thePrs->SetItalicLabel(isLabelItalic);
+    thePrs->SetShadowLabel(isLabelShadow);
+    thePrs->SetLblFontType(aLabelFontFamily);
+    thePrs->SetLabelColor(aLblColor.red()/255.,
+                         aLblColor.green()/255.,
+                         aLblColor.blue()/255.);
+  }
 
+  return 1;
+}
 
 /*!
   Called when orientation is changed
 */
-void VisuGUI_ScalarBarDlg::changeDefaults( int )
+void VisuGUI_ScalarBarPane::changeDefaults( int )
 {
   if ( RBvert->isChecked() ) {
     XSpin->setValue( myVerX );
@@ -458,53 +842,93 @@ void VisuGUI_ScalarBarDlg::changeDefaults( int )
     WidthSpin->setValue( myHorW );
     HeightSpin->setValue( myHorH );
   }
+  updatePreview();
 }
 
 /*!
   Called when Range mode is changed
 */
-void VisuGUI_ScalarBarDlg::changeRange( int )
+void VisuGUI_ScalarBarPane::changeRange( int )
 {
+  int mode = -1;
+  if ( RBFrange->isChecked() )
+    mode = 0;
+  if ( RBIrange->isChecked() )
+    mode = 1;
+  if ( myRangeMode == mode )
+    return;
   //MinSpin->setMaxValue( Fmin );
   //MaxSpin->setMinValue( Fmax );
-  if ( RBFrange->isChecked() ) { 
+  if ( RBFrange->isChecked() ) {
     //MinLabel->setEnabled( false );
-    MinSpin->setEnabled( false );
+    MinEdit->setEnabled( false );
     //MaxLabel->setEnabled( false );
-    MaxSpin->setEnabled( false );
-    MinSpin->setValue( Fmin );
-    MaxSpin->setValue( Fmax );
+    MaxEdit->setEnabled( false );
+    if ( mode != -1 ) {
+      Imin = MinEdit->text().toDouble();
+      Imax = MaxEdit->text().toDouble();
+    }
+    MinEdit->setText( QString::number( Rmin ) );
+    MaxEdit->setText( QString::number( Rmax ) );
   }
   else {
     //MinLabel->setEnabled( true );
-    MinSpin->setEnabled( true );
+    MinEdit->setEnabled( true );
     //MaxLabel->setEnabled( true );
-    MaxSpin->setEnabled( true );
-    MinSpin->setValue( Imin );
-    MaxSpin->setValue( Imax );
+    MaxEdit->setEnabled( true );
+    MinEdit->setText( QString::number( Imin ) );
+    MaxEdit->setText( QString::number( Imax ) );
   }
+  myRangeMode = mode;
+  updatePreview();
 }
 
 /*!
   Called when X,Y position is changed
 */
-void VisuGUI_ScalarBarDlg::XYChanged( double )
+void VisuGUI_ScalarBarPane::XYChanged( double )
 {
-  QAD_SpinBoxDbl* snd = (QAD_SpinBoxDbl*)sender();
+  QtxDblSpinBox* snd = (QtxDblSpinBox*)sender();
   if ( snd == XSpin ) {
     WidthSpin->setMaxValue( 1.0 - XSpin->value() );
   }
   if ( snd == YSpin ) {
     HeightSpin->setMaxValue( 1.0 - YSpin->value() );
   }
+  updatePreview();
+}
+
+/*!
+  Called when scalar mode is changed
+*/
+void VisuGUI_ScalarBarPane::changeScalarMode( int theMode )
+{
+  if ( myScalarMap ) {
+    if ( RBFrange->isChecked() ) {
+      float aRange[2];
+      myScalarMap->SetScalarMode(theMode);
+      myScalarMap->GetScalarMapPL()->GetSourceRange(aRange);
+      MinEdit->setText( QString::number( aRange[0] ) );
+      MaxEdit->setText( QString::number( aRange[1] ) );
+    }
+  }
 }
 
 /*!
   Sets default values and range mode
 */
-void VisuGUI_ScalarBarDlg::setRange( double imin, double imax, double fmin, double fmax, bool sbRange )
+void VisuGUI_ScalarBarPane::setRange( double imin, double imax/*, double fmin, double fmax*/, bool sbRange )
 {
-  Imin = imin; Imax = imax; Fmin = fmin; Fmax = fmax;
+  Imin = imin; Imax = imax;// Fmin = fmin; Fmax = fmax;
+  if ( RBIrange->isChecked() ) {
+    MinEdit->setText( QString::number( Imin ) );
+    MaxEdit->setText( QString::number( Imax ) );
+  }
+  else {
+    MinEdit->setText( QString::number( Rmin ) );
+    MaxEdit->setText( QString::number( Rmax ) );
+  }
+  myRangeMode = -1;
   if( sbRange )
     RBIrange->setChecked( true );
   else
@@ -512,10 +936,18 @@ void VisuGUI_ScalarBarDlg::setRange( double imin, double imax, double fmin, doub
   changeRange( 0 );
 }
 
+/*!
+  Sets default values and range mode
+*/
+void VisuGUI_ScalarBarPane::setDefaultRange(double imin, double imax){
+  Rmin = imin;
+  Rmax = imax;
+}
+
 /*!
   Sets size and position
 */
-void VisuGUI_ScalarBarDlg::setPosAndSize( double x, double y, double w, double h, bool vert )
+void VisuGUI_ScalarBarPane::setPosAndSize( double x, double y, double w, double h, bool vert )
 {
   if ( vert ) {
     myVerX = x;
@@ -537,7 +969,7 @@ void VisuGUI_ScalarBarDlg::setPosAndSize( double x, double y, double w, double h
 /*!
   Sets colors and labels number
 */
-void VisuGUI_ScalarBarDlg::setScalarBarData( int colors, int labels ) 
+void VisuGUI_ScalarBarPane::setScalarBarData( int colors, int labels )
 {
   ColorSpin->setValue( colors );
   LabelSpin->setValue( labels );
@@ -546,7 +978,7 @@ void VisuGUI_ScalarBarDlg::setScalarBarData( int colors, int labels )
 /*!
   Gets orientation
 */
-int  VisuGUI_ScalarBarDlg::getOrientation() 
+int  VisuGUI_ScalarBarPane::getOrientation()
 {
   if (RBvert->isChecked() )
     return  1;
@@ -555,97 +987,197 @@ int  VisuGUI_ScalarBarDlg::getOrientation()
 }
 
 /*!
-  Gets Scalar Bar's x position
+  Called when <OK> button is clicked, validates data and closes dialog
 */
-double VisuGUI_ScalarBarDlg::getX()
+bool VisuGUI_ScalarBarPane::check()
 {
-  return XSpin->value();
+  double minVal = MinEdit->text().toDouble();
+  double maxVal = MaxEdit->text().toDouble();
+  if ( RBIrange->isChecked() ) {
+    if (minVal >= maxVal) {
+      SUIT_MessageBox::warn1( this,tr("WRN_VISU"),
+                            tr("MSG_MINMAX_VALUES"),
+                            tr("BUT_OK"));
+      return false;
+    }
+  }
+  // check if logarithmic mode is on and check imposed range to not contain negative values
+  if ( CBLog->isChecked() ) {
+    if ( RBIrange->isChecked() ) {
+      if ( (minVal > 0) && (maxVal > 0) ) {
+       // nothing to do
+      }
+      else {
+       SUIT_MessageBox::warn1( this,
+                               tr("WRN_VISU"),
+                               tr("WRN_LOGARITHMIC_RANGE"),
+                               tr("BUT_OK"));
+       return false;
+      }
+    }
+    else {
+      if ( Rmin > 0 && Rmax > 0 ) {
+       // nothing to do
+      }
+      else {
+       SUIT_MessageBox::warn1( this,
+                               tr("WRN_VISU"),
+                               tr("WRN_LOGARITHMIC_FIELD_RANGE"),
+                               tr("BUT_OK"));
+       RBIrange->setChecked(1);
+       changeRange(1);
+       //MinEdit->setText( QString::number( Rmin ) );
+       //MaxEdit->setText( QString::number( Rmax ) );
+       return false;
+      }
+    }
+  }
+  return true;
 }
 
-/*!
-  Gets Scalar Bar's y position
-*/
-double VisuGUI_ScalarBarDlg::getY()
+void VisuGUI_ScalarBarPane::onTextPref()
 {
-  return YSpin->value();
+  myIsStoreTextProp = myTextDlg->exec();
+  updatePreview();
 }
 
-/*!
-  Gets Scalar Bar's width
-*/
-double VisuGUI_ScalarBarDlg::getWidth()
+void VisuGUI_ScalarBarPane::onPreviewCheck (bool thePreview)
 {
-  return WidthSpin->value();
+  if (SVTK_ViewWindow* vf = VISU::GetActiveViewWindow<SVTK_ViewWindow>()) {
+    if (thePreview) {
+      createScalarBar();
+    } else {
+      deleteScalarBar();
+    }
+    vf->Repaint();
+  }
 }
 
-/*!
-  Gets Scalar Bar's height
-*/
-double VisuGUI_ScalarBarDlg::getHeight()
-{
-  return HeightSpin->value();
-}
+//#######################################################################################
 
 /*!
-  Gets Scalar Bar's number of colors
+  Constructor
 */
-int VisuGUI_ScalarBarDlg::getNbColors()
+VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg (SalomeApp_Module* theModule, bool SetPref)
+    : QDialog(VISU::GetDesktop(theModule), 0, true,
+              WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
 {
-  return ColorSpin->value();
-}
+  setName("VisuGUI_ScalarBarDlg");
+  setCaption(SetPref ? tr("DLG_PREF_TITLE") : tr("DLG_PROP_TITLE"));
+  setSizeGripEnabled(TRUE);
 
-/*!
-  Gets Scalar Bar's number of labels
-*/
-int VisuGUI_ScalarBarDlg::getNbLabels()
-{
-  return LabelSpin->value();
-}
+  QVBoxLayout* TopLayout = new QVBoxLayout(this);
+  TopLayout->setSpacing(6);
+  TopLayout->setMargin(11);
 
-/*!
-  Returns true if imposed range is used
-*/
-bool VisuGUI_ScalarBarDlg::isIRange()
-{
-  return RBIrange->isChecked();
-}
+  myScalarPane = new VisuGUI_ScalarBarPane(this, SetPref);
+  TopLayout->addWidget(myScalarPane);
 
-/*!
-  Gets Min value
-*/
-double VisuGUI_ScalarBarDlg::getMin()
-{
-  return MinSpin->value();
-}
+  // Common buttons ===========================================================
+  QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
+  GroupButtons->setColumnLayout(0, Qt::Vertical );
+  GroupButtons->layout()->setSpacing( 0 );
+  GroupButtons->layout()->setMargin( 0 );
+  QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
+  GroupButtonsLayout->setAlignment( Qt::AlignTop );
+  GroupButtonsLayout->setSpacing( 6 );
+  GroupButtonsLayout->setMargin( 11 );
 
-/*!
-  Gets Max value
-*/
-double VisuGUI_ScalarBarDlg::getMax()
-{
-  return MaxSpin->value();
+  QPushButton* buttonOk = new QPushButton( tr( "&OK" ), GroupButtons, "buttonOk" );
+  buttonOk->setAutoDefault( TRUE );
+  buttonOk->setDefault( TRUE );
+  GroupButtonsLayout->addWidget( buttonOk, 0, 0 );
+  GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
+
+  QPushButton* buttonCancel = new QPushButton( tr( "&Cancel" ) , GroupButtons, "buttonCancel" );
+  buttonCancel->setAutoDefault( TRUE );
+  GroupButtonsLayout->addWidget( buttonCancel, 0, 2 );
+
+  TopLayout->addWidget( GroupButtons );
+
+  connect( buttonOk,     SIGNAL( clicked() ), this, SLOT( accept() ) );
+  connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) );
 }
 
 /*!
-  return true if "save pref" flag is on
+  Called when <OK> button is clicked, validates data and closes dialog
 */
-bool VisuGUI_ScalarBarDlg::isToSave()
+void VisuGUI_ScalarBarDlg::accept()
 {
-  return CBSave ? CBSave->isChecked() : false;
+  if (myScalarPane->check()) 
+    {
+      myScalarPane->deletePreview(); 
+      QDialog::accept();
+    }
 }
 
 /*!
-  Returns true if "Logarithmic scaling" check box is on
+  Called when <Cancel> button is clicked, remove preview and closes dialog
 */
-bool VisuGUI_ScalarBarDlg::isLogarithmic()
+void VisuGUI_ScalarBarDlg::reject()
 {
-  return CBLog->isChecked();
+  myScalarPane->deletePreview();
+  QDialog::reject();
 }
 
-/*!
-  Sets "Logarithmic scaling" check box on/off
-*/
-void VisuGUI_ScalarBarDlg::setLogarithmic( bool on )
+
+//#######################################################################################
+VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent)
+  : QDialog(parent, 0, true, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
 {
-  CBLog->setChecked( on );
+  setName("VisuGUI_TextPrefDlg");
+  setCaption(tr("TIT_TEXT_PREF"));
+  setSizeGripEnabled(TRUE);
+
+  QVBoxLayout* TopLayout = new QVBoxLayout(this);
+  TopLayout->setSpacing(6);
+  TopLayout->setMargin(11);
+
+  // "Title" grp
+  QGroupBox* aTitleGrp = new QGroupBox (2, Qt::Vertical, tr("LBL_TITLE"), this);
+
+  //   edit line
+  myTitleEdt = new QLineEdit (aTitleGrp);
+
+  //   font
+  QHBox* aHBox = new QHBox (aTitleGrp);
+  aHBox->setSpacing(5);
+  myTitleFont = new SVTK_FontWidget (aHBox);
+
+  TopLayout->addWidget(aTitleGrp);
+
+  // "Labels" grp
+  QGroupBox* aLabelsGrp = new QGroupBox (1, Qt::Vertical, tr("LBL_LABELS"), this);
+
+  //   font
+  aHBox = new QHBox (aLabelsGrp);
+  aHBox->setSpacing(5);
+  myLabelFont = new SVTK_FontWidget (aHBox);
+
+  TopLayout->addWidget(aLabelsGrp);
+
+  // Common buttons ===========================================================
+  QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" );
+  GroupButtons->setColumnLayout(0, Qt::Vertical );
+  GroupButtons->layout()->setSpacing( 0 );
+  GroupButtons->layout()->setMargin( 0 );
+  QGridLayout* GroupButtonsLayout = new QGridLayout( GroupButtons->layout() );
+  GroupButtonsLayout->setAlignment( Qt::AlignTop );
+  GroupButtonsLayout->setSpacing( 6 );
+  GroupButtonsLayout->setMargin( 11 );
+
+  QPushButton* buttonOk = new QPushButton( tr( "&OK" ), GroupButtons, "buttonOk" );
+  buttonOk->setAutoDefault( TRUE );
+  buttonOk->setDefault( TRUE );
+  GroupButtonsLayout->addWidget( buttonOk, 0, 0 );
+  GroupButtonsLayout->addItem( new QSpacerItem( 5, 5, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 );
+
+  QPushButton* buttonCancel = new QPushButton( tr( "&Cancel" ) , GroupButtons, "buttonCancel" );
+  buttonCancel->setAutoDefault( TRUE );
+  GroupButtonsLayout->addWidget( buttonCancel, 0, 2 );
+
+  TopLayout->addWidget( GroupButtons );
+
+  connect(buttonOk,     SIGNAL(clicked()), this, SLOT(accept()));
+  connect(buttonCancel, SIGNAL(clicked()), this, SLOT(reject()));
 }