X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Preferences_ScalarBarDlg.cxx;h=68deaf5a5c65c9bdc16b7234404ecbe8dee70f28;hp=7f0a861ae9f1f1e9bfdeba20d8d2d196c889c04d;hb=23d90107acec5e54ded86d9f309fe5cb42720b78;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6 diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx index 7f0a861ae..68deaf5a5 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // 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. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -24,7 +24,7 @@ // File : SMESHGUI_Preferences_ScalarBarDlg.cxx // Author : Nicolas REJNERI, Open CASCADE S.A.S. // SMESH includes -// + #include "SMESHGUI_Preferences_ScalarBarDlg.h" #include "SMESHGUI.h" @@ -130,22 +130,28 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* /******************************************************************************/ // Scalar range myRangeGrp = new QGroupBox ( tr( "SMESH_RANGE_SCALARBAR" ), this ); - QHBoxLayout* myRangeGrpLayout = new QHBoxLayout( myRangeGrp ); + //QHBoxLayout* myRangeGrpLayout = new QHBoxLayout( myRangeGrp ); + QGridLayout* myRangeGrpLayout = new QGridLayout( myRangeGrp ); myRangeGrpLayout->setSpacing( SPACING_SIZE ); myRangeGrpLayout->setMargin( MARGIN_SIZE ); - + myMinEdit = new QLineEdit( myRangeGrp ); myMinEdit->setMinimumWidth( MINIMUM_WIDTH ); myMinEdit->setValidator( new QDoubleValidator( this ) ); - + myMaxEdit = new QLineEdit( myRangeGrp ); myMaxEdit->setMinimumWidth( MINIMUM_WIDTH ); myMaxEdit->setValidator( new QDoubleValidator( this ) ); - - myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MIN" ), myRangeGrp ) ); - myRangeGrpLayout->addWidget( myMinEdit ); - myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MAX" ), myRangeGrp ) ); - myRangeGrpLayout->addWidget( myMaxEdit ); - + + myLogarithmicCheck = new QCheckBox (myRangeGrp); + myLogarithmicCheck->setText(tr("SMESH_LOGARITHMIC_SCALARBAR")); + myLogarithmicCheck->setChecked(false); + + myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MIN" ), myRangeGrp ), 0, 0, 1, 1 ); + myRangeGrpLayout->addWidget( myMinEdit, 0, 1, 1, 1 ); + myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MAX" ), myRangeGrp ), 0, 2, 1, 1 ); + myRangeGrpLayout->addWidget( myMaxEdit, 0, 3, 1, 1 ); + myRangeGrpLayout->addWidget( myLogarithmicCheck, 1, 0, 1, 4 ); + aTopLayout->addWidget( myRangeGrp ); /******************************************************************************/ @@ -255,19 +261,19 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* myYSpin = new SMESHGUI_SpinBox(myOriginDimGrp); myYSpin->setAcceptNames( false ); - myYSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" ); + myYSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" ); myYSpin->setMinimumWidth( MINIMUM_WIDTH ); myYSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); myWidthSpin = new SMESHGUI_SpinBox(myOriginDimGrp); myWidthSpin->setAcceptNames( false ); - myWidthSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" ); + myWidthSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" ); myWidthSpin->setMinimumWidth( MINIMUM_WIDTH ); myWidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); myHeightSpin = new SMESHGUI_SpinBox(myOriginDimGrp); myHeightSpin->setAcceptNames( false ); - myHeightSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" ); + myHeightSpin->RangeStepAndValidator( 0.0, 1.0, 0.1, "parametric_precision" ); myHeightSpin->setMinimumWidth( MINIMUM_WIDTH ); myHeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); @@ -297,18 +303,18 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* myDistribColorGrp->addButton(myDMonoColor);myDistribColorGrp->setId(myDMonoColor,1); myDistribColorGrp->addButton(myDMultiColor);myDistribColorGrp->setId(myDMultiColor,2); - + aDistributionGrpLayout->addWidget( myDMultiColor ); aDistributionGrpLayout->addWidget( myDMonoColor ); - + //Color of the Distribution in monocolor case: myDistributionColorLbl = new QLabel( tr( "SMESH_DISTRIBUTION_COLOR" ), myDistributionGrp ); aDistributionGrpLayout->addWidget( myDistributionColorLbl ); myMonoColorBtn = new QtxColorButton( myDistributionGrp ); aDistributionGrpLayout->addWidget(myMonoColorBtn); - + aTopLayout->addWidget(myDistributionGrp); - + /******************************************************************************/ // Common buttons myButtonGrp = new QGroupBox( this ); @@ -351,13 +357,13 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* myTitleFontCombo->setCurrentIndex(1); if( f.family()=="Times") myTitleFontCombo->setCurrentIndex(2); - + myTitleBoldCheck->setChecked ( f.bold() ); myTitleItalicCheck->setChecked( f.italic() ); myTitleShadowCheck->setChecked( f.overline() ); } - - QColor labelColor = mgr->colorValue("SMESH", "scalar_bar_label_color", + + QColor labelColor = mgr->colorValue("SMESH", "scalar_bar_label_color", QColor(255, 255, 255)); myLabelsColorBtn->setColor(labelColor); myLabelsFontCombo->setCurrentIndex(0); @@ -369,7 +375,7 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* myLabelsFontCombo->setCurrentIndex(1); if (f.family() == "Times") myLabelsFontCombo->setCurrentIndex(2); - + myLabelsBoldCheck ->setChecked( f.bold() ); myLabelsItalicCheck->setChecked( f.italic() ); myLabelsShadowCheck->setChecked( f.overline() ); @@ -391,7 +397,7 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* QString name = isHoriz ? "scalar_bar_horizontal_%1" : "scalar_bar_vertical_%1"; - myIniX = mgr->doubleValue("SMESH", name.arg( "x" ), + myIniX = mgr->doubleValue("SMESH", name.arg( "x" ), myHorizRadioBtn->isChecked() ? DEF_HOR_X : DEF_VER_X); myIniY = mgr->doubleValue("SMESH", name.arg( "y" ), @@ -412,18 +418,16 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* int coloringType = mgr->integerValue("SMESH", "distribution_coloring_type", 0); if( coloringType == SMESH_MONOCOLOR_TYPE ) { myDMonoColor->setChecked(true); - onDistributionChanged(myDistribColorGrp->id(myDMonoColor)); + onDistributionChanged(myDistribColorGrp->id(myDMonoColor)); } else { myDMultiColor->setChecked(true); onDistributionChanged(myDistribColorGrp->id(myDMultiColor)); } - + QColor distributionColor = mgr->colorValue("SMESH", "distribution_color", QColor(255, 255, 255)); myMonoColorBtn->setColor(distributionColor); - - // --> then init from selection if necessary onSelectionChanged(); @@ -432,17 +436,19 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* // Connect section connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( onOk() ) ); connect( myApplyBtn, SIGNAL( clicked() ), this, SLOT( onApply() ) ); - connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( onCancel() ) ); + connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( reject() ) ); connect( myHelpBtn, SIGNAL(clicked()), this, SLOT( onHelp() ) ); + connect( myMinEdit, SIGNAL( textChanged(const QString &) ), this, SLOT( onMinMaxChanged() ) ); + connect( myMaxEdit, SIGNAL( textChanged(const QString &) ), this, SLOT( onMinMaxChanged() ) ); connect( myXSpin, SIGNAL( valueChanged( double ) ), this, SLOT( onXYChanged() ) ); connect( myYSpin, SIGNAL( valueChanged( double ) ), this, SLOT( onXYChanged() ) ); connect( aOrientationGrp, SIGNAL( buttonClicked( int ) ), this, SLOT( onOrientationChanged() ) ); connect( myDistributionGrp, SIGNAL( toggled(bool) ), this, SLOT(onDistributionActivated(bool)) ); connect( myDistribColorGrp, SIGNAL( buttonClicked( int ) ), this, SLOT( onDistributionChanged( int ) ) ); connect( mySelectionMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) ); - connect( mySMESHGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( onCancel() ) ); + connect( mySMESHGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( reject() ) ); - myHelpFileName = "quality_page.html"; + myHelpFileName = "scalar_bar_dlg.html"; } //================================================================================================= @@ -466,7 +472,7 @@ SMESHGUI_Preferences_ScalarBarDlg::~SMESHGUI_Preferences_ScalarBarDlg() void SMESHGUI_Preferences_ScalarBarDlg::onOk() { if ( onApply() ) - onCancel(); + reject(); } //================================================================================================= @@ -528,9 +534,9 @@ bool SMESHGUI_Preferences_ScalarBarDlg::onApply() if( myDistributionGrp->isChecked() ) { int ColoringType = myDMultiColor->isChecked() ? SMESH_MULTICOLOR_TYPE : SMESH_MONOCOLOR_TYPE; distributionTypeChanged = (ColoringType != myScalarBarActor->GetDistributionColoringType()); - if(distributionTypeChanged) + if (distributionTypeChanged) myScalarBarActor->SetDistributionColoringType(ColoringType); - + if( !myDMultiColor->isChecked() ) { QColor aTColor = myMonoColorBtn->color(); double rgb[3], oldRgb[3];; @@ -551,29 +557,31 @@ bool SMESHGUI_Preferences_ScalarBarDlg::onApply() double oldMinMax[2] = { myLookupTable->GetRange()[0], myLookupTable->GetRange()[1] }; bool rangeChanges = ( fabs( oldMinMax[0] - aMin ) + fabs( oldMinMax[1] - aMax ) > 0.001 * ( aMax-aMin + oldMinMax[1]-oldMinMax[0] )); - + bool nbColorsChanged = (myColorsSpin->value() != myScalarBarActor->GetMaximumNumberOfColors()); if(nbColorsChanged) myScalarBarActor->SetMaximumNumberOfColors(myColorsSpin->value()); - myLookupTable->SetRange( aMin, aMax ); myLookupTable->SetNumberOfTableValues(myColorsSpin->value()); + + bool scaleChanged = (myLogarithmicCheck->isChecked() != (myLookupTable->GetScale() == VTK_SCALE_LOG10)); + if (scaleChanged) + myLookupTable->SetScale(myLogarithmicCheck->isChecked() ? VTK_SCALE_LOG10 : VTK_SCALE_LINEAR); + myLookupTable->Build(); - if( nbColorsChanged || rangeChanges) + if (nbColorsChanged || rangeChanges || scaleChanged) myActor->UpdateDistribution(); - + #ifndef DISABLE_PLOT2DVIEWER - if( myActor->GetPlot2Histogram() && - (nbColorsChanged || + if( myActor->GetPlot2Histogram() && + (nbColorsChanged || rangeChanges || - distributionTypeChanged || + distributionTypeChanged || colorChanged )) SMESH::ProcessIn2DViewers(myActor); #endif - - SMESH::RepaintCurrentView(); return true; @@ -581,14 +589,15 @@ bool SMESHGUI_Preferences_ScalarBarDlg::onApply() //================================================================================================= /*! - * SMESHGUI_Preferences_ScalarBarDlg::onCancel + * SMESHGUI_Preferences_ScalarBarDlg::reject * * Cancel button slot */ //================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::onCancel() +void SMESHGUI_Preferences_ScalarBarDlg::reject() { - close(); + myDlg = 0; + QDialog::reject(); } //================================================================================================= @@ -601,7 +610,7 @@ void SMESHGUI_Preferences_ScalarBarDlg::onCancel() void SMESHGUI_Preferences_ScalarBarDlg::onHelp() { LightApp_Application* app = (LightApp_Application*)(SUIT_Session::session()->activeApplication()); - if (app) + if (app) app->onHelpContextModule(mySMESHGUI ? app->moduleName(mySMESHGUI->moduleName()) : QString(""), myHelpFileName); else { QString platform; @@ -612,7 +621,7 @@ void SMESHGUI_Preferences_ScalarBarDlg::onHelp() #endif SUIT_MessageBox::warning(this, tr("WRN_WARNING"), tr("EXTERNAL_BROWSER_CANNOT_SHOW_PAGE"). - arg(app->resourceMgr()->stringValue("ExternalBrowser", + arg(app->resourceMgr()->stringValue("ExternalBrowser", platform)). arg(myHelpFileName)); } @@ -639,13 +648,18 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() SMESH_ScalarBarActor* myScalarBarActor = myActor->GetScalarBarActor(); if ( myScalarBarActor->GetLookupTable() ) { - vtkFloatingPointType *range = myScalarBarActor->GetLookupTable()->GetRange(); + vtkLookupTable* aLookupTable = static_cast(myScalarBarActor->GetLookupTable()); + + double *range = aLookupTable->GetRange(); myMinEdit->setText( QString::number( range[0],'g',12 ) ); myMaxEdit->setText( QString::number( range[1],'g',12 ) ); + myLogarithmicCheck->setChecked(aLookupTable->GetScale() == VTK_SCALE_LOG10); + //myLogarithmicCheck->setEnabled(range[0] > 1e-07 && range[1] > 1e-07); + myLogarithmicCheck->setEnabled(range[0] != range[1]); } vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty(); - vtkFloatingPointType aTColor[3]; + double aTColor[3]; aTitleTextPrp->GetColor( aTColor ); myTitleColorBtn->setColor( QColor( (int)( aTColor[0]*255 ), (int)( aTColor[1]*255 ), (int)( aTColor[2]*255 ) ) ); myTitleFontCombo->setCurrentIndex( aTitleTextPrp->GetFontFamily() ); @@ -654,7 +668,7 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() myTitleShadowCheck->setChecked( aTitleTextPrp->GetShadow() ); vtkTextProperty* aLabelsTextPrp = myScalarBarActor->GetLabelTextProperty(); - vtkFloatingPointType aLColor[3]; + double aLColor[3]; aLabelsTextPrp->GetColor( aLColor ); myLabelsColorBtn->setColor( QColor( (int)( aLColor[0]*255 ), (int)( aLColor[1]*255 ), (int)( aLColor[2]*255 ) ) ); myLabelsFontCombo->setCurrentIndex( aLabelsTextPrp->GetFontFamily() ); @@ -682,15 +696,14 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() myMonoColorBtn->setColor( QColor( (int)( aTColor[0]*255 ), (int)( aTColor[1]*255 ), (int)( aTColor[2]*255 ) ) ); if ( coloringType == SMESH_MONOCOLOR_TYPE ) { myDMonoColor->setChecked(true); - onDistributionChanged(myDistribColorGrp->id(myDMonoColor)); + onDistributionChanged(myDistribColorGrp->id(myDMonoColor)); } else { myDMultiColor->setChecked(true); onDistributionChanged(myDistribColorGrp->id(myDMultiColor)); } myDistributionGrp->setChecked((bool)myScalarBarActor->GetDistributionVisibility()); onDistributionActivated(myScalarBarActor->GetDistributionVisibility()); - - + myRangeGrp->setEnabled( true ); myFontGrp->setEnabled( true ); myLabColorGrp->setEnabled( true ); @@ -716,15 +729,18 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() //================================================================================================= /*! - * SMESHGUI_Preferences_ScalarBarDlg::closeEvent + * SMESHGUI_Preferences_ScalarBarDlg::onMinMaxChanged * - * Close event handler + * Called when Scalar Range values are changed */ //================================================================================================= -void SMESHGUI_Preferences_ScalarBarDlg::closeEvent( QCloseEvent* e ) +void SMESHGUI_Preferences_ScalarBarDlg::onMinMaxChanged() { - myDlg = 0; - QDialog::closeEvent( e ); + double aMin = myMinEdit->text().toDouble(); + double aMax = myMaxEdit->text().toDouble(); + bool isLogarithmicEnabled = (aMin > 1e-07 && aMax > 1e-07); + myLogarithmicCheck->setChecked(isLogarithmicEnabled); + myLogarithmicCheck->setEnabled(isLogarithmicEnabled); } //================================================================================================= @@ -833,7 +849,7 @@ void SMESHGUI_Preferences_ScalarBarDlg::initScalarBarFromResources() QString name; if (mgr){ // initialize from resoources - + // horizontal name = QString("scalar_bar_horizontal_%1"); if (mgr->hasValue("SMESH", name.arg( "x" )))