Преглед на файлове

Don't enforce type check if not needed

Allow the ability to check types but don't activate it by default.
Julien Finet преди 14 години
родител
ревизия
20028cfd8b
променени са 2 файла, в които са добавени 39 реда и са изтрити 5 реда
  1. 24 4
      Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.cpp
  2. 15 1
      Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.h

+ 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