1 #include <cpBaseQtApplication/Pipeline/EventFilter.h>
\r
2 #include <cpBaseQtApplication/Pipeline/Canvas.h>
\r
4 #include <QGraphicsScene>
\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
19 // -------------------------------------------------------------------------
\r
20 #define cpBaseQtApplicationPipelineEventFilterCbckSWITCH( E, e ) \
\r
21 case QEvent::GraphicsScene##E: \
\r
23 QGraphicsScene##E##Event* evt = \
\r
24 dynamic_cast< QGraphicsScene##E##Event* >( e ); \
\r
26 this->_##E##_cbk( evt ); \
\r
30 // -------------------------------------------------------------------------
\r
31 #define cpBaseQtApplicationPipelineEventFilterCallbackCODE( E ) \
\r
32 void cpBaseQtApplication::Pipeline::EventFilter:: \
\r
33 _##E##_cbk( QGraphicsScene##E##Event* evt )
\r
35 // -------------------------------------------------------------------------
\r
36 cpBaseQtApplication::Pipeline::EventFilter::
\r
37 EventFilter( QObject* parent )
\r
38 : Superclass( parent ),
\r
44 // -------------------------------------------------------------------------
\r
45 cpBaseQtApplication::Pipeline::EventFilter::
\r
50 // -------------------------------------------------------------------------
\r
51 cpBaseQtApplication::Pipeline::Canvas*
\r
52 cpBaseQtApplication::Pipeline::EventFilter::
\r
55 return( this->m_Canvas );
\r
58 // -------------------------------------------------------------------------
\r
59 const cpBaseQtApplication::Pipeline::Canvas*
\r
60 cpBaseQtApplication::Pipeline::EventFilter::
\r
63 return( this->m_Canvas );
\r
66 // -------------------------------------------------------------------------
\r
67 void cpBaseQtApplication::Pipeline::EventFilter::
\r
68 setCanvas( cpBaseQtApplication::Pipeline::Canvas* c )
\r
73 // -------------------------------------------------------------------------
\r
74 void cpBaseQtApplication::Pipeline::EventFilter::
\r
75 install( QGraphicsScene* s )
\r
77 s->installEventFilter( this );
\r
81 // -------------------------------------------------------------------------
\r
82 bool cpBaseQtApplication::Pipeline::EventFilter::
\r
83 eventFilter( QObject* o, QEvent* e )
\r
86 switch( int( e->type( ) ) )
\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
107 return( this->Superclass::eventFilter( o, e ) );
\r
110 // -------------------------------------------------------------------------
\r
111 QGraphicsItem* cpBaseQtApplication::Pipeline::EventFilter::
\r
112 itemAt( const QPointF& pos )
\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
123 // -------------------------------------------------------------------------
\r
124 cpBaseQtApplicationPipelineEventFilterCallbackCODE( ContextMenu )
\r
128 // -------------------------------------------------------------------------
\r
129 cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragEnter )
\r
133 // -------------------------------------------------------------------------
\r
134 cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragLeave )
\r
138 // -------------------------------------------------------------------------
\r
139 cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragMove )
\r
143 // -------------------------------------------------------------------------
\r
144 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Drop )
\r
148 // -------------------------------------------------------------------------
\r
149 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Help )
\r
153 // -------------------------------------------------------------------------
\r
154 cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverEnter )
\r
158 // -------------------------------------------------------------------------
\r
159 cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverLeave )
\r
163 // -------------------------------------------------------------------------
\r
164 cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverMove )
\r
168 // -------------------------------------------------------------------------
\r
169 cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseDoubleClick )
\r
171 // Get clicked item
\r
172 QGraphicsItem* item = this->itemAt( evt->scenePos( ) );
\r
176 if( evt->button( ) == Qt::LeftButton )
\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
186 // -------------------------------------------------------------------------
\r
187 cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseMove )
\r
189 this->m_Canvas->moveConnection( evt->scenePos( ) );
\r
192 // -------------------------------------------------------------------------
\r
193 cpBaseQtApplicationPipelineEventFilterCallbackCODE( MousePress )
\r
195 switch( evt->button( ) )
\r
197 case Qt::LeftButton: this->m_Canvas->grab( evt->scenePos( ) ); break;
\r
202 // -------------------------------------------------------------------------
\r
203 cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseRelease )
\r
205 switch( evt->button( ) )
\r
207 case Qt::LeftButton: this->m_Canvas->release( evt->scenePos( ) ); break;
\r
212 // -------------------------------------------------------------------------
\r
213 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Move )
\r
217 // -------------------------------------------------------------------------
\r
218 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Resize )
\r
222 // -------------------------------------------------------------------------
\r
223 cpBaseQtApplicationPipelineEventFilterCallbackCODE( Wheel )
\r