Developer Documentation
QtCoordFrameDialog.cc
1 /*===========================================================================*\
2  * *
3  * OpenFlipper *
4  * Copyright (c) 2001-2015, RWTH-Aachen University *
5  * Department of Computer Graphics and Multimedia *
6  * All rights reserved. *
7  * www.openflipper.org *
8  * *
9  *---------------------------------------------------------------------------*
10  * This file is part of OpenFlipper. *
11  *---------------------------------------------------------------------------*
12  * *
13  * Redistribution and use in source and binary forms, with or without *
14  * modification, are permitted provided that the following conditions *
15  * are met: *
16  * *
17  * 1. Redistributions of source code must retain the above copyright notice, *
18  * this list of conditions and the following disclaimer. *
19  * *
20  * 2. Redistributions in binary form must reproduce the above copyright *
21  * notice, this list of conditions and the following disclaimer in the *
22  * documentation and/or other materials provided with the distribution. *
23  * *
24  * 3. Neither the name of the copyright holder nor the names of its *
25  * contributors may be used to endorse or promote products derived from *
26  * this software without specific prior written permission. *
27  * *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39  * *
40 \*===========================================================================*/
41 
42 
43 
44 
45 
46 //=============================================================================
47 //
48 // CLASS QtCoordFrameDialog - IMPLEMENTATION
49 //
50 //=============================================================================
51 
52 
53 //== INCLUDES =================================================================
54 
55 #include "QtCoordFrameDialog.hh"
56 #include "../Scenegraph/CoordFrameNode.hh"
57 
58 
59 //== NAMESPACES ==============================================================
60 
61 
62 namespace ACG {
63 namespace QtWidgets {
64 
65 
66 //== IMPLEMENTATION ==========================================================
67 
68 
69 QtCoordFrameDialog::
70 QtCoordFrameDialog( QWidget* _parent,
71  SceneGraph::CoordFrameNode* _node,
72  Qt::WindowFlags _fl )
73 
74  : QDialog(_parent, _fl),
75  node_(_node)
76 
77 {
78  ui_.setupUi( this );
79 
80  connect( ui_.OkButton, SIGNAL( clicked() ), this, SLOT( apply_changes() ) );
81  connect( ui_.OkButton, SIGNAL( clicked() ), this, SLOT( accept() ) );
82  connect( ui_.ApplyButton, SIGNAL( clicked() ), this, SLOT( apply_changes() ) );
83  connect( ui_.CancelButton, SIGNAL( clicked() ), this, SLOT( reject() ) );
84  connect( ui_.CancelButton, SIGNAL( clicked() ), this, SLOT( undo_changes() ) );
85  connect( ui_.x_add_button, SIGNAL( clicked() ), this, SLOT( add_x_plane() ) );
86  connect( ui_.x_mod_button, SIGNAL( clicked() ), this, SLOT( mod_x_plane() ) );
87  connect( ui_.x_del_button, SIGNAL( clicked() ), this, SLOT( del_x_plane() ) );
88  connect( ui_.y_add_button, SIGNAL( clicked() ), this, SLOT( add_y_plane() ) );
89  connect( ui_.y_mod_button, SIGNAL( clicked() ), this, SLOT( mod_y_plane() ) );
90  connect( ui_.y_del_button, SIGNAL( clicked() ), this, SLOT( del_y_plane() ) );
91  connect( ui_.z_add_button, SIGNAL( clicked() ), this, SLOT( add_z_plane() ) );
92  connect( ui_.z_mod_button, SIGNAL( clicked() ), this, SLOT( mod_z_plane() ) );
93  connect( ui_.z_del_button, SIGNAL( clicked() ), this, SLOT( del_z_plane() ) );
94 
95  update_values();
96 }
97 
98 
99 //-----------------------------------------------------------------------------
100 
101 
102 void
103 QtCoordFrameDialog::show()
104 {
105  update_values();
106  QDialog::show();
107 }
108 
109 
110 //-----------------------------------------------------------------------------
111 
112 
113 void
114 QtCoordFrameDialog::update_values()
115 {
116  x_planes_bak_ = node_->x_planes();
117  y_planes_bak_ = node_->y_planes();
118  z_planes_bak_ = node_->z_planes();
119 
120  planes2combo(x_planes_bak_, ui_.x_combobox);
121  planes2combo(y_planes_bak_, ui_.y_combobox);
122  planes2combo(z_planes_bak_, ui_.z_combobox);
123 
124 
125  QString s, title;
126 
127  title = ( QString("X-Planes: [") +
128  s.setNum(node_->bb_min()[0], 'f', 4) +
129  QString(", ") +
130  s.setNum(node_->bb_max()[0], 'f', 4) +
131  QString("]") );
132  ui_.x_groupbox->setTitle(title);
133 
134  title = ( QString("Y-Planes: [") +
135  s.setNum(node_->bb_min()[1], 'f', 4) +
136  QString(", ") +
137  s.setNum(node_->bb_max()[1], 'f', 4) +
138  QString("]") );
139  ui_.y_groupbox->setTitle(title);
140 
141  title = ( QString("Z-Planes: [") +
142  s.setNum(node_->bb_min()[2], 'f', 4) +
143  QString(", ") +
144  s.setNum(node_->bb_max()[2], 'f', 4) +
145  QString("]") );
146  ui_.z_groupbox->setTitle(title);
147 }
148 
149 
150 //-----------------------------------------------------------------------------
151 
152 
153 void
154 QtCoordFrameDialog::combo2planes(const QComboBox* _combo,
155  std::vector<float>& _planes)
156 {
157  unsigned int i(0), N(_combo->count());
158 
159  _planes.clear();
160  _planes.reserve(N);
161 
162  for (; i<N; ++i)
163  _planes.push_back(_combo->itemText(i).toFloat());
164 }
165 
166 
167 void
168 QtCoordFrameDialog::planes2combo(const std::vector<float>& _planes,
169  QComboBox* _combo)
170 {
171  std::vector<float>::const_iterator p_it, p_end;
172  QString s;
173 
174  _combo->clear();
175  for (p_it=_planes.begin(), p_end=_planes.end(); p_it!=p_end; ++p_it)
176  _combo->addItem(s.setNum(*p_it, 'f', 3));
177 }
178 
179 
180 //-----------------------------------------------------------------------------
181 
182 
183 void QtCoordFrameDialog::apply_changes()
184 {
185  std::vector<float> planes;
186 
187  combo2planes(ui_.x_combobox, planes);
188  node_->set_x_planes(planes);
189 
190  combo2planes(ui_.y_combobox, planes);
191  node_->set_y_planes(planes);
192 
193  combo2planes(ui_.z_combobox, planes);
194  node_->set_z_planes(planes);
195 
196  emit signalNodeChanged(node_);
197 }
198 
199 
200 //-----------------------------------------------------------------------------
201 
202 
203 void QtCoordFrameDialog::undo_changes()
204 {
205  node_->set_x_planes(x_planes_bak_);
206  node_->set_y_planes(y_planes_bak_);
207  node_->set_z_planes(z_planes_bak_);
208 
209  emit signalNodeChanged(node_);
210 }
211 
212 
213 //-----------------------------------------------------------------------------
214 
215 
216 void QtCoordFrameDialog::add_x_plane()
217 {
218  ui_.x_combobox->addItem(ui_.x_combobox->currentText());
219  apply_changes();
220 }
221 
222 void QtCoordFrameDialog::mod_x_plane()
223 {
224  ui_.x_combobox->setItemText(ui_.x_combobox->currentIndex(),ui_.x_combobox->currentText());
225  apply_changes();
226 }
227 
228 void QtCoordFrameDialog::del_x_plane()
229 {
230  ui_.x_combobox->removeItem(ui_.x_combobox->currentIndex());
231  apply_changes();
232 }
233 
234 
235 //-----------------------------------------------------------------------------
236 
237 
238 void QtCoordFrameDialog::add_y_plane()
239 {
240  ui_.y_combobox->addItem(ui_.y_combobox->currentText());
241  apply_changes();
242 }
243 
244 void QtCoordFrameDialog::mod_y_plane()
245 {
246  ui_.y_combobox->setItemText(ui_.y_combobox->currentIndex(),ui_.y_combobox->currentText());
247  apply_changes();
248 }
249 
250 void QtCoordFrameDialog::del_y_plane()
251 {
252  ui_.y_combobox->removeItem(ui_.y_combobox->currentIndex());
253  apply_changes();
254 }
255 
256 
257 //-----------------------------------------------------------------------------
258 
259 
260 void QtCoordFrameDialog::add_z_plane()
261 {
262  ui_.z_combobox->addItem(ui_.z_combobox->currentText());
263  apply_changes();
264 }
265 
266 void QtCoordFrameDialog::mod_z_plane()
267 {
268  ui_.z_combobox->setItemText(ui_.z_combobox->currentIndex(),ui_.z_combobox->currentText());
269  apply_changes();
270 }
271 
272 void QtCoordFrameDialog::del_z_plane()
273 {
274  ui_.z_combobox->removeItem(ui_.z_combobox->currentIndex());
275  apply_changes();
276 }
277 
278 
279 //=============================================================================
280 } // namespace QtWidgets
281 } // namespace ACG
282 //=============================================================================
Namespace providing different geometric functions concerning angles.