]> SALOME platform Git repositories - modules/visu.git/commitdiff
Salome HOME
Addjust to CVS HEAD modifications
authorapo <apo@opencascade.com>
Wed, 21 Dec 2005 15:17:51 +0000 (15:17 +0000)
committerapo <apo@opencascade.com>
Wed, 21 Dec 2005 15:17:51 +0000 (15:17 +0000)
src/VISUGUI/VisuGUI_ScalarBarDlg.cxx
src/VISUGUI/VisuGUI_ScalarBarDlg.h

index c55615ff0a9a94821e83b92fde4b2788334d5b46..48749127d47b240a931e8a49d243df6fd4ba4612 100644 (file)
 
 #include "SVTK_FontWidget.h"
 
+#include "SVTK_ViewWindow.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;
@@ -230,16 +235,32 @@ 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( 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;
 }
 
 
@@ -503,6 +524,7 @@ void VisuGUI_ScalarBarPane::storeToResources() {
  */
 void VisuGUI_ScalarBarPane::initFromPrsObject(VISU::ScalarMap_i* thePrs) {
   initFromResources();
+  myScalarMap = thePrs;
   setPosAndSize( thePrs->GetPosX(),
                 thePrs->GetPosY(),
                 thePrs->GetWidth(),
@@ -574,8 +596,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::GetViewWindow()) {
+      deleteScalarBar();
+      createScalarBar();
+      vf->Repaint();
+    }
+  }
+}
+
+/*! Creating preview scalar bar
+ */
+void VisuGUI_ScalarBarPane::createScalarBar()
+{
+  if (VISU::GetViewWindow() == 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::GetViewWindow()->AddActor(myPreviewActor);
+
+  myBusy = false;
+}
+/*! Deleting preview scalar bar
+ */
+void VisuGUI_ScalarBarPane::deleteScalarBar()
+{
+  if ( myBusy ) return;
+  
+  if (myPreviewActor == 0) return;
+  if (SVTK_ViewWindow* vf = VISU::GetViewWindow()){
+    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
  */
@@ -659,6 +819,7 @@ void VisuGUI_ScalarBarPane::changeDefaults( int )
     WidthSpin->setValue( myHorW );
     HeightSpin->setValue( myHorH );
   }
+  updatePreview();
 }
 
 /*!
@@ -696,6 +857,7 @@ void VisuGUI_ScalarBarPane::changeRange( int )
     MaxEdit->setText( QString::number( Imax ) );
   }
   myRangeMode = mode;
+  updatePreview();
 }
 
 /*!
@@ -710,6 +872,7 @@ void VisuGUI_ScalarBarPane::XYChanged( double )
   if ( snd == YSpin ) {
     HeightSpin->setMaxValue( 1.0 - YSpin->value() );
   }
+  updatePreview();
 }
 
 /*!
@@ -828,8 +991,20 @@ bool VisuGUI_ScalarBarPane::check()
 void VisuGUI_ScalarBarPane::onTextPref()
 {
   myIsStoreTextProp = myTextDlg->exec();
+  updatePreview();
 }
 
+void VisuGUI_ScalarBarPane::onPreviewCheck (bool thePreview)
+{
+  if (SVTK_ViewWindow* vf = VISU::GetViewWindow()) {
+    if (thePreview) {
+      createScalarBar();
+    } else {
+      deleteScalarBar();
+    }
+    vf->Repaint();
+  }
+}
 
 //#######################################################################################
 
@@ -882,7 +1057,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();
 }
 
 
index 4695f47546d3321c9be8cf127c7d9dd3bd4a626d..f68b0f428f444b639b565d645bc4bc3468242b9e 100644 (file)
@@ -61,6 +61,7 @@ class QToolButton;
 class QtxDblSpinBox;
 class SalomeApp_Module;
 class SVTK_FontWidget;
+class VISU_ScalarMapAct;
 
 class VisuGUI_TextPrefDlg: public QDialog
 {
@@ -117,6 +118,7 @@ class VisuGUI_ScalarBarPane : public QVBox
   int storeToPrsObject(VISU::ScalarMap_i* thePrs);
 
   bool check();
+  void deletePreview();
 
  protected:
   QButtonGroup*   RangeGroup;
@@ -155,6 +157,18 @@ class VisuGUI_ScalarBarPane : public QVBox
   void changeRange( int );
   void XYChanged( double );
   void onTextPref();
+  void onPreviewCheck(bool thePreview);
+  void updatePreview();
+
+ private:
+  void createScalarBar();
+  void deleteScalarBar();
+
+  QCheckBox* myPreviewCheck;
+  VISU_ScalarMapAct* myPreviewActor;
+  VISU::ScalarMap_i* myScalarMap;
+
+  bool myBusy;
 };
 
 
@@ -176,6 +190,7 @@ class VisuGUI_ScalarBarDlg : public QDialog
 
  protected slots:
   void accept();
+  void reject();
 
  protected:
   VisuGUI_ScalarBarPane* myScalarPane;