Salome HOME
Issue 0020406: Time compilation when recompiling
[modules/smesh.git] / src / SMESHGUI / SMESHGUI_Preferences_ColorDlg.cxx
1 //  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 //  Copyright (C) 2003-2007  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.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //  SMESH SMESHGUI : GUI for SMESH component
23 //  File   : SMESHGUI_Preferences_ColorDlg.cxx
24 //  Author : Nicolas REJNERI
25 //  Module : SMESH
26 //  $Header$
27 //
28 #include "SMESHGUI_Preferences_ColorDlg.h"
29 #include "SMESHGUI.h"
30 #include "SMESHGUI_Utils.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 #include "SUIT_Desktop.h"
48
49 using namespace std;
50
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 )
62 {
63     if (!name)
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);
70
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);
79
80     TextLabel_Fill = new QLabel(tr("Fill"), ButtonGroup1, "TextLabel_2D_Fill");
81     ButtonGroup1Layout->addWidget(TextLabel_Fill, 0, 0);
82
83     btnFillColor = new QPushButton(ButtonGroup1, "btnFillColor");
84     btnFillColor->setFixedSize(QSize(25, 25));
85     ButtonGroup1Layout->addWidget(btnFillColor, 0, 1);
86
87     TextLabel_Outine = new QLabel(tr("Outline"), ButtonGroup1, "TextLabel_2D_Outine");
88     ButtonGroup1Layout->addWidget(TextLabel_Outine, 0, 2);
89
90     btnOutlineColor = new QPushButton(ButtonGroup1, "btnOutlineColor");
91     btnOutlineColor->setFixedSize(QSize(25, 25));
92     ButtonGroup1Layout->addWidget(btnOutlineColor, 0, 3);
93
94     TextLabel_Width = new QLabel(tr("Width"), ButtonGroup1, "TextLabel_2D_Width");
95     ButtonGroup1Layout->addWidget(TextLabel_Width, 0, 4);
96
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);
102
103     TextLabel_BackFace = new QLabel(tr("Back Face"), ButtonGroup1, "TextLabel_BackFace");
104     ButtonGroup1Layout->addWidget(TextLabel_BackFace, 1, 0);
105
106     btnBackFaceColor = new QPushButton(ButtonGroup1, "btnBackFaceColor");
107     btnBackFaceColor->setFixedSize(QSize(25, 25));
108     ButtonGroup1Layout->addWidget(btnBackFaceColor, 1, 1);
109
110     TextLabel_ShrinkCoeff = new QLabel(tr("Shrink coef."), ButtonGroup1, "TextLabel_ShrinkCoeff");
111     ButtonGroup1Layout->addWidget(TextLabel_ShrinkCoeff, 2, 0);
112
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);
117
118     SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup1, 0, 0);
119
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);
128
129     TextLabel_Nodes_Color = new QLabel(tr("Color"), ButtonGroup2, "TextLabel_Nodes_Color");
130     ButtonGroup2Layout->addWidget(TextLabel_Nodes_Color, 0, 0);
131
132     btnNodeColor = new QPushButton(ButtonGroup2, "btnNodeColor");
133     btnNodeColor->setFixedSize(QSize(25, 25));
134     ButtonGroup2Layout->addWidget(btnNodeColor, 0, 1);
135
136     TextLabel_Nodes_Size = new QLabel(tr("Size"), ButtonGroup2, "TextLabel_Nodes_Size");
137     ButtonGroup2Layout->addWidget(TextLabel_Nodes_Size, 0, 2);
138
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);
144
145     SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup2, 1, 0);
146
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);
155
156     buttonOk = new QPushButton(tr("&OK"), GroupButtons, "buttonOk");
157     buttonOk->setAutoDefault(TRUE);
158     buttonOk->setDefault(TRUE);
159     GroupButtonsLayout->addWidget(buttonOk, 0, 0);
160
161     GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1);
162
163     buttonCancel = new QPushButton(tr("&Cancel"), GroupButtons, "buttonCancel");
164     buttonCancel->setAutoDefault(TRUE);
165     GroupButtonsLayout->addWidget(buttonCancel, 0, 2);
166
167     SMESHGUI_Preferences_ColorDlgLayout->addWidget(GroupButtons, 2, 0);
168
169     Init();
170 }
171
172 //=================================================================================
173 // function : ~SMESHGUI_Preferences_ColorDlg()
174 // purpose  : Destructor
175 //=================================================================================
176 SMESHGUI_Preferences_ColorDlg::~SMESHGUI_Preferences_ColorDlg()
177 {
178   // no need to delete child widgets, Qt does it all for us
179 }
180
181 //=================================================================================
182 // function : Init()
183 // purpose  :
184 //=================================================================================
185 void SMESHGUI_Preferences_ColorDlg::Init()
186 {
187   mySMESHGUI->SetActiveDialogBox((QDialog*)this);
188
189   /* signals and slots connections */
190   connect(buttonOk, SIGNAL(clicked()),     this, SLOT(ClickOnOk()));
191   connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
192
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()));
197
198   connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
199   /* to close dialog if study change */
200   connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
201 }
202
203 //=================================================================================
204 // function : SelectFillColor()
205 // purpose  :
206 //=================================================================================
207 void SMESHGUI_Preferences_ColorDlg::SelectFillColor()
208 {
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);
215   }
216 }
217
218 //=================================================================================
219 // function : SelectBackFaceColor()
220 // purpose  :
221 //=================================================================================
222 void SMESHGUI_Preferences_ColorDlg::SelectBackFaceColor()
223 {
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);
230   }
231 }
232
233 //=================================================================================
234 // function : SelectOutlineColor()
235 // purpose  :
236 //=================================================================================
237 void SMESHGUI_Preferences_ColorDlg::SelectOutlineColor()
238 {
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);
245   }
246 }
247
248 //=================================================================================
249 // function : SelectNodeColor()
250 // purpose  :
251 //=================================================================================
252 void SMESHGUI_Preferences_ColorDlg::SelectNodeColor()
253 {
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);
260   }
261 }
262
263 //=================================================================================
264 // function : ClickOnOk()
265 // purpose  :
266 //=================================================================================
267 void SMESHGUI_Preferences_ColorDlg::ClickOnOk()
268 {
269   mySMESHGUI->ResetState();
270   accept();
271 }
272
273 //=================================================================================
274 // function : ClickOnCancel()
275 // purpose  :
276 //=================================================================================
277 void SMESHGUI_Preferences_ColorDlg::ClickOnCancel()
278 {
279   mySMESHGUI->ResetState();
280   reject();
281 }
282
283 //=================================================================================
284 // function : DeactivateActiveDialog()
285 // purpose  :
286 //=================================================================================
287 void SMESHGUI_Preferences_ColorDlg::DeactivateActiveDialog()
288 {
289 }
290
291 //=================================================================================
292 // function : closeEvent()
293 // purpose  :
294 //=================================================================================
295 void SMESHGUI_Preferences_ColorDlg::closeEvent (QCloseEvent*)
296 {
297   this->ClickOnCancel(); /* same than click on cancel button */
298 }
299
300 //=================================================================================
301 // function : ActivateThisDialog()
302 // purpose  :
303 //=================================================================================
304 void SMESHGUI_Preferences_ColorDlg::ActivateThisDialog()
305 {
306   /* Emit a signal to deactivate any active dialog */
307   mySMESHGUI->EmitSignalDeactivateDialog();
308 }
309
310 //=================================================================================
311 // function : SetColor()
312 // purpose  :
313 //=================================================================================
314 void SMESHGUI_Preferences_ColorDlg::SetColor (int type, QColor color)
315 {
316   switch (type) {
317   case 1 : // fill
318     {
319       QPalette pal = btnFillColor->palette();
320       pal.setColor(QColorGroup::Button, color);
321       btnFillColor->setPalette(pal);
322       break;
323     }
324   case 2 : // outline
325     {
326       QPalette pal = btnOutlineColor->palette();
327       pal.setColor(QColorGroup::Button, color);
328       btnOutlineColor->setPalette(pal);
329       break;
330     }
331   case 3 :  // node
332     {
333       QPalette pal = btnNodeColor->palette();
334       pal.setColor(QColorGroup::Button, color);
335       btnNodeColor->setPalette(pal);
336       break;
337     }
338   case 4 : // back face
339     {
340       QPalette pal = btnBackFaceColor->palette();
341       pal.setColor(QColorGroup::Button, color);
342       btnBackFaceColor->setPalette(pal);
343       break;
344     }
345   }
346 }
347
348 //=================================================================================
349 // function : GetColor()
350 // purpose  :
351 //=================================================================================
352 QColor SMESHGUI_Preferences_ColorDlg::GetColor (int type)
353 {
354   QColor color;
355   switch (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
360   }
361   return color;
362 }
363
364 //=================================================================================
365 // function : SetIntValue()
366 // purpose  :
367 //=================================================================================
368 void SMESHGUI_Preferences_ColorDlg::SetIntValue (int type, int value)
369 {
370   switch (type) {
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
374   }
375 }
376
377 //=================================================================================
378 // function : GetIntValue()
379 // purpose  :
380 //=================================================================================
381 int SMESHGUI_Preferences_ColorDlg::GetIntValue (int type)
382 {
383   int res = 0;
384   switch (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
388   }
389   return res;
390 }