ImGraph
 All Classes Functions Variables Enumerations Pages
VertexRepresentation.h
1 #ifndef _VERTEXREPRESENTATION_HEADER_
2 #define _VERTEXREPRESENTATION_HEADER_
3 
4 #ifdef _WIN32
5 #pragma warning(disable:4503)
6 #pragma warning(push)
7 #pragma warning(disable:4996 4251 4275 4244 4800 4503)
8 #endif
9 #include <QGraphicsView>
10 #include <QResizeEvent>
11 #include <QDialog >
12 #include <QPainter>
13 #include <QRect>
14 #include <QString>
15 #include <QDialog>
16 #include <QLabel>
17 #include <QWidget>
18 #include <QLayout>
19 #include <QMainWindow>
20 #include <QComboBox>
21 #include <QDial>
22 #include <QCheckBox>
23 #include <QPainterPath>
24 #include <QGroupBox>
25 
26 #include <boost/bimap.hpp>
27 
28 #ifdef _WIN32
29 #pragma warning(pop)
30 #endif
31 
32 #include "Block.h"
33 #include "ImagePreview.h"
34 
35 #include <map>
36 #include "Window.h"
37 #include "Configuration.h"
38 #include "Connectors.h"
39 
40 namespace charliesoft
41 {
42  class GroupParamRepresentation;
43 
44  class MainVertexBlock : public QWidget
45  {
46  Q_OBJECT;
47  public:
48  enum MouseState
49  {
50  MouseOut,
51  MouseHorResize,
52  MouseVerResize,
53  MouseDiagResize,
54  MouseDragOpen,
55  MouseDragClose,
56  MouseCreateLink,
57  MouseIn
58  };
59  public:
61 
62  MouseState getState() const { return _state; };
63  void setState(MouseState newState) { _state = newState; };
64 
65  void updateMouseState(const QPoint &pos);
66  protected:
67 
68  virtual void mouseMoveEvent(QMouseEvent *);
69  virtual void paintEvent(QPaintEvent *);
70 
71  virtual void enterEvent(QEvent *);
72  virtual void leaveEvent(QEvent *);
73 
74  GroupParamRepresentation* _parent;
75  MouseState _state;
76  };
77 
78 
79  class GroupParamRepresentation :public QWidget
80  {
81  Q_OBJECT;
82  protected:
83 
84  LinkConnexionRepresentation* _previewLink;
85  QWidget* _preview;
86 
87  MainVertexBlock* _blockRepresentation;
88  QWidget* _conditionsRepresentation;
89  QFrame* _lineTitle;
90  QLabel* _vertexTitle;
91  QLabel* _conditionTitle;
92  QLabel* _conditionsValues;
93 
94  bool _isMoving;
95  bool _hasDynamicParams;
96  QPoint startClick_;
97  LinkConnexionRepresentation* _paramActiv;
98  int heightOfConditions;
99 
100  QPoint _sizeIncrement;
101 
102  std::map<BlockLink, LinkPath*> _links;
103  std::vector< std::pair<ConditionOfRendering*, ConditionLinkRepresentation*> > _linksConditions;
104  std::vector<LinkConnexionRepresentation*> _listOfInputChilds;
105  std::map<std::string, LinkConnexionRepresentation*> _listOfInputSubParams;
106  std::vector<LinkConnexionRepresentation*> _listOfOutputChilds;
107  std::vector<LinkConnexionRepresentation*> _listOfSubParams;
108  std::vector<ConditionOfRendering> _conditions;
109 
110  static std::vector<GroupParamRepresentation*> _selectedBlock;
111  public:
112  GroupParamRepresentation(std::string title);
114 
115  bool hasDynamicParams() const { return _hasDynamicParams; };
116 
117  virtual LinkConnexionRepresentation* addNewInputParam(ParamDefinition def);
118  virtual LinkConnexionRepresentation* addNewOutputParam(ParamDefinition def);
119 
120  void setParamActiv(LinkConnexionRepresentation*);
121  bool isDragging() const {
122  return _blockRepresentation->getState() == MainVertexBlock::MouseDragOpen ||
123  _blockRepresentation->getState() == MainVertexBlock::MouseDragClose;
124  };
125 
126  std::map<BlockLink, LinkPath*> getLinks() const { return _links; }
127 
128  void addLink(BlockLink l, LinkPath* p){
129  _links[l] = p;
130  };
131  void removeLink(BlockLink l);
132 
133  void changeStyleProperty(const char* propertyName, QVariant val);
134  void setSelected(bool isSelected);
135 
136  static void resetSelection();
137  static std::vector<GroupParamRepresentation*> getSelection(){
138  return _selectedBlock;
139  };
140 
141  void setPreview(LinkConnexionRepresentation* paramSelected, bool force = false);
142 
143  LinkConnexionRepresentation* getParamRep(std::string paramName, bool input);
144  std::vector<LinkConnexionRepresentation*>& getListOfInputChilds() { return _listOfInputChilds; }
145  std::map<std::string, LinkConnexionRepresentation*>& getListOfSubParams() { return _listOfInputSubParams; }
146  std::vector<LinkConnexionRepresentation*>& getListOfOutputChilds() { return _listOfOutputChilds; }
147  protected:
148  ConditionLinkRepresentation* getCondition(ConditionOfRendering*, bool isLeft);
149  bool updatePreview(ParamValue* val);
150 
151  virtual void moveDelta(QPoint delta);
152  virtual void updatePosition(){};
153  virtual void mousePressEvent(QMouseEvent *);
154  virtual void mouseReleaseEvent(QMouseEvent *);
155  virtual void mouseDoubleClickEvent(QMouseEvent *);
156  virtual void mouseMoveEvent(QMouseEvent *);
157  virtual void enterEvent(QEvent *);
158  virtual void leaveEvent(QEvent *);
159 
160  public slots:
161  virtual void reshape();
162 
163  signals:
164  void updateProp(GroupParamRepresentation*);
165  };
166 
168  {
169  Q_OBJECT;
170  Block* _model;
171 
172  public:
173  VertexRepresentation(Block* model);
175 
176  Block* getModel() const { return _model; }
177 
178 
179  virtual LinkConnexionRepresentation* addNewInputParam(ParamDefinition* def);
180  virtual LinkConnexionRepresentation* addNewOutputParam(ParamDefinition* def);
181  protected:
182  virtual void enterEvent(QEvent *);
183  void createListParamsFromModel();
184  virtual void updatePosition();
185  virtual void moveDelta(QPoint delta);
186  virtual void mouseDoubleClickEvent(QMouseEvent *);
187 
188  public slots:
189  virtual void reshape();
190  virtual void paramUpdated();
191  };
192 
193 }
194 
195 
196 #endif
Definition: Block.h:163
Definition: VertexRepresentation.h:79
Definition: Block.h:108
Definition: Block.h:197
Definition: VertexRepresentation.h:167
Definition: VertexRepresentation.h:44
Definition: ParamValue.h:52