Bladeren bron

Don't enforce type check if not needed

Allow the ability to check types but don't activate it by default.
Julien Finet 14 jaren geleden
bovenliggende
commit
20028cfd8b

+ 24 - 4
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.cpp

@@ -62,6 +62,7 @@ public:
     return q->findChildren<ctkVTKConnection*>();
   }
 
+  bool StrictTypeCheck;
   bool AllBlocked;
   bool ObserveDeletion;
 };
@@ -73,6 +74,7 @@ public:
 ctkVTKObjectEventsObserverPrivate::ctkVTKObjectEventsObserverPrivate(ctkVTKObjectEventsObserver& object)
   :q_ptr(&object)
 {
+  this->StrictTypeCheck = false;
   this->AllBlocked = false;
   // ObserveDeletion == false  hasn't been that well tested...
   this->ObserveDeletion = true;
@@ -170,9 +172,24 @@ void ctkVTKObjectEventsObserver::printAdditionalInfo()
 }
 
 //-----------------------------------------------------------------------------
+bool ctkVTKObjectEventsObserver::strictTypeCheck()const
+{
+  Q_D(const ctkVTKObjectEventsObserver);
+  return d->StrictTypeCheck;
+}
+
+//-----------------------------------------------------------------------------
+void ctkVTKObjectEventsObserver::setStrictTypeCheck(bool check)
+{
+  Q_D(ctkVTKObjectEventsObserver);
+  d->StrictTypeCheck = check;
+}
+
+//-----------------------------------------------------------------------------
 QString ctkVTKObjectEventsObserver::addConnection(vtkObject* old_vtk_obj, vtkObject* vtk_obj,
   unsigned long vtk_event, const QObject* qt_obj, const char* qt_slot, float priority)
 {
+  Q_D(ctkVTKObjectEventsObserver);
   if (old_vtk_obj)
     {
     // Check that old_object and new_object are the same type
@@ -194,11 +211,14 @@ QString ctkVTKObjectEventsObserver::addConnection(vtkObject* old_vtk_obj, vtkObj
     // vtkObject* obj2 = vtkObject::New();
     // this->addConnection(0, obj2, vtkCommand::Modified...)
     // ...
-    if (vtk_obj && !vtk_obj->IsA(old_vtk_obj->GetClassName()))
+    if (d->StrictTypeCheck && vtk_obj
+        && !vtk_obj->IsA(old_vtk_obj->GetClassName()))
       {
-      qDebug() << "Previous vtkObject (type:" << old_vtk_obj->GetClassName() << ") to disconnect"
-               << "and new vtkObject (type:" << vtk_obj->GetClassName() << ") to connect"
-               << "have a different type.";
+      qWarning() << "Previous vtkObject (type:" << old_vtk_obj->GetClassName()
+                 << ") to disconnect"
+                 << "and new vtkObject (type:" << vtk_obj->GetClassName()
+                 << ") to connect"
+                 << "have a different type.";
       return QString();
       }
     // Disconnect old vtkObject

+ 15 - 1
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.h

@@ -41,13 +41,27 @@ class ctkVTKObjectEventsObserverPrivate;
 class CTK_VISUALIZATION_VTK_CORE_EXPORT ctkVTKObjectEventsObserver : public QObject
 {
 Q_OBJECT
-
+  Q_PROPERTY(bool strictTypeCheck READ strictTypeCheck WRITE setStrictTypeCheck)
 public:
   typedef QObject Superclass;
   explicit ctkVTKObjectEventsObserver(QObject* parent = 0);
   virtual ~ctkVTKObjectEventsObserver();
 
   virtual void printAdditionalInfo();
+  
+  /// The property strictTypeCheck control wether or not you can replace a
+  /// connection by a connection from an object of a different VTK class tha
+  /// the first.
+  /// For example, if strictTypeCheck is on, the following will generate an error
+  /// <code>
+  /// vtkActor* actor = vtkActor::New();
+  /// objectEventsObserver->addConnection(actor, vtkCommand::ModifiedEvent, ...);
+  /// vtkMapper* mapper = vtkMapper::New();
+  /// objectEventsObserver->addConnection(actor, mapper, vtkCommand::ModifiedEvent, ...);
+  /// </code>
+  /// False by default.
+  bool strictTypeCheck()const;
+  void setStrictTypeCheck(bool check);
 
   ///
   /// Add a connection, an Id allowing to uniquely identify the connection is