From 1448db18af867e3155d9298ec4a0b8dbb129193f Mon Sep 17 00:00:00 2001 From: apo Date: Wed, 21 Dec 2005 15:17:51 +0000 Subject: [PATCH] Addjust to CVS HEAD modifications --- src/VISUGUI/VisuGUI_ScalarBarDlg.cxx | 194 ++++++++++++++++++++++++++- src/VISUGUI/VisuGUI_ScalarBarDlg.h | 15 +++ 2 files changed, 206 insertions(+), 3 deletions(-) diff --git a/src/VISUGUI/VisuGUI_ScalarBarDlg.cxx b/src/VISUGUI/VisuGUI_ScalarBarDlg.cxx index c55615ff..48749127 100644 --- a/src/VISUGUI/VisuGUI_ScalarBarDlg.cxx +++ b/src/VISUGUI/VisuGUI_ScalarBarDlg.cxx @@ -33,11 +33,14 @@ #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" @@ -49,11 +52,13 @@ #include #include +#include + 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 button is clicked, remove preview and closes dialog +*/ +void VisuGUI_ScalarBarDlg::reject() +{ + myScalarPane->deletePreview(); + QDialog::reject(); } diff --git a/src/VISUGUI/VisuGUI_ScalarBarDlg.h b/src/VISUGUI/VisuGUI_ScalarBarDlg.h index 4695f475..f68b0f42 100644 --- a/src/VISUGUI/VisuGUI_ScalarBarDlg.h +++ b/src/VISUGUI/VisuGUI_ScalarBarDlg.h @@ -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; -- 2.39.2