Developer documentation | Axl-2.5.1

axlInspector.cpp
Go to the documentation of this file.
1 /* axlInspector.cpp ---
2  *
3  * Author: Meriadeg Perrinel
4  * Copyright (C) 2008 - Julien Wintz, Inria.
5  * Created: Mon Mar 14 18:23:13 2011 (+0100)
6  * Version: $Id$
7  * Last-Updated: Wed Nov 9 11:00:11 2011 (+0100)
8  * By: Julien Wintz
9  * Update #: 75
10  */
11 
12 /* Commentary:
13  *
14  */
15 
16 /* Change log:
17  *
18  */
19 
20 #include "axlInspector.h"
24 #include "axlInspectorSettings.h"
25 #include "axlInspectorStack.h"
26 #include "axlInspectorView.h"
27 #include "axlInspectorSidePane.h"
28 
29 #include <dtkCoreSupport/dtkAbstractData.h>
30 #include <dtkCoreSupport/dtkGlobal>
31 
32 #include <QtGui>
33 #include <QtDebug>
34 
35 #include <axlCore/axlDouble.h>
36 
37 class axlInspectorPrivate
38 {
39 public:
40  axlInspectorObjectController *controller;
41  axlInspectorObjectManager *inspector_object_manager;
42  axlInspectorToolManager *inspector_tool_manager;
43  axlInspectorView *inspector_view;
44  axlInspectorSidePane *side_pane;
45  axlInspectorStack *stack;
46  axlInspectorSettings *settings;
47 };
48 
49 axlInspector::axlInspector(QWidget *parent) : QFrame(parent), d(new axlInspectorPrivate)
50 {
51 
52  Q_INIT_RESOURCE(axlGui);
53  Q_INIT_RESOURCE(axelShader);
54 
55  d->controller = new axlInspectorObjectController();
56 
57  d->inspector_object_manager = new axlInspectorObjectManager(this);
58  d->inspector_object_manager->setController(d->controller);
59 
60  d->inspector_tool_manager = new axlInspectorToolManager(this);
61  d->inspector_tool_manager->setController(d->controller);
62 
63  d->inspector_view = new axlInspectorView(this);
64 
65  d->side_pane = new axlInspectorSidePane(this);
66 
67  //behavior
68 
69  connect(d->inspector_tool_manager, SIGNAL(update()), this, SIGNAL(update()));
70  connect(d->inspector_tool_manager, SIGNAL(dataInserted(axlAbstractData *)), this, SIGNAL(dataInserted(axlAbstractData *)));
71  connect(d->inspector_tool_manager, SIGNAL(dataChanged(dtkAbstractData *)), this, SIGNAL(dataChanged(dtkAbstractData *)));
72  connect(d->inspector_tool_manager, SIGNAL(dataChangedByControlPoints(dtkAbstractData *)), this, SIGNAL(dataChangedByControlPoints(dtkAbstractData *)));
73  // connect(d->inspector_tool_manager, SIGNAL(dataChangedByShader(dtkAbstractData*, QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
74  // connect(d->inspector_tool_manager, SIGNAL(dataChangedByShaderFromString(dtkAbstractData*, QString)), this, SIGNAL(dataChangedByShaderFromString(dtkAbstractData *, QString)));
75  connect(d->inspector_tool_manager, SIGNAL(dataSetToRemove(QList<dtkAbstractData*>)), d->inspector_object_manager, SLOT(onDataRemoved(QList<dtkAbstractData*>)));
76  connect(d->inspector_tool_manager, SIGNAL(dataSetToRemove(QList<dtkAbstractData*>)), this, SIGNAL(dataSetRemoved(QList<dtkAbstractData*>)));
77  connect(d->inspector_tool_manager, SIGNAL(dataSetToRemove(QList<dtkAbstractData*>)), d->controller, SLOT(onDataRemoved(QList<dtkAbstractData*>)));
78  connect(d->inspector_tool_manager, SIGNAL(fieldsCreatedOnData(QList<axlAbstractData*>, QString)), d->inspector_object_manager, SLOT(onFieldsCreatedOnData(QList<axlAbstractData *>, QString)));
79  connect(d->inspector_tool_manager, SIGNAL(modifiedProperty(dtkAbstractData*, int)), this, SIGNAL(modifiedProperty(dtkAbstractData*,int)));
80 
81  connect(d->inspector_object_manager, SIGNAL(stateChanged(dtkAbstractData*,int)), this, SIGNAL(stateChanged(dtkAbstractData*,int)));
82  connect(d->inspector_object_manager, SIGNAL(actorVisibilityChanged(dtkAbstractData*,bool)), this, SIGNAL(actorVisibilityChanged(dtkAbstractData*,bool)));
83  connect(d->inspector_object_manager, SIGNAL(dataChangedByGeometry(dtkAbstractData *)), this, SIGNAL(dataChangedByGeometry(dtkAbstractData *)));
84  // connect(d->inspector_object_manager, SIGNAL(dataChangedByShader(dtkAbstractData*, QString)), this, SIGNAL(dataChangedByShader(dtkAbstractData *, QString)));
85  // connect(d->inspector_object_manager, SIGNAL(dataChangedByOpacity(dtkAbstractData*, double)), this, SIGNAL(dataChangedByOpacity(dtkAbstractData *, double)));
86  // connect(d->inspector_object_manager, SIGNAL(dataChangedBySize(dtkAbstractData*, double)), this, SIGNAL(dataChangedBySize(dtkAbstractData *, double)));
87  connect(d->inspector_object_manager, SIGNAL(interpolationChanded(dtkAbstractData*,int)), this, SIGNAL(interpolationChanded(dtkAbstractData*,int)));
88 
89  connect(d->inspector_object_manager, SIGNAL(dataSetRemoved(QList<dtkAbstractData*>)), this, SIGNAL(dataSetRemoved(QList<dtkAbstractData*>)));
90  connect(d->inspector_object_manager, SIGNAL(dataSetRemoved(QList<dtkAbstractData *>)), d->controller, SLOT(onDataRemoved(QList<dtkAbstractData*>)));
91  // connect(d->inspector_object_manager, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)), this, SIGNAL(dataChangedByColor(dtkAbstractData *, double, double, double)));
92  connect(d->inspector_object_manager, SIGNAL(modifiedProperty(dtkAbstractData*, int)), this, SIGNAL(modifiedProperty(dtkAbstractData*,int)));
93 
94  connect(d->inspector_object_manager, SIGNAL(update()), this, SIGNAL(update()));
95  connect(d->inspector_object_manager, SIGNAL(showCurrentPoint(double, double, dtkAbstractData *)), this, SIGNAL(showCurrentPoint(double, double, dtkAbstractData *)));
96  connect(d->inspector_object_manager, SIGNAL(hideCurrentPoint(double, double, dtkAbstractData *)), this, SIGNAL(hideCurrentPoint(double, double, dtkAbstractData *)));
97  connect(d->inspector_object_manager, SIGNAL(moveCurrentPoint(double, double, dtkAbstractData *)), this, SIGNAL(moveCurrentPoint(double, double, dtkAbstractData *)));
98 
99  // //useful for dynamic objects
100  // connect(d->inspector_tool_manager, SIGNAL(doubleInputInserted(QList<axlDouble*>)), d->inspector_object_manager, SLOT(onDoubleInputInserted(QList<axlDouble*>)));
101 
102  connect(d->side_pane, SIGNAL(showInspector(bool)), this, SLOT(onShowInspector(bool)));
103  connect(d->side_pane, SIGNAL(worldCamera()), this, SIGNAL(worldCamera()));
104  connect(d->side_pane, SIGNAL(objectCamera()), this, SIGNAL(objectCamera()));
105  connect(d->side_pane, SIGNAL(trackballCamera()), this, SIGNAL(trackballCamera()));
106  connect(d->side_pane, SIGNAL(joystickCamera()), this, SIGNAL(joystickCamera()));
107  connect(d->side_pane, SIGNAL(showSettings(bool)), this, SLOT(onShowSettings(bool)));
108  connect(d->side_pane, SIGNAL(switchFullScreen()), this, SIGNAL(switchFullScreen()));
109 
110  d->stack = new axlInspectorStack(this);
111  d->stack->setFixedWidth(0);
112  d->stack->addWidget("object", d->inspector_object_manager);
113  d->stack->addWidget("tool", d->inspector_tool_manager);
114  d->stack->addWidget("view", d->inspector_view);
115 
116  d->settings = new axlInspectorSettings(this);
117  d->settings->setFixedWidth(0);
118 
119  QHBoxLayout *layout = new QHBoxLayout(this);
120  layout->setContentsMargins(0, 0, 0, 0);
121  layout->setSpacing(0);
122  layout->addWidget(d->side_pane);
123  layout->addWidget(d->stack);
124  layout->addWidget(d->settings);
125 
126  this->setStyleSheet(dtkReadFile(":axlGui/axlInspector.qss"));
127  this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
128 }
129 
131 {
132  delete d;
133 
134  d = NULL;
135 }
136 
137 QSize axlInspector::sizeHint(void) const
138 {
139  return d->stack->size() + d->side_pane->size();
140 }
141 
142 void axlInspector::insertDataSet(QList<axlAbstractData *> dataSet)
143 {
144  foreach(axlAbstractData *data, dataSet)
145  d->inspector_object_manager->insert(data);
146 
147  d->inspector_object_manager->resizeColumnToContents();
148 }
149 
151 {
152  d->inspector_object_manager->insert(data);
153  d->inspector_object_manager->resizeColumnToContents();
154 }
155 
156 void axlInspector::removeData(dtkAbstractData *data){
157  d->inspector_object_manager->removeData(data);
158 }
159 
160 QList<dtkAbstractData *> axlInspector::dataSet(void)
161 {
162  return d->inspector_object_manager->dataSet();
163 }
164 
166 {
167  d->inspector_object_manager->setView(view);
168  d->inspector_tool_manager->setView(view);
169  d->inspector_view->setView(view);
170 }
171 
173 {
174  d->inspector_view->updateView();
175 }
176 
177 void axlInspector::sendFieldSignal(QList<axlAbstractData *>dataSet, QString fieldName){
178  d->inspector_object_manager->onFieldOpened(dataSet, fieldName);
179  //d->inspector_object_manager->onFieldsCreatedOnData(dataSet, fieldName);
180 
181 }
182 
183 void axlInspector::onStateChanged(dtkAbstractData *data ,int mode)
184 {
185  d->inspector_object_manager->onStateChanged(data, mode);
186 }
187 
189 {
190  QPropertyAnimation *animation = new QPropertyAnimation(d->stack, "width");
191  animation->setDuration(600);
192  animation->setStartValue(0);
193  animation->setEndValue(300);
194  if(show) {
195  // animation->setEasingCurve(QEasingCurve::OutBounce);
196  animation->setDirection(QAbstractAnimation::Forward);
197  } else {
198  // animation->setEasingCurve(QEasingCurve::InBounce);
199  animation->setDirection(QAbstractAnimation::Backward);
200  }
201  animation->start(QAbstractAnimation::DeleteWhenStopped);
202 }
203 
205 {
206  QPropertyAnimation *animation = new QPropertyAnimation(d->settings, "width");
207  animation->setDuration(600);
208  animation->setStartValue(0);
209  animation->setEndValue(300);
210  if(show) {
211  // animation->setEasingCurve(QEasingCurve::OutBounce);
212  animation->setDirection(QAbstractAnimation::Forward);
213  } else {
214  // animation->setEasingCurve(QEasingCurve::InBounce);
215  animation->setDirection(QAbstractAnimation::Backward);
216  }
217  animation->start(QAbstractAnimation::DeleteWhenStopped);
218 }
219 
221  d->inspector_object_manager->clearScene();
222 }
void clearScene(void)
void update(void)
virtual ~axlInspector(void)
void insertData(axlAbstractData *data)
void dataChangedByControlPoints(dtkAbstractData *data)
void switchFullScreen(void)
void onShowInspector(bool)
void interpolationChanded(dtkAbstractData *data, int interpolation)
void onStateChanged(dtkAbstractData *data, int mode)
axlInspector(QWidget *parent=0)
void moveCurrentPoint(double u, double v, dtkAbstractData *data)
void worldCamera(void)
void stateChanged(dtkAbstractData *data, int mode)
void hideCurrentPoint(double u, double v, dtkAbstractData *data)
void dataSetRemoved(QList< dtkAbstractData * > dataSetRemoved)
void dataChanged(dtkAbstractData *data)
void insertDataSet(QList< axlAbstractData * > dataSet)
void modifiedProperty(dtkAbstractData *, int)
QList< dtkAbstractData * > dataSet(void)
void updateView(void)
void sendFieldSignal(QList< axlAbstractData * > dataSet, QString fieldName)
QSize sizeHint(void) const
void setView(axlAbstractView *view)
void dataInserted(axlAbstractData *data)
void dataChangedByGeometry(dtkAbstractData *data)
void actorVisibilityChanged(dtkAbstractData *data, bool actorVisibility)
void showCurrentPoint(double u, double v, dtkAbstractData *data)
void removeData(dtkAbstractData *data)
void joystickCamera(void)
void onShowSettings(bool)
void objectCamera(void)
void trackballCamera(void)
Class axlAbstractData defines an API for all type of axel data.