Moka Ihm Qt
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
creation-options.qt.cc
Go to the documentation of this file.
1 /*
2  * Moka : Un modeleur de 3-G-cartes.
3  * Copyright (C) 2004, Moka Team, Université de Poitiers, Laboratoire SIC
4  * http://www.sic.sp2mi.univ-poitiers.fr/
5  * Copyright (C) 2009, Guillaume Damiand, CNRS, LIRIS,
6  * guillaume.damiand@liris.cnrs.fr, http://liris.cnrs.fr/
7  *
8  * This file is part of Moka
9  *
10  * This program is free software: you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation, either version 3 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #include "creation-options.qt.hh"
25 #include "window.qt.hh"
26 
27 #include <QtGui/QPixmap>
28 #include <QtGui/QLabel>
29 #include <QtGui/QBoxLayout>
30 #include <Qt3Support/Q3Accel>
31 
32 static const char * const coordLabels [ 3 ] =
33 {
34  " X" , " Y" , " Z"
35 } ;
36 
37 //********************************************************
38 // Constructeur *
39 //********************************************************
41  Window * parent , int objet) :
42  QDialog(parent),
43  FLien(lien),
44  FModifie(true),
45  FNumObject(objet)
46 {
47  //******* Construction de la boite *******
48  QBoxLayout * total = new QBoxLayout(QBoxLayout :: TopToBottom, this) ;
49 
50  //--------------- Centre ------------------------
51  QWidget * widCentre = new QWidget(this) ;
52  QBoxLayout * boxCentre = new QBoxLayout(QBoxLayout :: LeftToRight,
53  widCentre);
54 
55  FTitreCentre = new QLabel(" Centre : " , widCentre) ;
56  boxCentre -> addWidget(FTitreCentre) ;
57 
58  for (int i = 0 ; i < 3 ; i++)
59  {
60  FAffCentre [ i ] = new QLabel(coordLabels [ i ] , widCentre) ;
61  boxCentre -> addWidget(FAffCentre [ i ] , Qt::AlignHCenter) ;
62  FSaisieCentre [ i ] = new FloatSpinBox(0.5, -1000 , 1000);
63  boxCentre -> addWidget(FSaisieCentre [ i ] , Qt::AlignHCenter) ;
64  }
65  total -> addWidget(widCentre) ;
66 
67  //--------------- Facteur ------------------------
68  QWidget * widFacteur = new QWidget(this) ;
69  QBoxLayout * boxFacteur = new QBoxLayout(QBoxLayout :: LeftToRight,
70  widFacteur);
71  FTitreFacteur = new QLabel(" Growing coefficient: " , widFacteur) ;
72  boxFacteur -> addWidget(FTitreFacteur) ;
73 
74  FSaisieFacteur = new FloatSpinBox(0.2, -1000 , 1000);
75  boxFacteur -> addWidget(FSaisieFacteur , Qt::AlignHCenter) ;
76 
77  total -> addWidget(widFacteur) ;
78 
79  //--------------- Proportions ----------------------
80  QWidget * widProportions = new QWidget(this) ;
81  QBoxLayout * boxProportions = new QBoxLayout(QBoxLayout :: LeftToRight,
82  widProportions) ;
83 
84  FTitreProportions = new QLabel(" Proportions: " , widProportions) ;
85  boxProportions -> addWidget(FTitreProportions) ;
86 
87  for (int i = 0 ; i < 3 ; i++)
88  {
89  FAffProportions [ i ] = new QLabel(coordLabels [ i ] ,
90  widProportions) ;
91  boxProportions -> addWidget(FAffProportions [ i ] , Qt::AlignHCenter) ;
92 
93  FSaisieProportions [ i ] = new FloatSpinBox(0.2, -1000 , 1000);
94  boxProportions -> addWidget(FSaisieProportions [ i ], 0,
95  Qt::AlignHCenter) ;
96  }
97 
98  total -> addWidget(widProportions) ;
99 
100  //--------------- Dimensions ------------------------
101  QWidget * widDimensions = new QWidget(this) ;
102  QBoxLayout * boxDimensions =
103  new QBoxLayout(QBoxLayout :: LeftToRight, widDimensions);
104 
105  FTitreDimensions = new QLabel(" Dimensions: " , widDimensions) ;
106  boxDimensions -> addWidget(FTitreDimensions) ;
107 
108  for (int i = 0 ; i < 3 ; i++)
109  {
110  FAffDimensions [ i ] = new QLabel(coordLabels [ i ] , widDimensions) ;
111  boxDimensions->addWidget(FAffDimensions [ i ] , 0, Qt::AlignHCenter) ;
112 
113  FSaisieDimensions [ i ] = new FloatSpinBox(0.5, -1000 , 1000);
114  boxDimensions->addWidget(FSaisieDimensions[i], 0, Qt::AlignHCenter);
115  }
116 
117  total -> addWidget(widDimensions) ;
118 
119  //--------------- Rotations ------------------------
120  QWidget * widRotations = new QWidget(this) ;
121  QBoxLayout * boxRotations = new QBoxLayout(QBoxLayout :: LeftToRight,
122  widRotations) ;
123 
124  FTitreRotations = new QLabel(" Rotations: " , widRotations) ;
125  boxRotations -> addWidget(FTitreRotations) ;
126 
127  for (int i = 0 ; i < 3 ; i++)
128  {
129  FAffRotations [ i ] = new QLabel(coordLabels [ i ] , widRotations) ;
130  boxRotations -> addWidget(FAffRotations [ i ] , Qt::AlignHCenter) ;
131 
132  FSaisieRotations [ i ] = new FloatSpinBox(5 , -180.0 , 180.0 , 0 , 0.0);
133  FSaisieRotations [ i ] -> setWrapping ( true ) ;
134  boxRotations -> addWidget(FSaisieRotations [ i ] , Qt::AlignHCenter) ;
135  }
136  total -> addWidget(widRotations) ;
137 
138 //--------------- Pole Nord ------------------------
139  QWidget * widPoleNord = new QWidget(this) ;
140  QBoxLayout * boxPoleNord = new QBoxLayout(QBoxLayout :: LeftToRight,
141  widPoleNord) ;
142 
143  FTitrePoleNord = new QLabel(" PoleNord : " , widPoleNord) ;
144  boxPoleNord -> addWidget(FTitrePoleNord) ;
145 
146  for (int i = 0 ; i < 3 ; i++)
147  {
148  FAffPoleNord [ i ] = new QLabel(coordLabels [ i ] , widPoleNord) ;
149  boxPoleNord -> addWidget(FAffPoleNord [ i ] , Qt::AlignHCenter) ;
150 
151  FSaisiePoleNord [ i ] = new FloatSpinBox(0.5, -1000 , 1000);
152  boxPoleNord -> addWidget(FSaisiePoleNord [ i ] , Qt::AlignHCenter) ;
153  }
154 
155  total -> addWidget(widPoleNord) ;
156 
157  //--------------- Equateur ------------------------
158  QWidget * widEquateur = new QWidget(this) ;
159  QBoxLayout * boxEquateur = new QBoxLayout(QBoxLayout :: LeftToRight,
160  widEquateur);
161 
162  FTitreEquateur = new QLabel(" Equator: " , widEquateur) ;
163  boxEquateur -> addWidget(FTitreEquateur) ;
164 
165  for (int i = 0 ; i < 3 ; i++)
166  {
167  FAffEquateur [ i ] = new QLabel(coordLabels [ i ] , widEquateur) ;
168  boxEquateur -> addWidget(FAffEquateur [ i ] , Qt::AlignHCenter) ;
169 
170  FSaisieEquateur [ i ] = new FloatSpinBox(0.5, -1000 , 1000);
171  boxEquateur -> addWidget(FSaisieEquateur [ i ] , Qt::AlignHCenter) ;
172  }
173 
174  total -> addWidget(widEquateur) ;
175 
176  //---------------- Bouton Masquer ----------------
177  QWidget * widMasquer = new QWidget(this) ;
178  QBoxLayout * boxMasquer = new QBoxLayout(QBoxLayout :: LeftToRight,
179  widMasquer) ;
180 
181  QIcon p1(":/masquer.png");
182  FMasquer = new QPushButton(p1 , "Hide" , widMasquer) ;
183  FMasquer -> setFixedSize(110 , 30) ;
184  FMasquer -> setShortcut(Qt::CTRL + Qt::Key_P) ;
185  FMasquer -> setFocus() ;
186 
187  boxMasquer -> addWidget(FMasquer , Qt::AlignHCenter) ;
188  total -> addWidget(widMasquer) ;
189 
190  //************ Mise en place des ecoutes *************
191  for (int i = 0 ; i < 3 ; i++)
192  {
193  QObject :: connect(FSaisieCentre [ i ] ,
194  SIGNAL(valueChanged(double)),
195  this , SLOT(callbackCenter())) ;
196  QObject :: connect(FSaisieProportions [ i ] ,
197  SIGNAL(valueChanged(double)) , this ,
198  SLOT(callbackProportions())) ;
199  QObject :: connect(FSaisieDimensions [ i ] ,
200  SIGNAL(valueChanged(double)) , this ,
201  SLOT(callbackDimensions())) ;
202  QObject :: connect(FSaisieRotations [ i ] ,
203  SIGNAL(valueChanged(double)) , this ,
204  SLOT(callbackRotations())) ;
205  QObject :: connect(FSaisiePoleNord [ i ] ,
206  SIGNAL(valueChanged(double)) , this ,
207  SLOT(callbackFirstVertex())) ;
208  QObject :: connect(FSaisieEquateur [ i ] ,
209  SIGNAL(valueChanged(double)) , this ,
210  SLOT(callbackNormalVector())) ;
211  }
212  QObject :: connect(FSaisieFacteur ,
213  SIGNAL(valueChanged(double)) , this ,
214  SLOT(callbackScale())) ;
215 
216  QObject :: connect(FMasquer ,
217  SIGNAL(clicked()) , this ,
218  SLOT(hide())) ;
219 
220  Q3Accel * Raccourci = new Q3Accel(this) ;
221  Raccourci -> insertItem(QKeySequence(Qt::Key_Space) , 2) ;
222  Raccourci -> connectItem(2 , FLien , SLOT(cancel())) ;
223 }
224 
225 //*******************************************
226 // Destructeur *
227 //*******************************************
229 //*******************************************
230 // Methode de mise a jour *
231 //*******************************************
233 {
234  FModifie = false ;
235  CParameterObjectPosition* p =
236  FLien -> getControler() ->
237  getParameterObjectPosition(FNumObject) ;
238 
239  FSaisieFacteur -> setValuef(p -> getScale()) ;
240 
241  FSaisieProportions[0]->setValuef(p->getProportionX());
242  FSaisieProportions[1]->setValuef(p->getProportionY());
243  FSaisieProportions[2]->setValuef(p->getProportionZ());
244 
245  FSaisieDimensions[0]->setValuef(p->getDimensionX());
246  FSaisieDimensions[1]->setValuef(p->getDimensionY());
247  FSaisieDimensions[2]->setValuef(p->getDimensionZ());
248 
249  FSaisieRotations[0]->setValue((int)p->getRotationX());
250  FSaisieRotations[1]->setValue((int)p->getRotationY());
251  FSaisieRotations[2]->setValue((int)p->getRotationZ());
252 
253  FSaisieCentre[0]->setValuef(p->getCenterX());
254  FSaisieCentre[1]->setValuef(p->getCenterY());
255  FSaisieCentre[2]->setValuef(p->getCenterZ());
256 
257  FSaisiePoleNord[0]->setValuef(p->getFirstVertexX());
258  FSaisiePoleNord[1]->setValuef(p->getFirstVertexY());
259  FSaisiePoleNord[2]->setValuef(p->getFirstVertexZ());
260 
261  FSaisieEquateur[0]->setValuef(p->getNormalVectorX());
262  FSaisieEquateur[1]->setValuef(p->getNormalVectorY());
263  FSaisieEquateur[2]->setValuef(p->getNormalVectorZ());
264 
265  FModifie = true ;
266 }
267 //*******************************************************
268 // Slots *
269 //*******************************************************
270 void BoitePositionnement :: callbackScale()
271 {
272  if (FModifie)
273  setScale(getScale()) ;
274 }
275 
276 void BoitePositionnement :: callbackProportions()
277 {
278  if (FModifie)
280 }
281 
282 void BoitePositionnement :: callbackDimensions()
283 {
284  if (FModifie)
286 }
287 
288 void BoitePositionnement :: callbackCenter()
289 {
290  if (FModifie)
291  setCenter(getCenter()) ;
292 }
293 
294 void BoitePositionnement :: callbackRotations()
295 {
296  if (FModifie)
298 }
299 
300 void BoitePositionnement :: callbackFirstVertex()
301 {
302  if (FModifie)
304 }
305 
306 void BoitePositionnement :: callbackNormalVector()
307 {
308  if (FModifie)
310 }
311 
312 //*******************************************************
313 // Accesseurs en lecture *
314 //*******************************************************
316 {
317  return FSaisieFacteur -> valuef() ;
318 }
319 
321 {
322  return CVertex(FSaisieProportions[0]-> valuef(),
323  FSaisieProportions[1]-> valuef(),
324  FSaisieProportions[2]-> valuef());
325 }
326 
328 {
329  return CVertex(FSaisieDimensions[0]-> valuef(),
330  FSaisieDimensions[1]-> valuef(),
331  FSaisieDimensions[2]-> valuef());
332 }
333 
335 {
336  return CVertex(FSaisieCentre[0]-> valuef(),
337  FSaisieCentre[1]-> valuef(),
338  FSaisieCentre[2]-> valuef());
339 }
340 
342 {
343  return CVertex(FSaisieRotations[0]-> value(),
344  FSaisieRotations[1]-> value(),
345  FSaisieRotations[2]-> value());
346 }
347 
349 {
350  return CVertex(FSaisiePoleNord[0]-> valuef(),
351  FSaisiePoleNord[1]-> valuef(),
352  FSaisiePoleNord[2]-> valuef());
353 }
354 
356 {
357  return CVertex(FSaisieEquateur[0]-> valuef(),
358  FSaisieEquateur[1]-> valuef(),
359  FSaisieEquateur[2]-> valuef());
360 }
361 
363 {
364  FSaisieProportions[1]->setEnabled(b);
365  FSaisieDimensions [1]->setEnabled(b);
366 }
367 
369 {
370  FSaisieProportions[2]->setEnabled(b);
371  FSaisieDimensions [2]->setEnabled(b);
372 }
373 
374 //*******************************************************
375 // Accesseurs en ecriture *
376 //*******************************************************
378 {
379  FLien->getControler()->getParameterObjectPosition(FNumObject)->setScale(s);
380  update() ;
381  FLien->repaint();
382 }
383 
385 {
386  FLien->getControler()->
387  getParameterObjectPosition(FNumObject)->setProportions(p);
388  update();
389  FLien -> repaint() ;
390 }
391 
393 {
394  FLien->getControler()->
395  getParameterObjectPosition(FNumObject)->setDimensions(d);
396  update();
397  FLien -> repaint() ;
398 }
399 
400 void BoitePositionnement :: setRotations(const CVertex & alpha)
401 {
402  FLien->getControler()->
403  getParameterObjectPosition(FNumObject)->setRotations(alpha);
404  update();
405  FLien -> repaint() ;
406 }
407 
408 void BoitePositionnement :: setCenter(const CVertex & C)
409 {
410  FLien->getControler()
411  ->getParameterObjectPosition(FNumObject)->setCenter(C);
412  update();
413  FLien -> repaint() ;
414 }
415 
417 {
418  FLien->getControler()->
419  getParameterObjectPosition(FNumObject)->setFirstVertex(S);
420  update();
421  FLien -> repaint() ;
422 }
423 
425 {
426  FLien->getControler()->
427  getParameterObjectPosition(FNumObject)->setNormalVector(N);
428  update();
429  FLien -> repaint() ;
430 }
431 
433 {
434  QDialog :: show() ;
435  FMasquer -> setFocus() ;
436 }