1 // SMESH SMESHGUI : GUI for SMESH component
3 // Copyright (C) 2003 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.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
24 // File : SMESHGUI_Preferences_ColorDlg.cxx
25 // Author : Nicolas REJNERI
29 #include "SMESHGUI_Preferences_ColorDlg.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>
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,
58 : QDialog(parent, name, true, WStyle_Customize |
59 WStyle_NormalBorder | WStyle_Title | WStyle_SysMenu)
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);
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);
78 TextLabel_Fill = new QLabel(tr("Fill"), ButtonGroup1, "TextLabel_2D_Fill");
79 ButtonGroup1Layout->addWidget(TextLabel_Fill, 0, 0);
81 btnFillColor = new QPushButton(ButtonGroup1, "btnFillColor");
82 btnFillColor->setFixedSize(QSize(25, 25));
83 ButtonGroup1Layout->addWidget(btnFillColor, 0, 1);
85 TextLabel_Outine = new QLabel(tr("Outline"), ButtonGroup1, "TextLabel_2D_Outine");
86 ButtonGroup1Layout->addWidget(TextLabel_Outine, 0, 2);
88 btnOutlineColor = new QPushButton(ButtonGroup1, "btnOutlineColor");
89 btnOutlineColor->setFixedSize(QSize(25, 25));
90 ButtonGroup1Layout->addWidget(btnOutlineColor, 0, 3);
92 TextLabel_Width = new QLabel(tr("Width"), ButtonGroup1, "TextLabel_2D_Width");
93 ButtonGroup1Layout->addWidget(TextLabel_Width, 0, 4);
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);
101 TextLabel_BackFace = new QLabel(tr("Back Face"), ButtonGroup1, "TextLabel_BackFace");
102 ButtonGroup1Layout->addWidget(TextLabel_BackFace, 1, 0);
104 btnBackFaceColor = new QPushButton(ButtonGroup1, "btnBackFaceColor");
105 btnBackFaceColor->setFixedSize(QSize(25, 25));
106 ButtonGroup1Layout->addWidget(btnBackFaceColor, 1, 1);
108 TextLabel_ShrinkCoeff = new QLabel(tr("Shrink coef."), ButtonGroup1, "TextLabel_ShrinkCoeff");
109 ButtonGroup1Layout->addWidget(TextLabel_ShrinkCoeff, 2, 0);
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);
116 SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup1, 0, 0);
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);
127 TextLabel_Nodes_Color = new QLabel(tr("Color"), ButtonGroup2, "TextLabel_Nodes_Color");
128 ButtonGroup2Layout->addWidget(TextLabel_Nodes_Color, 0, 0);
130 btnNodeColor = new QPushButton(ButtonGroup2, "btnNodeColor");
131 btnNodeColor->setFixedSize(QSize(25, 25));
132 ButtonGroup2Layout->addWidget(btnNodeColor, 0, 1);
134 TextLabel_Nodes_Size = new QLabel(tr("Size"), ButtonGroup2, "TextLabel_Nodes_Size");
135 ButtonGroup2Layout->addWidget(TextLabel_Nodes_Size, 0, 2);
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);
143 SMESHGUI_Preferences_ColorDlgLayout->addWidget(ButtonGroup2, 1, 0);
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);
154 buttonOk = new QPushButton(tr("&OK"), GroupButtons, "buttonOk");
155 buttonOk->setAutoDefault(TRUE);
156 buttonOk->setDefault(TRUE);
157 GroupButtonsLayout->addWidget(buttonOk, 0, 0);
159 GroupButtonsLayout->addItem(new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum), 0, 1);
161 buttonCancel = new QPushButton(tr("&Cancel"), GroupButtons, "buttonCancel");
162 buttonCancel->setAutoDefault(TRUE);
163 GroupButtonsLayout->addWidget(buttonCancel, 0, 2);
165 SMESHGUI_Preferences_ColorDlgLayout->addWidget(GroupButtons, 2, 0);
170 //=================================================================================
171 // function : ~SMESHGUI_Preferences_ColorDlg()
172 // purpose : Destructor
173 //=================================================================================
174 SMESHGUI_Preferences_ColorDlg::~SMESHGUI_Preferences_ColorDlg()
176 // no need to delete child widgets, Qt does it all for us
179 //=================================================================================
182 //=================================================================================
183 void SMESHGUI_Preferences_ColorDlg::Init()
185 mySMESHGUI = SMESHGUI::GetSMESHGUI();
186 mySMESHGUI->SetActiveDialogBox((QDialog*)this);
188 /* signals and slots connections */
189 connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
190 connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
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()));
197 connect(mySMESHGUI, SIGNAL (SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
198 /* to close dialog if study change */
199 connect(mySMESHGUI, SIGNAL (SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
201 /* Move widget on the botton right corner of main widget */
203 mySMESHGUI->DefineDlgPosition(this, x, y);
207 //=================================================================================
208 // function : SelectFillColor()
210 //=================================================================================
211 void SMESHGUI_Preferences_ColorDlg::SelectFillColor()
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);
222 //=================================================================================
223 // function : SelectBackFaceColor()
225 //=================================================================================
226 void SMESHGUI_Preferences_ColorDlg::SelectBackFaceColor()
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);
237 //=================================================================================
238 // function : SelectOutlineColor()
240 //=================================================================================
241 void SMESHGUI_Preferences_ColorDlg::SelectOutlineColor()
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);
252 //=================================================================================
253 // function : SelectNodeColor()
255 //=================================================================================
256 void SMESHGUI_Preferences_ColorDlg::SelectNodeColor()
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);
267 //=================================================================================
268 // function : ClickOnOk()
270 //=================================================================================
271 void SMESHGUI_Preferences_ColorDlg::ClickOnOk()
273 mySMESHGUI->ResetState();
277 //=================================================================================
278 // function : ClickOnCancel()
280 //=================================================================================
281 void SMESHGUI_Preferences_ColorDlg::ClickOnCancel()
283 mySMESHGUI->ResetState();
287 //=================================================================================
288 // function : DeactivateActiveDialog()
290 //=================================================================================
291 void SMESHGUI_Preferences_ColorDlg::DeactivateActiveDialog()
295 //=================================================================================
296 // function : closeEvent()
298 //=================================================================================
299 void SMESHGUI_Preferences_ColorDlg::closeEvent (QCloseEvent*)
301 this->ClickOnCancel(); /* same than click on cancel button */
304 //=================================================================================
305 // function : ActivateThisDialog()
307 //=================================================================================
308 void SMESHGUI_Preferences_ColorDlg::ActivateThisDialog()
310 /* Emit a signal to deactivate any active dialog */
311 mySMESHGUI->EmitSignalDeactivateDialog();
314 //=================================================================================
315 // function : SetColor()
317 //=================================================================================
318 void SMESHGUI_Preferences_ColorDlg::SetColor (int type, QColor color)
323 QPalette pal = btnFillColor->palette();
324 pal.setColor(QColorGroup::Button, color);
325 btnFillColor->setPalette(pal);
330 QPalette pal = btnOutlineColor->palette();
331 pal.setColor(QColorGroup::Button, color);
332 btnOutlineColor->setPalette(pal);
337 QPalette pal = btnNodeColor->palette();
338 pal.setColor(QColorGroup::Button, color);
339 btnNodeColor->setPalette(pal);
342 case 4 : // back face
344 QPalette pal = btnBackFaceColor->palette();
345 pal.setColor(QColorGroup::Button, color);
346 btnBackFaceColor->setPalette(pal);
352 //=================================================================================
353 // function : GetColor()
355 //=================================================================================
356 QColor SMESHGUI_Preferences_ColorDlg::GetColor (int 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
368 //=================================================================================
369 // function : SetIntValue()
371 //=================================================================================
372 void SMESHGUI_Preferences_ColorDlg::SetIntValue (int type, int value)
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
381 //=================================================================================
382 // function : GetIntValue()
384 //=================================================================================
385 int SMESHGUI_Preferences_ColorDlg::GetIntValue (int 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