1 // Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 // SMESH SMESHGUI : GUI for SMESH component
23 // File : SMESHGUI_Preferences_ScalarBarDlg.cxx
24 // Author : Nicolas REJNERI, Open CASCADE S.A.S.
27 #include "SMESHGUI_Preferences_ScalarBarDlg.h"
30 #include "SMESHGUI_SpinBox.h"
31 #include "SMESHGUI_VTKUtils.h"
32 #include "SMESHGUI_Utils.h"
34 #include <SMESH_Actor.h>
35 #include <SMESH_ActorUtils.h>
36 #include <SMESH_ScalarBarActor.h>
37 #include <SMESH_ControlsDef.hxx>
39 // SALOME GUI includes
40 #include <SUIT_Desktop.h>
41 #include <SUIT_ResourceMgr.h>
42 #include <SUIT_Session.h>
43 #include <SUIT_MessageBox.h>
45 #include <LightApp_Application.h>
46 #include <LightApp_SelectionMgr.h>
47 #include <SALOME_ListIO.hxx>
48 #include <SalomeApp_IntSpinBox.h>
50 #include <QtxColorButton.h>
53 #include <QButtonGroup>
59 #include <QPushButton>
60 #include <QRadioButton>
61 #include <QHBoxLayout>
62 #include <QVBoxLayout>
63 #include <QGridLayout>
64 #include <QDoubleValidator>
67 #include <vtkTextProperty.h>
68 #include <vtkLookupTable.h>
70 #define MINIMUM_WIDTH 70
71 #define MARGIN_SIZE 11
72 #define SPACING_SIZE 6
74 // Only one instance is allowed
75 SMESHGUI_Preferences_ScalarBarDlg* SMESHGUI_Preferences_ScalarBarDlg::myDlg = 0;
77 //=================================================================================================
79 * SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties
81 * Gets the only instance of "Scalar Bar Properties" dialog box
83 //=================================================================================================
84 void SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( SMESHGUI* theModule )
87 myDlg = new SMESHGUI_Preferences_ScalarBarDlg( theModule );
92 myDlg->activateWindow();
96 //=================================================================================================
98 * SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg
102 //=================================================================================================
103 SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* theModule )
104 : QDialog( SMESH::GetDesktop( theModule ) ),
105 mySMESHGUI( theModule ),
106 mySelectionMgr( SMESH::GetSelectionMgr( theModule ) )
118 setAttribute( Qt::WA_DeleteOnClose, true );
119 setWindowTitle( tr("SMESH_PROPERTIES_SCALARBAR") );
120 setSizeGripEnabled(true);
124 /******************************************************************************/
126 QVBoxLayout* aTopLayout = new QVBoxLayout( this );
127 aTopLayout->setSpacing( SPACING_SIZE ); aTopLayout->setMargin( MARGIN_SIZE );
129 /******************************************************************************/
131 myRangeGrp = new QGroupBox ( tr( "SMESH_RANGE_SCALARBAR" ), this );
132 //QHBoxLayout* myRangeGrpLayout = new QHBoxLayout( myRangeGrp );
133 QGridLayout* myRangeGrpLayout = new QGridLayout( myRangeGrp );
134 myRangeGrpLayout->setSpacing( SPACING_SIZE ); myRangeGrpLayout->setMargin( MARGIN_SIZE );
136 myMinEdit = new QLineEdit( myRangeGrp );
137 myMinEdit->setMinimumWidth( MINIMUM_WIDTH );
138 myMinEdit->setValidator( new QDoubleValidator( this ) );
140 myMaxEdit = new QLineEdit( myRangeGrp );
141 myMaxEdit->setMinimumWidth( MINIMUM_WIDTH );
142 myMaxEdit->setValidator( new QDoubleValidator( this ) );
144 myLogarithmicCheck = new QCheckBox (myRangeGrp);
145 myLogarithmicCheck->setText(tr("SMESH_LOGARITHMIC_SCALARBAR"));
146 myLogarithmicCheck->setChecked(false);
148 myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MIN" ), myRangeGrp ), 0, 0, 1, 1 );
149 myRangeGrpLayout->addWidget( myMinEdit, 0, 1, 1, 1 );
150 myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MAX" ), myRangeGrp ), 0, 2, 1, 1 );
151 myRangeGrpLayout->addWidget( myMaxEdit, 0, 3, 1, 1 );
152 myRangeGrpLayout->addWidget( myLogarithmicCheck, 1, 0, 1, 4 );
154 aTopLayout->addWidget( myRangeGrp );
156 /******************************************************************************/
158 myFontGrp = new QGroupBox ( tr( "SMESH_FONT_SCALARBAR" ), this );
159 QGridLayout* myFontGrpLayout = new QGridLayout( myFontGrp );
160 myFontGrpLayout->setSpacing( SPACING_SIZE ); myFontGrpLayout->setMargin( MARGIN_SIZE );
162 myTitleColorBtn = new QtxColorButton( myFontGrp );
164 myTitleFontCombo = new QComboBox( myFontGrp );
165 myTitleFontCombo->setMinimumWidth( MINIMUM_WIDTH );
166 myTitleFontCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
167 myTitleFontCombo->addItem( tr( "SMESH_FONT_ARIAL" ) );
168 myTitleFontCombo->addItem( tr( "SMESH_FONT_COURIER" ) );
169 myTitleFontCombo->addItem( tr( "SMESH_FONT_TIMES" ) );
171 myTitleBoldCheck = new QCheckBox( tr( "SMESH_FONT_BOLD" ), myFontGrp );
172 myTitleItalicCheck = new QCheckBox( tr( "SMESH_FONT_ITALIC" ), myFontGrp );
173 myTitleShadowCheck = new QCheckBox( tr( "SMESH_FONT_SHADOW" ), myFontGrp );
175 myLabelsColorBtn = new QtxColorButton( myFontGrp );
177 myLabelsFontCombo = new QComboBox( myFontGrp );
178 myLabelsFontCombo->setMinimumWidth( MINIMUM_WIDTH );
179 myLabelsFontCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
180 myLabelsFontCombo->addItem( tr( "SMESH_FONT_ARIAL" ) );
181 myLabelsFontCombo->addItem( tr( "SMESH_FONT_COURIER" ) );
182 myLabelsFontCombo->addItem( tr( "SMESH_FONT_TIMES" ) );
184 myLabelsBoldCheck = new QCheckBox( tr( "SMESH_FONT_BOLD" ), myFontGrp );
185 myLabelsItalicCheck = new QCheckBox( tr( "SMESH_FONT_ITALIC" ), myFontGrp );
186 myLabelsShadowCheck = new QCheckBox( tr( "SMESH_FONT_SHADOW" ), myFontGrp );
188 myFontGrpLayout->addWidget( new QLabel( tr( "SMESH_TITLE" ), myFontGrp ), 0, 0 );
189 myFontGrpLayout->addWidget( myTitleColorBtn, 0, 1 );
190 myFontGrpLayout->addWidget( myTitleFontCombo, 0, 2 );
191 myFontGrpLayout->addWidget( myTitleBoldCheck, 0, 3 );
192 myFontGrpLayout->addWidget( myTitleItalicCheck, 0, 4 );
193 myFontGrpLayout->addWidget( myTitleShadowCheck, 0, 5 );
195 myFontGrpLayout->addWidget( new QLabel( tr( "SMESH_LABELS" ), myFontGrp ), 1, 0 );
196 myFontGrpLayout->addWidget( myLabelsColorBtn, 1, 1 );
197 myFontGrpLayout->addWidget( myLabelsFontCombo, 1, 2 );
198 myFontGrpLayout->addWidget( myLabelsBoldCheck, 1, 3 );
199 myFontGrpLayout->addWidget( myLabelsItalicCheck, 1, 4 );
200 myFontGrpLayout->addWidget( myLabelsShadowCheck, 1, 5 );
202 aTopLayout->addWidget( myFontGrp );
204 /******************************************************************************/
206 myLabColorGrp = new QGroupBox ( tr( "SMESH_LABELS_COLORS_SCALARBAR" ), this );
207 QHBoxLayout* myLabColorGrpLayout = new QHBoxLayout( myLabColorGrp );
208 myLabColorGrpLayout->setSpacing( SPACING_SIZE ); myLabColorGrpLayout->setMargin( MARGIN_SIZE );
210 myColorsSpin = new SalomeApp_IntSpinBox( myLabColorGrp );
211 myColorsSpin->setAcceptNames( false ); // No Notebook variables allowed
212 myColorsSpin->setRange( 2, 256 );
213 myColorsSpin->setSingleStep( 1 );
214 myColorsSpin->setMinimumWidth( MINIMUM_WIDTH );
215 myColorsSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
217 myLabelsSpin = new SalomeApp_IntSpinBox( myLabColorGrp );
218 myLabelsSpin->setAcceptNames( false ); // No Notebook variables allowed
219 myLabelsSpin->setRange( 2, 65 );
220 myLabelsSpin->setSingleStep( 1 );
221 myLabelsSpin->setMinimumWidth( MINIMUM_WIDTH );
222 myLabelsSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
224 myLabColorGrpLayout->addWidget( new QLabel( tr( "SMESH_NUMBEROFCOLORS" ), myLabColorGrp ) );
225 myLabColorGrpLayout->addWidget( myColorsSpin );
226 myLabColorGrpLayout->addWidget( new QLabel( tr( "SMESH_NUMBEROFLABELS" ), myLabColorGrp ) );
227 myLabColorGrpLayout->addWidget( myLabelsSpin );
229 aTopLayout->addWidget( myLabColorGrp );
231 /******************************************************************************/
233 myOrientationGrp = new QGroupBox ( tr( "SMESH_ORIENTATION" ), this );
234 QButtonGroup* aOrientationGrp = new QButtonGroup( this );
235 QHBoxLayout* myOrientationGrpLayout = new QHBoxLayout( myOrientationGrp );
236 myOrientationGrpLayout->setSpacing( SPACING_SIZE ); myOrientationGrpLayout->setMargin( MARGIN_SIZE );
238 myVertRadioBtn = new QRadioButton( tr( "SMESH_VERTICAL" ), myOrientationGrp );
239 myHorizRadioBtn = new QRadioButton( tr( "SMESH_HORIZONTAL" ), myOrientationGrp );
240 myVertRadioBtn->setChecked( true );
242 myOrientationGrpLayout->addWidget( myVertRadioBtn );
243 myOrientationGrpLayout->addWidget( myHorizRadioBtn );
244 aOrientationGrp->addButton(myVertRadioBtn);
245 aOrientationGrp->addButton(myHorizRadioBtn);
247 aTopLayout->addWidget( myOrientationGrp );
249 /******************************************************************************/
251 myOriginDimGrp = new QGroupBox ( tr("SMESH_POSITION_SIZE_SCALARBAR"), this );
252 QGridLayout* myOriginDimGrpLayout = new QGridLayout( myOriginDimGrp );
253 myOriginDimGrpLayout->setSpacing( SPACING_SIZE ); myOriginDimGrpLayout->setMargin( MARGIN_SIZE );
255 myXSpin = new SMESHGUI_SpinBox(myOriginDimGrp);
256 myXSpin->setAcceptNames( false );
257 myXSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" );
258 myXSpin->setMinimumWidth( MINIMUM_WIDTH );
259 myXSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
261 myYSpin = new SMESHGUI_SpinBox(myOriginDimGrp);
262 myYSpin->setAcceptNames( false );
263 myYSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" );
264 myYSpin->setMinimumWidth( MINIMUM_WIDTH );
265 myYSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
267 myWidthSpin = new SMESHGUI_SpinBox(myOriginDimGrp);
268 myWidthSpin->setAcceptNames( false );
269 myWidthSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" );
270 myWidthSpin->setMinimumWidth( MINIMUM_WIDTH );
271 myWidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
273 myHeightSpin = new SMESHGUI_SpinBox(myOriginDimGrp);
274 myHeightSpin->setAcceptNames( false );
275 myHeightSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" );
276 myHeightSpin->setMinimumWidth( MINIMUM_WIDTH );
277 myHeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
279 myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_X_SCALARBAR" ), myOriginDimGrp ), 0, 0 );
280 myOriginDimGrpLayout->addWidget( myXSpin, 0, 1 );
281 myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_Y_SCALARBAR" ), myOriginDimGrp ), 0, 2 );
282 myOriginDimGrpLayout->addWidget( myYSpin, 0, 3 );
283 myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_WIDTH" ), myOriginDimGrp ), 1, 0 );
284 myOriginDimGrpLayout->addWidget( myWidthSpin, 1, 1 );
285 myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_HEIGHT" ), myOriginDimGrp ), 1, 2 );
286 myOriginDimGrpLayout->addWidget( myHeightSpin, 1, 3 );
288 aTopLayout->addWidget( myOriginDimGrp );
289 /******************************************************************************/
292 myDistributionGrp = new QGroupBox ( tr( "SMESH_DISTRIBUTION_SCALARBAR" ), this );
293 myDistributionGrp->setCheckable(true);
294 QHBoxLayout* aDistributionGrpLayout = new QHBoxLayout( myDistributionGrp );
295 aDistributionGrpLayout->setSpacing( SPACING_SIZE ); aDistributionGrpLayout->setMargin( MARGIN_SIZE );
297 myDistribColorGrp = new QButtonGroup( this );
299 myDMonoColor = new QRadioButton( tr( "SMESH_MONOCOLOR" ) , myDistributionGrp );
300 myDMultiColor = new QRadioButton( tr( "SMESH_MULTICOLOR" ), myDistributionGrp );
301 myDMonoColor->setChecked( true );
303 myDistribColorGrp->addButton(myDMonoColor);myDistribColorGrp->setId(myDMonoColor,1);
304 myDistribColorGrp->addButton(myDMultiColor);myDistribColorGrp->setId(myDMultiColor,2);
306 aDistributionGrpLayout->addWidget( myDMultiColor );
307 aDistributionGrpLayout->addWidget( myDMonoColor );
309 //Color of the Distribution in monocolor case:
310 myDistributionColorLbl = new QLabel( tr( "SMESH_DISTRIBUTION_COLOR" ), myDistributionGrp );
311 aDistributionGrpLayout->addWidget( myDistributionColorLbl );
312 myMonoColorBtn = new QtxColorButton( myDistributionGrp );
313 aDistributionGrpLayout->addWidget(myMonoColorBtn);
315 aTopLayout->addWidget(myDistributionGrp);
317 /******************************************************************************/
319 myButtonGrp = new QGroupBox( this );
320 QHBoxLayout* myButtonGrpLayout = new QHBoxLayout( myButtonGrp );
321 myButtonGrpLayout->setSpacing( SPACING_SIZE ); myButtonGrpLayout->setMargin( MARGIN_SIZE );
323 myOkBtn = new QPushButton( tr( "SMESH_BUT_APPLY_AND_CLOSE" ), myButtonGrp );
324 myOkBtn->setAutoDefault( true ); myOkBtn->setDefault( true );
325 myApplyBtn = new QPushButton( tr( "SMESH_BUT_APPLY" ), myButtonGrp );
326 myApplyBtn->setAutoDefault( true );
327 myCancelBtn = new QPushButton( tr( "SMESH_BUT_CLOSE" ), myButtonGrp );
328 myCancelBtn->setAutoDefault( true );
329 myHelpBtn = new QPushButton( tr("SMESH_BUT_HELP"), myButtonGrp );
330 myHelpBtn->setAutoDefault(true);
332 myButtonGrpLayout->addWidget( myOkBtn );
333 myButtonGrpLayout->addSpacing( 10 );
334 myButtonGrpLayout->addWidget( myApplyBtn );
335 myButtonGrpLayout->addSpacing( 10 );
336 myButtonGrpLayout->addStretch();
337 myButtonGrpLayout->addWidget( myCancelBtn );
338 myButtonGrpLayout->addWidget( myHelpBtn );
340 aTopLayout->addWidget( myButtonGrp );
342 /***************************************************************/
344 // --> first init from preferences
345 SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
347 QColor titleColor = mgr->colorValue("SMESH", "scalar_bar_title_color",
348 QColor(255, 255, 255));
349 myTitleColorBtn->setColor(titleColor);
350 myTitleFontCombo->setCurrentIndex(0);
351 if (mgr->hasValue("SMESH", "scalar_bar_title_font")) {
352 QFont f = mgr->fontValue( "SMESH", "scalar_bar_title_font" );
353 if( f.family()=="Arial" )
354 myTitleFontCombo->setCurrentIndex(0);
355 if( f.family()=="Courier" )
356 myTitleFontCombo->setCurrentIndex(1);
357 if( f.family()=="Times")
358 myTitleFontCombo->setCurrentIndex(2);
360 myTitleBoldCheck->setChecked ( f.bold() );
361 myTitleItalicCheck->setChecked( f.italic() );
362 myTitleShadowCheck->setChecked( f.overline() );
365 QColor labelColor = mgr->colorValue("SMESH", "scalar_bar_label_color",
366 QColor(255, 255, 255));
367 myLabelsColorBtn->setColor(labelColor);
368 myLabelsFontCombo->setCurrentIndex(0);
369 if (mgr->hasValue("SMESH", "scalar_bar_label_font")) {
370 QFont f = mgr->fontValue( "SMESH", "scalar_bar_label_font" );
371 if (f.family() == "Arial")
372 myLabelsFontCombo->setCurrentIndex(0);
373 if (f.family() == "Courier")
374 myLabelsFontCombo->setCurrentIndex(1);
375 if (f.family() == "Times")
376 myLabelsFontCombo->setCurrentIndex(2);
378 myLabelsBoldCheck ->setChecked( f.bold() );
379 myLabelsItalicCheck->setChecked( f.italic() );
380 myLabelsShadowCheck->setChecked( f.overline() );
383 int aNbColors = mgr->integerValue("SMESH", "scalar_bar_num_colors", 64);
384 myColorsSpin->setValue(aNbColors);
386 int aNbLabels = mgr->integerValue("SMESH", "scalar_bar_num_labels", 5);
387 myLabelsSpin->setValue(aNbLabels);
389 int aOrientation = mgr->integerValue( "SMESH", "scalar_bar_orientation", 1 );
390 bool isHoriz = aOrientation == 1;
392 myHorizRadioBtn->setChecked(true);
394 myVertRadioBtn->setChecked(true);
395 myIniOrientation = myVertRadioBtn->isChecked();
397 QString name = isHoriz ? "scalar_bar_horizontal_%1" : "scalar_bar_vertical_%1";
399 myIniX = mgr->doubleValue("SMESH", name.arg( "x" ),
400 myHorizRadioBtn->isChecked() ? DEF_HOR_X : DEF_VER_X);
402 myIniY = mgr->doubleValue("SMESH", name.arg( "y" ),
403 myHorizRadioBtn->isChecked() ? DEF_HOR_Y : DEF_VER_Y);
405 myIniW = mgr->doubleValue("SMESH", name.arg( "width" ),
406 myHorizRadioBtn->isChecked() ? DEF_HOR_W : DEF_VER_W);
408 myIniH = mgr->doubleValue("SMESH", name.arg( "height" ),
409 myHorizRadioBtn->isChecked() ? DEF_HOR_H : DEF_VER_H);
411 setOriginAndSize(myIniX, myIniY, myIniW, myIniH);
414 bool distributionVisibility = mgr->booleanValue("SMESH","distribution_visibility");
415 myDistributionGrp->setChecked(distributionVisibility);
417 int coloringType = mgr->integerValue("SMESH", "distribution_coloring_type", 0);
418 if( coloringType == SMESH_MONOCOLOR_TYPE ) {
419 myDMonoColor->setChecked(true);
420 onDistributionChanged(myDistribColorGrp->id(myDMonoColor));
422 myDMultiColor->setChecked(true);
423 onDistributionChanged(myDistribColorGrp->id(myDMultiColor));
427 QColor distributionColor = mgr->colorValue("SMESH", "distribution_color",
428 QColor(255, 255, 255));
429 myMonoColorBtn->setColor(distributionColor);
431 // --> then init from selection if necessary
432 onSelectionChanged();
434 /***************************************************************/
436 connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( onOk() ) );
437 connect( myApplyBtn, SIGNAL( clicked() ), this, SLOT( onApply() ) );
438 connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) );
439 connect( myHelpBtn, SIGNAL(clicked()), this, SLOT( onHelp() ) );
440 connect( myMinEdit, SIGNAL( textChanged(const QString &) ), this, SLOT( onMinMaxChanged() ) );
441 connect( myMaxEdit, SIGNAL( textChanged(const QString &) ), this, SLOT( onMinMaxChanged() ) );
442 connect( myXSpin, SIGNAL( valueChanged( double ) ), this, SLOT( onXYChanged() ) );
443 connect( myYSpin, SIGNAL( valueChanged( double ) ), this, SLOT( onXYChanged() ) );
444 connect( aOrientationGrp, SIGNAL( buttonClicked( int ) ), this, SLOT( onOrientationChanged() ) );
445 connect( myDistributionGrp, SIGNAL( toggled(bool) ), this, SLOT(onDistributionActivated(bool)) );
446 connect( myDistribColorGrp, SIGNAL( buttonClicked( int ) ), this, SLOT( onDistributionChanged( int ) ) );
447 connect( mySelectionMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) );
448 connect( mySMESHGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() ) );
450 myHelpFileName = "quality_page.html";
453 //=================================================================================================
455 * SMESHGUI_Preferences_ScalarBarDlg::~SMESHGUI_Preferences_ScalarBarDlg
459 //=================================================================================================
460 SMESHGUI_Preferences_ScalarBarDlg::~SMESHGUI_Preferences_ScalarBarDlg()
464 //=================================================================================================
466 * SMESHGUI_Preferences_ScalarBarDlg::onOk
470 //=================================================================================================
471 void SMESHGUI_Preferences_ScalarBarDlg::onOk()
477 //=================================================================================================
479 * SMESHGUI_Preferences_ScalarBarDlg::onApply
483 //=================================================================================================
484 bool SMESHGUI_Preferences_ScalarBarDlg::onApply()
486 // Scalar Bar properties
489 SMESH_ScalarBarActor* myScalarBarActor = myActor->GetScalarBarActor();
491 vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty();
492 QColor aTColor = myTitleColorBtn->color();
493 aTitleTextPrp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. );
494 if ( myTitleFontCombo->currentIndex() == 0 )
495 aTitleTextPrp->SetFontFamilyToArial();
496 else if ( myTitleFontCombo->currentIndex() == 1 )
497 aTitleTextPrp->SetFontFamilyToCourier();
499 aTitleTextPrp->SetFontFamilyToTimes();
500 aTitleTextPrp->SetBold( myTitleBoldCheck->isChecked() );
501 aTitleTextPrp->SetItalic( myTitleItalicCheck->isChecked() );
502 aTitleTextPrp->SetShadow( myTitleShadowCheck->isChecked() );
503 myScalarBarActor->SetTitleTextProperty( aTitleTextPrp );
505 vtkTextProperty* aLabelsTextPrp = myScalarBarActor->GetLabelTextProperty();
506 QColor aLColor = myLabelsColorBtn->color();
507 aLabelsTextPrp->SetColor( aLColor.red()/255., aLColor.green()/255., aLColor.blue()/255. );
508 if ( myLabelsFontCombo->currentIndex() == 0 )
509 aLabelsTextPrp->SetFontFamilyToArial();
510 else if ( myLabelsFontCombo->currentIndex() == 1 )
511 aLabelsTextPrp->SetFontFamilyToCourier();
513 aLabelsTextPrp->SetFontFamilyToTimes();
514 aLabelsTextPrp->SetBold( myLabelsBoldCheck->isChecked() );
515 aLabelsTextPrp->SetItalic( myLabelsItalicCheck->isChecked() );
516 aLabelsTextPrp->SetShadow( myLabelsShadowCheck->isChecked() );
517 myScalarBarActor->SetLabelTextProperty( aLabelsTextPrp );
519 myScalarBarActor->SetNumberOfLabels( myLabelsSpin->value() );
521 if ( myHorizRadioBtn->isChecked() )
522 myScalarBarActor->SetOrientationToHorizontal();
524 myScalarBarActor->SetOrientationToVertical();
526 myScalarBarActor->SetPosition( myXSpin->value(), myYSpin->value() );
527 myScalarBarActor->SetWidth( myWidthSpin->value() );
528 myScalarBarActor->SetHeight( myHeightSpin->value() );
531 bool distributionTypeChanged = false, colorChanged=false;
532 myScalarBarActor->SetDistributionVisibility((int)myDistributionGrp->isChecked());
533 if( myDistributionGrp->isChecked() ) {
534 int ColoringType = myDMultiColor->isChecked() ? SMESH_MULTICOLOR_TYPE : SMESH_MONOCOLOR_TYPE;
535 distributionTypeChanged = (ColoringType != myScalarBarActor->GetDistributionColoringType());
536 if (distributionTypeChanged)
537 myScalarBarActor->SetDistributionColoringType(ColoringType);
539 if( !myDMultiColor->isChecked() ) {
540 QColor aTColor = myMonoColorBtn->color();
541 double rgb[3], oldRgb[3];;
542 rgb [0] = aTColor.red()/255.;
543 rgb [1] = aTColor.green()/255.;
544 rgb [2] = aTColor.blue()/255.;
545 myScalarBarActor->GetDistributionColor(oldRgb);
546 colorChanged = (rgb[0] != oldRgb[0] || rgb[1] != oldRgb[1] || rgb[2] != oldRgb[2]);
548 myScalarBarActor->SetDistributionColor(rgb);
552 double aMin = myMinEdit->text().toDouble();
553 double aMax = myMaxEdit->text().toDouble();
554 vtkLookupTable* myLookupTable =
555 static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
556 double oldMinMax[2] = { myLookupTable->GetRange()[0], myLookupTable->GetRange()[1] };
557 bool rangeChanges = ( fabs( oldMinMax[0] - aMin ) + fabs( oldMinMax[1] - aMax ) >
558 0.001 * ( aMax-aMin + oldMinMax[1]-oldMinMax[0] ));
560 bool nbColorsChanged = (myColorsSpin->value() != myScalarBarActor->GetMaximumNumberOfColors());
562 myScalarBarActor->SetMaximumNumberOfColors(myColorsSpin->value());
564 myLookupTable->SetRange( aMin, aMax );
565 myLookupTable->SetNumberOfTableValues(myColorsSpin->value());
567 bool scaleChanged = (myLogarithmicCheck->isChecked() != (myLookupTable->GetScale() == VTK_SCALE_LOG10));
569 myLookupTable->SetScale(myLogarithmicCheck->isChecked() ? VTK_SCALE_LOG10 : VTK_SCALE_LINEAR);
571 myLookupTable->Build();
573 if (nbColorsChanged || rangeChanges || scaleChanged)
574 myActor->UpdateDistribution();
576 #ifndef DISABLE_PLOT2DVIEWER
577 if( myActor->GetPlot2Histogram() &&
580 distributionTypeChanged ||
582 SMESH::ProcessIn2DViewers(myActor);
585 SMESH::RepaintCurrentView();
589 //=================================================================================================
591 * SMESHGUI_Preferences_ScalarBarDlg::reject
595 //=================================================================================================
596 void SMESHGUI_Preferences_ScalarBarDlg::reject()
602 //=================================================================================================
604 * SMESHGUI_Preferences_ScalarBarDlg::onHelp
608 //=================================================================================================
609 void SMESHGUI_Preferences_ScalarBarDlg::onHelp()
611 LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication());
613 app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName);
617 platform = "winapplication";
619 platform = "application";
621 SUIT_MessageBox::warning(this, tr("WRN_WARNING"),
622 tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE").
623 arg(app->resourceMgr()->stringValue("ExternalBrowser",
625 arg(myHelpFileName));
629 //=================================================================================================
631 * SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged
633 * Called when selection changed
635 //=================================================================================================
636 void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged()
639 mySelectionMgr->selectedObjects(aList);
641 if (aList.Extent() == 1) {
642 Handle(SALOME_InteractiveObject) anIO = aList.First();
643 if( anIO->hasEntry() ) {
644 SMESH_Actor* anActor = SMESH::FindActorByEntry(anIO->getEntry());
645 if ( anActor && anActor->GetScalarBarActor() && anActor->GetControlMode() != SMESH_Actor::eNone ) {
647 SMESH_ScalarBarActor* myScalarBarActor = myActor->GetScalarBarActor();
649 if ( myScalarBarActor->GetLookupTable() ) {
650 vtkLookupTable* aLookupTable = static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
652 vtkFloatingPointType *range = aLookupTable->GetRange();
653 myMinEdit->setText( QString::number( range[0],'g',12 ) );
654 myMaxEdit->setText( QString::number( range[1],'g',12 ) );
655 myLogarithmicCheck->setChecked(aLookupTable->GetScale() == VTK_SCALE_LOG10);
656 myLogarithmicCheck->setEnabled(range[0] > 1e-07 && range[1] > 1e-07);
659 vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty();
660 vtkFloatingPointType aTColor[3];
661 aTitleTextPrp->GetColor( aTColor );
662 myTitleColorBtn->setColor( QColor( (int)( aTColor[0]*255 ), (int)( aTColor[1]*255 ), (int)( aTColor[2]*255 ) ) );
663 myTitleFontCombo->setCurrentIndex( aTitleTextPrp->GetFontFamily() );
664 myTitleBoldCheck->setChecked( aTitleTextPrp->GetBold() );
665 myTitleItalicCheck->setChecked( aTitleTextPrp->GetItalic() );
666 myTitleShadowCheck->setChecked( aTitleTextPrp->GetShadow() );
668 vtkTextProperty* aLabelsTextPrp = myScalarBarActor->GetLabelTextProperty();
669 vtkFloatingPointType aLColor[3];
670 aLabelsTextPrp->GetColor( aLColor );
671 myLabelsColorBtn->setColor( QColor( (int)( aLColor[0]*255 ), (int)( aLColor[1]*255 ), (int)( aLColor[2]*255 ) ) );
672 myLabelsFontCombo->setCurrentIndex( aLabelsTextPrp->GetFontFamily() );
673 myLabelsBoldCheck->setChecked( aLabelsTextPrp->GetBold() );
674 myLabelsItalicCheck->setChecked( aLabelsTextPrp->GetItalic() );
675 myLabelsShadowCheck->setChecked( aLabelsTextPrp->GetShadow() );
677 myLabelsSpin->setValue( myScalarBarActor->GetNumberOfLabels() );
678 myColorsSpin->setValue( myScalarBarActor->GetMaximumNumberOfColors() );
680 if ( myScalarBarActor->GetOrientation() == VTK_ORIENT_VERTICAL )
681 myVertRadioBtn->setChecked( true );
683 myHorizRadioBtn->setChecked( true );
684 myIniOrientation = myVertRadioBtn->isChecked();
686 myIniX = myScalarBarActor->GetPosition()[0];
687 myIniY = myScalarBarActor->GetPosition()[1];
688 myIniW = myScalarBarActor->GetWidth();
689 myIniH = myScalarBarActor->GetHeight();
690 setOriginAndSize( myIniX, myIniY, myIniW, myIniH );
692 int coloringType = myScalarBarActor->GetDistributionColoringType();
693 myScalarBarActor->GetDistributionColor( aTColor );
694 myMonoColorBtn->setColor( QColor( (int)( aTColor[0]*255 ), (int)( aTColor[1]*255 ), (int)( aTColor[2]*255 ) ) );
695 if ( coloringType == SMESH_MONOCOLOR_TYPE ) {
696 myDMonoColor->setChecked(true);
697 onDistributionChanged(myDistribColorGrp->id(myDMonoColor));
699 myDMultiColor->setChecked(true);
700 onDistributionChanged(myDistribColorGrp->id(myDMultiColor));
702 myDistributionGrp->setChecked((bool)myScalarBarActor->GetDistributionVisibility());
703 onDistributionActivated(myScalarBarActor->GetDistributionVisibility());
705 myRangeGrp->setEnabled( true );
706 myFontGrp->setEnabled( true );
707 myLabColorGrp->setEnabled( true );
708 myOrientationGrp->setEnabled( true );
709 myOriginDimGrp->setEnabled( true );
710 myOkBtn->setEnabled( true );
711 myApplyBtn->setEnabled( true );
712 myDistributionGrp->setEnabled( true );
718 myRangeGrp->setEnabled( false );
719 myFontGrp->setEnabled( false );
720 myLabColorGrp->setEnabled( false );
721 myOrientationGrp->setEnabled( false );
722 myOriginDimGrp->setEnabled( false );
723 myOkBtn->setEnabled( false );
724 myApplyBtn->setEnabled( false );
725 myDistributionGrp->setEnabled( false );
728 //=================================================================================================
730 * SMESHGUI_Preferences_ScalarBarDlg::onMinMaxChanged
732 * Called when Scalar Range values are changed
734 //=================================================================================================
735 void SMESHGUI_Preferences_ScalarBarDlg::onMinMaxChanged()
737 double aMin = myMinEdit->text().toDouble();
738 double aMax = myMaxEdit->text().toDouble();
739 bool isLogarithmicEnabled = (aMin > 1e-07 && aMax > 1e-07);
740 myLogarithmicCheck->setChecked(isLogarithmicEnabled);
741 myLogarithmicCheck->setEnabled(isLogarithmicEnabled);
744 //=================================================================================================
746 * SMESHGUI_Preferences_ScalarBarDlg::onXYChanged
748 * Called when X, Y values are changed
750 //=================================================================================================
751 void SMESHGUI_Preferences_ScalarBarDlg::onXYChanged()
753 myWidthSpin->setMaximum( 1.0 - myXSpin->value() );
754 myHeightSpin->setMaximum( 1.0 - myYSpin->value() );
757 //=================================================================================================
759 * SMESHGUI_Preferences_ScalarBarDlg::setOriginAndSize
761 * Called when X, Y values are changed
763 //=================================================================================================
764 void SMESHGUI_Preferences_ScalarBarDlg::setOriginAndSize( const double x,
769 blockSignals( true );
770 myXSpin->setValue( x );
771 myYSpin->setValue( y );
772 myWidthSpin->setMaximum( 1.0 );
773 myWidthSpin->setValue( w );
774 myHeightSpin->setMaximum( 1.0 );
775 myHeightSpin->setValue( h );
776 blockSignals( false );
781 //=================================================================================================
783 * SMESHGUI_Preferences_ScalarBarDlg::onDistributionChanged
785 * Called when coloring type of the distribution is changed
787 //=================================================================================================
788 void SMESHGUI_Preferences_ScalarBarDlg::onDistributionChanged( int id ) {
790 bool isActive = myDistribColorGrp->id(myDMonoColor) == id;
792 myMonoColorBtn->setEnabled(isActive);
793 myDistributionColorLbl->setEnabled(isActive);
795 //=================================================================================================
797 * SMESHGUI_Preferences_ScalarBarDlg::onDistributionActivated
799 * Called when distribution group check box is changed
801 //=================================================================================================
802 void SMESHGUI_Preferences_ScalarBarDlg::onDistributionActivated(bool on) {
804 if(myDMonoColor->isChecked())
805 onDistributionChanged(myDistribColorGrp->id(myDMonoColor) );
806 else if(myDMultiColor->isChecked())
807 onDistributionChanged(myDistribColorGrp->id(myDMultiColor) );
810 myMonoColorBtn->setEnabled(false);
811 myDistributionColorLbl->setEnabled(false);
816 //=================================================================================================
818 * SMESHGUI_Preferences_ScalarBarDlg::onOrientationChanged
820 * Called when orientation is changed
822 //=================================================================================================
823 void SMESHGUI_Preferences_ScalarBarDlg::onOrientationChanged()
825 initScalarBarFromResources();
827 int aOrientation = myVertRadioBtn->isChecked();
828 if ( aOrientation == myIniOrientation )
829 setOriginAndSize( myIniX, myIniY, myIniW, myIniH );
831 setOriginAndSize( aOrientation ? DEF_VER_X : DEF_HOR_X,
832 aOrientation ? DEF_VER_Y : DEF_HOR_Y,
833 aOrientation ? DEF_VER_W : DEF_HOR_W,
834 aOrientation ? DEF_VER_H : DEF_HOR_H );
837 //=================================================================================================
839 * SMESHGUI_Preferences_ScalarBarDlg::initScalarBarFromResources()
841 * Rereading vertical and horizontal default positions from resources.
843 //=================================================================================================
844 void SMESHGUI_Preferences_ScalarBarDlg::initScalarBarFromResources()
846 SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI );
849 // initialize from resoources
852 name = QString("scalar_bar_horizontal_%1");
853 if (mgr->hasValue("SMESH", name.arg( "x" )))
854 DEF_HOR_X = mgr->doubleValue("SMESH", name.arg( "x" ));
855 if (mgr->hasValue("SMESH", name.arg( "y" )))
856 DEF_HOR_Y = mgr->doubleValue("SMESH", name.arg( "y" ));
857 if (mgr->hasValue("SMESH", name.arg( "width" )))
858 DEF_HOR_W = mgr->doubleValue("SMESH", name.arg( "width" ));
859 if (mgr->hasValue("SMESH", name.arg( "height" )))
860 DEF_HOR_H = mgr->doubleValue("SMESH", name.arg( "height" ));
863 name = QString("scalar_bar_vertical_%1");
864 if (mgr->hasValue("SMESH", name.arg( "x" )))
865 DEF_VER_X = mgr->doubleValue("SMESH", name.arg( "x" ));
866 if (mgr->hasValue("SMESH", name.arg( "y" )))
867 DEF_VER_Y = mgr->doubleValue("SMESH", name.arg( "y" ));
868 if (mgr->hasValue("SMESH", name.arg( "width" )))
869 DEF_VER_W = mgr->doubleValue("SMESH", name.arg( "width" ));
870 if (mgr->hasValue("SMESH", name.arg( "height" )))
871 DEF_VER_H = mgr->doubleValue("SMESH", name.arg( "height" ));