1 // Copyright (C) 2007-2008 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_ColorDlg.cxx
24 // Author : Nicolas REJNERI
28 #include "SMESHGUI_Preferences_ColorDlg.h"
30 #include "SMESHGUI_Utils.h"
32 #include "utilities.h"
35 #include <qbuttongroup.h>
36 #include <qcheckbox.h>
37 #include <qcombobox.h>
41 #include <qpushbutton.h>
43 #include <qcolordialog.h>
47 #include "SUIT_Desktop.h"
51 //=================================================================================
52 // function : SMESHGUI_Preferences_ColorDlg()
53 // purpose : Constructs a SMESHGUI_Preferences_ColorDlg which is a child
54 // of 'parent', with the name 'name' and widget flags set to 'f'
55 // The dialog will by default be modeless, unless you
56 // set'modal' to TRUE to construct a modal dialog.
57 //=================================================================================
58 SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModule, const char* name)
59 : QDialog( SMESH::GetDesktop( theModule ), name, true, WStyle_Customize |
60 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ),
61 mySMESHGUI( theModule )
64 setName("SMESHGUI_Preferences_ColorDlg");
65 setCaption(tr("Preferences - Set Color"));
66 setSizeGripEnabled(TRUE);
67 QGridLayout* SMESHGUI_Preferences_ColorDlgLayout = new QGridLayout(this);
68 SMESHGUI_Preferences_ColorDlgLayout->setSpacing(6);
69 SMESHGUI_Preferences_ColorDlgLayout->setMargin(11);
71 ButtonGroup1 = new QButtonGroup(tr("Elements"), this, "ButtonGroup1");
72 ButtonGroup1->setColumnLayout(0, Qt::Vertical);
73 ButtonGroup1->layout()->setSpacing(0);
74 ButtonGroup1->layout()->setMargin(0);
75 QGridLayout* ButtonGroup1Layout = new QGridLayout(ButtonGroup1->layout());
76 ButtonGroup1Layout->setAlignment(Qt::AlignTop);
77 ButtonGroup1Layout->setSpacing(6);
78 ButtonGroup1Layout->setMargin(11);
80 TextLabel_Fill = new QLabel(tr("Fill"), ButtonGroup1, "TextLabel_2D_Fill");
81 ButtonGroup1Layout->addWidget(TextLabel_Fill, 0, 0);
83 btnFillColor = new QPushButton(ButtonGroup1, "btnFillColor");
84 btnFillColor->setFixedSize(QSize(25, 25));
85 ButtonGroup1Layout->addWidget(btnFillColor, 0, 1);
87 TextLabel_Outine = new QLabel(tr("Outline"), ButtonGroup1, "TextLabel_2D_Outine");
88 ButtonGroup1Layout->addWidget(TextLabel_Outine, 0, 2);
90 btnOutlineColor = new QPushButton(ButtonGroup1, "btnOutlineColor");
91 btnOutlineColor->setFixedSize(QSize(25, 25));
92 ButtonGroup1Layout->addWidget(btnOutlineColor, 0, 3);
94 TextLabel_Width = new QLabel(tr("Width"), ButtonGroup1, "TextLabel_2D_Width");
95 ButtonGroup1Layout->addWidget(TextLabel_Width, 0, 4);
97 SpinBox_Width = new QSpinBox(0, 5, 1, ButtonGroup1, "SpinBox_Width");
98 SpinBox_Width->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
99 SpinBox_Width->setWrapping(FALSE);
100 SpinBox_Width->setButtonSymbols(QSpinBox::PlusMinus);
101 ButtonGroup1Layout->addWidget(SpinBox_Width, 0, 5);
103 TextLabel_BackFace = new QLabel(tr("Back Face"), ButtonGroup1, "TextLabel_BackFace");
104 ButtonGroup1Layout->addWidget(TextLabel_BackFace, 1, 0);
106 btnBackFaceColor = new QPushButton(ButtonGroup1, "btnBackFaceColor");
107 btnBackFaceColor->setFixedSize(QSize(25, 25));
108 ButtonGroup1Layout->addWidget(btnBackFaceColor, 1, 1);
110 TextLabel_ShrinkCoeff = new QLabel(tr("Shrink coef."), ButtonGroup1, "TextLabel_ShrinkCoeff");
111 ButtonGroup1Layout->addWidget(TextLabel_ShrinkCoeff, 2, 0);
113 SpinBox_Shrink = new QSpinBox(20, 100, 1, ButtonGroup1, "SpinBox_Shrink");
114 SpinBox_Shrink->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
115 SpinBox_Shrink->setButtonSymbols(QSpinBox::PlusMinus);
116 ButtonGroup1Layout->addMultiCellWidget(SpinBox_Shrink, 2, 2, 1, 5);
118 SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup1, 0, 0);
120 ButtonGroup2 = new QButtonGroup(tr("Nodes"), this, "ButtonGroup2");
121 ButtonGroup2->setColumnLayout(0, Qt::Vertical);
122 ButtonGroup2->layout()->setSpacing(0);
123 ButtonGroup2->layout()->setMargin(0);
124 QGridLayout* ButtonGroup2Layout = new QGridLayout(ButtonGroup2->layout());
125 ButtonGroup2Layout->setAlignment(Qt::AlignTop);
126 ButtonGroup2Layout->setSpacing(6);
127 ButtonGroup2Layout->setMargin(11);
129 TextLabel_Nodes_Color = new QLabel(tr("Color"), ButtonGroup2, "TextLabel_Nodes_Color");
130 ButtonGroup2Layout->addWidget(TextLabel_Nodes_Color, 0, 0);
132 btnNodeColor = new QPushButton(ButtonGroup2, "btnNodeColor");
133 btnNodeColor->setFixedSize(QSize(25, 25));
134 ButtonGroup2Layout->addWidget(btnNodeColor, 0, 1);
136 TextLabel_Nodes_Size = new QLabel(tr("Size"), ButtonGroup2, "TextLabel_Nodes_Size");
137 ButtonGroup2Layout->addWidget(TextLabel_Nodes_Size, 0, 2);
139 SpinBox_Nodes_Size = new QSpinBox(0, 5, 1, ButtonGroup2, "SpinBox_Nodes_Size");
140 SpinBox_Nodes_Size->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
141 SpinBox_Nodes_Size->setWrapping(FALSE);
142 SpinBox_Nodes_Size->setButtonSymbols(QSpinBox::PlusMinus);
143 ButtonGroup2Layout->addWidget(SpinBox_Nodes_Size, 0, 3);
145 SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup2, 1, 0);
147 GroupButtons = new QButtonGroup(this, "GroupButtons");
148 GroupButtons->setColumnLayout(0, Qt::Vertical);
149 GroupButtons->layout()->setSpacing(0);
150 GroupButtons->layout()->setMargin(0);
151 QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout());
152 GroupButtonsLayout->setAlignment(Qt::AlignTop);
153 GroupButtonsLayout->setSpacing(6);
154 GroupButtonsLayout->setMargin(11);
156 buttonOk = new QPushButton(tr("&OK"), GroupButtons, "buttonOk");
157 buttonOk->setAutoDefault(TRUE);
158 buttonOk->setDefault(TRUE);
159 GroupButtonsLayout->addWidget(buttonOk, 0, 0);
161 GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1);
163 buttonCancel = new QPushButton(tr("&Cancel"), GroupButtons, "buttonCancel");
164 buttonCancel->setAutoDefault(TRUE);
165 GroupButtonsLayout->addWidget(buttonCancel, 0, 2);
167 SMESHGUI_Preferences_ColorDlgLayout->addWidget(GroupButtons, 2, 0);
172 //=================================================================================
173 // function : ~SMESHGUI_Preferences_ColorDlg()
174 // purpose : Destructor
175 //=================================================================================
176 SMESHGUI_Preferences_ColorDlg::~SMESHGUI_Preferences_ColorDlg()
178 // no need to delete child widgets, Qt does it all for us
181 //=================================================================================
184 //=================================================================================
185 void SMESHGUI_Preferences_ColorDlg::Init()
187 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
189 /* signals and slots connections */
190 connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
191 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
193 connect(btnFillColor, SIGNAL(clicked()), this, SLOT(SelectFillColor()));
194 connect(btnOutlineColor, SIGNAL(clicked()), this, SLOT(SelectOutlineColor()));
195 connect(btnNodeColor, SIGNAL(clicked()), this, SLOT(SelectNodeColor()));
196 connect(btnBackFaceColor, SIGNAL(clicked()), this, SLOT(SelectBackFaceColor()));
198 connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
199 /* to close dialog if study change */
200 connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
203 //=================================================================================
204 // function : SelectFillColor()
206 //=================================================================================
207 void SMESHGUI_Preferences_ColorDlg::SelectFillColor()
209 QColor color = btnFillColor->palette().active().button();
210 color = QColorDialog::getColor(color);
211 if (color.isValid()) {
212 QPalette pal = btnFillColor->palette();
213 pal.setColor(QColorGroup::Button, color);
214 btnFillColor->setPalette(pal);
218 //=================================================================================
219 // function : SelectBackFaceColor()
221 //=================================================================================
222 void SMESHGUI_Preferences_ColorDlg::SelectBackFaceColor()
224 QColor color = btnBackFaceColor->palette().active().button();
225 color = QColorDialog::getColor(color);
226 if (color.isValid()) {
227 QPalette pal = btnBackFaceColor->palette();
228 pal.setColor(QColorGroup::Button, color);
229 btnBackFaceColor->setPalette(pal);
233 //=================================================================================
234 // function : SelectOutlineColor()
236 //=================================================================================
237 void SMESHGUI_Preferences_ColorDlg::SelectOutlineColor()
239 QColor color = btnOutlineColor->palette().active().button();
240 color = QColorDialog::getColor(color);
241 if (color.isValid()) {
242 QPalette pal = btnOutlineColor->palette();
243 pal.setColor(QColorGroup::Button, color);
244 btnOutlineColor->setPalette(pal);
248 //=================================================================================
249 // function : SelectNodeColor()
251 //=================================================================================
252 void SMESHGUI_Preferences_ColorDlg::SelectNodeColor()
254 QColor color = btnNodeColor->palette().active().button();
255 color = QColorDialog::getColor(color);
256 if (color.isValid()) {
257 QPalette pal = btnNodeColor->palette();
258 pal.setColor(QColorGroup::Button, color);
259 btnNodeColor->setPalette(pal);
263 //=================================================================================
264 // function : ClickOnOk()
266 //=================================================================================
267 void SMESHGUI_Preferences_ColorDlg::ClickOnOk()
269 mySMESHGUI->ResetState();
273 //=================================================================================
274 // function : ClickOnCancel()
276 //=================================================================================
277 void SMESHGUI_Preferences_ColorDlg::ClickOnCancel()
279 mySMESHGUI->ResetState();
283 //=================================================================================
284 // function : DeactivateActiveDialog()
286 //=================================================================================
287 void SMESHGUI_Preferences_ColorDlg::DeactivateActiveDialog()
291 //=================================================================================
292 // function : closeEvent()
294 //=================================================================================
295 void SMESHGUI_Preferences_ColorDlg::closeEvent (QCloseEvent*)
297 this->ClickOnCancel(); /* same than click on cancel button */
300 //=================================================================================
301 // function : ActivateThisDialog()
303 //=================================================================================
304 void SMESHGUI_Preferences_ColorDlg::ActivateThisDialog()
306 /* Emit a signal to deactivate any active dialog */
307 mySMESHGUI->EmitSignalDeactivateDialog();
310 //=================================================================================
311 // function : SetColor()
313 //=================================================================================
314 void SMESHGUI_Preferences_ColorDlg::SetColor (int type, QColor color)
319 QPalette pal = btnFillColor->palette();
320 pal.setColor(QColorGroup::Button, color);
321 btnFillColor->setPalette(pal);
326 QPalette pal = btnOutlineColor->palette();
327 pal.setColor(QColorGroup::Button, color);
328 btnOutlineColor->setPalette(pal);
333 QPalette pal = btnNodeColor->palette();
334 pal.setColor(QColorGroup::Button, color);
335 btnNodeColor->setPalette(pal);
338 case 4 : // back face
340 QPalette pal = btnBackFaceColor->palette();
341 pal.setColor(QColorGroup::Button, color);
342 btnBackFaceColor->setPalette(pal);
348 //=================================================================================
349 // function : GetColor()
351 //=================================================================================
352 QColor SMESHGUI_Preferences_ColorDlg::GetColor (int type)
356 case 1 : color = btnFillColor->palette().active().button(); break; // fill
357 case 2 : color = btnOutlineColor->palette().active().button(); break; // outline
358 case 3 : color = btnNodeColor->palette().active().button(); break; // node
359 case 4 : color = btnBackFaceColor->palette().active().button(); break; // back face
364 //=================================================================================
365 // function : SetIntValue()
367 //=================================================================================
368 void SMESHGUI_Preferences_ColorDlg::SetIntValue (int type, int value)
371 case 1 : SpinBox_Width->setValue(value); break; // width
372 case 2 : SpinBox_Nodes_Size->setValue(value); break; // nodes size = value; break;
373 case 3 : SpinBox_Shrink->setValue(value); break; // shrink coeff
377 //=================================================================================
378 // function : GetIntValue()
380 //=================================================================================
381 int SMESHGUI_Preferences_ColorDlg::GetIntValue (int type)
385 case 1 : res = SpinBox_Width->value(); break; // width
386 case 2 : res = SpinBox_Nodes_Size->value(); break; // nodes size
387 case 3 : res = SpinBox_Shrink->value(); break; // shrink coeff