ctkVTKObject.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /*=========================================================================
  2. Library: CTK
  3. Copyright (c) Kitware Inc.
  4. Licensed under the Apache License, Version 2.0 (the "License");
  5. you may not use this file except in compliance with the License.
  6. You may obtain a copy of the License at
  7. http://www.apache.org/licenses/LICENSE-2.0.txt
  8. Unless required by applicable law or agreed to in writing, software
  9. distributed under the License is distributed on an "AS IS" BASIS,
  10. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. See the License for the specific language governing permissions and
  12. limitations under the License.
  13. =========================================================================*/
  14. #ifndef __ctkVTKObject_h
  15. #define __ctkVTKObject_h
  16. // ctkVTK includes
  17. #include "ctkVTKObjectEventsObserver.h"
  18. /// \ingroup Visualization_VTK_Core
  19. /// @{
  20. //-----------------------------------------------------------------------------
  21. /// Define qvtkConnect()
  22. /// \sa qvtkConnect(), QVTK_OBJECT
  23. #define QVTK_OBJECT_ADD_CONNECTION_METHOD \
  24. /** \brief Connect a vtkObject event with a QObject slot.*/ \
  25. /** Utility function that calls addConnection() on ctkVTKObjectEventsObserver.*/\
  26. /** \sa ctkVTKObjectEventsObserver::addConnection(),*/ \
  27. /** qvtkReconnect(), qvtkDisconnect(), qvtkDisconnectAll(),*/ \
  28. /** qvtkIsConnected(), QVTK_OBJECT_ADD_CONNECTION_METHOD*/ \
  29. QString qvtkConnect(vtkObject* vtk_obj, unsigned long vtk_event, \
  30. const QObject* qt_obj, const char* qt_slot, \
  31. float priority = 0.0, \
  32. Qt::ConnectionType connectionType = Qt::AutoConnection)\
  33. { \
  34. return MyQVTK.addConnection(vtk_obj, vtk_event, \
  35. qt_obj, qt_slot, priority, connectionType);\
  36. }
  37. //-----------------------------------------------------------------------------
  38. /// Define qvtkReconnect()
  39. /// \sa qvtkReconnect(), QVTK_OBJECT
  40. #define QVTK_OBJECT_RECONNECT_METHOD \
  41. /** \brief Disconnect and reconnect a QObject slot with a new vtkObject event.*/ \
  42. /** Internally calls ctkVTKObjectEventsObserver::addConnection().*/ \
  43. /** The existing connection between \a old_vtk_obj and \a qt_obj*/ \
  44. /** for the event \a vtk_event and the slot \a qt_slot is disconnected.*/\
  45. /** And the \a vtk_obj is then connected using the same parameters.*/ \
  46. /** \sa ctkVTKObjectEventsObserver::addConnection(),*/ \
  47. /** qvtkReconnect(vtkObject*,unsigned long,const QObject*,const char*,float,*/\
  48. /** Qt::ConnectionType), qvtkConnect(), qvtkDisconnect(), */ \
  49. /** qvtkIsConnected(), QVTK_OBJECT_RECONNECT_METHOD*/ \
  50. QString qvtkReconnect(vtkObject* old_vtk_obj, vtkObject* vtk_obj, \
  51. unsigned long vtk_event, const QObject* qt_obj, \
  52. const char* qt_slot, float priority = 0.0, \
  53. Qt::ConnectionType connectionType = Qt::AutoConnection)\
  54. { \
  55. return MyQVTK.addConnection(old_vtk_obj, vtk_obj, vtk_event, \
  56. qt_obj, qt_slot, priority, connectionType);\
  57. }
  58. //-----------------------------------------------------------------------------
  59. /// Define qvtkReconnect()
  60. /// \sa qvtkReconnect(), QVTK_OBJECT
  61. #define QVTK_OBJECT_RECONNECT_METHOD_2 \
  62. /** \brief Disconnect and reconnect a new vtkObject event with a QObject slot.*/\
  63. /** Utility function that calls reconnection() on ctkVTKObjectEventsObserver.*/\
  64. /** Any existing connection between a vtkObject and \a qt_obj*/ \
  65. /** for the event \a vtk_event and the slot \a qt_slot is disconnected.*/\
  66. /** And the \a vtk_obj is then connected using the same parameters.*/ \
  67. /** \sa ctkVTKObjectEventsObserver::reconnection(),*/ \
  68. /** qvtkReconnect(vtkObject*,vtkObject*,unsigned long,const QObject*,*/ \
  69. /** const char*,float,Qt::ConnectionType), qvtkConnect(),*/ \
  70. /** qvtkDisconnect(), qvtkIsConnected(), QVTK_OBJECT_RECONNECT_METHOD_2*/\
  71. QString qvtkReconnect(vtkObject* vtk_obj, \
  72. unsigned long vtk_event, const QObject* qt_obj, \
  73. const char* qt_slot, float priority = 0.0, \
  74. Qt::ConnectionType connectionType = Qt::AutoConnection)\
  75. { \
  76. return MyQVTK.reconnection(vtk_obj, vtk_event, \
  77. qt_obj, qt_slot, priority, connectionType);\
  78. }
  79. //-----------------------------------------------------------------------------
  80. /// Define qvtkDisconnect()
  81. /// \sa qvtkDisconnect(), QVTK_OBJECT
  82. #define QVTK_OBJECT_REMOVE_CONNECTION_METHOD \
  83. /** \brief Disconnect a vtkObject event with a QObject slot.*/ \
  84. /** Utility function that calls removeConnection() on*/ \
  85. /** ctkVTKObjectEventsObserver.*/ \
  86. /** Remove any existing connection between \a vtk_obj and \a qt_obj that*/\
  87. /** match the \a vtk_event event and \a qt_slot slot.*/ \
  88. /** 0 (or vtkCommand::NoEvent for \a vtk_event) for any parameter is considered*/\
  89. /** as a wildcard, it makes the parameter criteria to be ignored*/ \
  90. /** (matches all connections).*/ \
  91. /** \sa ctkVTKObjectEventsObserver::removeConnection(),*/ \
  92. /** qvtkConnect(), qvtkReconnect(), qvtkDisconnectAll(),*/ \
  93. /** qvtkIsConnected(), QVTK_OBJECT_REMOVE_CONNECTION_METHOD*/ \
  94. int qvtkDisconnect(vtkObject* vtk_obj, unsigned long vtk_event, \
  95. const QObject* qt_obj, const char* qt_slot) \
  96. { \
  97. return MyQVTK.removeConnection(vtk_obj, vtk_event, \
  98. qt_obj, qt_slot); \
  99. }
  100. //-----------------------------------------------------------------------------
  101. /// Define qvtkDisconnectAll()
  102. /// \sa qvtkDisconnectAll(), QVTK_OBJECT
  103. #define QVTK_OBJECT_REMOVEALL_CONNECTION_METHOD \
  104. /** \brief Disconnect all created connections between vtkObjects and QObjects. */\
  105. /** Utility function that calls removeAllConnections() on */ \
  106. /** ctkVTKObjectEventsObserver. */ \
  107. /** \sa ctkVTKObjectEventsObserver::removeAllConnections(),*/ \
  108. /** qvtkConnect(), qvtkReconnect(), qvtkDisconnect() */ \
  109. /** qvtkIsConnected(), QVTK_OBJECT_REMOVEALL_CONNECTION_METHOD */ \
  110. int qvtkDisconnectAll() \
  111. { \
  112. return MyQVTK.removeAllConnections(); \
  113. }
  114. //-----------------------------------------------------------------------------
  115. /// Define qvtkIsConnected()
  116. /// \sa qvtkIsConnected(), QVTK_OBJECT
  117. #define QVTK_OBJECT_IS_CONNECTION_METHOD \
  118. /** \brief Check if a connection exists.*/ \
  119. /** Utility function that calls and returns containsConnection() from*/ \
  120. /** ctkVTKObjectEventsObserver.*/ \
  121. /** \sa ctkVTKObjectEventsObserver::containsConnection(),*/ \
  122. /** qvtkConnect(), qvtkReconnect(), qvtkDisconnect()*/ \
  123. /** qvtkDisconnectAll(), QVTK_OBJECT_IS_CONNECTION_METHOD*/ \
  124. bool qvtkIsConnected(vtkObject* vtk_obj = 0, \
  125. unsigned long vtk_event = vtkCommand::NoEvent, \
  126. const QObject* qt_obj = 0, \
  127. const char* qt_slot = 0) \
  128. { \
  129. return MyQVTK.containsConnection(vtk_obj, vtk_event, \
  130. qt_obj, qt_slot); \
  131. }
  132. //-----------------------------------------------------------------------------
  133. /// Define qvtkBlock(vtkObject* vtk_obj, unsigned long vtk_event,
  134. /// const QObject* qt_obj)
  135. /// \sa qvtkBlock(), QVTK_OBJECT
  136. #define QVTK_OBJECT_BLOCK_CONNECTION_METHOD \
  137. void qvtkBlock(vtkObject* vtk_obj, unsigned long vtk_event, \
  138. const QObject* qt_obj) \
  139. { \
  140. MyQVTK.blockConnection(true, vtk_obj, vtk_event, qt_obj); \
  141. }
  142. //-----------------------------------------------------------------------------
  143. /// Define qvtkBlock(const QString& id, bool blocked)
  144. /// \sa qvtkBlock(const QString& id, bool blocked), QVTK_OBJECT
  145. #define QVTK_OBJECT_BLOCK_CONNECTION_METHOD2 \
  146. void qvtkBlock(const QString& id, bool blocked) \
  147. { \
  148. MyQVTK.blockConnection(id, blocked); \
  149. }
  150. //-----------------------------------------------------------------------------
  151. /// Define qvtkBlockAll()
  152. /// \sa qvtkBlockAll(), QVTK_OBJECT
  153. #define QVTK_OBJECT_BLOCKALL_CONNECTION_METHOD \
  154. bool qvtkBlockAll() \
  155. { \
  156. return MyQVTK.blockAllConnections(true); \
  157. }
  158. //-----------------------------------------------------------------------------
  159. /// Define qvtkBlockAll()
  160. /// \sa qvtkBlockAll(), QVTK_OBJECT
  161. #define QVTK_OBJECT_BLOCKALL_CONNECTION_METHOD2 \
  162. bool qvtkBlockAll(bool block) \
  163. { \
  164. return MyQVTK.blockAllConnections(block); \
  165. }
  166. //-----------------------------------------------------------------------------
  167. /// Define qvtkUnblock()
  168. /// \sa qvtkUnblock(), QVTK_OBJECT
  169. #define QVTK_OBJECT_UNBLOCK_CONNECTION_METHOD \
  170. void qvtkUnblock(vtkObject* vtk_obj, unsigned long vtk_event, \
  171. const QObject* qt_obj) \
  172. { \
  173. MyQVTK.blockConnection(false, vtk_obj, vtk_event, qt_obj); \
  174. }
  175. //-----------------------------------------------------------------------------
  176. /// Define qvtkUnblockAll()
  177. /// \sa qvtkUnblockAll(), QVTK_OBJECT
  178. #define QVTK_OBJECT_UNBLOCKALL_CONNECTION_METHOD \
  179. bool qvtkUnblockAll() \
  180. { \
  181. return MyQVTK.blockAllConnections(false); \
  182. }
  183. //-----------------------------------------------------------------------------
  184. /// \brief Define VTK/Qt event/slot connection utility methods.
  185. /// It is a convenient macro that declares and defines utility methods for
  186. /// connecting vtkObjects with QObjects. It connects the vtkObject event
  187. /// mechanism with the QObject slot mechanism.
  188. /// Can be called in any QObject derived class declaration,typically after the
  189. /// Q_OBJECT macro.
  190. /// \sa ctkVTKObjectEventsObserver, qvtkConnect(),
  191. /// qvtkReconnect(),qvtkDisconnect(), qvtkDisconnectAll(), qvtkIsConnected(),
  192. /// QVTK_OBJECT_ADD_CONNECTION_METHOD, QVTK_OBJECT_RECONNECT_METHOD,
  193. /// QVTK_OBJECT_RECONNECT_METHOD_2, QVTK_OBJECT_REMOVE_CONNECTION_METHOD,
  194. /// QVTK_OBJECT_REMOVEALL_CONNECTION_METHOD, QVTK_OBJECT_IS_CONNECTION_METHOD,
  195. /// QVTK_OBJECT_BLOCK_CONNECTION_METHOD, QVTK_OBJECT_BLOCK_CONNECTION_METHOD2,
  196. /// QVTK_OBJECT_UNBLOCK_CONNECTION_METHOD,
  197. /// QVTK_OBJECT_BLOCKALL_CONNECTION_METHOD,
  198. /// QVTK_OBJECT_BLOCKALL_CONNECTION_METHOD2,
  199. /// QVTK_OBJECT_UNBLOCKALL_CONNECTION_METHOD
  200. #define QVTK_OBJECT \
  201. protected: \
  202. QVTK_OBJECT_ADD_CONNECTION_METHOD \
  203. QVTK_OBJECT_RECONNECT_METHOD \
  204. QVTK_OBJECT_RECONNECT_METHOD_2 \
  205. QVTK_OBJECT_REMOVE_CONNECTION_METHOD \
  206. QVTK_OBJECT_REMOVEALL_CONNECTION_METHOD \
  207. QVTK_OBJECT_IS_CONNECTION_METHOD \
  208. QVTK_OBJECT_BLOCK_CONNECTION_METHOD \
  209. QVTK_OBJECT_BLOCK_CONNECTION_METHOD2 \
  210. QVTK_OBJECT_UNBLOCK_CONNECTION_METHOD \
  211. QVTK_OBJECT_BLOCKALL_CONNECTION_METHOD \
  212. QVTK_OBJECT_BLOCKALL_CONNECTION_METHOD2 \
  213. QVTK_OBJECT_UNBLOCKALL_CONNECTION_METHOD \
  214. private: \
  215. ctkVTKObjectEventsObserver MyQVTK;
  216. /// @}
  217. #endif