X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Preferences_ScalarBarDlg.cxx;h=056b89554787fd326c256be3119be0e97c405aa0;hp=b1f9284c6497d6276433710b5d935f51611772ad;hb=373c03904b8e3fc5490ff4e17716f0cdcb39c03c;hpb=2de294b09ac8b9ace071a01db9cb4e235f1eadbb diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx index b1f9284c6..056b89554 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx @@ -1,30 +1,29 @@ -// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 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 +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// 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. +// 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. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -// -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // SMESH SMESHGUI : GUI for SMESH component // File : SMESHGUI_Preferences_ScalarBarDlg.cxx // Author : Nicolas REJNERI, Open CASCADE S.A.S. // SMESH includes -// + #include "SMESHGUI_Preferences_ScalarBarDlg.h" #include "SMESHGUI.h" @@ -33,6 +32,7 @@ #include "SMESHGUI_Utils.h" #include +#include #include #include @@ -129,22 +129,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 ); /******************************************************************************/ @@ -254,19 +260,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 ) ); @@ -296,18 +302,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 ); @@ -350,13 +356,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); @@ -368,7 +374,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() ); @@ -390,7 +396,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" ), @@ -410,18 +416,17 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* int coloringType = mgr->integerValue("SMESH", "distribution_coloring_type", 0); if( coloringType == SMESH_MONOCOLOR_TYPE ) { - myDMultiColor->setChecked(true); - onDistributionChanged(myDistribColorGrp->id(myDMultiColor)); - } else { myDMonoColor->setChecked(true); 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(); @@ -430,14 +435,17 @@ 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"; } @@ -463,7 +471,7 @@ SMESHGUI_Preferences_ScalarBarDlg::~SMESHGUI_Preferences_ScalarBarDlg() void SMESHGUI_Preferences_ScalarBarDlg::onOk() { if ( onApply() ) - onCancel(); + reject(); } //================================================================================================= @@ -520,17 +528,24 @@ bool SMESHGUI_Preferences_ScalarBarDlg::onApply() myScalarBarActor->SetHeight( myHeightSpin->value() ); // Distribution + bool distributionTypeChanged = false, colorChanged=false; myScalarBarActor->SetDistributionVisibility((int)myDistributionGrp->isChecked()); if( myDistributionGrp->isChecked() ) { int ColoringType = myDMultiColor->isChecked() ? SMESH_MULTICOLOR_TYPE : SMESH_MONOCOLOR_TYPE; - myScalarBarActor->SetDistributionColoringType(ColoringType); + distributionTypeChanged = (ColoringType != myScalarBarActor->GetDistributionColoringType()); + if (distributionTypeChanged) + myScalarBarActor->SetDistributionColoringType(ColoringType); + if( !myDMultiColor->isChecked() ) { QColor aTColor = myMonoColorBtn->color(); - double rgb[3]; + double rgb[3], oldRgb[3];; rgb [0] = aTColor.red()/255.; rgb [1] = aTColor.green()/255.; rgb [2] = aTColor.blue()/255.; - myScalarBarActor->SetDistributionColor(rgb); + myScalarBarActor->GetDistributionColor(oldRgb); + colorChanged = (rgb[0] != oldRgb[0] || rgb[1] != oldRgb[1] || rgb[2] != oldRgb[2]); + if(colorChanged) + myScalarBarActor->SetDistributionColor(rgb); } } @@ -541,33 +556,47 @@ 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 || + rangeChanges || + distributionTypeChanged || + colorChanged )) + SMESH::ProcessIn2DViewers(myActor); +#endif + SMESH::RepaintCurrentView(); return true; } //================================================================================================= /*! - * 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(); } //================================================================================================= @@ -580,7 +609,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; @@ -591,7 +620,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)); } @@ -618,13 +647,17 @@ 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); } 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() ); @@ -633,7 +666,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() ); @@ -656,17 +689,19 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() myIniH = myScalarBarActor->GetHeight(); setOriginAndSize( myIniX, myIniY, myIniW, myIniH ); - myDistributionGrp->setChecked((bool)myScalarBarActor->GetDistributionVisibility()); int coloringType = myScalarBarActor->GetDistributionColoringType(); myScalarBarActor->GetDistributionColor( aTColor ); 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 ); @@ -674,6 +709,7 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() myOriginDimGrp->setEnabled( true ); myOkBtn->setEnabled( true ); myApplyBtn->setEnabled( true ); + myDistributionGrp->setEnabled( true ); return; } } @@ -686,19 +722,23 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() myOriginDimGrp->setEnabled( false ); myOkBtn->setEnabled( false ); myApplyBtn->setEnabled( false ); + myDistributionGrp->setEnabled( false ); } //================================================================================================= /*! - * 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); } //================================================================================================= @@ -746,10 +786,33 @@ void SMESHGUI_Preferences_ScalarBarDlg::setOriginAndSize( const double x, */ //================================================================================================= void SMESHGUI_Preferences_ScalarBarDlg::onDistributionChanged( int id ) { - myMonoColorBtn->setEnabled(myDistribColorGrp->id(myDMonoColor) == id); - myDistributionColorLbl->setEnabled(myDistribColorGrp->id(myDMonoColor) == id); + + bool isActive = myDistribColorGrp->id(myDMonoColor) == id; + + myMonoColorBtn->setEnabled(isActive); + myDistributionColorLbl->setEnabled(isActive); +} +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onDistributionActivated + * + * Called when distribution group check box is changed + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::onDistributionActivated(bool on) { + if(on) { + if(myDMonoColor->isChecked()) + onDistributionChanged(myDistribColorGrp->id(myDMonoColor) ); + else if(myDMultiColor->isChecked()) + onDistributionChanged(myDistribColorGrp->id(myDMultiColor) ); + } + else { + myMonoColorBtn->setEnabled(false); + myDistributionColorLbl->setEnabled(false); + } } + //================================================================================================= /*! * SMESHGUI_Preferences_ScalarBarDlg::onOrientationChanged @@ -784,7 +847,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" )))