Salome HOME
PAL9391
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Preferences_ColorDlg.cxx
1 //  SMESH SMESHGUI : GUI for SMESH component
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
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.
10 //
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.
15 //
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
19 //
20 //  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
21 //
22 //
23 //
24 //  File   : SMESHGUI_Preferences_ColorDlg.cxx
25 //  Author : Nicolas REJNERI
26 //  Module : SMESH
27 //  $Header$
28
29 #include "SMESHGUI_Preferences_ColorDlg.h"
30 #include "SMESHGUI.h"
31 #include "SMESHGUI_Utils.h"
32
33 #include "utilities.h"
34
35 // QT Includes
36 #include <qbuttongroup.h>
37 #include <qcheckbox.h>
38 #include <qcombobox.h>
39 #include <qframe.h>
40 #include <qlabel.h>
41 #include <qpixmap.h>
42 #include <qpushbutton.h>
43 #include <qlayout.h>
44 #include <qcolordialog.h>
45 #include <qspinbox.h>
46 #include <qcolor.h>
47
48 #include "SUIT_Desktop.h"
49
50 using namespace std;
51
52 //=================================================================================
53 // function : SMESHGUI_Preferences_ColorDlg()
54 // purpose  : Constructs a SMESHGUI_Preferences_ColorDlg which is a child
55 //            of 'parent', with the name 'name' and widget flags set to 'f'
56 //            The dialog will by default be modeless, unless you
57 //            set'modal' to TRUE to construct a modal dialog.
58 //=================================================================================
59 SMESHGUI_Preferences_ColorDlg::SMESHGUI_Preferences_ColorDlg( SMESHGUI* theModule, const char* name)
60      : QDialog( SMESH::GetDesktop( theModule ), name, true, WStyle_Customize |
61                 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu ),
62     mySMESHGUI( theModule )
63 {
64     if (!name)
65         setName("SMESHGUI_Preferences_ColorDlg");
66     setCaption(tr("Preferences - Set Color"));
67     setSizeGripEnabled(TRUE);
68     QGridLayout* SMESHGUI_Preferences_ColorDlgLayout = new QGridLayout(this);
69     SMESHGUI_Preferences_ColorDlgLayout->setSpacing(6);
70     SMESHGUI_Preferences_ColorDlgLayout->setMargin(11);
71
72     ButtonGroup1 = new QButtonGroup(tr("Elements"), this, "ButtonGroup1");
73     ButtonGroup1->setColumnLayout(0, Qt::Vertical);
74     ButtonGroup1->layout()->setSpacing(0);
75     ButtonGroup1->layout()->setMargin(0);
76     QGridLayout* ButtonGroup1Layout = new QGridLayout(ButtonGroup1->layout());
77     ButtonGroup1Layout->setAlignment(Qt::AlignTop);
78     ButtonGroup1Layout->setSpacing(6);
79     ButtonGroup1Layout->setMargin(11);
80
81     TextLabel_Fill = new QLabel(tr("Fill"), ButtonGroup1, "TextLabel_2D_Fill");
82     ButtonGroup1Layout->addWidget(TextLabel_Fill, 0, 0);
83
84     btnFillColor = new QPushButton(ButtonGroup1, "btnFillColor");
85     btnFillColor->setFixedSize(QSize(25, 25));
86     ButtonGroup1Layout->addWidget(btnFillColor, 0, 1);
87
88     TextLabel_Outine = new QLabel(tr("Outline"), ButtonGroup1, "TextLabel_2D_Outine");
89     ButtonGroup1Layout->addWidget(TextLabel_Outine, 0, 2);
90
91     btnOutlineColor = new QPushButton(ButtonGroup1, "btnOutlineColor");
92     btnOutlineColor->setFixedSize(QSize(25, 25));
93     ButtonGroup1Layout->addWidget(btnOutlineColor, 0, 3);
94
95     TextLabel_Width = new QLabel(tr("Width"), ButtonGroup1, "TextLabel_2D_Width");
96     ButtonGroup1Layout->addWidget(TextLabel_Width, 0, 4);
97
98     SpinBox_Width = new QSpinBox(0, 5, 1, ButtonGroup1, "SpinBox_Width");
99     SpinBox_Width->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
100     SpinBox_Width->setWrapping(FALSE);
101     SpinBox_Width->setButtonSymbols(QSpinBox::PlusMinus);
102     ButtonGroup1Layout->addWidget(SpinBox_Width, 0, 5);
103
104     TextLabel_BackFace = new QLabel(tr("Back Face"), ButtonGroup1, "TextLabel_BackFace");
105     ButtonGroup1Layout->addWidget(TextLabel_BackFace, 1, 0);
106
107     btnBackFaceColor = new QPushButton(ButtonGroup1, "btnBackFaceColor");
108     btnBackFaceColor->setFixedSize(QSize(25, 25));
109     ButtonGroup1Layout->addWidget(btnBackFaceColor, 1, 1);
110
111     TextLabel_ShrinkCoeff = new QLabel(tr("Shrink coef."), ButtonGroup1, "TextLabel_ShrinkCoeff");
112     ButtonGroup1Layout->addWidget(TextLabel_ShrinkCoeff, 2, 0);
113
114     SpinBox_Shrink = new QSpinBox(20, 100, 1, ButtonGroup1, "SpinBox_Shrink");
115     SpinBox_Shrink->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
116     SpinBox_Shrink->setButtonSymbols(QSpinBox::PlusMinus);
117     ButtonGroup1Layout->addMultiCellWidget(SpinBox_Shrink, 2, 2, 1, 5);
118
119     SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup1, 0, 0);
120
121     ButtonGroup2 = new QButtonGroup(tr("Nodes"), this, "ButtonGroup2");
122     ButtonGroup2->setColumnLayout(0, Qt::Vertical);
123     ButtonGroup2->layout()->setSpacing(0);
124     ButtonGroup2->layout()->setMargin(0);
125     QGridLayout* ButtonGroup2Layout = new QGridLayout(ButtonGroup2->layout());
126     ButtonGroup2Layout->setAlignment(Qt::AlignTop);
127     ButtonGroup2Layout->setSpacing(6);
128     ButtonGroup2Layout->setMargin(11);
129
130     TextLabel_Nodes_Color = new QLabel(tr("Color"), ButtonGroup2, "TextLabel_Nodes_Color");
131     ButtonGroup2Layout->addWidget(TextLabel_Nodes_Color, 0, 0);
132
133     btnNodeColor = new QPushButton(ButtonGroup2, "btnNodeColor");
134     btnNodeColor->setFixedSize(QSize(25, 25));
135     ButtonGroup2Layout->addWidget(btnNodeColor, 0, 1);
136
137     TextLabel_Nodes_Size = new QLabel(tr("Size"), ButtonGroup2, "TextLabel_Nodes_Size");
138     ButtonGroup2Layout->addWidget(TextLabel_Nodes_Size, 0, 2);
139
140     SpinBox_Nodes_Size = new QSpinBox(0, 5, 1, ButtonGroup2, "SpinBox_Nodes_Size");
141     SpinBox_Nodes_Size->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed));
142     SpinBox_Nodes_Size->setWrapping(FALSE);
143     SpinBox_Nodes_Size->setButtonSymbols(QSpinBox::PlusMinus);
144     ButtonGroup2Layout->addWidget(SpinBox_Nodes_Size, 0, 3);
145
146     SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup2, 1, 0);
147
148     GroupButtons = new QButtonGroup(this, "GroupButtons");
149     GroupButtons->setColumnLayout(0, Qt::Vertical);
150     GroupButtons->layout()->setSpacing(0);
151     GroupButtons->layout()->setMargin(0);
152     QGridLayout* GroupButtonsLayout = new QGridLayout(GroupButtons->layout());
153     GroupButtonsLayout->setAlignment(Qt::AlignTop);
154     GroupButtonsLayout->setSpacing(6);
155     GroupButtonsLayout->setMargin(11);
156
157     buttonOk = new QPushButton(tr("&OK"), GroupButtons, "buttonOk");
158     buttonOk->setAutoDefault(TRUE);
159     buttonOk->setDefault(TRUE);
160     GroupButtonsLayout->addWidget(buttonOk, 0, 0);
161
162     GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1);
163
164     buttonCancel = new QPushButton(tr("&Cancel"), GroupButtons, "buttonCancel");
165     buttonCancel->setAutoDefault(TRUE);
166     GroupButtonsLayout->addWidget(buttonCancel, 0, 2);
167
168     SMESHGUI_Preferences_ColorDlgLayout->addWidget(GroupButtons, 2, 0);
169
170     Init();
171 }
172
173 //=================================================================================
174 // function : ~SMESHGUI_Preferences_ColorDlg()
175 // purpose  : Destructor
176 //=================================================================================
177 SMESHGUI_Preferences_ColorDlg::~SMESHGUI_Preferences_ColorDlg()
178 {
179   // no need to delete child widgets, Qt does it all for us
180 }
181
182 //=================================================================================
183 // function : Init()
184 // purpose  :
185 //=================================================================================
186 void SMESHGUI_Preferences_ColorDlg::Init()
187 {
188   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
189
190   /* signals and slots connections */
191   connect(buttonOk, SIGNAL(clicked()),     this, SLOT(ClickOnOk()));
192   connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
193
194   connect(btnFillColor, SIGNAL(clicked()), this, SLOT(SelectFillColor()));
195   connect(btnOutlineColor, SIGNAL(clicked()), this, SLOT(SelectOutlineColor()));
196   connect(btnNodeColor, SIGNAL(clicked()), this, SLOT(SelectNodeColor()));
197   connect(btnBackFaceColor, SIGNAL(clicked()), this, SLOT(SelectBackFaceColor()));
198
199   connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
200   /* to close dialog if study change */
201   connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
202
203   /* Move widget on the botton right corner of main widget */
204   int x, y;
205   mySMESHGUI->DefineDlgPosition(this, x, y);
206   this->move(x, y);
207 }
208
209 //=================================================================================
210 // function : SelectFillColor()
211 // purpose  :
212 //=================================================================================
213 void SMESHGUI_Preferences_ColorDlg::SelectFillColor()
214 {
215   QColor color = btnFillColor->palette().active().button();
216   color = QColorDialog::getColor(color);
217   if (color.isValid()) {
218     QPalette pal = btnFillColor->palette();
219     pal.setColor(QColorGroup::Button, color);
220     btnFillColor->setPalette(pal);
221   }
222 }
223
224 //=================================================================================
225 // function : SelectBackFaceColor()
226 // purpose  :
227 //=================================================================================
228 void SMESHGUI_Preferences_ColorDlg::SelectBackFaceColor()
229 {
230   QColor color = btnBackFaceColor->palette().active().button();
231   color = QColorDialog::getColor(color);
232   if (color.isValid()) {
233     QPalette pal = btnBackFaceColor->palette();
234     pal.setColor(QColorGroup::Button, color);
235     btnBackFaceColor->setPalette(pal);
236   }
237 }
238
239 //=================================================================================
240 // function : SelectOutlineColor()
241 // purpose  :
242 //=================================================================================
243 void SMESHGUI_Preferences_ColorDlg::SelectOutlineColor()
244 {
245   QColor color = btnOutlineColor->palette().active().button();
246   color = QColorDialog::getColor(color);
247   if (color.isValid()) {
248     QPalette pal = btnOutlineColor->palette();
249     pal.setColor(QColorGroup::Button, color);
250     btnOutlineColor->setPalette(pal);
251   }
252 }
253
254 //=================================================================================
255 // function : SelectNodeColor()
256 // purpose  :
257 //=================================================================================
258 void SMESHGUI_Preferences_ColorDlg::SelectNodeColor()
259 {
260   QColor color = btnNodeColor->palette().active().button();
261   color = QColorDialog::getColor(color);
262   if (color.isValid()) {
263     QPalette pal = btnNodeColor->palette();
264     pal.setColor(QColorGroup::Button, color);
265     btnNodeColor->setPalette(pal);
266   }
267 }
268
269 //=================================================================================
270 // function : ClickOnOk()
271 // purpose  :
272 //=================================================================================
273 void SMESHGUI_Preferences_ColorDlg::ClickOnOk()
274 {
275   mySMESHGUI->ResetState();
276   accept();
277 }
278
279 //=================================================================================
280 // function : ClickOnCancel()
281 // purpose  :
282 //=================================================================================
283 void SMESHGUI_Preferences_ColorDlg::ClickOnCancel()
284 {
285   mySMESHGUI->ResetState();
286   reject();
287 }
288
289 //=================================================================================
290 // function : DeactivateActiveDialog()
291 // purpose  :
292 //=================================================================================
293 void SMESHGUI_Preferences_ColorDlg::DeactivateActiveDialog()
294 {
295 }
296
297 //=================================================================================
298 // function : closeEvent()
299 // purpose  :
300 //=================================================================================
301 void SMESHGUI_Preferences_ColorDlg::closeEvent (QCloseEvent*)
302 {
303   this->ClickOnCancel(); /* same than click on cancel button */
304 }
305
306 //=================================================================================
307 // function : ActivateThisDialog()
308 // purpose  :
309 //=================================================================================
310 void SMESHGUI_Preferences_ColorDlg::ActivateThisDialog()
311 {
312   /* Emit a signal to deactivate any active dialog */
313   mySMESHGUI->EmitSignalDeactivateDialog();
314 }
315
316 //=================================================================================
317 // function : SetColor()
318 // purpose  :
319 //=================================================================================
320 void SMESHGUI_Preferences_ColorDlg::SetColor (int type, QColor color)
321 {
322   switch (type) {
323   case 1 : // fill
324     {
325       QPalette pal = btnFillColor->palette();
326       pal.setColor(QColorGroup::Button, color);
327       btnFillColor->setPalette(pal);
328       break;
329     }
330   case 2 : // outline
331     {
332       QPalette pal = btnOutlineColor->palette();
333       pal.setColor(QColorGroup::Button, color);
334       btnOutlineColor->setPalette(pal);
335       break;
336     }
337   case 3 :  // node
338     {
339       QPalette pal = btnNodeColor->palette();
340       pal.setColor(QColorGroup::Button, color);
341       btnNodeColor->setPalette(pal);
342       break;
343     }
344   case 4 : // back face
345     {
346       QPalette pal = btnBackFaceColor->palette();
347       pal.setColor(QColorGroup::Button, color);
348       btnBackFaceColor->setPalette(pal);
349       break;
350     }
351   }
352 }
353
354 //=================================================================================
355 // function : GetColor()
356 // purpose  :
357 //=================================================================================
358 QColor SMESHGUI_Preferences_ColorDlg::GetColor (int type)
359 {
360   QColor color;
361   switch (type) {
362   case 1 : color = btnFillColor->palette().active().button();     break; // fill
363   case 2 : color = btnOutlineColor->palette().active().button();  break; // outline
364   case 3 : color = btnNodeColor->palette().active().button();     break; // node
365   case 4 : color = btnBackFaceColor->palette().active().button(); break; // back face
366   }
367   return color;
368 }
369
370 //=================================================================================
371 // function : SetIntValue()
372 // purpose  :
373 //=================================================================================
374 void SMESHGUI_Preferences_ColorDlg::SetIntValue (int type, int value)
375 {
376   switch (type) {
377   case 1 : SpinBox_Width->setValue(value);      break; // width
378   case 2 : SpinBox_Nodes_Size->setValue(value); break; // nodes size = value; break;
379   case 3 : SpinBox_Shrink->setValue(value);     break; // shrink coeff
380   }
381 }
382
383 //=================================================================================
384 // function : GetIntValue()
385 // purpose  :
386 //=================================================================================
387 int SMESHGUI_Preferences_ColorDlg::GetIntValue (int type)
388 {
389   int res = 0;
390   switch (type) {
391   case 1 : res = SpinBox_Width->value();      break; // width
392   case 2 : res = SpinBox_Nodes_Size->value(); break; // nodes size
393   case 3 : res = SpinBox_Shrink->value();     break; // shrink coeff
394   }
395   return res;
396 }