Moka Ihm Qt
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
dialog-rotation.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 "dialog-rotation.qt.hh"
25 #include "window.qt.hh"
26 #include "HtmlEntities.hh"
27 #include "SpaceWidget.qt.hh"
28 
29 #include <QtGui/QPixmap>
30 #include <QtGui/QLabel>
31 #include <QtGui/QBoxLayout>
32 #include <QtGui/QGridLayout>
33 
34 // Constructeur
35 //-------------
37  GMap3d :: CControlerGMap * controler)
38  :
39  dialogOperations(parent , new QString("Rotation") ,
40  controler , Qt::BottomToolBarArea)
41 {
42 
43  /**** Partie haute ****/
44  QWidget * haut = new QWidget ;
45  QHBoxLayout * bb = new QHBoxLayout(haut) ;
46  bb -> setSpacing(0);
47  bb -> setContentsMargins(0, 0, 0, 0);
48 
49  FAffSaisie = new QLabel(" Center: ") ;
50  FAffAngle = new QLabel("Angle: ") ;
51  FSaisieAngle = new FloatSpinBox(5 , -180.0 , 180.0 , 0 , 5.0);
52  FSaisieAngle -> setWrapping(true) ;
53  QIcon p3(":/boutonReinit.png") ;
54  FReinitAngle =
55  new QPushButton(p3, *HTML::decode("Reset angle")) ;
56 
57  // Ajout du layout haut
58  FSaisie = new champsOperations(this , bb) ;
59  bb -> addSpacing(SPACE_PIX_SIZE) ;
60  bb -> addWidget(FAffAngle) ;
61  bb -> addWidget(FSaisieAngle) ;
62  bb -> addSpacing(SPACE_PIX_SIZE) ;
63  bb -> addWidget(FReinitAngle) ;
64  bb -> addStretch(1);
65 
66  /*** Partie basse ***/
67  QWidget * bas = new QWidget ;
68  QHBoxLayout * bh = new QHBoxLayout(bas) ;
69  bh -> setSpacing(0);
70  bh -> setContentsMargins(0, 0, 0, 0);
71 
72  FAffAxe = new QLabel(" Axis Vector: ") ;
73  FPonderation = new QCheckBox
74  (*HTML::decode("Weighted Rotation")) ;
75  QIcon p2(":/boutonAnnuler.png") ;
76  FClose = new QPushButton(p2 , "Close") ;
77  FClose -> setShortcut(Qt :: Key_Space) ;
78 
79  // Ajout au layout bas
80  FSaisieAxe = new champsOperations(this, bh) ;
81  bh -> addSpacing(SPACE_PIX_SIZE) ;
82  bh -> addWidget(FPonderation) ;
83  bh -> addSpacing(SPACE_PIX_SIZE) ;
84  bh -> addWidget(FClose) ;
85  bh -> addStretch(1);
86 
87  // Ajout au layout principal
88  QWidget * centre = new QWidget ;
89  QGridLayout * gl = new QGridLayout(centre);
90 
91  gl -> setHorizontalSpacing(0);
92  gl -> setVerticalSpacing(2);
93  gl -> setContentsMargins(0, 0, 0, 0);
94  gl -> addWidget(FAffSaisie, 0, 0, Qt::AlignRight) ;
95  gl -> addWidget(FAffAxe, 1, 0, Qt::AlignRight) ;
96  gl -> addWidget(haut, 0, 1) ;
97  gl -> addWidget(bas, 1, 1) ;
98 
99  addWidget(centre);
100 
101  update() ;
102 
103  connect(FSaisie -> getSaisieX() , SIGNAL(valueChanged(double)) ,
104  this , SLOT(callbackCx())) ;
105 
106  connect(FSaisie -> getSaisieY() , SIGNAL(valueChanged(double)) ,
107  this , SLOT(callbackCy())) ;
108 
109  connect(FSaisie -> getSaisieZ() , SIGNAL(valueChanged(double)) ,
110  this , SLOT(callbackCz())) ;
111 
112  connect(FSaisie -> getButtonRecuperer() , SIGNAL(clicked()) ,
113  this, SLOT(callbackTakeCenter())) ;
114 
115  connect(FSaisieAngle , SIGNAL(valueChanged(double)) ,
116  this , SLOT(callbackA())) ;
117 
118  connect(FReinitAngle , SIGNAL(clicked()) ,
119  this , SLOT(callbackReinitAngle())) ;
120 
121  connect(FSaisieAxe -> getSaisieX() , SIGNAL(valueChanged(double)) ,
122  this , SLOT(callbackVx())) ;
123 
124  connect(FSaisieAxe -> getSaisieY() , SIGNAL(valueChanged(double)) ,
125  this , SLOT(callbackVy())) ;
126 
127  connect(FSaisieAxe -> getSaisieZ() , SIGNAL(valueChanged(double)) ,
128  this , SLOT(callbackVz())) ;
129 
130  connect(FSaisieAxe -> getButtonRecuperer() , SIGNAL(clicked()) ,
131  this, SLOT(callbackTakeVector())) ;
132 
133  connect(FPonderation , SIGNAL(clicked()) ,
134  this , SLOT(callbackTogglePonderation())) ;
135 
136  connect(FClose , SIGNAL(clicked()) ,
137  this , SLOT(callbackClose())) ;
138 }
139 
140 // Destructeur
141 //------------
143 {}
144 // Mise a jour de l'affichage
145 //---------------------------
147 {
148  FUpdate = true ;
149 
151 
152  assert(FParent != NULL) ;
153 
154  FPonderation -> setChecked(getControler()
155  -> getObjectRotationPonderation()) ;
156 
157  CVertex V = getControler() -> getObjectRotationAxeVertex() ;
158  FSaisie -> setValueX(V.getX()) ;
159  FSaisie -> setValueY(V.getY()) ;
160  FSaisie -> setValueZ(V.getZ()) ;
161 
162  V = getControler()->getObjectRotationAxeVector();
163 
164  FSaisieAxe -> setValueX(V.getX()) ;
165  FSaisieAxe -> setValueY(V.getY()) ;
166  FSaisieAxe -> setValueZ(V.getZ()) ;
167 
168  FSaisieAngle -> setValuef(getControler() ->
169  getObjectRotationAngle()) ;
170 
171  FParent -> repaint() ;
172  FUpdate = false ;
173 }
174 
176 {
177  if (! FUpdate)
178  setCx(FSaisie -> getValueX()) ;
179 }
180 
182 {
183  if (! FUpdate)
184  setCy(FSaisie -> getValueY()) ;
185 }
186 
188 {
189  if (! FUpdate)
190  setCz(FSaisie -> getValueZ()) ;
191 }
192 
194 {
195  if (! FUpdate)
196  setVx(FSaisieAxe -> getValueX()) ;
197 }
198 
200 {
201  if (! FUpdate)
202  setVy(FSaisieAxe -> getValueY()) ;
203 }
204 
206 {
207  if (! FUpdate)
208  setVz(FSaisieAxe -> getValueZ()) ;
209 }
210 
212 {
213  if (! FUpdate)
214  setA(FSaisieAngle -> valuef()) ;
215 }
216 
218 {
219  assert(FParent != NULL) ;
220  CVertex center;
221  if (getControler() -> takeCenter(center))
222  setC(center) ;
223 }
224 
226 {
227  assert(FParent != NULL) ;
228  CVertex vector;
229  if (getControler() -> takeVector(vector))
230  setV(vector) ;
231 }
232 
234 {
235  if (! FUpdate)
236  setA(0) ;
237 }
238 
240 {
241  if (! FUpdate)
242  {
243  getControler() -> toggleObjectRotationPonderation() ;
244  FParent -> repaint() ;
245  }
246 }
247 
248 // Accesseurs en lecture
249 //----------------------
250 TCoordinate dialogRotation :: getCx() const
251 {
252  assert(FParent != NULL) ;
253  return getControler() -> getObjectRotationAxeVertex() . getX() ;
254 }
255 
256 TCoordinate dialogRotation :: getCy() const
257 {
258  assert(FParent != NULL) ;
259  return getControler() -> getObjectRotationAxeVertex() . getY() ;
260 }
261 
262 TCoordinate dialogRotation :: getCz() const
263 {
264  assert(FParent != NULL) ;
265  return getControler() -> getObjectRotationAxeVertex() . getZ() ;
266 }
267 
268 TCoordinate dialogRotation :: getVx() const
269 {
270  assert(FParent != NULL) ;
271  return getControler() -> getObjectRotationAxeVector() . getX() ;
272 }
273 
274 TCoordinate dialogRotation :: getVy() const
275 {
276  assert(FParent != NULL) ;
277  return getControler() -> getObjectRotationAxeVector() . getY() ;
278 }
279 
280 TCoordinate dialogRotation :: getVz() const
281 {
282  assert(FParent != NULL) ;
283  return getControler() -> getObjectRotationAxeVector() . getZ() ;
284 }
285 
286 // Accesseurs en ecriture
287 //------------------------
288 void dialogRotation :: setCx(TCoordinate k)
289 {
290  setC(CVertex(k , getCy() , getCz())) ;
291 }
292 
293 void dialogRotation :: setCy(TCoordinate k)
294 {
295  setC(CVertex(getCx() , k , getCz())) ;
296 }
297 
298 void dialogRotation :: setCz(TCoordinate k)
299 {
300  setC(CVertex(getCz() , getCy() , k)) ;
301 }
302 
303 void dialogRotation :: setVx(TCoordinate k)
304 {
305  setV(CVertex(k , getVy() , getVz())) ;
306 }
307 
308 void dialogRotation :: setVy(TCoordinate k)
309 {
310  setV(CVertex(getVx() , k , getVz())) ;
311 }
312 
313 void dialogRotation :: setVz(TCoordinate k)
314 {
315  setV(CVertex(getVx() , getVy() , k)) ;
316 }
317 
318 void dialogRotation :: setC(const CVertex & C)
319 {
320  assert(FParent != NULL) ;
321  if (C == getControler() -> getObjectRotationAxeVertex())
322  return;
323 
324  getControler() -> setObjectRotationAxeVertex(C) ;
325  update() ;
326 }
327 
328 void dialogRotation :: setV(const CVertex & V)
329 {
330  assert(FParent != NULL) ;
331  if (V == getControler() -> getObjectRotationAxeVector())
332  return;
333 
334  getControler() -> setObjectRotationAxeVector(V) ;
335  update() ;
336 }
337 
338 void dialogRotation :: setA(TCoordinate A)
339 {
340  assert(FParent != NULL) ;
341 
342  A = limit(A) ;
343 
344  if (A == getControler() -> getObjectRotationAngle())
345  return;
346 
347  getControler() -> setObjectRotationAngle(A) ;
348  update() ;
349 }