]> Creatis software - cpPlugins.git/blob - lib/cpBaseQtApplication/Pipeline/EventFilter.cxx
yet another refactoring
[cpPlugins.git] / lib / cpBaseQtApplication / Pipeline / EventFilter.cxx
1 #include <cpBaseQtApplication/Pipeline/EventFilter.h>\r
2 #include <cpBaseQtApplication/Pipeline/Canvas.h>\r
3 \r
4 #include <QGraphicsScene>\r
5 #include <QEvent>\r
6 #include <QGraphicsItem>\r
7 #include <QGraphicsSceneContextMenuEvent>\r
8 #include <QGraphicsSceneDragDropEvent>\r
9 #include <QGraphicsSceneHelpEvent>\r
10 #include <QGraphicsSceneHoverEvent>\r
11 #include <QGraphicsSceneMouseEvent>\r
12 #include <QGraphicsSceneMoveEvent>\r
13 #include <QGraphicsSceneResizeEvent>\r
14 #include <QGraphicsSceneWheelEvent>\r
15 #include <QGraphicsView>\r
16 #include <QInputDialog>\r
17 #include <QMessageBox>\r
18 \r
19 // -------------------------------------------------------------------------\r
20 #define cpBaseQtApplicationPipelineEventFilterCbckSWITCH( E, e )        \\r
21   case QEvent::GraphicsScene##E:                                        \\r
22   {                                                                     \\r
23     QGraphicsScene##E##Event* evt =                                     \\r
24       dynamic_cast< QGraphicsScene##E##Event* >( e );                   \\r
25     if( evt != NULL )                                                   \\r
26       this->_##E##_cbk( evt );                                          \\r
27   }                                                                     \\r
28   break;\r
29 \r
30 // -------------------------------------------------------------------------\r
31 #define cpBaseQtApplicationPipelineEventFilterCallbackCODE( E )      \\r
32   void cpBaseQtApplication::Pipeline::EventFilter::                  \\r
33   _##E##_cbk( QGraphicsScene##E##Event* evt )\r
34 \r
35 // -------------------------------------------------------------------------\r
36 cpBaseQtApplication::Pipeline::EventFilter::\r
37 EventFilter( QObject* parent )\r
38   : Superclass( parent ),\r
39     m_Scene( NULL ),\r
40     m_Canvas( NULL )\r
41 {\r
42 }\r
43 \r
44 // -------------------------------------------------------------------------\r
45 cpBaseQtApplication::Pipeline::EventFilter::\r
46 ~EventFilter( )\r
47 {\r
48 }\r
49 \r
50 // -------------------------------------------------------------------------\r
51 cpBaseQtApplication::Pipeline::Canvas*\r
52 cpBaseQtApplication::Pipeline::EventFilter::\r
53 canvas( )\r
54 {\r
55   return( this->m_Canvas );\r
56 }\r
57 \r
58 // -------------------------------------------------------------------------\r
59 const cpBaseQtApplication::Pipeline::Canvas*\r
60 cpBaseQtApplication::Pipeline::EventFilter::\r
61 canvas( ) const\r
62 {\r
63   return( this->m_Canvas );\r
64 }\r
65 \r
66 // -------------------------------------------------------------------------\r
67 void cpBaseQtApplication::Pipeline::EventFilter::\r
68 setCanvas( cpBaseQtApplication::Pipeline::Canvas* c )\r
69 {\r
70   this->m_Canvas = c;\r
71 }\r
72 \r
73 // -------------------------------------------------------------------------\r
74 void cpBaseQtApplication::Pipeline::EventFilter::\r
75 install( QGraphicsScene* s )\r
76 {\r
77   s->installEventFilter( this );\r
78   this->m_Scene = s;\r
79 }\r
80 \r
81 // -------------------------------------------------------------------------\r
82 bool cpBaseQtApplication::Pipeline::EventFilter::\r
83 eventFilter( QObject* o, QEvent* e )\r
84 {\r
85   // Event type\r
86   switch( int( e->type( ) ) )\r
87   {\r
88     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( ContextMenu, e );\r
89     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( DragEnter, e );\r
90     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( DragLeave, e );\r
91     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( DragMove, e );\r
92     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Drop, e );\r
93     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Help, e );\r
94     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( HoverEnter, e );\r
95     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( HoverLeave, e );\r
96     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( HoverMove, e );\r
97     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( MouseDoubleClick, e );\r
98     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( MouseMove, e );\r
99     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( MousePress, e );\r
100     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( MouseRelease, e );\r
101     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Move, e );\r
102     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Resize, e );\r
103     cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Wheel, e );\r
104   default:\r
105     break;\r
106   } // hctiws\r
107   return( this->Superclass::eventFilter( o, e ) );\r
108 }\r
109 \r
110 // -------------------------------------------------------------------------\r
111 QGraphicsItem* cpBaseQtApplication::Pipeline::EventFilter::\r
112 itemAt( const QPointF& pos )\r
113 {\r
114   QList< QGraphicsItem* > items =\r
115     this->m_Scene->items( QRectF( pos - QPointF( 1, 1 ), QSize( 3, 3 ) ) );\r
116   QGraphicsItem* ret = NULL;\r
117   foreach( QGraphicsItem* item, items )\r
118     if( item->type( ) > QGraphicsItem::UserType )\r
119       ret = item;\r
120   return( ret );\r
121 }\r
122 \r
123 // -------------------------------------------------------------------------\r
124 cpBaseQtApplicationPipelineEventFilterCallbackCODE( ContextMenu )\r
125 {\r
126 }\r
127 \r
128 // -------------------------------------------------------------------------\r
129 cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragEnter )\r
130 {\r
131 }\r
132 \r
133 // -------------------------------------------------------------------------\r
134 cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragLeave )\r
135 {\r
136 }\r
137 \r
138 // -------------------------------------------------------------------------\r
139 cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragMove )\r
140 {\r
141 }\r
142 \r
143 // -------------------------------------------------------------------------\r
144 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Drop )\r
145 {\r
146 }\r
147 \r
148 // -------------------------------------------------------------------------\r
149 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Help )\r
150 {\r
151 }\r
152 \r
153 // -------------------------------------------------------------------------\r
154 cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverEnter )\r
155 {\r
156 }\r
157 \r
158 // -------------------------------------------------------------------------\r
159 cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverLeave )\r
160 {\r
161 }\r
162 \r
163 // -------------------------------------------------------------------------\r
164 cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverMove )\r
165 {\r
166 }\r
167 \r
168 // -------------------------------------------------------------------------\r
169 cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseDoubleClick )\r
170 {\r
171   // Get clicked item\r
172   QGraphicsItem* item = this->itemAt( evt->scenePos( ) );\r
173   if( item == NULL )\r
174     return;\r
175 \r
176   if( evt->button( ) == Qt::LeftButton )\r
177   {\r
178     if( evt->modifiers( ) == Qt::NoModifier )\r
179       this->m_Canvas->rename( item );\r
180     else if( evt->modifiers( ) == Qt::ControlModifier )\r
181       this->m_Canvas->exposePort( item );\r
182 \r
183   } // fi\r
184 }\r
185 \r
186 // -------------------------------------------------------------------------\r
187 cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseMove )\r
188 {\r
189   this->m_Canvas->moveConnection( evt->scenePos( ) );\r
190 }\r
191 \r
192 // -------------------------------------------------------------------------\r
193 cpBaseQtApplicationPipelineEventFilterCallbackCODE( MousePress )\r
194 {\r
195   switch( evt->button( ) )\r
196   {\r
197   case Qt::LeftButton: this->m_Canvas->grab( evt->scenePos( ) ); break;\r
198   default: break;\r
199   } // hctiws\r
200 }\r
201 \r
202 // -------------------------------------------------------------------------\r
203 cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseRelease )\r
204 {\r
205   switch( evt->button( ) )\r
206   {\r
207   case Qt::LeftButton: this->m_Canvas->release( evt->scenePos( ) ); break;\r
208   default: break;\r
209   } // hctiws\r
210 }\r
211 \r
212 // -------------------------------------------------------------------------\r
213 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Move )\r
214 {\r
215 }\r
216 \r
217 // -------------------------------------------------------------------------\r
218 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Resize )\r
219 {\r
220 }\r
221 \r
222 // -------------------------------------------------------------------------\r
223 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Wheel )\r
224 {\r
225 }\r
226 \r
227 // eof - $RCSfile$\r