Developer documentation | Axl-2.5.1

axlInspectorObjectSceneWidgetField.cpp
Go to the documentation of this file.
1 /* axlInspectorObjectSceneWidgetField.cpp ---
2  *
3  * Author: Julien Wintz
4  * Copyright (C) 2008 - Julien Wintz, Inria.
5  * Created: Fri Jul 30 21:28:55 2010 (+0200)
6  * Version: $Id$
7  * Last-Updated: Fri Sep 9 15:43:52 2011 (+0200)
8  * By: Julien Wintz
9  * Update #: 265
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
24 
28 
29 #include <QtGui>
30 
31 class axlInspectorObjectSceneWidgetFieldPrivate
32 {
33 public:
34  axlAbstractField *field;
35  axlAbstractActorField *actorField;
36  axlAbstractView *view;
37 
38  QLineEdit *stats_type_edit;
39  QLineEdit *stats_kind_edit;
40  QLineEdit *stats_supp_edit;
41 
42  QVBoxLayout *layout;
43 
47 };
48 
49 axlInspectorObjectSceneWidgetField::axlInspectorObjectSceneWidgetField(QWidget *parent) : QFrame(parent), d(new axlInspectorObjectSceneWidgetFieldPrivate)
50 {
51  d->field = NULL;
52  d->actorField = NULL;
53  d->view = NULL;
54 
55  d->widgetFieldScalar = NULL;
56  d->widgetFieldVector = NULL;
57  d->widgetFieldTensor = NULL;
58 
59  d->stats_type_edit = new QLineEdit(this);
60  d->stats_type_edit->setReadOnly(true);
61 
62  d->stats_kind_edit = new QLineEdit(this);
63  d->stats_kind_edit->setReadOnly(true);
64 
65  d->stats_supp_edit = new QLineEdit(this);
66  d->stats_supp_edit->setReadOnly(true);
67 
68  QWidget *stats_widget = new QWidget(this);
69  stats_widget->setObjectName("axlInspectorObjectSceneWidgetFieldStatsForm");
70 
71  QHBoxLayout *stats_layout = new QHBoxLayout(stats_widget);
72  //stats_layout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
73  stats_layout->addWidget(d->stats_type_edit);
74  stats_layout->addWidget (d->stats_kind_edit);
75  stats_layout->addWidget (d->stats_supp_edit);
76 
77 
78 
79  d->layout = new QVBoxLayout(this);
80  d->layout->addWidget(new QLabel("Field", this));
81  d->layout->addWidget(stats_widget);
82 
83 }
84 
86 {
87 
88  delete d;
89 
90  d = NULL;
91 }
92 
94 {
95  d->field = field;
96 
97  switch (d->field->type()) {
99  d->stats_type_edit->setText("Integer");
100  break;
102  d->stats_type_edit->setText("Float");
103  break;
105  d->stats_type_edit->setText("Double");
106  break;
107  }
108 
109  switch (d->field->kind()) {
111  d->stats_kind_edit->setText("Scalar");
112  break;
114  d->stats_kind_edit->setText("Vector");
115  break;
117  d->stats_kind_edit->setText("Tensor");
118  break;
119  }
120 
121  switch (d->field->support()) {
123  d->stats_supp_edit->setText("Point");
124  break;
126  d->stats_supp_edit->setText("Cell");
127  break;
129  d->stats_supp_edit->setText("Custom");
130  break;
131  }
132 
133  // We Want to have only one widget
134  if(d->widgetFieldScalar)
135  {
136  disconnect(d->widgetFieldScalar, SIGNAL(displayAsColor()), this, SLOT(onDisplayAsColor()));
137  disconnect(d->widgetFieldScalar, SIGNAL(displayAsIso()), this, SLOT(onDisplayAsIso()));
138  disconnect(d->widgetFieldScalar, SIGNAL(displayAsNone()), this, SLOT(onDisplayAsNoneScalar()));
139 
140  disconnect(d->widgetFieldScalar, SIGNAL(colRangeMinChanged(double)), this, SLOT(onColRangeMinChanged(double)));
141  disconnect(d->widgetFieldScalar, SIGNAL(colRangeMaxChanged(double)), this, SLOT(onColRangeMaxChanged(double)));
142 
143  disconnect(d->widgetFieldScalar, SIGNAL(isoCountChanged(int)), this, SLOT(onIsoCountChanged(int)));
144  disconnect(d->widgetFieldScalar, SIGNAL(isoRadiusChanged(double)), this, SLOT(onIsoRadiusChanged(double)));
145 
146  disconnect(d->widgetFieldScalar, SIGNAL(isoRangeMinChanged(double)), this, SLOT(onIsoRangeMinChanged(double)));
147  disconnect(d->widgetFieldScalar, SIGNAL(isoRangeMaxChanged(double)), this, SLOT(onIsoRangeMaxChanged(double)));
148 
149  d->layout->removeWidget(d->widgetFieldScalar);
150 
151  delete d->widgetFieldScalar;
152  d->widgetFieldScalar = NULL;
153  }
154 
155  if(d->widgetFieldVector)
156  {
157  disconnect(d->widgetFieldVector, SIGNAL(displayAsHedge()), this, SLOT(onDisplayAsHedge()));
158  disconnect(d->widgetFieldVector, SIGNAL(displayAsGlyph()), this, SLOT(onDisplayAsGlyph()));
159  disconnect(d->widgetFieldVector, SIGNAL(displayAsStream()), this, SLOT(onDisplayAsStream()));
160  disconnect(d->widgetFieldVector, SIGNAL(displayAsNone()), this, SLOT(onDisplayAsNoneVector()));
161 
162 
163  disconnect(d->widgetFieldVector, SIGNAL(glyphScaleValueChanged(double)), this, SLOT(onGlyphScaleValueChanged(double)));
164 
165  disconnect(d->widgetFieldVector, SIGNAL(streamRadiusValueChanged(double)), this, SLOT(onStreamRadiusValueChanged(double)));
166  disconnect(d->widgetFieldVector, SIGNAL(streamPropagationValueChanged(double)), this, SLOT(onStreamPropagationValueChanged(double)));
167  disconnect(d->widgetFieldVector, SIGNAL(streamDirectionValueChanged(int)), this, SLOT(onStreamDirectionValueChanged(int)));
168 
169  d->layout->removeWidget(d->widgetFieldVector);
170  delete d->widgetFieldVector;
171  d->widgetFieldVector = NULL;
172  }
173 
174  if(d->widgetFieldTensor)
175  {
176  d->layout->removeWidget(d->widgetFieldTensor);
177 
178  delete d->widgetFieldTensor;
179  d->widgetFieldTensor = NULL;
180  }
181 
182  if (d->field->kind() == axlAbstractField::Scalar) {
183 
184 
185  d->widgetFieldScalar = new axlInspectorObjectSceneWidgetFieldScalar(this);
186  d->widgetFieldScalar->setField(d->field);
187  d->widgetFieldScalar->setView(d->view);
188  //d->widgetFieldScalar->setDefaultDisplay();
189 
190  d->layout->addWidget(d->widgetFieldScalar);
191  d->layout->addStretch(1);
192 
193  connect(d->widgetFieldScalar, SIGNAL(displayAsColor()), this, SLOT(onDisplayAsColor()));
194  connect(d->widgetFieldScalar, SIGNAL(displayAsIso()), this, SLOT(onDisplayAsIso()));
195  connect(d->widgetFieldScalar, SIGNAL(displayAsNone()), this, SLOT(onDisplayAsNoneScalar()));
196 
197 
198  connect(d->widgetFieldScalar, SIGNAL(colRangeMinChanged(double)), this, SLOT(onColRangeMinChanged(double)));
199  connect(d->widgetFieldScalar, SIGNAL(colRangeMaxChanged(double)), this, SLOT(onColRangeMaxChanged(double)));
200 
201  connect(d->widgetFieldScalar, SIGNAL(isoCountChanged(int)), this, SLOT(onIsoCountChanged(int)));
202  connect(d->widgetFieldScalar, SIGNAL(isoRadiusChanged(double)), this, SLOT(onIsoRadiusChanged(double)));
203  connect(d->widgetFieldScalar, SIGNAL(isoRangeMinChanged(double)), this, SLOT(onIsoRangeMinChanged(double)));
204  connect(d->widgetFieldScalar, SIGNAL(isoRangeMaxChanged(double)), this, SLOT(onIsoRangeMaxChanged(double)));
205 
206  }
207 
208  if (d->field->kind() == axlAbstractField::Vector){
209 
210  d->widgetFieldVector = new axlInspectorObjectSceneWidgetFieldVector(this);
211  d->widgetFieldVector->setField(d->field);
212  d->widgetFieldVector->setView(d->view);
213 
214  d->layout->addWidget(d->widgetFieldVector);
215  d->layout->addStretch(1);
216 
217  connect(d->widgetFieldVector, SIGNAL(displayAsHedge()), this, SLOT(onDisplayAsHedge()));
218  connect(d->widgetFieldVector, SIGNAL(displayAsGlyph()), this, SLOT(onDisplayAsGlyph()));
219  connect(d->widgetFieldVector, SIGNAL(displayAsStream()), this, SLOT(onDisplayAsStream()));
220  connect(d->widgetFieldVector, SIGNAL(displayAsNone()), this, SLOT(onDisplayAsNoneVector()));
221 
222  connect(d->widgetFieldVector, SIGNAL(glyphScaleValueChanged(double)), this, SLOT(onGlyphScaleValueChanged(double)));
223 
224  connect(d->widgetFieldVector, SIGNAL(streamRadiusValueChanged(double)), this, SLOT(onStreamRadiusValueChanged(double)));
225  connect(d->widgetFieldVector, SIGNAL(streamPropagationValueChanged(double)), this, SLOT(onStreamPropagationValueChanged(double)));
226  connect(d->widgetFieldVector, SIGNAL(streamDirectionValueChanged(int)), this, SLOT(onStreamDirectionValueChanged(int)));
227  }
228 
229  if (d->field->kind() == axlAbstractField::Tensor) {
230 
231  d->widgetFieldTensor = new axlInspectorObjectSceneWidgetFieldTensor(this);
232  d->widgetFieldTensor->setField(d->field);
233 
234  d->layout->addWidget(d->widgetFieldTensor);
235  d->layout->addStretch(1);
236  }
237 }
238 
240 {
241  d->actorField = actorField;
242 }
243 
245 {
246  d->view = view;
247 }
248 
250 {
251  if(!d->view)
252  return;
253 
254 
255  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
256  actor->displayAsNoneScalar();
257 
258 
259  d->view->update();
260 }
261 
263 {
264  if(!d->view)
265  return;
266 
267 
268  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
269  actor->displayAsColor();
270 
271 
272  d->view->update();
273 }
274 
276 {
277  if(!d->view)
278  return;
279 
280  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
281  actor->displayAsIso();
282 
283  d->view->update();
284 }
285 
287 {
288  if(!d->view)
289  return;
290 
291  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
292  actor->displayAsNoneVector();
293 
294  d->view->update();
295 }
296 
297 
299 {
300  if(!d->view)
301  return;
302 
303  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
304  actor->displayAsHedge();
305 
306  d->view->update();
307 }
308 
310 {
311  if(!d->view)
312  return;
313 
314  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
315  actor->displayAsGlyph();
316 
317  d->view->update();
318 }
319 
321 {
322  if(!d->view)
323  return;
324 
325  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
326  actor->displayAsStream();
327 
328  d->view->update();
329 }
330 
332 {
333  if(!d->view)
334  return;
335 
336  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
337  actor->setIsoCount(count);
338 
339  d->view->update();
340 }
341 
343 {
344  if(!d->view)
345  return;
346 
347  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
348  actor->onIsoRadiusChanged(radius);
349 
350  d->view->update();
351 }
352 
354 {
355  if(!d->view)
356  return;
357 
358  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
359  actor->setColRangeMin(min);
360 
361  d->view->update();
362 }
363 
365 {
366  if(!d->view)
367  return;
368 
369  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
370  actor->setColRangeMax(max);
371 
372  d->view->update();
373 }
374 
376 {
377  if(!d->view)
378  return;
379 
380  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
381  actor->setIsoRangeMin(min);
382 
383  d->view->update();
384 }
385 
387 {
388  if(!d->view)
389  return;
390 
391  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
392  actor->setIsoRangeMax(max);
393 
394  d->view->update();
395 }
396 
398 {
399  if(!d->view)
400  return;
401 
402  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
403  actor->setGlyphScale(scale);
404 
405  d->view->update();
406 }
407 
409 {
410  if(!d->view)
411  return;
412 
413  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
414  actor->setStreamRadius(radius);
415 
416  d->view->update();
417 }
418 
420 {
421  if(!d->view)
422  return;
423 
424  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
425  actor->setStreamPropagation(propagation);
426 
427  d->view->update();
428 }
429 
431 {
432  if(!d->view)
433  return;
434 
435  if(axlAbstractActorField *actor = dynamic_cast<axlAbstractActorField *>(d->view->actor(d->field)))
436  actor->setStreamDirection(direction);
437 
438  d->view->update();
439 }
Class axlAbstractField defines an API for arrays of numeric data.