NCL Composer  0.1.5
 All Classes Functions Variables Pages
qnstview.h
1 #ifndef QNSTVIEW_H
2 #define QNSTVIEW_H
3 
4 #include <QGraphicsView>
5 #include <QVector>
6 #include <QMap>
7 #include <QDomDocument>
8 #include <QDomElement>
9 #include <QMouseEvent>
10 #include <QKeyEvent>
11 #include <QMessageBox>
12 #include <QWheelEvent>
13 #include <QSet>
14 #include <QUndoStack>
15 #include <QDir>
16 
17 #include <QDebug>
18 
19 #include "qnstscene.h"
20 #include "qnstviewlink.h"
21 #include "qnstgraphicsentity.h"
22 #include "qnstgraphicsbody.h"
23 #include "qnstgraphicscontext.h"
24 #include "qnstgraphicsswitch.h"
25 #include "qnstgraphicsmedia.h"
26 #include "qnstgraphicsport.h"
27 #include "qnstgraphicsreference.h"
28 #include "qnstgraphicslink.h"
29 #include "qnstgraphicslinkdialog.h"
30 #include "qnstgraphicsconditiondialog.h"
31 #include "qnstgraphicsactiondialog.h"
32 #include "qnstconnector.h"
33 #include "qnstgraphicsproperty.h"
34 #include "qnstgraphicsbind.h"
35 #include "qnstgraphicsarea.h"
36 #include "qnstaddcommand.h"
37 #include "qnstchangecommand.h"
38 #include "qnstremovecommand.h"
39 #include "qnstgraphicsmapping.h"
40 
41 class QnstAddCommand;
42 
43 // #define SMOOTH_ZOOM 1
44 //
45 // ATTENTION: This code needs a refactoring.
46 //
47 
48 class QnstView : public QGraphicsView
49 {
50  Q_OBJECT
51 
52 public:
53  QnstView(QWidget* parent = 0);
54 
55  ~QnstView();
56 
57  void load(QString data);
58 
59  QString serialize();
60 
61  void read(QDomElement element, QDomElement parent);
62 
63  void readLink(QDomElement element, QDomElement parent);
64 
65  void write(QDomElement element, QDomDocument* dom, QnstGraphicsEntity* entity);
66 
67  void writeLink(QDomElement element, QDomDocument* dom, QnstGraphicsEntity* entity);
68 
69 public:
70  void addEntity(const QString uid, const QString parent,
71  const QMap<QString, QString> &properties, bool undo = false,
72  bool adjust = true);
73 
74  void removeEntity(const QString uid, bool undo = false, bool rmRef = true);
75 
76  void changeEntity(const QString uid, const QMap<QString, QString> &properties,
77  bool adjust=true);
78 
79  void selectEntity(const QString uid);
80 
81  bool hasEntity(QString uid);
82 
83  QnstEntity* getEntity(QString uid);
84 
85  QMap<QString, QnstGraphicsEntity*> entities;
86 
87 public slots:
88  void performHelp();
89 
90  /* void performUndo();
91 
92  void performRedo(); */
93 
94  void performCut();
95 
96  void performCopy();
97 
98  void performPaste();
99 
100  void performDelete();
101 
102  void performExport();
103 
104  void performZoomIn();
105 
106  void performZoomOut();
107 
108  void performZoomReset();
109 
110  void performFullscreen();
111 
112  void performBringfront();
113 
114  void performBringforward();
115 
116  void performSendback();
117 
118  void performSendbackward();
119 
120  void performHide();
121 
122  void performProperties();
123 
124 signals:
125  void entityAdded(const QString uid, const QString parent, const QMap<QString, QString> properties);
126 
127  void entityChanged(const QString uid, const QMap<QString, QString> properties);
128 
129  void entityRemoved(const QString uid);
130 
131  void entitySelected(const QString uid);
132 
133  void viewChanged();
134 
135 protected:
136 
137  bool updateEntityWithUniqueNstId(QnstGraphicsEntity *entity);
138 
139  virtual void mouseMoveEvent(QMouseEvent* event);
140 
141  virtual void mousePressEvent(QMouseEvent* event);
142 
143  virtual void mouseReleaseEvent(QMouseEvent*event);
144 
145  virtual void keyPressEvent(QKeyEvent *event);
146 
147  virtual void keyReleaseEvent(QKeyEvent *event);
148 
149  virtual void focusOutEvent(QFocusEvent *event);
150 
151  void wheelEvent(QWheelEvent * event);
152 
153 #ifdef SMOOTH_ZOOM
154  int _numScheduledScalings;
155 #endif
156 
157 public slots:
158 #ifdef SMOOTH_ZOOM
159  void scalingTime(qreal x);
160  void animFinished();
161 #endif
162 
163  void requestEntityAddition(QnstGraphicsEntity* entity, bool undo = false);
164 
165  void requestEntityRemotion(QnstGraphicsEntity* entity, bool undo = false,
166  bool rmRefs = true, bool notify = true);
167 
168  void requestEntityChange(QnstGraphicsEntity* entity);
169 
170  void requestEntityPreparation(QnstGraphicsEntity* entity,
171  QMap<QString, QString> properties);
172 
173  void requestEntitySelection(QnstGraphicsEntity* entity);
174 
175  void requestBindParamAdjust(QString uid, QString parent,
176  QMap<QString, QString> properties);
177 
178  void updateBindParams(QString bindUID, QMap<QString, QString> params,
179  QMap<QString, QString> name_uids);
180 
181  void clearAllData();
182 
183  void markError(QString uid, QString msg);
184 
185  void clearValidationErrors();
186 
187  void adjustAll();
188 
189 private:
190  void addImportBase(const QString &uid,
191  const QMap<QString, QString> &properties);
192 
193  void changeImportBase(const QString &uid,
194  const QMap<QString, QString> &properties);
195 
196  void adjustEntity(QnstGraphicsEntity *entity);
197 
198  void adjustContext(QnstGraphicsContext* entity);
199 
200  void adjustMedia(QnstGraphicsMedia* entity);
201 
202  void adjustPort(QnstGraphicsPort* entity);
203 
204  void adjustMapping(QnstGraphicsMapping* entity);
205 
206  void changeLink(QnstGraphicsLink* entity,
207  const QMap<QString, QString> &properties);
208 
209  void adjustLink(QnstGraphicsLink* entity);
210 
211  void adjustBind(QnstGraphicsBind* entity);
212 
213  void addConnector(const QString &uid,
214  const QMap<QString, QString> &properties);
215 
216  void changeConnector(QnstConnector* entity,
217  const QMap<QString, QString> &properties);
218 
219  void addCondition(const QString &uid,
220  const QMap<QString, QString> &properties);
221 
222  void changeCondition(const QString &condition,
223  const QMap<QString, QString> &properties);
224 
225  void addAction(const QString &uid,
226  const QMap<QString, QString> &properties);
227 
228  void changeAction(const QString &uid,
229  const QMap<QString, QString> &properties);
230 
231  void adjustConnector(QnstConnector* entity);
232 
233  void changeBindParam(const QString &uid,
234  const QMap<QString, QString> &properties);
235 
236  void addConnectorParam(const QString &uid,
237  const QString &parent,
238  const QMap<QString, QString> &properties);
239 
240  void changeConnectorParam(const QString &uid,
241  const QMap<QString, QString> &properties);
242 
243  void performCopy(QnstGraphicsEntity* entity, QnstGraphicsEntity* parent);
244 
245  void performPaste(QnstGraphicsEntity* copy, QnstGraphicsEntity* parent,
246  bool makeRefer = false, bool keepOriginalPos = false);
247 
248  void performReference(QnstGraphicsEntity* entity,
249  QnstGraphicsEntity* referred);
250 
251  void createObjects();
252 
253  void createConnection();
254 
255  void readImportBase(const QString &uid, QDomElement e, const QString &alias);
256 
257  void readConnector(QDomElement e, QnstConnector* conn);
258 
259  void addNodetoNodeEdge(QnstGraphicsEntity* entitya,
260  QnstGraphicsEntity* entityb);
261 
262  void addNodetoInterfaceEdge(QnstGraphicsEntity* entitya,
263  QnstGraphicsEntity* entityb);
264 
265  void addInterfacetoNodeEdge(QnstGraphicsEntity* entitya,
266  QnstGraphicsEntity* entityb);
267 
268  void addInterfacetoNodeLink(QnstGraphicsEntity* entitya,
269  QnstGraphicsEntity* entityb);
270 
271  void addInterfacetoInterfaceEdge(QnstGraphicsEntity* entitya,
272  QnstGraphicsEntity* entityb);
273 
274  void adjustAngles(QnstGraphicsEdge* edge);
275 
276  void collapseCompositions(QDomElement element, QDomElement parent);
277 
278  QString createNewConnector(QString condition, QString action);
279 
280  void createReference(QnstGraphicsEntity* entitya,
281  QnstGraphicsEntity* entityb);
282 
283  void createMapping(QnstGraphicsEntity* entitya,
284  QnstGraphicsEntity* entityb);
285 
286  QnstGraphicsLink* createLink(QnstGraphicsEntity* entitya,
287  QnstGraphicsEntity* entityb,
288  QString connName);
289 
290  void createActionWithDialog(QnstGraphicsEntity* entitya,
291  QnstGraphicsEntity* entityb);
292 
293  void createConditionWithDialog(QnstGraphicsEntity* entitya,
294  QnstGraphicsEntity* entityb);
295 
296  void createLinkWithDialog(QnstGraphicsEntity* entitya,
297  QnstGraphicsEntity* entityb);
298 
299  void createNoGraphicalLink(QnstGraphicsEntity* entitya,
300  QnstGraphicsEntity* entityb,
301  QnstGraphicsLink* aggregator,
302  QnstGraphicsBind* condition,
303  QnstGraphicsBind* actionDialog,
304  QString connector);
305 
306  QnstGraphicsBind* createBind(QnstGraphicsLink* link,
307  QnstGraphicsEntity* target,
308  QString condition,
309  QString action,
310  bool notifyCreation = true);
311 
312  void removeEdgesOfEntity (QnstGraphicsEntityWithEdges *entity, bool notify=true);
313 
314  void removeEdge (QnstGraphicsEdge *edge, bool notify=true);
315 
316  void traceRefers();
317 
318  void traceEntities();
319 
320  void traceConnectors();
321  void traceConnectors2();
322 
323  void deletePendingEntities();
324 
325  QnstConnector* getConnectorByRoleUid(QString uid);
326 
327  bool modified;
328 
329  bool linking;
330 
331  int zoomStep;
332 
333  bool hasCutted;
334 
335  QAction* undoAct;
336 
337  QAction* redoAct;
338 
339  QnstScene* scene;
340 
341  QnstViewLink* link;
342 
343  QnstGraphicsLinkDialog* linkDialog;
344 
345  QnstGraphicsConditionDialog* conditionDialog;
346 
347  QnstGraphicsActionDialog* actionDialog;
348 
349  QnstGraphicsEntity* selected;
350 
351  QnstGraphicsEntity* clipboard;
352 
353  QSet<QString> linkWriterAux;
354 
355  QMap<QString, QnstGraphicsLink*> links;
356 
357  QMap<QString, QnstGraphicsBind*> binds;
358 
359  QMap<QString, QString> refers;
360 
361  QMap<QString, QString> importBases; // importBaseUid - ConnUid
362 
363  QMap<QString, QString> bindParamUIDToBindUID;
364 
365  QMap<QString, QnstConnector*> connectors2; // uid - conn
366 
367  QMap<QString, QnstConnector*> connectors; // id - conn
368 
369  QVector<QnstGraphicsEntity*> toDelete;
370 
371  QUndoStack history;
372 
373  QnstGraphicsEntity* lastLinkMouseOver;
374 
375  std::map < Qnst::EntityType, int > entityCounter;
376 
377  static std::map <Qnst::EntityType, QString> mediaTypeToXMLStr;
378 };
379 
380 #endif // QNSTVIEW_H