Browse Source

STYLE: Fix CRLF

Sascha Zelzer 15 years ago
parent
commit
affb683bdd

+ 456 - 456
Libs/Visualization/VTK/Core/ctkVTKConnection.cpp

@@ -1,456 +1,456 @@
-/*=========================================================================
-
-  Library:   CTK
- 
-  Copyright (c) 2010  Kitware Inc.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.commontk.org/LICENSE
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
- 
-=========================================================================*/
-
-// Qt includes
-#include <QDebug>
-#include <QPointer>
-#include <QRegExp>
-#include <QString>
-#include <QTextStream>
-
-// CTK includes
-#include "ctkVTKConnection.h"
-
-// VTK includes
-#include <vtkObject.h>
-#include <vtkSmartPointer.h>
-#include <vtkCallbackCommand.h>
-
-//-----------------------------------------------------------------------------
-QString convertPointerToString(void* pointer)
-{
-  QString pointerAsString;
-  QTextStream(&pointerAsString) << pointer;
-  return pointerAsString;
-}
-
-//-----------------------------------------------------------------------------
-class ctkVTKConnectionPrivate: public ctkPrivate<ctkVTKConnection>
-{
-public:
-  enum
-    {
-    ARG_UNKNOWN = 0,
-    ARG_VTKOBJECT_AND_VTKOBJECT,
-    ARG_VTKOBJECT_VOID_ULONG_VOID
-    };
-
-  typedef ctkVTKConnectionPrivate Self;
-  ctkVTKConnectionPrivate();
-  ~ctkVTKConnectionPrivate();
-
-  void connect();
-  void disconnect();
-
-  /// 
-  /// VTK Callback
-  static void DoCallback(vtkObject* vtk_obj, unsigned long event,
-                         void* client_data, void* call_data);
-
-  /// 
-  /// Called by 'DoCallback' to emit signal
-  void execute(vtkObject* vtk_obj, unsigned long vtk_event, void* client_data, void* call_data);
-
-  vtkSmartPointer<vtkCallbackCommand> Callback;
-  vtkObject*                          VTKObject;
-  const QObject*                      QtObject;
-  unsigned long                       VTKEvent;
-  QString                             QtSlot;
-  float                               Priority;
-  int                                 SlotType;
-  bool                                Connected;
-  bool                                Blocked;
-  QString                             Id;
-  bool                                ObserveDeletion;
-};
-
-//-----------------------------------------------------------------------------
-// ctkVTKConnectionPrivate methods
-
-//-----------------------------------------------------------------------------
-ctkVTKConnectionPrivate::ctkVTKConnectionPrivate()
-{
-  this->Callback    = vtkSmartPointer<vtkCallbackCommand>::New();
-  this->Callback->SetCallback(ctkVTKConnectionPrivate::DoCallback);
-  this->Callback->SetClientData(this);
-  this->VTKObject   = 0;
-  this->QtObject    = 0;
-  this->VTKEvent    = vtkCommand::NoEvent;
-  this->Priority    = 0.0;
-  this->SlotType    = ARG_UNKNOWN;
-  this->Connected   = false;
-  this->Blocked     = false;
-  this->Id          = convertPointerToString(this);
-  this->ObserveDeletion = false;
-}
-
-//-----------------------------------------------------------------------------
-ctkVTKConnectionPrivate::~ctkVTKConnectionPrivate()
-{
-
-}
-
-//-----------------------------------------------------------------------------
-void ctkVTKConnectionPrivate::connect()
-{
-  CTK_P(ctkVTKConnection);
-  
-  if (this->Connected)
-    {
-    qDebug() << "ctkVTKConnection already connected.";
-    return;
-    }
-
-  switch (this->SlotType)
-    {
-    case ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT:
-      QObject::connect(p, SIGNAL(emitExecute(vtkObject*, vtkObject*)),
-        this->QtObject, this->QtSlot.toLatin1().data(), Qt::AutoConnection);
-      break;
-    case ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID:
-      QObject::connect(p, SIGNAL(emitExecute(vtkObject*, void*, unsigned long, void*)),
-                       this->QtObject, this->QtSlot.toLatin1().data(), Qt::AutoConnection);
-      break;
-    default:
-      Q_ASSERT(false);
-      qCritical() << "Failed to connect - "
-                  << "The slot (" << this->QtSlot <<  ") owned by "
-                  << "QObject(" << this->QtObject->objectName() << ")"
-                  << " seems to have a wrong signature.";
-      break;
-    }
-
-  // Make a connection between this and the vtk object
-  this->VTKObject->AddObserver(this->VTKEvent, this->Callback, this->Priority);
-
-  // If necessary, observe vtk DeleteEvent
-  if(this->ObserveDeletion)
-    {
-    // don't observe it twice
-    if (this->VTKEvent != vtkCommand::DeleteEvent)
-      {
-      this->VTKObject->AddObserver(vtkCommand::DeleteEvent, this->Callback);
-      }
-    // Remove itself from its parent when vtkObject is deleted
-    QObject::connect(this->QtObject, SIGNAL(destroyed(QObject*)), 
-                     p, SLOT(qobjectDeleted()));
-    }
-  this->Connected = true;
-}
-
-//-----------------------------------------------------------------------------
-void ctkVTKConnectionPrivate::disconnect()
-{
-  CTK_P(ctkVTKConnection);
-  
-  if (!this->Connected) 
-    { 
-    return; 
-    }
-
-  if (this->QtObject)
-    {
-    switch (this->SlotType)
-      {
-      case ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT:
-        QObject::disconnect(p, SIGNAL(emitExecute(vtkObject*, vtkObject*)),
-                            this->QtObject,this->QtSlot.toLatin1().data());
-        break;
-      case ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID:
-        QObject::disconnect(p, SIGNAL(emitExecute(vtkObject*, void*, unsigned long, void*)),
-                            this->QtObject, this->QtSlot.toLatin1().data());
-        break;
-      default:
-        Q_ASSERT(false);
-        qCritical() << "Failed to disconnect - "
-                    << "The slot (" << this->QtSlot <<  ") owned by "
-                    << "QObject(" << this->QtObject->objectName() << ")"
-                    << " seems to have a wrong signature.";
-        break;
-      }
-    }
-
-  if (this->VTKObject)
-    {
-    this->VTKObject->RemoveObserver(this->Callback);
-    }
-
-  if (this->ObserveDeletion && this->QtObject)
-    {
-    //this->VTKObject->AddObserver(vtkCommand::DeleteEvent, this->Callback); has already been removed
-    QObject::disconnect(this->QtObject, SIGNAL(destroyed(QObject*)),
-                        p, SIGNAL(isBroke()));
-    }
-
-  this->Connected = false;
-}
-
-//-----------------------------------------------------------------------------
-// ctkVTKConnection methods
-
-//-----------------------------------------------------------------------------
-ctkVTKConnection::ctkVTKConnection(QObject* _parent):
-  Superclass(_parent)
-{
-  CTK_INIT_PRIVATE(ctkVTKConnection);
-}
-
-//-----------------------------------------------------------------------------
-ctkVTKConnection::~ctkVTKConnection()
-{
-  CTK_D(ctkVTKConnection);
-  if (d->ObserveDeletion)
-    {
-    d->disconnect();
-    }
-}
-
-//-----------------------------------------------------------------------------
-QString ctkVTKConnection::id()const
-{
-  CTK_D(const ctkVTKConnection);
-  return d->Id;
-}
-
-//-----------------------------------------------------------------------------
-QObject* ctkVTKConnection::object()const
-{
-  CTK_D(const ctkVTKConnection);
-  return const_cast<QObject*>(d->QtObject);
-}
-
-//-----------------------------------------------------------------------------
-QDebug operator<<(QDebug dbg, const ctkVTKConnection& connection)
-{
-  const ctkVTKConnectionPrivate* d = connection.ctk_d();
-  dbg.nospace() << "ctkVTKConnection:" << &connection << endl
-                << "Id:" << d->Id << endl
-                << " VTKObject:" << d->VTKObject->GetClassName()
-                << "(" << d->VTKObject << ")" << endl
-                << " QtObject:" << d->QtObject << endl
-                << " VTKEvent:" << d->VTKEvent << endl
-                << " QtSlot:" << d->QtSlot << endl
-                << " SlotType:" << d->SlotType << endl
-                << " Priority:" << d->Priority << endl
-                << " Connected:" << d->Connected << endl
-                << " Blocked:" << d->Blocked;
-  return dbg.space();
-}
-
-//-----------------------------------------------------------------------------
-QString ctkVTKConnection::shortDescription()
-{
-  CTK_D(ctkVTKConnection);
-  
-  return Self::shortDescription(d->VTKObject, d->VTKEvent, d->QtObject, d->QtSlot);
-}
-
-//-----------------------------------------------------------------------------
-QString ctkVTKConnection::shortDescription(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, QString qt_slot)
-{
-  QString ret;
-  QTextStream ts( &ret );
-  ts << (vtk_obj ? vtk_obj->GetClassName() : "NULL") << " "
-     << vtk_event << " " << qt_obj << " " << qt_slot;
-  return ret;
-}
-
-//-----------------------------------------------------------------------------
-bool ctkVTKConnection::isValid(vtkObject* vtk_obj, unsigned long vtk_event,
-                               const QObject* qt_obj, QString qt_slot)
-{
-  Q_UNUSED(vtk_event);
-  if (!vtk_obj)
-    {
-    return false;
-    }
-  if (!qt_obj)
-    {
-    return false;
-    }
-  if (qt_slot.isEmpty())
-    {
-    return false;
-    }
-  return true;
-}
-
-//-----------------------------------------------------------------------------
-void ctkVTKConnection::setup(vtkObject* vtk_obj, unsigned long vtk_event,
-                             const QObject* qt_obj, QString qt_slot, 
-                             float priority)
-{
-  CTK_D(ctkVTKConnection);
-  
-  if (!Self::isValid(vtk_obj, vtk_event, qt_obj, qt_slot)) 
-    { 
-    return; 
-    }
-
-  d->VTKObject = vtk_obj;
-  d->QtObject = qt_obj;
-  d->VTKEvent = vtk_event;
-  d->QtSlot = qt_slot;
-  d->Priority = priority;
-
-  if (qt_slot.contains(QRegExp(QString("\\( ?vtkObject ?\\* ?, ?vtkObject ?\\* ?\\)"))))
-    {
-    d->SlotType = ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT;
-    }
-  else
-    {
-    d->SlotType = ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID;
-    }
-  d->connect();
-}
-
-//-----------------------------------------------------------------------------
-void ctkVTKConnection::setBlocked(bool block)
-{
-  CTK_D(ctkVTKConnection);
-  d->Blocked = block;
-}
-
-//-----------------------------------------------------------------------------
-bool ctkVTKConnection::isBlocked()const
-{
-  CTK_D(const ctkVTKConnection);
-  return d->Blocked;
-}
-
-//-----------------------------------------------------------------------------
-bool ctkVTKConnection::isEqual(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, QString qt_slot)const
-{
-  CTK_D(const ctkVTKConnection);
-  
-  if (d->VTKObject != vtk_obj)
-    {
-    return false;
-    }
-  if (vtk_event != vtkCommand::NoEvent && d->VTKEvent != vtk_event)
-    {
-    return false;
-    }
-  if (qt_obj && d->QtObject != qt_obj)
-    {
-    return false;
-    }
-  if (!qt_slot.isEmpty() && 
-      (QString(d->QtSlot).remove(' ').compare(
-        QString(qt_slot).remove(' ')) != 0))
-    {
-    return false;
-    }
-  return true;
-}
-
-//-----------------------------------------------------------------------------
-void ctkVTKConnectionPrivate::DoCallback(vtkObject* vtk_obj, unsigned long event,
-                                 void* client_data, void* call_data)
-{
-  ctkVTKConnectionPrivate* conn = reinterpret_cast<ctkVTKConnectionPrivate*>(client_data);
-  Q_ASSERT(conn);
-  conn->execute(vtk_obj, event, client_data, call_data);
-}
-
-//-----------------------------------------------------------------------------
-// callback from VTK to emit signal
-void ctkVTKConnectionPrivate::execute(vtkObject* vtk_obj, unsigned long vtk_event,
-  void* client_data, void* call_data)
-{
-  CTK_P(ctkVTKConnection);
-  
-  Q_ASSERT(this->Connected);
-  if (this->Blocked) 
-    { 
-    return; 
-    }
-
-  QPointer<ctkVTKConnection> connection(p);
-  if(!this->ObserveDeletion ||
-     vtk_event != vtkCommand::DeleteEvent ||
-     this->VTKEvent == vtkCommand::DeleteEvent)
-    {
-    vtkObject* callDataAsVtkObject = 0;
-    switch (this->SlotType)
-      {
-      case ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT:
-        if (this->VTKEvent == vtk_event)
-          {
-          callDataAsVtkObject = reinterpret_cast<vtkObject*>( call_data );
-          if (!callDataAsVtkObject)
-            {
-            qCritical() << "The VTKEvent(" << this->VTKEvent<< ") triggered by vtkObject("
-              << this->VTKObject->GetClassName() << ") "
-              << "doesn't return data of type vtkObject." << endl
-              << "The slot (" << this->QtSlot <<  ") owned by "
-              << "QObject(" << this->QtObject->objectName() << ")"
-              << " may be incorrect.";
-            }
-          emit p->emitExecute(vtk_obj, callDataAsVtkObject);
-          }
-        break;
-      case ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID:
-        emit p->emitExecute(vtk_obj, call_data, vtk_event, client_data);
-        break;
-      default:
-        // Should never reach
-        qCritical() << "Unknown SlotType:" << this->SlotType;
-        return;
-        break;
-      }
-    }
-
-  if (!connection.isNull() &&
-      vtk_event == vtkCommand::DeleteEvent)
-    {
-    p->vtkObjectDeleted();
-    }
-}
-
-void ctkVTKConnection::observeDeletion(bool enable)
-{
-  CTK_D(ctkVTKConnection);
-  d->ObserveDeletion = enable;
-}
-
-bool ctkVTKConnection::deletionObserved()const
-{
-  CTK_D(const ctkVTKConnection);
-  return d->ObserveDeletion;
-}
-
-void ctkVTKConnection::vtkObjectDeleted()
-{
-  CTK_D(ctkVTKConnection);
-  d->VTKObject = 0;
-  d->disconnect();
-  emit isBroke();
-}
-
-void ctkVTKConnection::qobjectDeleted()
-{
-  CTK_D(ctkVTKConnection);
-  d->QtObject = 0;
-  d->disconnect();
-  emit isBroke();
-}
+/*=========================================================================
+
+  Library:   CTK
+ 
+  Copyright (c) 2010  Kitware Inc.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.commontk.org/LICENSE
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ 
+=========================================================================*/
+
+// Qt includes
+#include <QDebug>
+#include <QPointer>
+#include <QRegExp>
+#include <QString>
+#include <QTextStream>
+
+// CTK includes
+#include "ctkVTKConnection.h"
+
+// VTK includes
+#include <vtkObject.h>
+#include <vtkSmartPointer.h>
+#include <vtkCallbackCommand.h>
+
+//-----------------------------------------------------------------------------
+QString convertPointerToString(void* pointer)
+{
+  QString pointerAsString;
+  QTextStream(&pointerAsString) << pointer;
+  return pointerAsString;
+}
+
+//-----------------------------------------------------------------------------
+class ctkVTKConnectionPrivate: public ctkPrivate<ctkVTKConnection>
+{
+public:
+  enum
+    {
+    ARG_UNKNOWN = 0,
+    ARG_VTKOBJECT_AND_VTKOBJECT,
+    ARG_VTKOBJECT_VOID_ULONG_VOID
+    };
+
+  typedef ctkVTKConnectionPrivate Self;
+  ctkVTKConnectionPrivate();
+  ~ctkVTKConnectionPrivate();
+
+  void connect();
+  void disconnect();
+
+  /// 
+  /// VTK Callback
+  static void DoCallback(vtkObject* vtk_obj, unsigned long event,
+                         void* client_data, void* call_data);
+
+  /// 
+  /// Called by 'DoCallback' to emit signal
+  void execute(vtkObject* vtk_obj, unsigned long vtk_event, void* client_data, void* call_data);
+
+  vtkSmartPointer<vtkCallbackCommand> Callback;
+  vtkObject*                          VTKObject;
+  const QObject*                      QtObject;
+  unsigned long                       VTKEvent;
+  QString                             QtSlot;
+  float                               Priority;
+  int                                 SlotType;
+  bool                                Connected;
+  bool                                Blocked;
+  QString                             Id;
+  bool                                ObserveDeletion;
+};
+
+//-----------------------------------------------------------------------------
+// ctkVTKConnectionPrivate methods
+
+//-----------------------------------------------------------------------------
+ctkVTKConnectionPrivate::ctkVTKConnectionPrivate()
+{
+  this->Callback    = vtkSmartPointer<vtkCallbackCommand>::New();
+  this->Callback->SetCallback(ctkVTKConnectionPrivate::DoCallback);
+  this->Callback->SetClientData(this);
+  this->VTKObject   = 0;
+  this->QtObject    = 0;
+  this->VTKEvent    = vtkCommand::NoEvent;
+  this->Priority    = 0.0;
+  this->SlotType    = ARG_UNKNOWN;
+  this->Connected   = false;
+  this->Blocked     = false;
+  this->Id          = convertPointerToString(this);
+  this->ObserveDeletion = false;
+}
+
+//-----------------------------------------------------------------------------
+ctkVTKConnectionPrivate::~ctkVTKConnectionPrivate()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+void ctkVTKConnectionPrivate::connect()
+{
+  CTK_P(ctkVTKConnection);
+  
+  if (this->Connected)
+    {
+    qDebug() << "ctkVTKConnection already connected.";
+    return;
+    }
+
+  switch (this->SlotType)
+    {
+    case ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT:
+      QObject::connect(p, SIGNAL(emitExecute(vtkObject*, vtkObject*)),
+        this->QtObject, this->QtSlot.toLatin1().data(), Qt::AutoConnection);
+      break;
+    case ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID:
+      QObject::connect(p, SIGNAL(emitExecute(vtkObject*, void*, unsigned long, void*)),
+                       this->QtObject, this->QtSlot.toLatin1().data(), Qt::AutoConnection);
+      break;
+    default:
+      Q_ASSERT(false);
+      qCritical() << "Failed to connect - "
+                  << "The slot (" << this->QtSlot <<  ") owned by "
+                  << "QObject(" << this->QtObject->objectName() << ")"
+                  << " seems to have a wrong signature.";
+      break;
+    }
+
+  // Make a connection between this and the vtk object
+  this->VTKObject->AddObserver(this->VTKEvent, this->Callback, this->Priority);
+
+  // If necessary, observe vtk DeleteEvent
+  if(this->ObserveDeletion)
+    {
+    // don't observe it twice
+    if (this->VTKEvent != vtkCommand::DeleteEvent)
+      {
+      this->VTKObject->AddObserver(vtkCommand::DeleteEvent, this->Callback);
+      }
+    // Remove itself from its parent when vtkObject is deleted
+    QObject::connect(this->QtObject, SIGNAL(destroyed(QObject*)), 
+                     p, SLOT(qobjectDeleted()));
+    }
+  this->Connected = true;
+}
+
+//-----------------------------------------------------------------------------
+void ctkVTKConnectionPrivate::disconnect()
+{
+  CTK_P(ctkVTKConnection);
+  
+  if (!this->Connected) 
+    { 
+    return; 
+    }
+
+  if (this->QtObject)
+    {
+    switch (this->SlotType)
+      {
+      case ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT:
+        QObject::disconnect(p, SIGNAL(emitExecute(vtkObject*, vtkObject*)),
+                            this->QtObject,this->QtSlot.toLatin1().data());
+        break;
+      case ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID:
+        QObject::disconnect(p, SIGNAL(emitExecute(vtkObject*, void*, unsigned long, void*)),
+                            this->QtObject, this->QtSlot.toLatin1().data());
+        break;
+      default:
+        Q_ASSERT(false);
+        qCritical() << "Failed to disconnect - "
+                    << "The slot (" << this->QtSlot <<  ") owned by "
+                    << "QObject(" << this->QtObject->objectName() << ")"
+                    << " seems to have a wrong signature.";
+        break;
+      }
+    }
+
+  if (this->VTKObject)
+    {
+    this->VTKObject->RemoveObserver(this->Callback);
+    }
+
+  if (this->ObserveDeletion && this->QtObject)
+    {
+    //this->VTKObject->AddObserver(vtkCommand::DeleteEvent, this->Callback); has already been removed
+    QObject::disconnect(this->QtObject, SIGNAL(destroyed(QObject*)),
+                        p, SIGNAL(isBroke()));
+    }
+
+  this->Connected = false;
+}
+
+//-----------------------------------------------------------------------------
+// ctkVTKConnection methods
+
+//-----------------------------------------------------------------------------
+ctkVTKConnection::ctkVTKConnection(QObject* _parent):
+  Superclass(_parent)
+{
+  CTK_INIT_PRIVATE(ctkVTKConnection);
+}
+
+//-----------------------------------------------------------------------------
+ctkVTKConnection::~ctkVTKConnection()
+{
+  CTK_D(ctkVTKConnection);
+  if (d->ObserveDeletion)
+    {
+    d->disconnect();
+    }
+}
+
+//-----------------------------------------------------------------------------
+QString ctkVTKConnection::id()const
+{
+  CTK_D(const ctkVTKConnection);
+  return d->Id;
+}
+
+//-----------------------------------------------------------------------------
+QObject* ctkVTKConnection::object()const
+{
+  CTK_D(const ctkVTKConnection);
+  return const_cast<QObject*>(d->QtObject);
+}
+
+//-----------------------------------------------------------------------------
+QDebug operator<<(QDebug dbg, const ctkVTKConnection& connection)
+{
+  const ctkVTKConnectionPrivate* d = connection.ctk_d();
+  dbg.nospace() << "ctkVTKConnection:" << &connection << endl
+                << "Id:" << d->Id << endl
+                << " VTKObject:" << d->VTKObject->GetClassName()
+                << "(" << d->VTKObject << ")" << endl
+                << " QtObject:" << d->QtObject << endl
+                << " VTKEvent:" << d->VTKEvent << endl
+                << " QtSlot:" << d->QtSlot << endl
+                << " SlotType:" << d->SlotType << endl
+                << " Priority:" << d->Priority << endl
+                << " Connected:" << d->Connected << endl
+                << " Blocked:" << d->Blocked;
+  return dbg.space();
+}
+
+//-----------------------------------------------------------------------------
+QString ctkVTKConnection::shortDescription()
+{
+  CTK_D(ctkVTKConnection);
+  
+  return Self::shortDescription(d->VTKObject, d->VTKEvent, d->QtObject, d->QtSlot);
+}
+
+//-----------------------------------------------------------------------------
+QString ctkVTKConnection::shortDescription(vtkObject* vtk_obj, unsigned long vtk_event,
+    const QObject* qt_obj, QString qt_slot)
+{
+  QString ret;
+  QTextStream ts( &ret );
+  ts << (vtk_obj ? vtk_obj->GetClassName() : "NULL") << " "
+     << vtk_event << " " << qt_obj << " " << qt_slot;
+  return ret;
+}
+
+//-----------------------------------------------------------------------------
+bool ctkVTKConnection::isValid(vtkObject* vtk_obj, unsigned long vtk_event,
+                               const QObject* qt_obj, QString qt_slot)
+{
+  Q_UNUSED(vtk_event);
+  if (!vtk_obj)
+    {
+    return false;
+    }
+  if (!qt_obj)
+    {
+    return false;
+    }
+  if (qt_slot.isEmpty())
+    {
+    return false;
+    }
+  return true;
+}
+
+//-----------------------------------------------------------------------------
+void ctkVTKConnection::setup(vtkObject* vtk_obj, unsigned long vtk_event,
+                             const QObject* qt_obj, QString qt_slot, 
+                             float priority)
+{
+  CTK_D(ctkVTKConnection);
+  
+  if (!Self::isValid(vtk_obj, vtk_event, qt_obj, qt_slot)) 
+    { 
+    return; 
+    }
+
+  d->VTKObject = vtk_obj;
+  d->QtObject = qt_obj;
+  d->VTKEvent = vtk_event;
+  d->QtSlot = qt_slot;
+  d->Priority = priority;
+
+  if (qt_slot.contains(QRegExp(QString("\\( ?vtkObject ?\\* ?, ?vtkObject ?\\* ?\\)"))))
+    {
+    d->SlotType = ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT;
+    }
+  else
+    {
+    d->SlotType = ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID;
+    }
+  d->connect();
+}
+
+//-----------------------------------------------------------------------------
+void ctkVTKConnection::setBlocked(bool block)
+{
+  CTK_D(ctkVTKConnection);
+  d->Blocked = block;
+}
+
+//-----------------------------------------------------------------------------
+bool ctkVTKConnection::isBlocked()const
+{
+  CTK_D(const ctkVTKConnection);
+  return d->Blocked;
+}
+
+//-----------------------------------------------------------------------------
+bool ctkVTKConnection::isEqual(vtkObject* vtk_obj, unsigned long vtk_event,
+    const QObject* qt_obj, QString qt_slot)const
+{
+  CTK_D(const ctkVTKConnection);
+  
+  if (d->VTKObject != vtk_obj)
+    {
+    return false;
+    }
+  if (vtk_event != vtkCommand::NoEvent && d->VTKEvent != vtk_event)
+    {
+    return false;
+    }
+  if (qt_obj && d->QtObject != qt_obj)
+    {
+    return false;
+    }
+  if (!qt_slot.isEmpty() && 
+      (QString(d->QtSlot).remove(' ').compare(
+        QString(qt_slot).remove(' ')) != 0))
+    {
+    return false;
+    }
+  return true;
+}
+
+//-----------------------------------------------------------------------------
+void ctkVTKConnectionPrivate::DoCallback(vtkObject* vtk_obj, unsigned long event,
+                                 void* client_data, void* call_data)
+{
+  ctkVTKConnectionPrivate* conn = reinterpret_cast<ctkVTKConnectionPrivate*>(client_data);
+  Q_ASSERT(conn);
+  conn->execute(vtk_obj, event, client_data, call_data);
+}
+
+//-----------------------------------------------------------------------------
+// callback from VTK to emit signal
+void ctkVTKConnectionPrivate::execute(vtkObject* vtk_obj, unsigned long vtk_event,
+  void* client_data, void* call_data)
+{
+  CTK_P(ctkVTKConnection);
+  
+  Q_ASSERT(this->Connected);
+  if (this->Blocked) 
+    { 
+    return; 
+    }
+
+  QPointer<ctkVTKConnection> connection(p);
+  if(!this->ObserveDeletion ||
+     vtk_event != vtkCommand::DeleteEvent ||
+     this->VTKEvent == vtkCommand::DeleteEvent)
+    {
+    vtkObject* callDataAsVtkObject = 0;
+    switch (this->SlotType)
+      {
+      case ctkVTKConnectionPrivate::ARG_VTKOBJECT_AND_VTKOBJECT:
+        if (this->VTKEvent == vtk_event)
+          {
+          callDataAsVtkObject = reinterpret_cast<vtkObject*>( call_data );
+          if (!callDataAsVtkObject)
+            {
+            qCritical() << "The VTKEvent(" << this->VTKEvent<< ") triggered by vtkObject("
+              << this->VTKObject->GetClassName() << ") "
+              << "doesn't return data of type vtkObject." << endl
+              << "The slot (" << this->QtSlot <<  ") owned by "
+              << "QObject(" << this->QtObject->objectName() << ")"
+              << " may be incorrect.";
+            }
+          emit p->emitExecute(vtk_obj, callDataAsVtkObject);
+          }
+        break;
+      case ctkVTKConnectionPrivate::ARG_VTKOBJECT_VOID_ULONG_VOID:
+        emit p->emitExecute(vtk_obj, call_data, vtk_event, client_data);
+        break;
+      default:
+        // Should never reach
+        qCritical() << "Unknown SlotType:" << this->SlotType;
+        return;
+        break;
+      }
+    }
+
+  if (!connection.isNull() &&
+      vtk_event == vtkCommand::DeleteEvent)
+    {
+    p->vtkObjectDeleted();
+    }
+}
+
+void ctkVTKConnection::observeDeletion(bool enable)
+{
+  CTK_D(ctkVTKConnection);
+  d->ObserveDeletion = enable;
+}
+
+bool ctkVTKConnection::deletionObserved()const
+{
+  CTK_D(const ctkVTKConnection);
+  return d->ObserveDeletion;
+}
+
+void ctkVTKConnection::vtkObjectDeleted()
+{
+  CTK_D(ctkVTKConnection);
+  d->VTKObject = 0;
+  d->disconnect();
+  emit isBroke();
+}
+
+void ctkVTKConnection::qobjectDeleted()
+{
+  CTK_D(ctkVTKConnection);
+  d->QtObject = 0;
+  d->disconnect();
+  emit isBroke();
+}

+ 108 - 108
Libs/Visualization/VTK/Core/ctkVTKConnection.h

@@ -1,108 +1,108 @@
-/*=========================================================================
-
-  Library:   CTK
- 
-  Copyright (c) 2010  Kitware Inc.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.commontk.org/LICENSE
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
- 
-=========================================================================*/
-
-#ifndef __ctkVTKConnection_h
-#define __ctkVTKConnection_h
-
-// Qt includes
-#include <QObject>
-#include <QVector>
-
-// CTK includes
-#include <ctkPimpl.h>
-
-#include "CTKVisualizationVTKCoreExport.h"
-
-class vtkObject;
-class ctkVTKConnectionPrivate;
-
-class CTK_VISUALIZATION_VTK_CORE_EXPORT ctkVTKConnection : public QObject
-{
-Q_OBJECT
-
-public:
-  typedef QObject Superclass;
-  explicit ctkVTKConnection(QObject* parent);
-  virtual ~ctkVTKConnection();
-
-  ///
-  QString shortDescription();
-  static QString shortDescription(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, QString qt_slot = "");
-
-  /// 
-  void setup(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, QString qt_slot, float priority = 0.f);
-
-  /// 
-  /// Check the validity of the parameters. Parameters must be valid to add 
-  /// a connection
-  static bool isValid(vtkObject* vtk_obj, unsigned long vtk_event,
-    const QObject* qt_obj, QString qt_slot);
-
-  /// 
-  /// Temporarilly block any signals/slots. If the event is fired, the slot
-  /// won't be called. You can restore the connection by calling SetBlocked
-  /// with block = false.
-  void setBlocked(bool block);
-  bool isBlocked()const;
-
-  /// 
-  bool isEqual(vtkObject* vtk_obj, unsigned long vtk_event,
-               const QObject* qt_obj, QString qt_slot)const;
-
-  /// 
-  /// Return a string uniquely identifying the connection within the current process
-  QString  id()const;
-  QObject* object()const;
-
-  /// false by default, it is slower to observe vtk object deletion
-  void observeDeletion(bool enable);
-  bool deletionObserved()const;
-  
-signals:
-  /// 
-  /// The qt signal emited by the VTK Callback
-  /// The signal corresponding to the slot will be emited
-  void emitExecute(vtkObject* caller, vtkObject* call_data);
-
-  /// Note: even if the signal has a signature with 4 args, you can
-  /// connect it to a slot with less arguments as long as the types of the 
-  /// argument are matching:
-  /// connect(obj1,SIGNAL(signalFunc(A,B,C,D)),obj2,SLOT(slotFunc(A)));
-  void emitExecute(vtkObject* caller, void* call_data, unsigned long vtk_event, void* client_data);
-
-  /// The signal is fired when the observed vtk object or the receiving qt 
-  /// object is deleted. It can conveniently connected to the deleteLater 
-  /// slot
-  void isBroke();
-
-protected slots:
-  void vtkObjectDeleted();
-  void qobjectDeleted();
-
-private:
-  CTK_DECLARE_PRIVATE(ctkVTKConnection);
-  friend QDebug operator<<(QDebug dbg, const ctkVTKConnection& connection);
-};
-
-QDebug operator<<(QDebug dbg, const ctkVTKConnection& connection);
-
-#endif
+/*=========================================================================
+
+  Library:   CTK
+ 
+  Copyright (c) 2010  Kitware Inc.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.commontk.org/LICENSE
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+ 
+=========================================================================*/
+
+#ifndef __ctkVTKConnection_h
+#define __ctkVTKConnection_h
+
+// Qt includes
+#include <QObject>
+#include <QVector>
+
+// CTK includes
+#include <ctkPimpl.h>
+
+#include "CTKVisualizationVTKCoreExport.h"
+
+class vtkObject;
+class ctkVTKConnectionPrivate;
+
+class CTK_VISUALIZATION_VTK_CORE_EXPORT ctkVTKConnection : public QObject
+{
+Q_OBJECT
+
+public:
+  typedef QObject Superclass;
+  explicit ctkVTKConnection(QObject* parent);
+  virtual ~ctkVTKConnection();
+
+  ///
+  QString shortDescription();
+  static QString shortDescription(vtkObject* vtk_obj, unsigned long vtk_event,
+    const QObject* qt_obj, QString qt_slot = "");
+
+  /// 
+  void setup(vtkObject* vtk_obj, unsigned long vtk_event,
+    const QObject* qt_obj, QString qt_slot, float priority = 0.f);
+
+  /// 
+  /// Check the validity of the parameters. Parameters must be valid to add 
+  /// a connection
+  static bool isValid(vtkObject* vtk_obj, unsigned long vtk_event,
+    const QObject* qt_obj, QString qt_slot);
+
+  /// 
+  /// Temporarilly block any signals/slots. If the event is fired, the slot
+  /// won't be called. You can restore the connection by calling SetBlocked
+  /// with block = false.
+  void setBlocked(bool block);
+  bool isBlocked()const;
+
+  /// 
+  bool isEqual(vtkObject* vtk_obj, unsigned long vtk_event,
+               const QObject* qt_obj, QString qt_slot)const;
+
+  /// 
+  /// Return a string uniquely identifying the connection within the current process
+  QString  id()const;
+  QObject* object()const;
+
+  /// false by default, it is slower to observe vtk object deletion
+  void observeDeletion(bool enable);
+  bool deletionObserved()const;
+  
+signals:
+  /// 
+  /// The qt signal emited by the VTK Callback
+  /// The signal corresponding to the slot will be emited
+  void emitExecute(vtkObject* caller, vtkObject* call_data);
+
+  /// Note: even if the signal has a signature with 4 args, you can
+  /// connect it to a slot with less arguments as long as the types of the 
+  /// argument are matching:
+  /// connect(obj1,SIGNAL(signalFunc(A,B,C,D)),obj2,SLOT(slotFunc(A)));
+  void emitExecute(vtkObject* caller, void* call_data, unsigned long vtk_event, void* client_data);
+
+  /// The signal is fired when the observed vtk object or the receiving qt 
+  /// object is deleted. It can conveniently connected to the deleteLater 
+  /// slot
+  void isBroke();
+
+protected slots:
+  void vtkObjectDeleted();
+  void qobjectDeleted();
+
+private:
+  CTK_DECLARE_PRIVATE(ctkVTKConnection);
+  friend QDebug operator<<(QDebug dbg, const ctkVTKConnection& connection);
+};
+
+QDebug operator<<(QDebug dbg, const ctkVTKConnection& connection);
+
+#endif

+ 9 - 9
Libs/Widgets/ctkTransferFunctionNativeItem.cpp

@@ -32,8 +32,8 @@
 #include "ctkTransferFunctionScene.h"
 
 #include <windows.h>
-#include <gl\gl.h>							// Header File For The OpenGL32 Library
-#include <gl\glu.h>							// Header File For The GLu32 Library
+#include <gl\gl.h>							// Header File For The OpenGL32 Library
+#include <gl\glu.h>							// Header File For The GLu32 Library
 
 
 class ctkTransferFunctionNativeItemPrivate:public ctkPrivate<ctkTransferFunctionNativeItem>
@@ -55,9 +55,9 @@ void ctkTransferFunctionNativeItemPrivate::initTexture()
   glGenTextures(1, &this->Texture[0]);
 
   glBindTexture(GL_TEXTURE_2D, this->Texture[0]);
-  if (!glIsTexture(this->Texture[0]))
-    {
-    qDebug() << "pb texture";
+  if (!glIsTexture(this->Texture[0]))
+    {
+    qDebug() << "pb texture";
     }
   float transferFunction[12] = {0.,0.,0.,1.,0.,0.,0.,1.,0.,0.,0.,1.};
   glTexImage2D(GL_TEXTURE_2D, 0, 3, 4, 1, 0, GL_RGB, GL_FLOAT, transferFunction);
@@ -107,10 +107,10 @@ void ctkTransferFunctionNativeItem::paint(
   //glDisable(GL_DEPTH_TEST);
   //glDepthFunc(GL_LEQUAL);
   glBindTexture(GL_TEXTURE_2D, d->Texture[0]);
-  glBegin(GL_QUADS);
-		glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
-		glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 1.0f);
-		glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f);
+  glBegin(GL_QUADS);
+		glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f);
+		glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 1.0f);
+		glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f);
 		glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 0.0f);
   glEnd();
   painter->endNativePainting();