Salome HOME
Join modifications from branch OCC_development_for_3_2_0a2
[modules/visu.git] / src / VISUGUI / VisuGUI_ScalarBarDlg.cxx
index 5ad002e1e7ac89f1af0e203c7a39a83946c3bd6a..54c96b88ecbbc46435ecdaf58da03ad7f1d09f24 100644 (file)
 
 #include "VisuGUI.h"
 #include "VisuGUI_Tools.h"
-#include "VisuGUI_FontWg.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"
 
 #include "SalomeApp_Application.h"
 
 #include <qvalidator.h>
 #include <qcolordialog.h>
 
+#include <vtkTextProperty.h>
+
 using namespace std;
 
 
 VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane (QWidget * parent, bool SetPref):
-  QVBox(parent)
+  QVBox(parent), myPreviewActor(0)
 {
-  myVerX = 0.01;  myVerY = 0.10;  myVerW = 0.10;  myVerH = 0.80;
-  myHorX = 0.20;  myHorY = 0.01;  myHorW = 0.60;  myHorH = 0.12;
+  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);
+  
+  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);
+  
   Imin = 0.0; Imax = 0.0; /*Fmin = 0.0; Fmax = 0.0;*/ Rmin = 0.0; Rmax = 0.0;
   myRangeMode = -1;
 
@@ -75,10 +93,6 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane (QWidget * parent, bool SetPref):
   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->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
@@ -233,24 +247,40 @@ VisuGUI_ScalarBarPane::VisuGUI_ScalarBarPane (QWidget * parent, bool SetPref):
   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( 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;
 }
 
-
 /**
  * Initializes dialog box values from resources
  */
 void VisuGUI_ScalarBarPane::initFromResources() {
-  int sbCol=64,sbLab=5,orient=1;
+  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;
@@ -258,36 +288,51 @@ void VisuGUI_ScalarBarPane::initFromResources() {
 
   SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
 
-  orient = aResourceMgr->integerValue("Visu:SBOrientation",orient);
-  if(orient != 1){
-    orient=0;
+  bool anIsArrangeBar = aResourceMgr->booleanValue("VISU", "scalar_bars_default_position", 0);
+  int aPlace = 1;
+  if (anIsArrangeBar){
+    aPlace = aResourceMgr->integerValue("VISU", "scalar_bar_position_num",0);
+  }
+
+  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 propertyName = QString( "scalar_bar_%1_" ).arg( orient == 0 ? "vertical" : "horizontal" );
 
-  sbX1 = aResourceMgr->doubleValue("Visu:SBXorigin",sbX1);
-  sbY1 = aResourceMgr->doubleValue("Visu:SBYorigin",sbY1);
+  sbX1 = aResourceMgr->doubleValue("VISU", propertyName + "x", sbX1);
+  sbY1 = aResourceMgr->doubleValue("VISU", propertyName + "y", sbY1);
 
-  sbW = aResourceMgr->doubleValue("Visu:SBWidth",sbW);
-  sbH = aResourceMgr->doubleValue("Visu:SBHeight",sbH);
-
-  sbCol = aResourceMgr->integerValue("Visu:SBNumberOfColors",sbCol);
-  sbLab = aResourceMgr->integerValue("Visu:SBNumberOfLabels",sbLab);
-  sbRange = aResourceMgr->booleanValue("Visu:SBImposeRange",sbRange);
-  sbVmin = aResourceMgr->doubleValue("Visu:SBMinimumValue",sbVmin);
-  sbVmax = aResourceMgr->doubleValue("Visu:SBMaximumValue",sbVmax);
+  sbW = aResourceMgr->doubleValue("VISU", propertyName + "width", sbW);
+  sbH = aResourceMgr->doubleValue("VISU", propertyName + "height",sbH);
+  
+  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);
 
-  QString aScaling = aResourceMgr->stringValue("Visu:SBMaximumValue","LINEAR");
-  if(aScaling.compare("LOGARITHMIC") == 0)
-    setLogarithmic(true);
-  else
-    setLogarithmic(false);
+  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;
@@ -310,85 +355,63 @@ void VisuGUI_ScalarBarPane::initFromResources() {
   }
 
   setRange( sbVmin, sbVmax, /*0.0, 0.0,*/ sbRange );
-  setPosAndSize( sbX1, sbY1, sbW, sbH, orient == 1);
+  setPosAndSize( sbX1, sbY1, sbW, sbH, orient == 0);
   setScalarBarData( sbCol, sbLab );
 
   // "Title"
-  aString = aResourceMgr->stringValue("Visu:IsBoldTitle","true");
-  bool isBold = (aString.compare("true") == 0);
-  aString = aResourceMgr->stringValue("Visu:IsItalicTitle","true");
-  bool isItalic = (aString.compare("true") == 0);
-  aString = aResourceMgr->stringValue("Visu:IsShadowTitle","true");
-  bool isShadow = (aString.compare("true") == 0);
-
-  int aFontType = aResourceMgr->integerValue("Visu:TitFontType",0);
+  bool isBold = false, isItalic = false, isShadow = false;
   int aFontFamily = VTK_ARIAL;
-  switch (aFontType) {
-  case 0:
-    aFontFamily = VTK_ARIAL; break;
-  case 1:
-    aFontFamily = VTK_COURIER; break;
-  case 2:
-    aFontFamily = VTK_TIMES; break;
-  }
-
-  float R = aResourceMgr->doubleValue("Visu:TitleColorR",1.0);
-  if (R > 1) R = 1;
-  if (R < 0) R = 0;
-
-  float G = aResourceMgr->doubleValue("Visu:TitleColorG",1.0);
-  if (G > 1) G = 1;
-  if (G < 0) G = 0;
 
-  float B = aResourceMgr->doubleValue("Visu:TitleColorB",1.0);
-  if (B > 1) B = 1;
-  if (B < 0) B = 0;
-
-  myTextDlg->myTitleFont->SetData(QColor((int)(R*255.), (int)(G*255.), (int)(B*255.)),
-                                  aFontFamily,
-                                  isBold, isItalic, isShadow);
+  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"
-  aString = aResourceMgr->stringValue("Visu:IsBoldLabel","true");
-  isBold = (aString.compare("true") == 0);
-  aString = aResourceMgr->stringValue("Visu:IsItalicLabel","true");
-  isItalic = (aString.compare("true") == 0);
-  aString = aResourceMgr->stringValue("Visu:IsShadowLabel","true");
-  isShadow = (aString.compare("true") == 0);
-
-  aFontType = aResourceMgr->integerValue("Visu:LblFontType",0);
+  isBold = isItalic = isShadow = false;
   aFontFamily = VTK_ARIAL;
-  switch (aFontType) {
-  case 0:
-    aFontFamily = VTK_ARIAL; break;
-  case 1:
-    aFontFamily = VTK_COURIER; break;
-  case 2:
-    aFontFamily = VTK_TIMES; break;
-  }
-
-  R = aResourceMgr->doubleValue("Visu:LabelColorR",1.0);
-  if (R > 1) R = 1;
-  if (R < 0) R = 0;
-
-  G = aResourceMgr->doubleValue("Visu:LabelColorG",1.0);
-  if (G > 1) G = 1;
-  if (G < 0) G = 0;
-
-  B = aResourceMgr->doubleValue("Visu:LabelColorB",1.0);
-  if (B > 1) B = 1;
-  if (B < 0) B = 0;
 
-  myTextDlg->myLabelFont->SetData(QColor((int)(R*255.), (int)(G*255.), (int)(B*255.)),
-                                  aFontFamily,
-                                  isBold, isItalic, isShadow);
+  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_ScalarBarPane::storeToResources() {
-  int orient = (RBvert->isChecked())? 1 : 0;
+  int orient = (RBvert->isChecked())? 0 : 1;
   float sbX1   = XSpin->value();
   float sbY1   = YSpin->value();
   float sbW    = WidthSpin->value();
@@ -397,7 +420,7 @@ void VisuGUI_ScalarBarPane::storeToResources() {
   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;
@@ -421,24 +444,29 @@ void VisuGUI_ScalarBarPane::storeToResources() {
 
   SUIT_ResourceMgr* aResourceMgr = VISU::GetResourceMgr();
 
-  aResourceMgr->setValue("Visu:SBOrientation",orient);
-  aResourceMgr->setValue("Visu:SBXorigin",sbX1);
-  aResourceMgr->setValue("Visu:SBYorigin",sbY1);
-  aResourceMgr->setValue("Visu:SBWidth",sbW);
-  aResourceMgr->setValue("Visu:SBHeight",sbH);
-  aResourceMgr->setValue("Visu:SBNumberOfColors",sbCol);
-  aResourceMgr->setValue("Visu:SBNumberOfLabels",sbLab);
+  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)
-    aResourceMgr->setValue("Visu:SBImposeRange", "true");
-  else
-    aResourceMgr->setValue("Visu:SBImposeRange", "false");
-  aResourceMgr->setValue("Visu:SBMinimumValue",sbVmin);
-  aResourceMgr->setValue("Visu:SBMaximumValue",sbVmax);
-  if(isLogarithmic())
-    aResourceMgr->setValue("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
-    aResourceMgr->setValue("Visu:SBScaling", "LINEAR");
-
+    aResourceMgr->setValue("VISU", "scalar_range_type", 0);
+  
+  aResourceMgr->setValue("VISU", "scalar_bar_logarithmic", isLogarithmic());
   ////
 
   if (myIsStoreTextProp) {
@@ -452,36 +480,30 @@ void VisuGUI_ScalarBarPane::storeToResources() {
     myTextDlg->myTitleFont->GetData(aTitleColor, aTitleFontFamily,
                                     isTitleBold, isTitleItalic, isTitleShadow);
 
-    if (isTitleBold)
-      aResourceMgr->setValue("Visu:IsBoldTitle","true");
-    else
-      aResourceMgr->setValue("Visu:IsBoldTitle","false");
-
-    if (isTitleItalic)
-      aResourceMgr->setValue("Visu:IsItalicTitle","true");
-    else
-      aResourceMgr->setValue("Visu:IsItalicTitle","false");
-
-    if (isTitleShadow)
-      aResourceMgr->setValue("Visu:IsShadowTitle","true");
-    else
-      aResourceMgr->setValue("Visu:IsShadowTitle","false");
-
+    QFont aTitleFont;
+    
+    aTitleFont.setBold(isTitleBold);
+    aTitleFont.setItalic(isTitleItalic);
+    aTitleFont.setUnderline(isTitleShadow);
+    
+    QString titleFontFamily;
     switch (aTitleFontFamily) {
     case VTK_ARIAL:
-      aResourceMgr->setValue("Visu:TitFontType",0);
+      titleFontFamily = "Arial";
       break;
     case VTK_COURIER:
-      aResourceMgr->setValue("Visu:TitFontType",1);
+      titleFontFamily = "Courier";
       break;
     case VTK_TIMES:
-      aResourceMgr->setValue("Visu:TitFontType",2);
+      titleFontFamily = "Times";
       break;
     }
-    aResourceMgr->setValue("Visu:TitleColorR", aTitleColor.red()/255.);
-    aResourceMgr->setValue("Visu:TitleColorG", aTitleColor.green()/255.);
-    aResourceMgr->setValue("Visu:TitleColorB", aTitleColor.blue()/255.);
-
+    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;
@@ -489,38 +511,34 @@ void VisuGUI_ScalarBarPane::storeToResources() {
     bool isLabelItalic = false;
     bool isLabelShadow = false;
 
-    myTextDlg->myTitleFont->GetData(aLabelColor, aLabelFontFamily,
+    myTextDlg->myLabelFont->GetData(aLabelColor, aLabelFontFamily,
                                     isLabelBold, isLabelItalic, isLabelShadow);
 
-    if (isLabelBold)
-      aResourceMgr->setValue("Visu:IsBoldLabel","true");
-    else
-      aResourceMgr->setValue("Visu:IsBoldLabel","false");
-
-    if (isLabelItalic)
-      aResourceMgr->setValue("Visu:IsItalicLabel","true");
-    else
-      aResourceMgr->setValue("Visu:IsItalicLabel","false");
 
-    if (isLabelShadow)
-      aResourceMgr->setValue("Visu:IsShadowLabel","true");
-    else
-      aResourceMgr->setValue("Visu:IsShadowLabel","false");
+    QFont aLabelFont;
+    
+    aLabelFont.setBold(isLabelBold);
+    aLabelFont.setItalic(isLabelItalic);
+    aLabelFont.setUnderline(isLabelShadow);
 
+    QString labelFontFamily;
     switch (aLabelFontFamily) {
     case VTK_ARIAL:
-      aResourceMgr->setValue("Visu:LblFontType",0);
+      labelFontFamily = "Arial";
       break;
     case VTK_COURIER:
-      aResourceMgr->setValue("Visu:LblFontType",1);
+      labelFontFamily = "Courier";
       break;
     case VTK_TIMES:
-      aResourceMgr->setValue("Visu:LblFontType",2);
+      labelFontFamily = "Times";
       break;
     }
-    aResourceMgr->setValue("Visu:LabelColorR", aLabelColor.red()/255.);
-    aResourceMgr->setValue("Visu:LabelColorG", aLabelColor.green()/255.);
-    aResourceMgr->setValue("Visu:LabelColorB", aLabelColor.blue()/255.);
+
+    aLabelFont.setFamily(labelFontFamily);
+    
+    aResourceMgr->setValue("VISU", "scalar_bar_label_font", aLabelFont);
+
+    aResourceMgr->setValue("VISU", "scalar_bar_label_color", aLabelColor);
   }
 }
 
@@ -529,7 +547,7 @@ void VisuGUI_ScalarBarPane::storeToResources() {
  */
 void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ScalarMap_i* thePrs) {
   initFromResources();
-  myModeCombo->setCurrentItem(thePrs->GetScalarMode());
+  myScalarMap = thePrs;
   setPosAndSize( thePrs->GetPosX(),
                 thePrs->GetPosY(),
                 thePrs->GetWidth(),
@@ -548,7 +566,36 @@ void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ScalarMap_i* thePrs) {
   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);
 
@@ -572,8 +619,146 @@ void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ScalarMap_i* thePrs) {
                                   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
  */
@@ -657,6 +842,7 @@ void VisuGUI_ScalarBarPane::changeDefaults( int )
     WidthSpin->setValue( myHorW );
     HeightSpin->setValue( myHorH );
   }
+  updatePreview();
 }
 
 /*!
@@ -694,6 +880,7 @@ void VisuGUI_ScalarBarPane::changeRange( int )
     MaxEdit->setText( QString::number( Imax ) );
   }
   myRangeMode = mode;
+  updatePreview();
 }
 
 /*!
@@ -708,6 +895,23 @@ void VisuGUI_ScalarBarPane::XYChanged( double )
   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] ) );
+    }
+  }
 }
 
 /*!
@@ -732,6 +936,14 @@ void VisuGUI_ScalarBarPane::setRange( double imin, double imax/*, double fmin, d
   changeRange( 0 );
 }
 
+/*!
+  Sets default values and range mode
+*/
+void VisuGUI_ScalarBarPane::setDefaultRange(double imin, double imax){
+  Rmin = imin;
+  Rmax = imax;
+}
+
 /*!
   Sets size and position
 */
@@ -826,8 +1038,20 @@ bool VisuGUI_ScalarBarPane::check()
 void VisuGUI_ScalarBarPane::onTextPref()
 {
   myIsStoreTextProp = myTextDlg->exec();
+  updatePreview();
 }
 
+void VisuGUI_ScalarBarPane::onPreviewCheck (bool thePreview)
+{
+  if (SVTK_ViewWindow* vf = VISU::GetActiveViewWindow<SVTK_ViewWindow>()) {
+    if (thePreview) {
+      createScalarBar();
+    } else {
+      deleteScalarBar();
+    }
+    vf->Repaint();
+  }
+}
 
 //#######################################################################################
 
@@ -880,7 +1104,20 @@ VisuGUI_ScalarBarDlg::VisuGUI_ScalarBarDlg (SalomeApp_Module* theModule, bool Se
 */
 void VisuGUI_ScalarBarDlg::accept()
 {
-  if (myScalarPane->check()) QDialog::accept();
+  if (myScalarPane->check()) 
+    {
+      myScalarPane->deletePreview(); 
+      QDialog::accept();
+    }
+}
+
+/*!
+  Called when <Cancel> button is clicked, remove preview and closes dialog
+*/
+void VisuGUI_ScalarBarDlg::reject()
+{
+  myScalarPane->deletePreview();
+  QDialog::reject();
 }
 
 
@@ -905,7 +1142,7 @@ VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent)
   //   font
   QHBox* aHBox = new QHBox (aTitleGrp);
   aHBox->setSpacing(5);
-  myTitleFont = new VisuGUI_FontWg (aHBox);
+  myTitleFont = new SVTK_FontWidget (aHBox);
 
   TopLayout->addWidget(aTitleGrp);
 
@@ -915,7 +1152,7 @@ VisuGUI_TextPrefDlg::VisuGUI_TextPrefDlg (QWidget* parent)
   //   font
   aHBox = new QHBox (aLabelsGrp);
   aHBox->setSpacing(5);
-  myLabelFont = new VisuGUI_FontWg (aHBox);
+  myLabelFont = new SVTK_FontWidget (aHBox);
 
   TopLayout->addWidget(aLabelsGrp);