Developer documentation | Axl-2.5.1

axlInspectorObject.cpp
Go to the documentation of this file.
1 /* axlInspectorObject.cpp ---
2  *
3  * Author: Julien Wintz
4  * Copyright (C) 2008 - Julien Wintz, Inria.
5  * Created: Mon Mar 14 19:39:54 2011 (+0100)
6  * Version: $Id$
7  * Last-Updated: Mon Mar 28 17:07:33 2011 (+0200)
8  * By: Julien Wintz
9  * Update #: 48
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
20 #include "axlInspectorObject.h"
23 #include "axlInspectorObjectSet.h"
25 #include "axlInspectorObjectCone.h"
28 #include "axlInspectorObjectLine.h"
29 #include "axlInspectorObjectMesh.h"
36 
37 #include <dtkCoreSupport/dtkAbstractData.h>
38 #include <dtkCoreSupport/dtkGlobal.h>
39 
44 #include <axlCore/axlCone.h>
45 #include <axlCore/axlCylinder.h>
46 #include <axlCore/axlEllipsoid.h>
47 #include <axlCore/axlLine.h>
48 #include <axlCore/axlMesh.h>
49 #include <axlCore/axlPlane.h>
50 #include <axlCore/axlSphere.h>
51 #include <axlCore/axlTorus.h>
52 #include <axlCore/axlDataDynamic.h>
53 #include <axlCore/axlCircleArc.h>
57 //#include <axlCore/axlAbstractVisitor.h>
58 //#include <axlCore/axlAbstractVisitorParametric.h>
59 
60 
61 #include <QtDebug>
62 
63 class axlInspectorObjectPrivate
64 {
65 public:
66  axlInspectorObjectController *controller;
67 };
68 
69 axlInspectorObject::axlInspectorObject(QWidget *parent) : QScrollArea(parent), d(new axlInspectorObjectPrivate)
70 {
71  d->controller = NULL;
72 
73  this->setAttribute(Qt::WA_MacShowFocusRect, false);
74  this->setFrameShape(QFrame::NoFrame);
75  this->setWidgetResizable(true);
76 }
77 
79 {
80  delete d;
81 
82  d = NULL;
83 }
84 
85 void axlInspectorObject::onDataSelected(dtkAbstractData *data)
86 {
87  if (axlInspectorObjectInterface *widget = axlInspectorObjectFactory::instance()->create(data->identifier()))
88  {
89  widget->setData(data);
90  this->setWidget(widget);
91  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
92  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
93  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
94  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
95  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
96  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
97  connect(widget, SIGNAL(tubeFilterRadiusChanged(dtkAbstractData *, double)), this, SIGNAL(tubeFilterRadiusChanged(dtkAbstractData *, double)));
98 
99  widget->setAttribute(Qt::WA_DeleteOnClose);
100  }
101  else if(axlDataDynamic *dataDynamic = dynamic_cast<axlDataDynamic *>(data)) {
103  widget->setData(dataDynamic);
104  this->setWidget(widget);
105  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
106  //connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
107  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
108  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
109  // //connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
110  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
111  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
112  widget->setAttribute(Qt::WA_DeleteOnClose);
113  }
114  else if(axlAbstractDataComposite *composite = dynamic_cast<axlAbstractDataComposite *>(data)) {
116  widget->setData(composite);
117  this->setWidget(widget);
118  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
119  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
120  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
121  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
122  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
123  widget->setAttribute(Qt::WA_DeleteOnClose);
124  }
125 
126  else if(axlCone *cone = dynamic_cast<axlCone *>(data)) {
128  widget->setData(cone);
129  this->setWidget(widget);
130  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
131  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
132  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
133  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
134  // // connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
135  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
136  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
137  widget->setAttribute(Qt::WA_DeleteOnClose);
138  }
139 
140  else if(axlCylinder *cylinder = dynamic_cast<axlCylinder *>(data)) {
142  widget->setData(cylinder);
143  this->setWidget(widget);
144  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
145  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
146  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
147  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
148  // // connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
149  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
150  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
151  widget->setAttribute(Qt::WA_DeleteOnClose);
152  }
153 
154  else if(axlTorus *torus = dynamic_cast<axlTorus *>(data)) {
156  widget->setData(torus);
157  this->setWidget(widget);
158  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
159  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
160  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
161  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
162  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
163  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
164  widget->setAttribute(Qt::WA_DeleteOnClose);
165  }
166 
167  else if(axlCircleArc *arc = dynamic_cast<axlCircleArc *>(data)) {
169  widget->setData(arc);
170  this->setWidget(widget);
171  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
172  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
173  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
174  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
175  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
176  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
177  widget->setAttribute(Qt::WA_DeleteOnClose);
178  }
179 
180  else if(axlEllipsoid *ellipsoid = dynamic_cast<axlEllipsoid *>(data)) {
182  widget->setData(ellipsoid);
183  this->setWidget(widget);
184  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
185  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
186  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
187  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
188  // // connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
189  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
190  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
191  widget->setAttribute(Qt::WA_DeleteOnClose);
192  }
193 
194  else if(axlLine *line = dynamic_cast<axlLine *>(data)) {
196  widget->setData(line);
197  this->setWidget(widget);
198  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
199  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
200  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
201  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
202  // connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
203  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
204  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
205  widget->setAttribute(Qt::WA_DeleteOnClose);
206  }
207 
208  else if(axlPlane *plane = dynamic_cast<axlPlane *>(data)) {
210  widget->setData(plane);
211  this->setWidget(widget);
212  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
213  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
214  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
215  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
216  // //connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
217  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
218  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
219  widget->setAttribute(Qt::WA_DeleteOnClose);
220  }
221 
222  else if(axlPoint *point = dynamic_cast<axlPoint *>(data)) {
224  widget->setData(point);
225  this->setWidget(widget);
226  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
227  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
228  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
229  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
230  // connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
231  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
232  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
233  widget->setAttribute(Qt::WA_DeleteOnClose);
234  }
235 
236  else if(axlSphere *pointSet = dynamic_cast<axlSphere *>(data)) {
238  widget->setData(pointSet);
239  this->setWidget(widget);
240  // this->setWidget(widget);
241  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
242  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
243  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
244  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
245  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
246  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
247  widget->setAttribute(Qt::WA_DeleteOnClose);
248  }
249  else if(axlAbstractData *dt = dynamic_cast<axlAbstractData *>(data)) {
250 
251  //We don't make any difference between data and mesh for the basic inspector...
253  widget->setData(dt);
254  this->setWidget(widget);
255  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
256  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
257  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
258  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
259  // connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
260  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
261  connect(widget, SIGNAL(interpolationChanded(dtkAbstractData*,int)), this, SIGNAL(interpolationChanded(dtkAbstractData*,int)));
262  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData *, int)), this, SIGNAL(modifiedProperty(dtkAbstractData *, int)));
263  widget->setAttribute(Qt::WA_DeleteOnClose);
264  // }
265  }
266 
267  // else if(axlMesh *mesh = dynamic_cast<axlMesh *>(data)) {
268  // axlInspectorObjectMesh *widget = new axlInspectorObjectMesh(this);
269  // widget->setData(mesh);
270  // this->setWidget(widget);
271  // connect(widget, SIGNAL(update()), this, SIGNAL(update()));
272  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
273  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
274  // connect(widget, SIGNAL(updateStateColor(dtkAbstractData*,int)), this, SIGNAL(updateStateColor(dtkAbstractData*,int)));
275  // widget->setAttribute(Qt::WA_DeleteOnClose);
276  // }
277 
278 }
279 
280 void axlInspectorObject::onDataSetSelected(QList<dtkAbstractData *> dataSet)
281 {
282  if(dataSet.size() == 0) //If we have only data selected, we can use the onDataSelected Method
283  {
284  if(this->widget())
285  this->widget()->close();
286  }
287  if(dataSet.size() == 1) //If we have only data selected, we can use the onDataSelected Method
288  {
289  this->onDataSelected(dataSet.first());
290  }
291  else if(dataSet.size() > 1)
292  {
293  axlInspectorObjectSet *widget = new axlInspectorObjectSet(this);
294  connect(widget, SIGNAL(update()), this, SIGNAL(update()));
295  // connect(widget, SIGNAL(dataChangedByShader(dtkAbstractData*,QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
296  // connect(widget, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
297  // connect(widget, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
298  connect(widget, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
299  // connect(widget, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
300  connect(widget, SIGNAL(modifiedProperty(dtkAbstractData*, int)), this, SIGNAL(modifiedProperty(dtkAbstractData*, int)));
301 
302  widget->setData(dataSet);
303  this->setWidget(widget);
304  widget->setAttribute(Qt::WA_DeleteOnClose);
305  }
306 }
307 
308 
309 void axlInspectorObject::onDataSetRemoved(QList<dtkAbstractData *> dataSetRemoved)
310 {
311  if(this->widget())
312  this->widget()->close();
313 }
314 
316 {
317  d->controller = controller;
318 }
void tubeFilterRadiusChanged(dtkAbstractData *, double)
Class axlPoint defines 3D points.
Definition: axlPoint.h:34
Class axlLine defines 3D lines.
Definition: axlLine.h:35
void modifiedProperty(dtkAbstractData *, int)
void setData(axlPlane *pointt)
Class axlCylinder defines 3D cylinders.
Definition: axlCylinder.h:33
Class axlPlane defines 3D planes.
Definition: axlPlane.h:34
void setData(QList< dtkAbstractData * > dataSet)
void onDataSetRemoved(QList< dtkAbstractData * > dataSetRemoved)
void setController(axlInspectorObjectController *controller)
void setData(axlAbstractData *data)
axlInspectorObject(QWidget *parent=0)
static axlInspectorObjectFactory * instance(void)
Class axlDataDynamic defines a dynamic object.
void dataChangedByGeometry(dtkAbstractData *data)
Class axlSphere defines 3D spheres.
Definition: axlSphere.h:33
void interpolationChanded(dtkAbstractData *data, int interpolation)
void setData(axlAbstractDataComposite *data)
void onDataSetSelected(QList< dtkAbstractData * > dataSet)
void setData(axlDataDynamic *dynamicData)
Class axlCone defines 3D cones.
Definition: axlCone.h:34
void onDataSelected(dtkAbstractData *data)
void setData(axlCylinder *cylinder)
Class axlEllipsoid defines 3D ellipsoids.
Definition: axlEllipsoid.h:35
void setData(axlLine *point)
Class axlAbstractData defines an API for all type of axel data.