]> Creatis software - cpPlugins.git/blobdiff - lib/cpBaseQtApplication/Pipeline/EventFilter.cxx
yet another refactoring
[cpPlugins.git] / lib / cpBaseQtApplication / Pipeline / EventFilter.cxx
diff --git a/lib/cpBaseQtApplication/Pipeline/EventFilter.cxx b/lib/cpBaseQtApplication/Pipeline/EventFilter.cxx
new file mode 100644 (file)
index 0000000..5149c60
--- /dev/null
@@ -0,0 +1,227 @@
+#include <cpBaseQtApplication/Pipeline/EventFilter.h>\r
+#include <cpBaseQtApplication/Pipeline/Canvas.h>\r
+\r
+#include <QGraphicsScene>\r
+#include <QEvent>\r
+#include <QGraphicsItem>\r
+#include <QGraphicsSceneContextMenuEvent>\r
+#include <QGraphicsSceneDragDropEvent>\r
+#include <QGraphicsSceneHelpEvent>\r
+#include <QGraphicsSceneHoverEvent>\r
+#include <QGraphicsSceneMouseEvent>\r
+#include <QGraphicsSceneMoveEvent>\r
+#include <QGraphicsSceneResizeEvent>\r
+#include <QGraphicsSceneWheelEvent>\r
+#include <QGraphicsView>\r
+#include <QInputDialog>\r
+#include <QMessageBox>\r
+\r
+// -------------------------------------------------------------------------\r
+#define cpBaseQtApplicationPipelineEventFilterCbckSWITCH( E, e )        \\r
+  case QEvent::GraphicsScene##E:                                        \\r
+  {                                                                     \\r
+    QGraphicsScene##E##Event* evt =                                     \\r
+      dynamic_cast< QGraphicsScene##E##Event* >( e );                   \\r
+    if( evt != NULL )                                                   \\r
+      this->_##E##_cbk( evt );                                          \\r
+  }                                                                     \\r
+  break;\r
+\r
+// -------------------------------------------------------------------------\r
+#define cpBaseQtApplicationPipelineEventFilterCallbackCODE( E )      \\r
+  void cpBaseQtApplication::Pipeline::EventFilter::                  \\r
+  _##E##_cbk( QGraphicsScene##E##Event* evt )\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplication::Pipeline::EventFilter::\r
+EventFilter( QObject* parent )\r
+  : Superclass( parent ),\r
+    m_Scene( NULL ),\r
+    m_Canvas( NULL )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplication::Pipeline::EventFilter::\r
+~EventFilter( )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplication::Pipeline::Canvas*\r
+cpBaseQtApplication::Pipeline::EventFilter::\r
+canvas( )\r
+{\r
+  return( this->m_Canvas );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+const cpBaseQtApplication::Pipeline::Canvas*\r
+cpBaseQtApplication::Pipeline::EventFilter::\r
+canvas( ) const\r
+{\r
+  return( this->m_Canvas );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::EventFilter::\r
+setCanvas( cpBaseQtApplication::Pipeline::Canvas* c )\r
+{\r
+  this->m_Canvas = c;\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void cpBaseQtApplication::Pipeline::EventFilter::\r
+install( QGraphicsScene* s )\r
+{\r
+  s->installEventFilter( this );\r
+  this->m_Scene = s;\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+bool cpBaseQtApplication::Pipeline::EventFilter::\r
+eventFilter( QObject* o, QEvent* e )\r
+{\r
+  // Event type\r
+  switch( int( e->type( ) ) )\r
+  {\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( ContextMenu, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( DragEnter, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( DragLeave, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( DragMove, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Drop, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Help, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( HoverEnter, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( HoverLeave, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( HoverMove, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( MouseDoubleClick, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( MouseMove, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( MousePress, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( MouseRelease, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Move, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Resize, e );\r
+    cpBaseQtApplicationPipelineEventFilterCbckSWITCH( Wheel, e );\r
+  default:\r
+    break;\r
+  } // hctiws\r
+  return( this->Superclass::eventFilter( o, e ) );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+QGraphicsItem* cpBaseQtApplication::Pipeline::EventFilter::\r
+itemAt( const QPointF& pos )\r
+{\r
+  QList< QGraphicsItem* > items =\r
+    this->m_Scene->items( QRectF( pos - QPointF( 1, 1 ), QSize( 3, 3 ) ) );\r
+  QGraphicsItem* ret = NULL;\r
+  foreach( QGraphicsItem* item, items )\r
+    if( item->type( ) > QGraphicsItem::UserType )\r
+      ret = item;\r
+  return( ret );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( ContextMenu )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragEnter )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragLeave )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( DragMove )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( Drop )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( Help )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverEnter )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverLeave )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( HoverMove )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseDoubleClick )\r
+{\r
+  // Get clicked item\r
+  QGraphicsItem* item = this->itemAt( evt->scenePos( ) );\r
+  if( item == NULL )\r
+    return;\r
+\r
+  if( evt->button( ) == Qt::LeftButton )\r
+  {\r
+    if( evt->modifiers( ) == Qt::NoModifier )\r
+      this->m_Canvas->rename( item );\r
+    else if( evt->modifiers( ) == Qt::ControlModifier )\r
+      this->m_Canvas->exposePort( item );\r
+\r
+  } // fi\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseMove )\r
+{\r
+  this->m_Canvas->moveConnection( evt->scenePos( ) );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( MousePress )\r
+{\r
+  switch( evt->button( ) )\r
+  {\r
+  case Qt::LeftButton: this->m_Canvas->grab( evt->scenePos( ) ); break;\r
+  default: break;\r
+  } // hctiws\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( MouseRelease )\r
+{\r
+  switch( evt->button( ) )\r
+  {\r
+  case Qt::LeftButton: this->m_Canvas->release( evt->scenePos( ) ); break;\r
+  default: break;\r
+  } // hctiws\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( Move )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( Resize )\r
+{\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+cpBaseQtApplicationPipelineEventFilterCallbackCODE( Wheel )\r
+{\r
+}\r
+\r
+// eof - $RCSfile$\r