Explorar o código

Add ctkVTKObjectEventsObserver::containsConnection

to the public API
Julien Finet %!s(int64=14) %!d(string=hai) anos
pai
achega
7df0c59893

+ 12 - 1
Libs/Visualization/VTK/Core/ctkVTKObject.h

@@ -71,6 +71,17 @@ int qvtkDisconnectAll()                                                 \
 }
 
 //-----------------------------------------------------------------------------
+#define QVTK_OBJECT_IS_CONNECTION_METHOD                                \
+bool qvtkIsConnected(vtkObject* vtk_obj = 0,                            \
+                     unsigned long vtk_event = vtkCommand::NoEvent,     \
+                     const QObject* qt_obj = 0,                         \
+                     const char* qt_slot = 0)                           \
+{                                                                       \
+  return MyQVTK.containsConnection(vtk_obj, vtk_event,                  \
+                                   qt_obj, qt_slot);                    \
+}
+
+//-----------------------------------------------------------------------------
 #define QVTK_OBJECT_BLOCK_CONNECTION_METHOD                              \
 void qvtkBlock(vtkObject* vtk_obj, unsigned long vtk_event,              \
   const QObject* qt_obj)                                                 \
@@ -122,6 +133,7 @@ protected:                                         \
   QVTK_OBJECT_RECONNECT_METHOD_2                   \
   QVTK_OBJECT_REMOVE_CONNECTION_METHOD             \
   QVTK_OBJECT_REMOVEALL_CONNECTION_METHOD          \
+  QVTK_OBJECT_IS_CONNECTION_METHOD                 \
   QVTK_OBJECT_BLOCK_CONNECTION_METHOD              \
   QVTK_OBJECT_BLOCK_CONNECTION_METHOD2             \
   QVTK_OBJECT_UNBLOCK_CONNECTION_METHOD            \
@@ -131,5 +143,4 @@ protected:                                         \
 private:                                           \
   ctkVTKObjectEventsObserver MyQVTK;
 
-
 #endif

+ 86 - 83
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.cpp

@@ -43,23 +43,18 @@ public:
   ctkVTKObjectEventsObserverPrivate(ctkVTKObjectEventsObserver& object);
 
   ///
-  /// Check if a connection has already been added
-  bool containsConnection(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, const char* qt_slot);
-
-  ///
   /// Return a reference toward the corresponding connection or 0 if doesn't exist
-  ctkVTKConnection* findConnection(const QString& id);
+  ctkVTKConnection* findConnection(const QString& id)const;
 
   ///
   /// Return a reference toward the corresponding connection or 0 if doesn't exist
   ctkVTKConnection* findConnection(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, const char* qt_slot);
+    const QObject* qt_obj, const char* qt_slot)const;
 
   ///
   /// Return all the references that match the given parameters
   QList<ctkVTKConnection*> findConnections(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, const char* qt_slot);
+    const QObject* qt_obj, const char* qt_slot)const;
 
   inline QList<ctkVTKConnection*> connections()const
   {
@@ -72,6 +67,77 @@ public:
 };
 
 //-----------------------------------------------------------------------------
+// ctkVTKObjectEventsObserverPrivate methods
+
+//-----------------------------------------------------------------------------
+ctkVTKObjectEventsObserverPrivate::ctkVTKObjectEventsObserverPrivate(ctkVTKObjectEventsObserver& object)
+  :q_ptr(&object)
+{
+  this->AllBlocked = false;
+  // ObserveDeletion == false  hasn't been that well tested...
+  this->ObserveDeletion = true;
+}
+
+//-----------------------------------------------------------------------------
+ctkVTKConnection*
+ctkVTKObjectEventsObserverPrivate::findConnection(const QString& id)const
+{
+  foreach(ctkVTKConnection* connection, this->connections())
+    {
+    if (connection->id() == id)
+      {
+      return connection;
+      }
+    }
+  return 0;
+}
+
+//-----------------------------------------------------------------------------
+ctkVTKConnection*
+ctkVTKObjectEventsObserverPrivate::findConnection(
+  vtkObject* vtk_obj, unsigned long vtk_event,
+  const QObject* qt_obj, const char* qt_slot)const
+{
+  foreach (ctkVTKConnection* connection, this->connections())
+    {
+    if (connection->isEqual(vtk_obj, vtk_event, qt_obj, qt_slot))
+      {
+      return connection;
+      }
+    }
+  return 0;
+}
+
+//-----------------------------------------------------------------------------
+QList<ctkVTKConnection*>
+ctkVTKObjectEventsObserverPrivate::findConnections(
+  vtkObject* vtk_obj, unsigned long vtk_event,
+  const QObject* qt_obj, const char* qt_slot)const
+{
+  bool all_info = true;
+  if(vtk_obj == NULL || qt_slot == NULL ||
+     qt_obj == NULL || vtk_event == vtkCommand::NoEvent)
+    {
+    all_info = false;
+    }
+
+  QList<ctkVTKConnection*> foundConnections;
+  // Loop through all connection
+  foreach (ctkVTKConnection* connection, this->connections())
+    {
+    if (connection->isEqual(vtk_obj, vtk_event, qt_obj, qt_slot))
+      {
+      foundConnections.append(connection);
+      if (all_info)
+        {
+        break;
+        }
+      }
+    }
+  return foundConnections;
+}
+
+//-----------------------------------------------------------------------------
 // ctkVTKObjectEventsObserver methods
 
 //-----------------------------------------------------------------------------
@@ -173,13 +239,15 @@ QString ctkVTKObjectEventsObserver::addConnection(vtkObject* vtk_obj, unsigned l
     }
 
   // Check if such event is already observed
-  if (d->containsConnection(vtk_obj, vtk_event, qt_obj, qt_slot))
+  if (this->containsConnection(vtk_obj, vtk_event, qt_obj, qt_slot))
     {
-    qWarning() << "ctkVTKObjectEventsObserver::addConnection - [vtkObject:"
-               << vtk_obj->GetClassName()
-               << ", event:" << vtk_event << "]"
-               << " is already connected with [qObject:" << qt_obj->objectName()
-               << ", slot:" << qt_slot << "]";
+    // if you need to have more than 1 connection, then it's probably time to
+    // add the same mechanism than Qt does: Qt::UniqueConnection
+    //qWarning() << "ctkVTKObjectEventsObserver::addConnection - [vtkObject:"
+    //           << vtk_obj->GetClassName()
+    //           << ", event:" << vtk_event << "]"
+    //           << " is already connected with [qObject:" << qt_obj->objectName()
+    //           << ", slot:" << qt_slot << "]";
     return QString();
     }
 
@@ -274,74 +342,9 @@ int ctkVTKObjectEventsObserver::removeConnection(vtkObject* vtk_obj, unsigned lo
 }
 
 //-----------------------------------------------------------------------------
-// ctkVTKObjectEventsObserverPrivate methods
-
-//-----------------------------------------------------------------------------
-ctkVTKObjectEventsObserverPrivate::ctkVTKObjectEventsObserverPrivate(ctkVTKObjectEventsObserver& object)
-  :q_ptr(&object)
-{
-  this->AllBlocked = false;
-  // ObserveDeletion == false  hasn't been that well tested...
-  this->ObserveDeletion = true;
-}
-
-//-----------------------------------------------------------------------------
-bool ctkVTKObjectEventsObserverPrivate::containsConnection(vtkObject* vtk_obj, unsigned long vtk_event,
-  const QObject* qt_obj, const char* qt_slot)
-{
-  return (this->findConnection(vtk_obj, vtk_event, qt_obj, qt_slot) != 0);
-}
-
-//-----------------------------------------------------------------------------
-ctkVTKConnection*
-ctkVTKObjectEventsObserverPrivate::findConnection(const QString& id)
-{
-  foreach(ctkVTKConnection* connection, this->connections())
-    {
-    if (connection->id() == id)
-      {
-      return connection;
-      }
-    }
-  return 0;
-}
-
-//-----------------------------------------------------------------------------
-ctkVTKConnection*
-ctkVTKObjectEventsObserverPrivate::findConnection(vtkObject* vtk_obj, unsigned long vtk_event,
-                                         const QObject* qt_obj, const char* qt_slot)
-{
-  QList<ctkVTKConnection*> foundConnections =
-    this->findConnections(vtk_obj, vtk_event, qt_obj, qt_slot);
-
-  return foundConnections.size() ? foundConnections[0] : 0;
-}
-
-//-----------------------------------------------------------------------------
-QList<ctkVTKConnection*>
-ctkVTKObjectEventsObserverPrivate::findConnections(
-  vtkObject* vtk_obj, unsigned long vtk_event,
-  const QObject* qt_obj, const char* qt_slot)
+bool ctkVTKObjectEventsObserver::containsConnection(vtkObject* vtk_obj, unsigned long vtk_event,
+  const QObject* qt_obj, const char* qt_slot)const
 {
-  bool all_info = true;
-  if(vtk_obj == NULL || qt_slot == NULL ||
-     qt_obj == NULL || vtk_event == vtkCommand::NoEvent)
-    {
-    all_info = false;
-    }
-
-  QList<ctkVTKConnection*> foundConnections;
-  // Loop through all connection
-  foreach (ctkVTKConnection* connection, this->connections())
-    {
-    if (connection->isEqual(vtk_obj, vtk_event, qt_obj, qt_slot))
-      {
-      foundConnections.append(connection);
-      if (all_info)
-        {
-        break;
-        }
-      }
-    }
-  return foundConnections;
+  Q_D(const ctkVTKObjectEventsObserver);
+  return (d->findConnection(vtk_obj, vtk_event, qt_obj, qt_slot) != 0);
 }

+ 4 - 0
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.h

@@ -113,6 +113,10 @@ public:
   /// Return true if the connection exists and was blocked, otherwise returns
   /// false.
   bool blockConnection(const QString& id, bool blocked);
+  
+  /// Return true if there is at least 1 connection that match the parameter
+  bool containsConnection(vtkObject* vtk_obj, unsigned long vtk_event = vtkCommand::NoEvent,
+                          const QObject* qt_obj =0, const char* qt_slot =0)const;
 
 protected:
   QScopedPointer<ctkVTKObjectEventsObserverPrivate> d_ptr;