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