X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Preferences_ScalarBarDlg.cxx;h=6bc747d42a26bb1490f4c9012132f82a831dd1bb;hp=0608341655aaa5af3f43bba08179ba432e9248e8;hb=53e2da7a188ec607de03d71ce4242c3d6563ca85;hpb=64ae2f71de80aad56ebd449db68b8d340bccd7bd diff --git a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx index 060834165..6bc747d42 100644 --- a/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx @@ -1,23 +1,23 @@ // SMESH SMESHGUI : GUI for SMESH component // // Copyright (C) 2003 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 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// 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 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org // // // @@ -26,9 +26,22 @@ // Module : SMESH // $Header$ -using namespace std; #include "SMESHGUI_Preferences_ScalarBarDlg.h" +#include "SMESHGUI.h" +#include "SMESHGUI_VTKUtils.h" +#include "SMESHGUI_Utils.h" + +#include "SMESH_Actor.h" + +#include "SUIT_Desktop.h" +#include "SUIT_ResourceMgr.h" + +#include "SalomeApp_SelectionMgr.h" +#include "SALOME_ListIO.hxx" + +#include + #include #include #include @@ -36,171 +49,717 @@ using namespace std; #include #include #include +#include #include #include #include -#include -#include -#include +#include +#include -/* - * Constructs a SMESHGUI_Preferences_ScalarBarDlg which is a child of 'parent', with the - * name 'name' and widget flags set to 'f' +#include +#include +#include + +#define MINIMUM_WIDTH 70 +#define MARGIN_SIZE 11 +#define SPACING_SIZE 6 + +#define DEF_VER_X 0.01 +#define DEF_VER_Y 0.10 +#define DEF_VER_H 0.80 +#define DEF_VER_W 0.10 +#define DEF_HOR_X 0.20 +#define DEF_HOR_Y 0.01 +#define DEF_HOR_H 0.12 +#define DEF_HOR_W 0.60 + +using namespace std; + +// Only one instance is allowed +SMESHGUI_Preferences_ScalarBarDlg* SMESHGUI_Preferences_ScalarBarDlg::myDlg = 0; + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties * - * The dialog will by default be modeless, unless you set 'modal' to - * TRUE to construct a modal dialog. + * Gets the only instance of "Scalar Bar Properties" dialog box */ -SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( QWidget* parent, const char* name, bool modal, WFlags fl ) - : QDialog( parent, name, modal, WStyle_Customize | WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ) +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( SMESHGUI* theModule ) { - if ( !name ) - setName( "SMESHGUI_Preferences_ScalarBarDlg" ); - setCaption( tr( "SMESH_PREFERENCES_SCALARBAR" ) ); - setSizeGripEnabled( TRUE ); - - grid = new QGridLayout( this ); - grid->setSpacing( 6 ); - grid->setMargin( 11 ); - - /******************************************************************************/ - Properties = new QGroupBox( this, "Properties" ); - Properties->setTitle( tr( "SMESH_PROPERTIES" ) ); - Properties->setColumnLayout(0, Qt::Vertical ); - Properties->layout()->setSpacing( 0 ); - Properties->layout()->setMargin( 0 ); - grid_4 = new QGridLayout( Properties->layout() ); - grid_4->setAlignment( Qt::AlignTop ); - grid_4->setSpacing( 6 ); - grid_4->setMargin( 11 ); - - /* Font */ - grid_5 = new QGridLayout; - grid_5->setSpacing( 6 ); - grid_5->setMargin( 0 ); - TextLabel2 = new QLabel( Properties, "TextLabel2" ); - TextLabel2->setText( tr( "SMESH_FONT" ) ); - grid_5->addWidget( TextLabel2, 0, 0 ); - ComboBox1 = new QComboBox( FALSE, Properties, "ComboBox1" ); - ComboBox1->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - ComboBox1->insertItem( tr( "SMESH_FONT_ARIAL" ) ); - ComboBox1->insertItem( tr( "SMESH_FONT_COURIER" ) ); - ComboBox1->insertItem( tr( "SMESH_FONT_TIMES" ) ); - grid_5->addWidget( ComboBox1, 0, 1 ); - grid_4->addLayout( grid_5, 0, 0 ); - - /* Font attributes */ - grid_6 = new QGridLayout; - grid_6->setSpacing( 6 ); - grid_6->setMargin( 0 ); - Bold = new QCheckBox( Properties, "Bold" ); - Bold->setText( tr( "SMESH_FONT_BOLD" ) ); - grid_6->addWidget( Bold, 0, 0 ); - Italic = new QCheckBox( Properties, "Italic" ); - Italic->setText( tr( "SMESH_FONT_ITALIC" ) ); - grid_6->addWidget( Italic, 0, 1 ); - Shadow = new QCheckBox( Properties, "Shadow" ); - Shadow->setText( tr( "SMESH_FONT_SHADOW" ) ); - grid_6->addWidget( Shadow, 0, 2 ); - grid_4->addLayout( grid_6, 1, 0 ); - - grid_7 = new QGridLayout; - grid_7->setSpacing( 6 ); - grid_7->setMargin( 0 ); - NumberColors = new QLabel( Properties, "NumberColors" ); - NumberColors->setText( tr( "SMESH_NUMBEROFCOLORS" ) ); - grid_7->addWidget( NumberColors, 0, 0 ); - SpinBoxColors = new QSpinBox( Properties, "SpinBoxColors" ); - SpinBoxColors->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - SpinBoxColors->setMinValue( 1 ); - grid_7->addWidget( SpinBoxColors, 0, 1 ); - NumberLabels = new QLabel( Properties, "NumberLabels" ); - NumberLabels->setText( tr( "SMESH_NUMBEROFLABELS" ) ); - grid_7->addWidget( NumberLabels, 1, 0 ); - SpinBoxLabels = new QSpinBox( Properties, "SpinBoxLabels" ); - SpinBoxLabels->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); - SpinBoxLabels->setMinValue( 1 ); - grid_7->addWidget( SpinBoxLabels, 1, 1 ); - grid_4->addLayout( grid_7, 2, 0 ); - - grid->addWidget( Properties, 0, 0 ); - - /******************************************************************************/ - ButtonGroup_Orientation = new QButtonGroup( this, "ButtonGroup_Orientation" ); - ButtonGroup_Orientation->setTitle( tr( "SMESH_ORIENTATION" ) ); - ButtonGroup_Orientation->setColumnLayout(0, Qt::Vertical ); - ButtonGroup_Orientation->layout()->setSpacing( 0 ); - ButtonGroup_Orientation->layout()->setMargin( 0 ); - grid_2 = new QGridLayout( ButtonGroup_Orientation->layout() ); - grid_2->setAlignment( Qt::AlignTop ); - grid_2->setSpacing( 6 ); - grid_2->setMargin( 11 ); - RadioVert = new QRadioButton( ButtonGroup_Orientation, "RadioVert" ); - RadioVert->setText( tr( "SMESH_VERTICAL" ) ); - RadioHoriz = new QRadioButton( ButtonGroup_Orientation, "RadioHoriz" ); - RadioHoriz->setText( tr( "SMESH_HORIZONTAL" ) ); - grid_2->addWidget( RadioVert, 0, 0 ); - grid_2->addWidget( RadioHoriz, 0, 1 ); - - grid->addWidget( ButtonGroup_Orientation, 1, 0 ); - - /******************************************************************************/ - GroupBox5 = new QGroupBox( this, "GroupBox5" ); - GroupBox5->setTitle( tr( "SMESH_DIMENSIONS" ) ); - GroupBox5->setColumnLayout(0, Qt::Vertical ); - GroupBox5->layout()->setSpacing( 0 ); - GroupBox5->layout()->setMargin( 0 ); - grid_11 = new QGridLayout( GroupBox5->layout() ); - grid_11->setAlignment( Qt::AlignTop ); - grid_11->setSpacing( 6 ); - grid_11->setMargin( 11 ); - - LineEditWidth = new QLineEdit( GroupBox5, "LineEditWidth" ); - grid_11->addWidget( LineEditWidth, 0, 0 ); - Width = new QLabel( GroupBox5, "Width" ); - Width->setText( tr( "SMESH_WIDTH" ) ); - grid_11->addWidget( Width, 0, 1 ); - LineEditHeight = new QLineEdit( GroupBox5, "LineEditHeight" ); - grid_11->addWidget( LineEditHeight, 1, 0 ); - Height = new QLabel( GroupBox5, "Height" ); - Height->setText( tr( "SMESH_HEIGHT" ) ); - grid_11->addWidget( Height, 1, 1 ); - - grid->addWidget( GroupBox5, 2, 0 ); - - /***************************************************************/ - QGroupBox* GroupButtons = new QGroupBox( this, "GroupButtons" ); - GroupButtons->setGeometry( QRect( 10, 10, 281, 48 ) ); - GroupButtons->setTitle( tr( "" ) ); - GroupButtons->setColumnLayout(0, Qt::Vertical ); - GroupButtons->layout()->setSpacing( 0 ); - GroupButtons->layout()->setMargin( 0 ); - grid_15 = new QGridLayout( GroupButtons->layout() ); - grid_15->setAlignment( Qt::AlignTop ); - grid_15->setSpacing( 6 ); - grid_15->setMargin( 11 ); - buttonOk = new QPushButton( GroupButtons, "buttonOk" ); - buttonOk->setText( tr( "SMESH_BUT_OK" ) ); - buttonOk->setAutoDefault( TRUE ); - buttonOk->setDefault( TRUE ); - grid_15->addWidget( buttonOk, 0, 0 ); - grid_15->addItem( new QSpacerItem( 20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum ), 0, 1 ); - buttonCancel = new QPushButton( GroupButtons, "buttonCancel" ); - buttonCancel->setText( tr( "SMESH_BUT_CANCEL" ) ); - buttonCancel->setAutoDefault( TRUE ); - grid_15->addWidget( buttonCancel, 0, 2 ); - - grid->addWidget( GroupButtons, 3, 0 ); - - // signals and slots connections - connect( buttonOk, SIGNAL( clicked() ), this, SLOT( accept() ) ); - connect( buttonCancel, SIGNAL( clicked() ), this, SLOT( reject() ) ); + if (!myDlg) { + myDlg = new SMESHGUI_Preferences_ScalarBarDlg( theModule, false); + myDlg->show(); + } else { + myDlg->show(); + myDlg->setActiveWindow(); + myDlg->raise(); + myDlg->setFocus(); + } +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::ScalarBarPreferences + * + * Opens "Scalar Bar Preferences" dialog box + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::ScalarBarPreferences( SMESHGUI* theModule ) +{ + SMESHGUI_Preferences_ScalarBarDlg* aDlg = + new SMESHGUI_Preferences_ScalarBarDlg( theModule, true); + aDlg->exec(); +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg + * + * Constructor + */ +//================================================================================================= +SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI* theModule, bool property, bool modal ) + : QDialog( SMESH::GetDesktop( theModule ), 0, modal, WStyle_Customize | WStyle_NormalBorder | + WStyle_Title | WStyle_SysMenu | WDestructiveClose ), + mySMESHGUI( theModule ), + mySelectionMgr( property ? SMESH::GetSelectionMgr( theModule ) : 0 ) +{ + setName("SMESHGUI_Preferences_ScalarBarDlg"); + setCaption( property ? tr("SMESH_PROPERTIES_SCALARBAR") : tr("SMESH_PREFERENCES_SCALARBAR")); + setSizeGripEnabled(TRUE); + + myActor = 0; + + /******************************************************************************/ + // Top layout + QGridLayout* aTopLayout = new QGridLayout( this ); + aTopLayout->setSpacing( SPACING_SIZE ); aTopLayout->setMargin( MARGIN_SIZE ); + int aRow = 0; + + /******************************************************************************/ + // Scalar range + if ( mySelectionMgr ) { + myRangeGrp = new QGroupBox ( tr( "SMESH_RANGE_SCALARBAR" ), this, "myRangeGrp" ); + myRangeGrp->setColumnLayout( 0, Qt::Vertical ); + myRangeGrp->layout()->setSpacing( 0 ); myRangeGrp->layout()->setMargin( 0 ); + QGridLayout* myRangeGrpLayout = new QGridLayout( myRangeGrp->layout() ); + myRangeGrpLayout->setAlignment( Qt::AlignTop ); + myRangeGrpLayout->setSpacing( SPACING_SIZE ); myRangeGrpLayout->setMargin( MARGIN_SIZE ); + + myMinEdit = new QLineEdit( myRangeGrp, "myMinEdit" ); + myMinEdit->setMinimumWidth( MINIMUM_WIDTH ); + myMinEdit->setValidator( new QDoubleValidator( this ) ); + + myMaxEdit = new QLineEdit( myRangeGrp, "myMaxEdit" ); + myMaxEdit->setMinimumWidth( MINIMUM_WIDTH ); + myMaxEdit->setValidator( new QDoubleValidator( this ) ); + + myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MIN" ), myRangeGrp, "myMinLab" ), 0, 0 ); + myRangeGrpLayout->addWidget( myMinEdit, 0, 1 ); + myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MAX" ), myRangeGrp, "myMaxLab" ), 0, 2 ); + myRangeGrpLayout->addWidget( myMaxEdit, 0, 3 ); + + aTopLayout->addWidget( myRangeGrp, aRow, 0 ); + aRow++; + } + + /******************************************************************************/ + // Text properties + myFontGrp = new QGroupBox ( tr( "SMESH_FONT_SCALARBAR" ), this, "myFontGrp" ); + myFontGrp->setColumnLayout( 0, Qt::Vertical ); + myFontGrp->layout()->setSpacing( 0 ); myFontGrp->layout()->setMargin( 0 ); + QGridLayout* myFontGrpLayout = new QGridLayout( myFontGrp->layout() ); + myFontGrpLayout->setAlignment( Qt::AlignTop ); + myFontGrpLayout->setSpacing( SPACING_SIZE ); myFontGrpLayout->setMargin( MARGIN_SIZE ); + + myTitleColorBtn = new QToolButton( myFontGrp, "myTitleColorBtn" ); + + myTitleFontCombo = new QComboBox( false, myFontGrp, "myTitleFontCombo" ); + myTitleFontCombo->setMinimumWidth( MINIMUM_WIDTH ); + myTitleFontCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myTitleFontCombo->insertItem( tr( "SMESH_FONT_ARIAL" ) ); + myTitleFontCombo->insertItem( tr( "SMESH_FONT_COURIER" ) ); + myTitleFontCombo->insertItem( tr( "SMESH_FONT_TIMES" ) ); + + myTitleBoldCheck = new QCheckBox( tr( "SMESH_FONT_BOLD" ), myFontGrp, "myTitleBoldCheck" ); + myTitleItalicCheck = new QCheckBox( tr( "SMESH_FONT_ITALIC" ), myFontGrp, "myTitleItalicCheck" ); + myTitleShadowCheck = new QCheckBox( tr( "SMESH_FONT_SHADOW" ), myFontGrp, "myTitleShadowCheck" ); + + myLabelsColorBtn = new QToolButton( myFontGrp, "myLabelsColorBtn" ); + + myLabelsFontCombo = new QComboBox( false, myFontGrp, "myLabelsFontCombo" ); + myLabelsFontCombo->setMinimumWidth( MINIMUM_WIDTH ); + myLabelsFontCombo->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + myLabelsFontCombo->insertItem( tr( "SMESH_FONT_ARIAL" ) ); + myLabelsFontCombo->insertItem( tr( "SMESH_FONT_COURIER" ) ); + myLabelsFontCombo->insertItem( tr( "SMESH_FONT_TIMES" ) ); + + myLabelsBoldCheck = new QCheckBox( tr( "SMESH_FONT_BOLD" ), myFontGrp, "myLabelsBoldCheck" ); + myLabelsItalicCheck = new QCheckBox( tr( "SMESH_FONT_ITALIC" ), myFontGrp, "myLabelsItalicCheck" ); + myLabelsShadowCheck = new QCheckBox( tr( "SMESH_FONT_SHADOW" ), myFontGrp, "myLabelsShadowCheck" ); + + myFontGrpLayout->addWidget( new QLabel( tr( "SMESH_TITLE" ), myFontGrp, "myFontTitleLab" ), 0, 0 ); + myFontGrpLayout->addWidget( myTitleColorBtn, 0, 1 ); + myFontGrpLayout->addWidget( myTitleFontCombo, 0, 2 ); + myFontGrpLayout->addWidget( myTitleBoldCheck, 0, 3 ); + myFontGrpLayout->addWidget( myTitleItalicCheck, 0, 4 ); + myFontGrpLayout->addWidget( myTitleShadowCheck, 0, 5 ); + + myFontGrpLayout->addWidget( new QLabel( tr( "SMESH_LABELS" ), myFontGrp, "myFontLabelsLab" ), 1, 0 ); + myFontGrpLayout->addWidget( myLabelsColorBtn, 1, 1 ); + myFontGrpLayout->addWidget( myLabelsFontCombo, 1, 2 ); + myFontGrpLayout->addWidget( myLabelsBoldCheck, 1, 3 ); + myFontGrpLayout->addWidget( myLabelsItalicCheck, 1, 4 ); + myFontGrpLayout->addWidget( myLabelsShadowCheck, 1, 5 ); + + aTopLayout->addWidget( myFontGrp, aRow, 0 ); + aRow++; + + /******************************************************************************/ + // Labels & Colors + myLabColorGrp = new QGroupBox ( tr( "SMESH_LABELS_COLORS_SCALARBAR" ), this, "myLabColorGrp" ); + myLabColorGrp->setColumnLayout( 0, Qt::Vertical ); + myLabColorGrp->layout()->setSpacing( 0 ); myLabColorGrp->layout()->setMargin( 0 ); + QGridLayout* myLabColorGrpLayout = new QGridLayout( myLabColorGrp->layout() ); + myLabColorGrpLayout->setAlignment( Qt::AlignTop ); + myLabColorGrpLayout->setSpacing( SPACING_SIZE ); myLabColorGrpLayout->setMargin( MARGIN_SIZE ); + + myColorsSpin = new QSpinBox( 2, 256, 1, myLabColorGrp, "myColorsSpin" ); + myColorsSpin->setMinimumWidth( MINIMUM_WIDTH ); + myColorsSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + myLabelsSpin = new QSpinBox( 2, 65, 1, myLabColorGrp, "myLabelsSpin" ); + myLabelsSpin->setMinimumWidth( MINIMUM_WIDTH ); + myLabelsSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + myLabColorGrpLayout->addWidget( new QLabel( tr( "SMESH_NUMBEROFCOLORS" ), myLabColorGrp, "myNbColorLab" ), 0, 0 ); + myLabColorGrpLayout->addWidget( myColorsSpin, 0, 1 ); + myLabColorGrpLayout->addWidget( new QLabel( tr( "SMESH_NUMBEROFLABELS" ), myLabColorGrp, "myNbLabsLab" ), 0, 2 ); + myLabColorGrpLayout->addWidget( myLabelsSpin, 0, 3 ); + + aTopLayout->addWidget( myLabColorGrp, aRow, 0 ); + aRow++; + + /******************************************************************************/ + // Orientation + myOrientationGrp = new QButtonGroup ( tr( "SMESH_ORIENTATION" ), this, "myOrientationGrp" ); + myOrientationGrp->setColumnLayout( 0, Qt::Vertical ); + myOrientationGrp->layout()->setSpacing( 0 ); myOrientationGrp->layout()->setMargin( 0 ); + QGridLayout* myOrientationGrpLayout = new QGridLayout( myOrientationGrp->layout() ); + myOrientationGrpLayout->setAlignment( Qt::AlignTop ); + myOrientationGrpLayout->setSpacing( SPACING_SIZE ); myOrientationGrpLayout->setMargin( MARGIN_SIZE ); + + myVertRadioBtn = new QRadioButton( tr( "SMESH_VERTICAL" ), myOrientationGrp, "myVertRadioBtn" ); + myHorizRadioBtn = new QRadioButton( tr( "SMESH_HORIZONTAL" ), myOrientationGrp, "myHorizRadioBtn" ); + myVertRadioBtn->setChecked( true ); + + myOrientationGrpLayout->addWidget( myVertRadioBtn, 0, 0 ); + myOrientationGrpLayout->addWidget( myHorizRadioBtn, 0, 1 ); + + aTopLayout->addWidget( myOrientationGrp, aRow, 0 ); + aRow++; + + /******************************************************************************/ + // Position & Size + myOriginDimGrp = new QGroupBox (tr("SMESH_POSITION_SIZE_SCALARBAR"), this, "myOriginDimGrp"); + myOriginDimGrp->setColumnLayout(0, Qt::Vertical); + myOriginDimGrp->layout()->setSpacing( 0 ); myOriginDimGrp->layout()->setMargin( 0 ); + QGridLayout* myOriginDimGrpLayout = new QGridLayout( myOriginDimGrp->layout() ); + myOriginDimGrpLayout->setAlignment( Qt::AlignTop ); + myOriginDimGrpLayout->setSpacing( SPACING_SIZE ); myOriginDimGrpLayout->setMargin( MARGIN_SIZE ); + + myXSpin = new QtxDblSpinBox (0.0, 1.0, 0.1, myOriginDimGrp); + myXSpin->setMinimumWidth( MINIMUM_WIDTH ); + myXSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + myYSpin = new QtxDblSpinBox(0.0, 1.0, 0.1, myOriginDimGrp); + myYSpin->setMinimumWidth( MINIMUM_WIDTH ); + myYSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + myWidthSpin = new QtxDblSpinBox(0.0, 1.0, 0.1, myOriginDimGrp); + myWidthSpin->setMinimumWidth( MINIMUM_WIDTH ); + myWidthSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + myHeightSpin = new QtxDblSpinBox(0.0, 1.0, 0.1, myOriginDimGrp); + myHeightSpin->setMinimumWidth( MINIMUM_WIDTH ); + myHeightSpin->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) ); + + myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_X_SCALARBAR" ), myOriginDimGrp, "myXLab" ), 0, 0 ); + myOriginDimGrpLayout->addWidget( myXSpin, 0, 1 ); + myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_Y_SCALARBAR" ), myOriginDimGrp, "myYLab" ), 0, 2 ); + myOriginDimGrpLayout->addWidget( myYSpin, 0, 3 ); + myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_WIDTH" ), myOriginDimGrp, "myWidthLab" ), 1, 0 ); + myOriginDimGrpLayout->addWidget( myWidthSpin, 1, 1 ); + myOriginDimGrpLayout->addWidget( new QLabel( tr( "SMESH_HEIGHT" ), myOriginDimGrp, "myHeightLab" ), 1, 2 ); + myOriginDimGrpLayout->addWidget( myHeightSpin, 1, 3 ); + + aTopLayout->addWidget( myOriginDimGrp, aRow, 0 ); + aRow++; + + /***************************************************************/ + // Common buttons + myButtonGrp = new QGroupBox( this, "myButtonGrp" ); + myButtonGrp->setColumnLayout(0, Qt::Vertical ); + myButtonGrp->layout()->setSpacing( 0 ); myButtonGrp->layout()->setMargin( 0 ); + QHBoxLayout* myButtonGrpLayout = new QHBoxLayout( myButtonGrp->layout() ); + myButtonGrpLayout->setAlignment( Qt::AlignTop ); + myButtonGrpLayout->setSpacing( SPACING_SIZE ); myButtonGrpLayout->setMargin( MARGIN_SIZE ); + + myOkBtn = new QPushButton( tr( "SMESH_BUT_OK" ), myButtonGrp, "myOkBtn" ); + myOkBtn->setAutoDefault( TRUE ); myOkBtn->setDefault( TRUE ); + myButtonGrpLayout->addWidget( myOkBtn ); + if ( mySelectionMgr ) { + myApplyBtn = new QPushButton( tr( "SMESH_BUT_APPLY" ), myButtonGrp, "myApplyBtn" ); + myApplyBtn->setAutoDefault( TRUE ); + myButtonGrpLayout->addWidget( myApplyBtn ); + } + myButtonGrpLayout->addStretch(); + myCancelBtn = new QPushButton( tr( "SMESH_BUT_CANCEL" ), myButtonGrp, "myCancelBtn" ); + if ( mySelectionMgr ) + myCancelBtn->setText( tr( "SMESH_BUT_CLOSE" ) ); + myCancelBtn->setAutoDefault( TRUE ); + myButtonGrpLayout->addWidget( myCancelBtn ); + + aTopLayout->addWidget( myButtonGrp, aRow, 0 ); + + /***************************************************************/ + // Init + // --> first init from preferences + SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); + + QColor titleColor (255, 255, 255); + if (mgr && mgr->hasValue("SMESH", "scalar_bar_title_color")) { + QStringList aTColor = + QStringList::split(":", mgr->stringValue("SMESH", "scalar_bar_title_color"), false); + titleColor = QColor((aTColor.count() > 0 ? aTColor[0].toInt() : 255), + (aTColor.count() > 1 ? aTColor[1].toInt() : 255), + (aTColor.count() > 2 ? aTColor[2].toInt() : 255)); + } + myTitleColorBtn->setPaletteBackgroundColor(titleColor); + myTitleFontCombo->setCurrentItem(0); + if (mgr && mgr->hasValue("SMESH", "scalar_bar_title_font")) { + QFont f = mgr->fontValue( "SMESH", "scalar_bar_title_font" ); + if( f.family()=="Arial" ) + myTitleFontCombo->setCurrentItem(0); + if( f.family()=="Courier" ) + myTitleFontCombo->setCurrentItem(1); + if( f.family()=="Times") + myTitleFontCombo->setCurrentItem(2); + + myTitleBoldCheck->setChecked ( f.bold() ); + myTitleItalicCheck->setChecked( f.italic() ); + myTitleShadowCheck->setChecked( f.underline() ); + } + + QColor labelColor (255, 255, 255); + if (mgr && mgr->hasValue("SMESH", "scalar_bar_label_color")) { + QStringList aLColor = + QStringList::split(":", mgr->stringValue("SMESH", "scalar_bar_label_color"), false); + labelColor = QColor((aLColor.count() > 0 ? aLColor[0].toInt() : 255), + (aLColor.count() > 1 ? aLColor[1].toInt() : 255), + (aLColor.count() > 2 ? aLColor[2].toInt() : 255)); + } + myLabelsColorBtn->setPaletteBackgroundColor(labelColor); + myLabelsFontCombo->setCurrentItem(0); + if (mgr && mgr->hasValue("SMESH", "scalar_bar_label_font")) { + QFont f = mgr->fontValue( "SMESH", "scalar_bar_label_font" ); + if (f.family() == "Arial") + myLabelsFontCombo->setCurrentItem(0); + if (f.family() == "Courier") + myLabelsFontCombo->setCurrentItem(1); + if (f.family() == "Times") + myLabelsFontCombo->setCurrentItem(2); + + myLabelsBoldCheck ->setChecked( f.bold() ); + myLabelsItalicCheck->setChecked( f.italic() ); + myLabelsShadowCheck->setChecked( f.underline() ); + } + + int aNbColors = 64; + if (mgr && mgr->hasValue("SMESH", "scalar_bar_num_colors")) + aNbColors = mgr->integerValue("SMESH", "scalar_bar_num_colors"); + myColorsSpin->setValue(aNbColors); + + int aNbLabels = 5; + if (mgr && mgr->hasValue("SMESH", "scalar_bar_num_labels")) + aNbLabels = mgr->integerValue("SMESH", "scalar_bar_num_labels"); + myLabelsSpin->setValue(aNbLabels); + + int aOrientation = ( mgr ? mgr->integerValue( "SMESH", "scalar_bar_orientation", 1 ) : 1 ); + bool isHoriz = ( aOrientation==1 ); + if (aOrientation == 1) + myHorizRadioBtn->setChecked(true); + else + myVertRadioBtn->setChecked(true); + myIniOrientation = myVertRadioBtn->isChecked(); + + QString name = isHoriz ? "scalar_bar_horizontal_%1" : "scalar_bar_vertical_%1"; + if (mgr && mgr->hasValue("SMESH", name.arg( "x" ))) + myIniX = mgr->doubleValue("SMESH", name.arg( "x" )); + else + myIniX = myHorizRadioBtn->isChecked() ? DEF_HOR_X : DEF_VER_X; + + if (mgr && mgr->hasValue("SMESH", name.arg( "y" ))) + myIniY = mgr->doubleValue("SMESH", name.arg( "y" )); + else + myIniY = myHorizRadioBtn->isChecked() ? DEF_HOR_Y : DEF_VER_Y; + + if (mgr && mgr->hasValue("SMESH", name.arg( "width" ))) + myIniW = mgr->doubleValue("SMESH", name.arg( "width" )); + else + myIniW = myHorizRadioBtn->isChecked() ? DEF_HOR_W : DEF_VER_W; + + if (mgr && mgr->hasValue("SMESH", name.arg( "height" ))) + myIniH = mgr->doubleValue("SMESH", name.arg( "height" )); + else + myIniH = myHorizRadioBtn->isChecked() ? DEF_HOR_H : DEF_VER_H; + + setOriginAndSize(myIniX, myIniY, myIniW, myIniH); + + if (mySelectionMgr) { + // --> then init from selection if necessary + onSelectionChanged(); + } + + /***************************************************************/ + // Connect section + connect( myTitleColorBtn, SIGNAL( clicked() ), this, SLOT( onTitleColor() ) ); + connect( myLabelsColorBtn, SIGNAL( clicked() ), this, SLOT( onLabelsColor() ) ); + connect( myOkBtn, SIGNAL( clicked() ), this, SLOT( onOk() ) ); + connect( myCancelBtn, SIGNAL( clicked() ), this, SLOT( onCancel() ) ); + connect( myXSpin, SIGNAL( valueChanged( double ) ), this, SLOT( onXYChanged() ) ); + connect( myYSpin, SIGNAL( valueChanged( double ) ), this, SLOT( onXYChanged() ) ); + connect( myOrientationGrp, SIGNAL( clicked( int ) ), this, SLOT( onOrientationChanged() ) ); + if ( mySelectionMgr ) { + connect( myApplyBtn, SIGNAL( clicked() ), this, SLOT( onApply() ) ); + connect( mySelectionMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( onSelectionChanged() ) ); + } + connect( mySMESHGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( onCancel() ) ) ; } -/* - * Destroys the object and frees any allocated resources +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::~SMESHGUI_Preferences_ScalarBarDlg + * + * Destructor */ +//================================================================================================= SMESHGUI_Preferences_ScalarBarDlg::~SMESHGUI_Preferences_ScalarBarDlg() { - // no need to delete child widgets, Qt does it all for us } +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onOk + * + * OK button slot + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::onOk() +{ + if ( onApply() ) + onCancel(); +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onApply + * + * Apply button slot + */ +//================================================================================================= +bool SMESHGUI_Preferences_ScalarBarDlg::onApply() +{ + if (mySelectionMgr) { + // Scalar Bar properties + if (!myActor) + return false; + vtkScalarBarActor* myScalarBarActor = myActor->GetScalarBarActor(); + + vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty(); + QColor aTColor = myTitleColorBtn->paletteBackgroundColor(); + aTitleTextPrp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. ); + if ( myTitleFontCombo->currentItem() == 0 ) + aTitleTextPrp->SetFontFamilyToArial(); + else if ( myTitleFontCombo->currentItem() == 1 ) + aTitleTextPrp->SetFontFamilyToCourier(); + else + aTitleTextPrp->SetFontFamilyToTimes(); + aTitleTextPrp->SetBold( myTitleBoldCheck->isChecked() ); + aTitleTextPrp->SetItalic( myTitleItalicCheck->isChecked() ); + aTitleTextPrp->SetShadow( myTitleShadowCheck->isChecked() ); + myScalarBarActor->SetTitleTextProperty( aTitleTextPrp ); + + vtkTextProperty* aLabelsTextPrp = myScalarBarActor->GetLabelTextProperty(); + QColor aLColor = myLabelsColorBtn->paletteBackgroundColor(); + aLabelsTextPrp->SetColor( aLColor.red()/255., aLColor.green()/255., aLColor.blue()/255. ); + if ( myLabelsFontCombo->currentItem() == 0 ) + aLabelsTextPrp->SetFontFamilyToArial(); + else if ( myLabelsFontCombo->currentItem() == 1 ) + aLabelsTextPrp->SetFontFamilyToCourier(); + else + aLabelsTextPrp->SetFontFamilyToTimes(); + aLabelsTextPrp->SetBold( myLabelsBoldCheck->isChecked() ); + aLabelsTextPrp->SetItalic( myLabelsItalicCheck->isChecked() ); + aLabelsTextPrp->SetShadow( myLabelsShadowCheck->isChecked() ); + myScalarBarActor->SetLabelTextProperty( aLabelsTextPrp ); + + myScalarBarActor->SetNumberOfLabels( myLabelsSpin->value() ); + myScalarBarActor->SetMaximumNumberOfColors( myColorsSpin->value() ); + + if ( myHorizRadioBtn->isChecked() ) + myScalarBarActor->SetOrientationToHorizontal(); + else + myScalarBarActor->SetOrientationToVertical(); + + myScalarBarActor->SetPosition( myXSpin->value(), myYSpin->value() ); + myScalarBarActor->SetWidth( myWidthSpin->value() ); + myScalarBarActor->SetHeight( myHeightSpin->value() ); + + double aMin = myMinEdit->text().toDouble(); + double aMax = myMaxEdit->text().toDouble(); + myScalarBarActor->GetLookupTable()->SetRange( aMin, aMax ); + SMESH::RepaintCurrentView(); + } else { + // Scalar Bar preferences + SUIT_ResourceMgr* mgr = SMESH::GetResourceMgr( mySMESHGUI ); + if (!mgr) return false; + + QColor titleColor = myTitleColorBtn->paletteBackgroundColor(); + mgr->setValue("SMESH", "scalar_bar_title_color", titleColor ); + + QFont f; + if (myTitleFontCombo->currentItem() == 0) + f.setFamily( "Arial" ); + else if (myTitleFontCombo->currentItem() == 1) + f.setFamily( "Courier" ); + else + f.setFamily( "Times"); + + f.setBold( myTitleBoldCheck ->isChecked() ); + f.setItalic( myTitleItalicCheck->isChecked() ); + f.setUnderline( myTitleShadowCheck->isChecked() ); + mgr->setValue( "SMESH", "scalar_bar_title_font", f ); + + QColor labelColor = myLabelsColorBtn->paletteBackgroundColor(); + mgr->setValue("SMESH", "scalar_bar_label_color", labelColor ); + + if (myLabelsFontCombo->currentItem() == 0) + f.setFamily( "Arial" ); + else if ( myLabelsFontCombo->currentItem() == 1 ) + f.setFamily( "Courier"); + else + f.setFamily( "Times"); + + f.setBold( myLabelsBoldCheck ->isChecked() ); + f.setItalic( myLabelsItalicCheck->isChecked() ); + f.setUnderline( myLabelsShadowCheck->isChecked() ); + mgr->setValue( "SMESH", "scalar_bar_label_font", f ); + + mgr->setValue("SMESH", "scalar_bar_num_colors", myColorsSpin->value()); + mgr->setValue("SMESH", "scalar_bar_num_labels", myLabelsSpin->value()); + + mgr->setValue("SMESH", "scalar_bar_orientation", myHorizRadioBtn->isChecked() ? 1 : 0 ); + + QString name = myHorizRadioBtn->isChecked() ? "scalar_bar_horizontal_%1" : "scalar_bar_vertical_%1"; + mgr->setValue("SMESH", name.arg( "x" ), myXSpin->value()); + mgr->setValue("SMESH", name.arg( "y" ), myYSpin->value()); + mgr->setValue("SMESH", name.arg( "width" ), myWidthSpin->value()); + mgr->setValue("SMESH", name.arg( "height" ), myHeightSpin->value()); + } + return true; +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onCancel + * + * Cancel button slot + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::onCancel() +{ + close(); +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onTitleColor + * + * Change Title color button slot + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::onTitleColor() +{ + QColor aColor = myTitleColorBtn->paletteBackgroundColor(); + aColor = QColorDialog::getColor( aColor, this ); + if ( aColor.isValid() ) + myTitleColorBtn->setPaletteBackgroundColor( aColor ); +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onLabelsColor + * + * Change Labels color button slot + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::onLabelsColor() +{ + QColor aColor = myLabelsColorBtn->paletteBackgroundColor(); + aColor = QColorDialog::getColor( aColor, this ); + if ( aColor.isValid() ) + myLabelsColorBtn->setPaletteBackgroundColor( aColor ); +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged + * + * Called when selection changed + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged() +{ + if (mySelectionMgr) { + SALOME_ListIO aList; + mySelectionMgr->selectedObjects(aList); + + if (aList.Extent() == 1) { + Handle(SALOME_InteractiveObject) anIO = aList.First(); + if( anIO->hasEntry() ) { + SMESH_Actor* anActor = SMESH::FindActorByEntry(anIO->getEntry()); + if ( anActor && anActor->GetScalarBarActor() && anActor->GetControlMode() != SMESH_Actor::eNone ) { + myActor = anActor; + vtkScalarBarActor* myScalarBarActor = myActor->GetScalarBarActor(); + + if ( myScalarBarActor->GetLookupTable() ) { + float *range = myScalarBarActor->GetLookupTable()->GetRange(); + myMinEdit->setText( QString::number( range[0] ) ); + myMaxEdit->setText( QString::number( range[1] ) ); + } + + vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty(); + float aTColor[3]; + aTitleTextPrp->GetColor( aTColor ); + myTitleColorBtn->setPaletteBackgroundColor( QColor( (int)( aTColor[0]*255 ), (int)( aTColor[1]*255 ), (int)( aTColor[2]*255 ) ) ); + myTitleFontCombo->setCurrentItem( aTitleTextPrp->GetFontFamily() ); + myTitleBoldCheck->setChecked( aTitleTextPrp->GetBold() ); + myTitleItalicCheck->setChecked( aTitleTextPrp->GetItalic() ); + myTitleShadowCheck->setChecked( aTitleTextPrp->GetShadow() ); + + vtkTextProperty* aLabelsTextPrp = myScalarBarActor->GetLabelTextProperty(); + float aLColor[3]; + aLabelsTextPrp->GetColor( aLColor ); + myLabelsColorBtn->setPaletteBackgroundColor( QColor( (int)( aLColor[0]*255 ), (int)( aLColor[1]*255 ), (int)( aLColor[2]*255 ) ) ); + myLabelsFontCombo->setCurrentItem( aLabelsTextPrp->GetFontFamily() ); + myLabelsBoldCheck->setChecked( aLabelsTextPrp->GetBold() ); + myLabelsItalicCheck->setChecked( aLabelsTextPrp->GetItalic() ); + myLabelsShadowCheck->setChecked( aLabelsTextPrp->GetShadow() ); + + myLabelsSpin->setValue( myScalarBarActor->GetNumberOfLabels() ); + myColorsSpin->setValue( myScalarBarActor->GetMaximumNumberOfColors() ); + + if ( myScalarBarActor->GetOrientation() == VTK_ORIENT_VERTICAL ) + myVertRadioBtn->setChecked( true ); + else + myHorizRadioBtn->setChecked( true ); + myIniOrientation = myVertRadioBtn->isChecked(); + + myIniX = myScalarBarActor->GetPosition()[0]; + myIniY = myScalarBarActor->GetPosition()[1]; + myIniW = myScalarBarActor->GetWidth(); + myIniH = myScalarBarActor->GetHeight(); + setOriginAndSize( myIniX, myIniY, myIniW, myIniH ); + + myRangeGrp->setEnabled( true ); + myFontGrp->setEnabled( true ); + myLabColorGrp->setEnabled( true ); + myOrientationGrp->setEnabled( true ); + myOriginDimGrp->setEnabled( true ); + myOkBtn->setEnabled( true ); + myApplyBtn->setEnabled( true ); + return; + } + } + } + myActor = 0; + myRangeGrp->setEnabled( false ); + myFontGrp->setEnabled( false ); + myLabColorGrp->setEnabled( false ); + myOrientationGrp->setEnabled( false ); + myOriginDimGrp->setEnabled( false ); + myOkBtn->setEnabled( false ); + myApplyBtn->setEnabled( false ); + } +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::closeEvent + * + * Close event handler + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::closeEvent( QCloseEvent* e ) +{ + if ( mySelectionMgr ) // "Properties" dialog box + myDlg = 0; + QDialog::closeEvent( e ); +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onXYChanged + * + * Called when X, Y values are changed + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::onXYChanged() +{ + myWidthSpin->setMaxValue( 1.0 - myXSpin->value() ); + myHeightSpin->setMaxValue( 1.0 - myYSpin->value() ); +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::setOriginAndSize + * + * Called when X, Y values are changed + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::setOriginAndSize( const double x, + const double y, + const double w, + const double h ) +{ + blockSignals( true ); + myXSpin->setValue( x ); + myYSpin->setValue( y ); + myWidthSpin->setMaxValue( 1.0 ); + myWidthSpin->setValue( w ); + myHeightSpin->setMaxValue( 1.0 ); + myHeightSpin->setValue( h ); + blockSignals( false ); + onXYChanged(); +} + +//================================================================================================= +/*! + * SMESHGUI_Preferences_ScalarBarDlg::onOrientationChanged + * + * Called when orientation is changed + */ +//================================================================================================= +void SMESHGUI_Preferences_ScalarBarDlg::onOrientationChanged() +{ + int aOrientation = myVertRadioBtn->isChecked(); + if ( aOrientation == myIniOrientation ) + setOriginAndSize( myIniX, myIniY, myIniW, myIniH ); + else + setOriginAndSize( aOrientation ? DEF_VER_X : DEF_HOR_X, + aOrientation ? DEF_VER_Y : DEF_HOR_Y, + aOrientation ? DEF_VER_W : DEF_HOR_W, + aOrientation ? DEF_VER_H : DEF_HOR_H ); +}