瀏覽代碼

Re-factor ctkDICOMUtil to be consistent with ctkUtil

Add the methods dicomLogLevel and setDICOMLogLevel to "ctk" namespace

Update PythonQt external project to include fix allowing to wrap
QFlags.

The DICOM log level can be set from python doing:

 >>> import ctk
 >>> ctk.ctk.dicomLogLevel()
 16
 >>> ctk.ctk.dicomLogLevelAsString()
 u'Info'
 >>> ctk.ctk.setDICOMLogLevel(ctk.ctkErrorLogLevel.Critical)
 >>> ctk.ctk.dicomLogLevel()
 256
 >>> ctk.ctkErrorLogLevel.logLevelAsString(ctk.ctk.dicomLogLevel())
 u'Critical'
 >>> ctk.ctkErrorLogLevel.logLevelAsString(32)
 u'Warning'
 >>> ctk.ctk.setDICOMLogLevel(64)
 >>> ctk.ctk.dicomLogLevelAsString()
 u'Error'
Jean-Christophe Fillion-Robin 12 年之前
父節點
當前提交
acb8072ad9

+ 1 - 1
CMakeExternals/PythonQt.cmake

@@ -53,7 +53,7 @@ if(${add_project})
         message(FATAL_ERROR "error: Python is required to build ${PROJECT_NAME}")
       endif()
 
-      set(revision_tag 9c92fd212605bb5ff4d462323763acf65d87e4a7)
+      set(revision_tag e1f1c77d9675c3c5fb1cba19d2a32ace483eda2c)
       if(${proj}_REVISION_TAG)
         set(revision_tag ${${proj}_REVISION_TAG})
       endif()

+ 0 - 1
Libs/DICOM/Core/CMakeLists.txt

@@ -74,7 +74,6 @@ set(KIT_MOC_SRCS
   ctkDICOMQuery.h
   ctkDICOMRetrieve.h
   ctkDICOMTester.h
-  ctkDICOMUtil.h
   )
 
 # UI files

+ 24 - 0
Libs/DICOM/Core/ctkDICOMCorePythonQtDecorators.h

@@ -25,6 +25,7 @@
 #include <PythonQt.h>
 
 // CTK includes
+#include <ctkDICOMUtil.h>
 
 // NOTE:
 //
@@ -52,9 +53,32 @@ public Q_SLOTS:
 };
 
 //-----------------------------------------------------------------------------
+class PythonQtWrapper_CTKDICOMCore : public QObject
+{
+  Q_OBJECT
+
+public Q_SLOTS:
+  ctkErrorLogLevel::LogLevel static_ctk_dicomLogLevel()
+    {
+    return ctk::dicomLogLevel();
+    }
+
+  void static_ctk_setDICOMLogLevel(ctkErrorLogLevel::LogLevel level)
+    {
+    ctk::setDICOMLogLevel(level);
+    }
+
+  QString static_ctk_dicomLogLevelAsString()
+    {
+    return ctk::dicomLogLevelAsString();
+    }
+};
+
+//-----------------------------------------------------------------------------
 void initCTKDICOMCorePythonQtDecorators()
 {
   PythonQt::self()->addDecorators(new ctkDICOMCorePythonQtDecorators);
+  PythonQt::self()->registerCPPClass("ctk", "", "CTKDICOMCore", PythonQtCreateObject<PythonQtWrapper_CTKDICOMCore>);
 }
 
 #endif

+ 23 - 54
Libs/DICOM/Core/ctkDICOMUtil.cpp

@@ -19,82 +19,51 @@
 =========================================================================*/
 
 // Qt includes
-#include <QStringList>
-#include <QFlags>
+#include <QDebug>
 
-// ctkDICOMCore includes
+// CTK includes
 #include "ctkDICOMUtil.h"
-#include "ctkLogger.h"
 
 // DCMTK includes
 #include <dcmtk/dcmnet/diutil.h>
 
-static ctkLogger logger ( "org.commontk.dicom.DICOMUtil" );
-
 //------------------------------------------------------------------------------
-class ctkDICOMUtilPrivate
-{
-public:
-  ctkDICOMUtilPrivate() {};
-  ~ctkDICOMUtilPrivate() {};
-};
-
-//------------------------------------------------------------------------------
-// ctkDICOMUtil methods
-
-//------------------------------------------------------------------------------
-ctkDICOMUtil::ctkDICOMUtil(QObject* parentObject)
-  : QObject(parentObject)
-  , d_ptr(new ctkDICOMUtilPrivate)
-{
-}
-
-//------------------------------------------------------------------------------
-ctkDICOMUtil::~ctkDICOMUtil()
-{
-}
-
-//------------------------------------------------------------------------------
-void ctkDICOMUtil::setDICOMLogLevel(ctkDICOMUtil::LogLevel level)
+void ctk::setDICOMLogLevel(ctkErrorLogLevel::LogLevel level)
 {
   dcmtk::log4cplus::Logger log = dcmtk::log4cplus::Logger::getRoot();
-  
   switch (level)
     {
-    case ctkDICOMUtil::Trace: log.setLogLevel(OFLogger::TRACE_LOG_LEVEL); break;
-    case ctkDICOMUtil::Debug: log.setLogLevel(OFLogger::DEBUG_LOG_LEVEL); break;
-    case ctkDICOMUtil::Info: log.setLogLevel(OFLogger::INFO_LOG_LEVEL); break;
-    case ctkDICOMUtil::Warning: log.setLogLevel(OFLogger::WARN_LOG_LEVEL); break;
-    case ctkDICOMUtil::Error: log.setLogLevel(OFLogger::ERROR_LOG_LEVEL); break;
-    case ctkDICOMUtil::Fatal: log.setLogLevel(OFLogger::FATAL_LOG_LEVEL); break;
+    case ctkErrorLogLevel::Trace: log.setLogLevel(OFLogger::TRACE_LOG_LEVEL); break;
+    case ctkErrorLogLevel::Debug: log.setLogLevel(OFLogger::DEBUG_LOG_LEVEL); break;
+    case ctkErrorLogLevel::Info: log.setLogLevel(OFLogger::INFO_LOG_LEVEL); break;
+    case ctkErrorLogLevel::Warning: log.setLogLevel(OFLogger::WARN_LOG_LEVEL); break;
+    case ctkErrorLogLevel::Error: log.setLogLevel(OFLogger::ERROR_LOG_LEVEL); break;
+    case ctkErrorLogLevel::Fatal: log.setLogLevel(OFLogger::FATAL_LOG_LEVEL); break;
     default:
-      logger.info("ctkDICOMUtil::setDICOMLogLevel: Unsupported DICOM log level specified");
+      qWarning() << "Failed to set DICOM log level - Supported levels are Trace, Debug, "
+                    "Info, Warning, Error and Fatal !";
       break;
     }
 }
 
-ctkDICOMUtil::LogLevel ctkDICOMUtil::getDICOMLogLevel() const
+//------------------------------------------------------------------------------
+ctkErrorLogLevel::LogLevel ctk::dicomLogLevel()
 {
   dcmtk::log4cplus::Logger log = dcmtk::log4cplus::Logger::getRoot();
-  
   switch (log.getLogLevel())
     {
-    case OFLogger::TRACE_LOG_LEVEL: return ctkDICOMUtil::Trace;
-    case OFLogger::DEBUG_LOG_LEVEL: return ctkDICOMUtil::Debug;
-    case OFLogger::INFO_LOG_LEVEL: return ctkDICOMUtil::Info;
-    case OFLogger::WARN_LOG_LEVEL: return ctkDICOMUtil::Warning;
-    case OFLogger::ERROR_LOG_LEVEL: return ctkDICOMUtil::Error;
-    case OFLogger::FATAL_LOG_LEVEL: return ctkDICOMUtil::Fatal;
-    default:
-      return ctkDICOMUtil::None;
+    case OFLogger::TRACE_LOG_LEVEL: return ctkErrorLogLevel::Trace;
+    case OFLogger::DEBUG_LOG_LEVEL: return ctkErrorLogLevel::Debug;
+    case OFLogger::INFO_LOG_LEVEL: return ctkErrorLogLevel::Info;
+    case OFLogger::WARN_LOG_LEVEL: return ctkErrorLogLevel::Warning;
+    case OFLogger::ERROR_LOG_LEVEL: return ctkErrorLogLevel::Error;
+    case OFLogger::FATAL_LOG_LEVEL: return ctkErrorLogLevel::Fatal;
+    default: return ctkErrorLogLevel::None;
     }
 }
 
-// --------------------------------------------------------------------------
-QString ctkDICOMUtil::DICOMLogLevel()const
+//------------------------------------------------------------------------------
+QString ctk::dicomLogLevelAsString()
 {
-  ctkDICOMUtil::LogLevel logLevel = getDICOMLogLevel();
-  QMetaEnum logLevelEnum = this->metaObject()->enumerator(0);
-  Q_ASSERT(QString("LogLevel").compare(logLevelEnum.name()) == 0);
-  return QLatin1String(logLevelEnum.valueToKey(logLevel));
+  return ctkErrorLogLevel::logLevelAsString(ctk::dicomLogLevel());
 }

+ 7 - 38
Libs/DICOM/Core/ctkDICOMUtil.h

@@ -21,49 +21,18 @@
 #ifndef __ctkDICOMUtil_h
 #define __ctkDICOMUtil_h
 
-// Qt includes 
-#include <QObject>
-#include <QString>
-
 // CTK includes
 #include "ctkDICOMCoreExport.h"
-#include "ctkDICOMDatabase.h"
+#include "ctkErrorLogModel.h"
+
+namespace ctk {
 
-class ctkDICOMUtilPrivate;
+void CTK_DICOM_CORE_EXPORT setDICOMLogLevel(ctkErrorLogLevel::LogLevel level);
 
-class CTK_DICOM_CORE_EXPORT ctkDICOMUtil : public QObject
-{
-  Q_OBJECT
-  Q_FLAGS(LogLevel)
-public:
-   enum LogLevel
-    {
-    None     = 0x0,
-    Unknown  = 0x1,
-    Status   = 0x2,
-    Trace    = 0x4,
-    Debug    = 0x8,
-    Info     = 0x10,
-    Warning  = 0x20,
-    Error    = 0x40,
-    Critical = 0x80,
-    Fatal    = 0x100
-    };
-  Q_DECLARE_FLAGS(LogLevels, LogLevel)
-  Q_ENUMS(LogLevel)
- 
-  explicit ctkDICOMUtil(QObject* parent = 0);
-  virtual ~ctkDICOMUtil();
+ctkErrorLogLevel::LogLevel CTK_DICOM_CORE_EXPORT dicomLogLevel();
 
-  Q_INVOKABLE void setDICOMLogLevel(LogLevel level);
-  Q_INVOKABLE LogLevel getDICOMLogLevel() const;
-  Q_INVOKABLE QString DICOMLogLevel() const;
+QString CTK_DICOM_CORE_EXPORT dicomLogLevelAsString();
 
-protected:
-  QScopedPointer<ctkDICOMUtilPrivate> d_ptr;
+} // end of ctk namespace
 
-private:
-  Q_DECLARE_PRIVATE(ctkDICOMUtil);
-  Q_DISABLE_COPY(ctkDICOMUtil);
-};
 #endif