浏览代码

Added Qt debugging stream operator for event classes.

Sascha Zelzer 14 年之前
父节点
当前提交
8c5101a490

+ 32 - 0
Libs/PluginFramework/ctkPluginEvent.cpp

@@ -21,6 +21,10 @@
 
 
 #include "ctkPluginEvent.h"
 #include "ctkPluginEvent.h"
 
 
+#include "ctkPlugin.h"
+
+#include <QDebug>
+
 class ctkPluginEventData : public QSharedData
 class ctkPluginEventData : public QSharedData
 {
 {
 public:
 public:
@@ -85,3 +89,31 @@ ctkPluginEvent::Type ctkPluginEvent::getType() const
 {
 {
   return d->type;
   return d->type;
 }
 }
+
+QDebug operator<<(QDebug debug, ctkPluginEvent::Type eventType)
+{
+  switch (eventType)
+  {
+  case ctkPluginEvent::INSTALLED:       return debug << "INSTALLED";
+  case ctkPluginEvent::STARTED:         return debug << "STARTED";
+  case ctkPluginEvent::STOPPED:         return debug << "STOPPED";
+  case ctkPluginEvent::UPDATED:         return debug << "UPDATED";
+  case ctkPluginEvent::UNINSTALLED:     return debug << "UNINSTALLED";
+  case ctkPluginEvent::RESOLVED:        return debug << "RESOLVED";
+  case ctkPluginEvent::UNRESOLVED:      return debug << "UNRESOLVED";
+  case ctkPluginEvent::STARTING:        return debug << "STARTING";
+  case ctkPluginEvent::STOPPING:        return debug << "STOPPING";
+  case ctkPluginEvent::LAZY_ACTIVATION: return debug << "LAZY_ACTIVATION";
+
+  default: return debug << "Unknown plugin event type (" << static_cast<int>(eventType) << ")";
+  }
+}
+
+QDebug operator<<(QDebug debug, const ctkPluginEvent& event)
+{
+  if (event.isNull()) return debug << "NONE";
+
+  ctkPlugin* p = event.getPlugin();
+  debug.nospace() << event.getType() << " #" << p->getPluginId() << " (" << p->getLocation() << ")";
+  return debug.maybeSpace();
+}

+ 3 - 0
Libs/PluginFramework/ctkPluginEvent.h

@@ -200,4 +200,7 @@ public:
 
 
 };
 };
 
 
+CTK_PLUGINFW_EXPORT QDebug operator<<(QDebug debug, ctkPluginEvent::Type eventType);
+CTK_PLUGINFW_EXPORT QDebug operator<<(QDebug debug, const ctkPluginEvent& event);
+
 #endif // CTKPLUGINEVENT_H
 #endif // CTKPLUGINEVENT_H

+ 31 - 0
Libs/PluginFramework/ctkPluginFrameworkEvent.cpp

@@ -21,7 +21,10 @@
 
 
 #include "ctkPluginFrameworkEvent.h"
 #include "ctkPluginFrameworkEvent.h"
 
 
+#include "ctkPlugin.h"
+
 #include <QString>
 #include <QString>
+#include <QDebug>
 
 
 class ctkPluginFrameworkEventData : public QSharedData
 class ctkPluginFrameworkEventData : public QSharedData
 {
 {
@@ -111,3 +114,31 @@ ctkPluginFrameworkEvent::Type ctkPluginFrameworkEvent::getType() const
 {
 {
   return d->type;
   return d->type;
 }
 }
+
+QDebug operator<<(QDebug dbg, ctkPluginFrameworkEvent::Type type)
+{
+  switch (type)
+  {
+  case ctkPluginFrameworkEvent::STARTED:        return dbg << "STARTED";
+  case ctkPluginFrameworkEvent::ERROR:          return dbg << "ERROR";
+  case ctkPluginFrameworkEvent::WARNING:        return dbg << "WARNING";
+  case ctkPluginFrameworkEvent::INFO:           return dbg << "INFO";
+  case ctkPluginFrameworkEvent::STOPPED:        return dbg << "STOPPED";
+  case ctkPluginFrameworkEvent::STOPPED_UPDATE: return dbg << "STOPPED_UPDATE";
+  case ctkPluginFrameworkEvent::WAIT_TIMEDOUT:  return dbg << "WATI_TIMEDOUT";
+
+  default: return dbg << "unknown plugin framework event type (" << static_cast<int>(type) << ")";
+  }
+}
+
+QDebug operator<<(QDebug dbg, const ctkPluginFrameworkEvent& event)
+{
+  if (event.isNull()) return dbg << "NONE";
+
+  ctkPlugin* p = event.getPlugin();
+  QString err = event.getErrorString();
+
+  dbg.nospace() << event.getType() << " #" << p->getPluginId() << " ("
+      << p->getLocation() << ")" << (err.isEmpty() ? "" : " exception: ") << err;
+  return dbg.maybeSpace();
+}

+ 3 - 0
Libs/PluginFramework/ctkPluginFrameworkEvent.h

@@ -189,4 +189,7 @@ public:
   Type getType() const;
   Type getType() const;
 };
 };
 
 
+CTK_PLUGINFW_EXPORT QDebug operator<<(QDebug dbg, ctkPluginFrameworkEvent::Type type);
+CTK_PLUGINFW_EXPORT QDebug operator<<(QDebug dbg, const ctkPluginFrameworkEvent& event);
+
 #endif // CTKPLUGINFRAMEWORKEVENT_H
 #endif // CTKPLUGINFRAMEWORKEVENT_H

+ 22 - 14
Libs/PluginFramework/ctkServiceEvent.cpp

@@ -21,6 +21,11 @@
 
 
 #include "ctkServiceEvent.h"
 #include "ctkServiceEvent.h"
 
 
+#include "ctkServiceReference.h"
+#include "ctkPluginConstants.h"
+
+#include <QStringList>
+
 class ctkServiceEventData : public QSharedData
 class ctkServiceEventData : public QSharedData
 {
 {
 public:
 public:
@@ -90,21 +95,24 @@ QDebug operator<<(QDebug dbg, ctkServiceEvent::Type type)
 {
 {
   switch(type)
   switch(type)
   {
   {
-  case ctkServiceEvent::MODIFIED:
-    dbg.nospace() << "MODIFIED";
-    break;
-  case ctkServiceEvent::MODIFIED_ENDMATCH:
-    dbg.nospace() << "MODIFIED_ENDMATCH";
-    break;
-  case ctkServiceEvent::REGISTERED:
-    dbg.nospace() << "REGISTERED";
-    break;
-  case ctkServiceEvent::UNREGISTERING:
-    dbg.nospace() << "UNREGISTERING";
-    break;
-  default:
-    dbg.nospace() << "unknown event type " << static_cast<int>(type);
+  case ctkServiceEvent::MODIFIED:          return dbg << "MODIFIED";
+  case ctkServiceEvent::MODIFIED_ENDMATCH: return dbg << "MODIFIED_ENDMATCH";
+  case ctkServiceEvent::REGISTERED:        return dbg << "REGISTERED";
+  case ctkServiceEvent::UNREGISTERING:     return dbg << "UNREGISTERING";
+
+  default: return dbg << "unknown service event type (" << static_cast<int>(type) << ")";
   }
   }
+}
+
+QDebug operator<<(QDebug dbg, const ctkServiceEvent& event)
+{
+  if (event.isNull()) return dbg << "NONE";
+
+  ctkServiceReference sr = event.getServiceReference();
+  // Some events will not have a service reference
+  qlonglong sid = sr.getProperty(ctkPluginConstants::SERVICE_ID).toLongLong();
+  QStringList classes = sr.getProperty(ctkPluginConstants::OBJECTCLASS).toStringList();
 
 
+  dbg.nospace() << event.getType() << " " << sid << " objectClass=" << classes;
   return dbg.maybeSpace();
   return dbg.maybeSpace();
 }
 }

+ 2 - 1
Libs/PluginFramework/ctkServiceEvent.h

@@ -156,6 +156,7 @@ public:
 
 
 };
 };
 
 
-QDebug CTK_PLUGINFW_EXPORT operator<<(QDebug dbg, ctkServiceEvent::Type type);
+CTK_PLUGINFW_EXPORT QDebug operator<<(QDebug dbg, ctkServiceEvent::Type type);
+CTK_PLUGINFW_EXPORT QDebug operator<<(QDebug dbg, const ctkServiceEvent& event);
 
 
 #endif // CTKSERVICEEVENT_H
 #endif // CTKSERVICEEVENT_H