]> Creatis software - cpPlugins.git/blob - appli/cpPipelineEditor/QNodesEditor.h
d148bbe82aa5497a0f3fa1d5dfe19c324cd77919
[cpPlugins.git] / appli / cpPipelineEditor / QNodesEditor.h
1 /* Copyright (c) 2012, STANISLAW ADASZEWSKI\r
2    All rights reserved.\r
3 \r
4    Redistribution and use in source and binary forms, with or without\r
5    modification, are permitted provided that the following conditions are met:\r
6    * Redistributions of source code must retain the above copyright\r
7    notice, this list of conditions and the following disclaimer.\r
8    * Redistributions in binary form must reproduce the above copyright\r
9    notice, this list of conditions and the following disclaimer in the\r
10    documentation and/or other materials provided with the distribution.\r
11    * Neither the name of STANISLAW ADASZEWSKI nor the\r
12    names of its contributors may be used to endorse or promote products\r
13    derived from this software without specific prior written permission.\r
14 \r
15    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND\r
16    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\r
17    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\r
18    DISCLAIMED. IN NO EVENT SHALL STANISLAW ADASZEWSKI BE LIABLE FOR ANY\r
19    DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\r
20    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\r
21    LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\r
22    ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
23    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\r
24    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
25 */\r
26 \r
27 #ifndef __PIPELINEEDITOR__QNODESEDITOR__H__\r
28 #define __PIPELINEEDITOR__QNODESEDITOR__H__\r
29 \r
30 #include <QObject>\r
31 #include <QPointF>\r
32 #include <cpExtensions/DataStructures/Graph.h>\r
33 #include <cpPlugins/Interface/Workspace.h>\r
34 \r
35 class QGraphicsScene;\r
36 class QGraphicsSceneMouseEvent;\r
37 class QGraphicsItem;\r
38 class QGraphicsSceneContextMenuEvent;\r
39 class QGraphicsSceneDragDropEvent;\r
40 class QGraphicsSceneHelpEvent;\r
41 class QGraphicsSceneHoverEvent;\r
42 class QGraphicsSceneMouseEvent;\r
43 class QGraphicsSceneMoveEvent;\r
44 class QGraphicsSceneResizeEvent;\r
45 class QGraphicsSceneWheelEvent;\r
46 \r
47 // -------------------------------------------------------------------------\r
48 #define PipelineEditor_QNodesEditor_Callback_DCL( E )   \\r
49   void _##E##_cbk( Q##E##Event* e );\r
50 \r
51 namespace PipelineEditor\r
52 {\r
53   class QNEConnection;\r
54   class QNEBlock;\r
55 \r
56   /**\r
57    */\r
58   class QNodesEditor\r
59     : public QObject\r
60   {\r
61     Q_OBJECT;\r
62 \r
63   public:\r
64     typedef QNodesEditor Self;\r
65     typedef QObject      Superclass;\r
66 \r
67     typedef cpPlugins::Interface::Workspace TWorkspace;\r
68     typedef TWorkspace::TFilter             TFilter;\r
69     typedef\r
70       cpExtensions::DataStructures::\r
71       Graph< QNEBlock*, QNEConnection*, std::string > TGraph;\r
72 \r
73   public:\r
74     explicit QNodesEditor( QObject* parent = 0 );\r
75     virtual ~QNodesEditor( );\r
76 \r
77     TWorkspace* workspace( );\r
78     const TWorkspace* workspace( ) const;\r
79     void setWorkspace( TWorkspace* ws );\r
80 \r
81     std::string createFilter(\r
82       const std::string& filter,\r
83       const QPointF& pnt = QPointF( qreal( 0 ), qreal( 0 ) )\r
84       );\r
85 \r
86     void install( QGraphicsScene* s );\r
87     bool eventFilter( QObject* o, QEvent* e );\r
88 \r
89   private:\r
90     QGraphicsItem* itemAt( const QPointF& pos );\r
91 \r
92     inline void _CreateBlock( TFilter* f, const QPointF& pnt );\r
93 \r
94   protected:\r
95     typedef QGraphicsSceneDragDropEvent QGraphicsSceneDragEnterEvent;\r
96     typedef QGraphicsSceneDragDropEvent QGraphicsSceneDragLeaveEvent;\r
97     typedef QGraphicsSceneDragDropEvent QGraphicsSceneDragMoveEvent;\r
98     typedef QGraphicsSceneDragDropEvent QGraphicsSceneDropEvent;\r
99     typedef QGraphicsSceneHoverEvent    QGraphicsSceneHoverEnterEvent;\r
100     typedef QGraphicsSceneHoverEvent    QGraphicsSceneHoverMoveEvent;\r
101     typedef QGraphicsSceneHoverEvent    QGraphicsSceneHoverLeaveEvent;\r
102     typedef QGraphicsSceneMouseEvent    QGraphicsSceneMouseDoubleClickEvent;\r
103     typedef QGraphicsSceneMouseEvent    QGraphicsSceneMouseMoveEvent;\r
104     typedef QGraphicsSceneMouseEvent    QGraphicsSceneMousePressEvent;\r
105     typedef QGraphicsSceneMouseEvent    QGraphicsSceneMouseReleaseEvent;\r
106 \r
107     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneContextMenu );\r
108     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneDragEnter );\r
109     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneDragLeave );\r
110     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneDragMove );\r
111     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneDrop );\r
112     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneHelp );\r
113     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneHoverEnter );\r
114     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneHoverLeave );\r
115     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneHoverMove );\r
116     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneMouseDoubleClick );\r
117     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneMouseMove );\r
118     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneMousePress );\r
119     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneMouseRelease );\r
120     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneMove );\r
121     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneResize );\r
122     PipelineEditor_QNodesEditor_Callback_DCL( GraphicsSceneWheel );\r
123 \r
124   private:\r
125     QGraphicsScene* m_Scene;\r
126     QNEConnection* m_Conn;\r
127 \r
128     TWorkspace* m_Workspace;\r
129     TGraph::Pointer m_Graph;\r
130   };\r
131 \r
132 } // ecapseman\r
133 \r
134 #endif // __PIPELINEEDITOR__QNODESEDITOR__H__\r
135 \r
136 // eof - $RCSfile$\r
137 \r
138       /* TODO\r
139          case QEvent::GraphicsSceneContextMenu:\r
140          QGraphicsSceneContextMenuEvent* evt =\r
141          \r
142          case QEvent::GraphicsSceneDragEnter:\r
143          case QEvent::GraphicsSceneDragLeave:\r
144          case QEvent::GraphicsSceneDragMove:\r
145          case QEvent::GraphicsSceneDrop:\r
146          case QEvent::GraphicsSceneHelp:\r
147          case QEvent::GraphicsSceneHoverEnter:\r
148          case QEvent::GraphicsSceneHoverLeave:\r
149          case QEvent::GraphicsSceneHoverMove:\r
150          case QEvent::GraphicsSceneMouseDoubleClick:\r
151          case QEvent::GraphicsSceneMouseMove:\r
152          case QEvent::GraphicsSceneMousePress:\r
153          case QEvent::GraphicsSceneMouseRelease:\r
154          case QEvent::GraphicsSceneMove:\r
155          case QEvent::GraphicsSceneResize:\r
156          case QEvent::GraphicsSceneWheel:\r
157       */\r
158     \r