Explorar o código

Merge branch 'refactor-ctkVTKConnectionFactory'

* refactor-ctkVTKConnectionFactory:
  ctkVTKConnectionFactory is now a proper "ctkSingleton"
Jean-Christophe Fillion-Robin %!s(int64=13) %!d(string=hai) anos
pai
achega
012516a0d0

+ 27 - 7
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.cpp

@@ -31,18 +31,39 @@
 
 // VTK includes
 #include <vtkObject.h>
-#include <vtkSmartPointer.h>
 
 //-----------------------------------------------------------------------------
-ctkVTKConnection* ctkVTKObjectEventsObserver::ctkVTKConnectionFactory::createConnection(
-  ctkVTKObjectEventsObserver* parent)const
+CTK_SINGLETON_DEFINE(ctkVTKConnectionFactory)
+
+//-----------------------------------------------------------------------------
+// ctkVTKConnectionFactory
+
+//-----------------------------------------------------------------------------
+ctkVTKConnectionFactory* ctkVTKConnectionFactory::instance()
+{
+  return Self::Instance;
+}
+
+//-----------------------------------------------------------------------------
+void ctkVTKConnectionFactory::setInstance(ctkVTKConnectionFactory* newInstance)
+{
+  if (!newInstance)
+    {
+    qCritical() << "ctkVTKConnectionFactory::setInstance - Failed to set a null instance !";
+    return;
+    }
+  delete Self::Instance;
+  Self::Instance = newInstance;
+}
+
+//-----------------------------------------------------------------------------
+ctkVTKConnection* ctkVTKConnectionFactory::createConnection(ctkVTKObjectEventsObserver* parent)const
 {
   return new ctkVTKConnection(parent);
 }
 
 //-----------------------------------------------------------------------------
-ctkVTKObjectEventsObserver::ctkVTKConnectionFactory* ctkVTKObjectEventsObserver::connectionFactory
-  = new ctkVTKConnectionFactory;
+// ctkVTKObjectEventsObserverPrivate
 
 //-----------------------------------------------------------------------------
 class ctkVTKObjectEventsObserverPrivate
@@ -281,8 +302,7 @@ QString ctkVTKObjectEventsObserver::addConnection(vtkObject* vtk_obj, unsigned l
     }
 
   // Instantiate a new connection, set its parameters and add it to the list
-  ctkVTKConnection * connection =
-    ctkVTKObjectEventsObserver::connectionFactory->createConnection(this);//new ctkVTKConnection(this);
+  ctkVTKConnection * connection = ctkVTKConnectionFactory::instance()->createConnection(this);
   connection->observeDeletion(d->ObserveDeletion);
   connection->setup(vtk_obj, vtk_event, qt_obj, qt_slot, priority, connectionType);
 

+ 21 - 9
Libs/Visualization/VTK/Core/ctkVTKObjectEventsObserver.h

@@ -22,7 +22,7 @@
 #define __ctkVTKObjectEventsObserver_h
 
 /// CTK includes
-#include <ctkPimpl.h>
+#include <ctkSingleton.h>
 
 /// Qt includes
 #include <QObject>
@@ -36,8 +36,28 @@
 
 class ctkVTKConnection;
 class vtkObject;
+class ctkVTKObjectEventsObserver;
 class ctkVTKObjectEventsObserverPrivate;
 
+//-----------------------------------------------------------------------------
+class CTK_VISUALIZATION_VTK_CORE_EXPORT ctkVTKConnectionFactory
+{
+public:
+  static ctkVTKConnectionFactory* instance();
+
+  /// The singleton takes ownerchip of the new factory instance and will take care
+  /// of cleaning the memory.
+  /// \note If \a newInstance is not null, the current factory instance will be
+  /// deleted. Note also that setting a null \a newInstance is a no-op.
+  static void setInstance(ctkVTKConnectionFactory* newInstance);
+
+  virtual ctkVTKConnection* createConnection(ctkVTKObjectEventsObserver*)const;
+protected:
+  CTK_SINGLETON_DECLARE(ctkVTKConnectionFactory)
+};
+CTK_SINGLETON_DECLARE_INITIALIZER(CTK_VISUALIZATION_VTK_CORE_EXPORT, ctkVTKConnectionFactory)
+
+//-----------------------------------------------------------------------------
 class CTK_VISUALIZATION_VTK_CORE_EXPORT ctkVTKObjectEventsObserver : public QObject
 {
 Q_OBJECT
@@ -139,14 +159,6 @@ public:
   bool containsConnection(vtkObject* vtk_obj, unsigned long vtk_event = vtkCommand::NoEvent,
                           const QObject* qt_obj =0, const char* qt_slot =0)const;
 
-  //-----------------------------------------------------------------------------
-  class CTK_VISUALIZATION_VTK_CORE_EXPORT ctkVTKConnectionFactory
-  {
-  public:
-    virtual ctkVTKConnection* createConnection(ctkVTKObjectEventsObserver*)const;
-  };
-  static ctkVTKConnectionFactory* connectionFactory;
-
 protected:
   QScopedPointer<ctkVTKObjectEventsObserverPrivate> d_ptr;