浏览代码

New classes ctkDICOMDataset and ctkDICOMPersonName

Marco Nolden 14 年之前
父节点
当前提交
b27b5c5b64

+ 5 - 3
Libs/DICOM/Core/CMakeLists.txt

@@ -20,10 +20,12 @@ SET(KIT_SRCS
   ctkDICOMQuery.cpp
   ctkDICOMQuery.h
   ctkDICOMRetrieve.cpp
-  ctkDICOMRetrieve.cpp
-  ctkDICOMDataset.h
+  ctkDICOMRetrieve.h
   ctkDICOMDataset.cpp
-  )
+  ctkDICOMDataset.h
+  ctkDICOMPersonName.cpp
+  ctkDICOMPersonName.h
+)
 
 # Headers that should run through moc
 SET(KIT_MOC_SRCS

+ 3 - 97
Libs/DICOM/Core/ctkDICOMDataset.cpp

@@ -18,105 +18,11 @@ class ctkDICOMDatasetPrivate
 
     bool m_DICOMDataSetInitialized;
 
-    static DcmDataDictionary* s_Dictionary;
+    static const QScopedPointer<const DcmDataDictionary> s_Dictionary;
 };
 
-DcmDataDictionary* ctkDICOMDatasetPrivate::s_Dictionary = new DcmDataDictionary(OFTrue, OFTrue);
-
-// ------------------------------------------- QPersonName -----------------------------------------------------------
-
-class QPersonNamePrivate
-{
-  public:
-
-    QPersonNamePrivate() {}
-
-    QString m_LastName;
-    QString m_FirstName;
-    QString m_MiddleName;
-    QString m_NamePrefix;
-    QString m_NameSuffix;
-};
-
-QPersonName::QPersonName(const QString& lastName,
-                         const QString& firstName,
-                         const QString& middleName,
-                         const QString& namePrefix,
-                         const QString& nameSuffix)
-:d_ptr(new QPersonNamePrivate)
-{
-  Q_D(QPersonName);
-  d->m_LastName = lastName;
-  d->m_FirstName = firstName;
-  d->m_MiddleName = middleName;
-  d->m_NamePrefix = namePrefix;
-  d->m_NameSuffix = nameSuffix;
-}
-
-QString QPersonName::GetFormattedName() const
-{
-  Q_D(const QPersonName);
-  QString result("");
-
-  /* not sortable
-  if (!m_NamePrefix.isEmpty())  result += QString("%1 ").arg(m_NamePrefix);
-  if (!m_FirstName.isEmpty())  result += QString("%1 " ).arg(m_FirstName);
-  if (!m_MiddleName.isEmpty()) result += QString("%1 ").arg(m_MiddleName);
-  if (!m_LastName.isEmpty())   result += QString("%1").arg(m_LastName);
-  if (!m_NameSuffix.isEmpty()) result += QString(", %1").arg(m_NameSuffix); // this might be unclean if last name is empty
-  */
-
-  if (!d->m_LastName.isEmpty())   result += QString("%1").arg(d->m_LastName);
-  if (!d->m_FirstName.isEmpty())  result += QString(", %1" ).arg(d->m_FirstName);
-  if (!d->m_MiddleName.isEmpty()) result += QString(" %1").arg(d->m_MiddleName);
-  if (!d->m_NameSuffix.isEmpty()) result += QString(", %1").arg(d->m_NameSuffix); // this might be unclean if last name is empty
-
-  return result;
-}
-
-QString QPersonName::GetLastName()  const
-{
-  Q_D(const QPersonName);
-  return d->m_LastName;
-}
-
-QString QPersonName::GetFirstName()  const
-{
-  Q_D(const QPersonName);
-  return d->m_FirstName;
-}
-
-QString QPersonName::GetMiddleName()  const
-{
-  Q_D(const QPersonName);
-  return d->m_MiddleName;
-}
-
-QString QPersonName::GetNamePrefix()  const
-{
-  Q_D(const QPersonName);
-  return d->m_NamePrefix;
-}
-
-QString QPersonName::GetNameSuffix()  const
-{
-  Q_D(const QPersonName);
-  return d->m_NameSuffix;
-}
-
-QPersonName::operator QString() const
-{
-  return this->GetFormattedName();
-}
-
-std::string QPersonName::toStdString() const
-{
-  // the complicated looking .toLocal8Bit().constData() is on purpose.
-  // if we'd use .toStdString(), the string would be converted to ASCII
-  // instead of the local 8bit character encoding.
-  // changes for correctly looking output of the strings are higher with .toLocal8Bit()
-  return this->GetFormattedName().toLocal8Bit().constData();
-}
+const QScopedPointer<const DcmDataDictionary> ctkDICOMDatasetPrivate::s_Dictionary(new DcmDataDictionary(OFTrue, OFTrue));
+// = QScopedPointer<const DcmDataDictionary>(new DcmDataDictionary(OFTrue, OFTrue));
 
 
 

+ 2 - 36
Libs/DICOM/Core/ctkDICOMDataset.h

@@ -23,6 +23,8 @@
 
 #include "ctkDICOMCoreExport.h"
 
+#include "ctkDICOMPersonName.h"
+
 #ifndef WIN32
   #define HAVE_CONFIG_H
 #endif
@@ -32,42 +34,6 @@
 
 class DcmDataDictionary;
 
-class QPersonNamePrivate;
-/**
-  \brief A person's name as modelled in DICOM.
-*/
-class CTK_DICOM_CORE_EXPORT QPersonName
-{
-  public:
-
-    QPersonName(const QString& lastName = QString::null,
-                const QString& firstName = QString::null,
-                const QString& middleName = QString::null,
-                const QString& namePrefix = QString::null,
-                const QString& nameSuffix = QString::null);
-
-    /**
-      \brief "Lastname, FirstName MiddleName, Suffix" (useful for alphabetical sorting)
-    */
-    QString GetFormattedName() const;
-
-    QString GetLastName() const;
-    QString GetFirstName() const;
-    QString GetMiddleName() const;
-    QString GetNamePrefix() const;
-    QString GetNameSuffix() const;
- 
-    /// cast operator
-    operator QString() const;
-    std::string toStdString() const;
-
-  private:
-    QScopedPointer<QPersonNamePrivate> d_ptr;
-    Q_DECLARE_PRIVATE(QPersonName);
-};
-
-typedef QList<QPersonName> QPersonNameList;
-Q_DECLARE_METATYPE(QPersonName);
 
 class ctkDICOMDatasetPrivate;
 /**

+ 106 - 0
Libs/DICOM/Core/ctkDICOMPersonName.cpp

@@ -0,0 +1,106 @@
+#include <QSharedData>
+
+#include "ctkDICOMPersonName.h"
+
+
+// ------------------------------------------- QPersonName -----------------------------------------------------------
+
+class QPersonNameData : public QSharedData
+{
+  public:
+
+    QString m_LastName;
+    QString m_FirstName;
+    QString m_MiddleName;
+    QString m_NamePrefix;
+    QString m_NameSuffix;
+};
+
+QPersonName::QPersonName(const QString& lastName,
+                         const QString& firstName,
+                         const QString& middleName,
+                         const QString& namePrefix,
+                         const QString& nameSuffix)
+:d(new QPersonNameData)
+{
+  d->m_LastName = lastName;
+  d->m_FirstName = firstName;
+  d->m_MiddleName = middleName;
+  d->m_NamePrefix = namePrefix;
+  d->m_NameSuffix = nameSuffix;
+}
+
+QPersonName::QPersonName(const QPersonName& other) : d(other.d)
+{
+}
+
+QPersonName& QPersonName::operator=(const QPersonName& other)
+{
+  d=other.d;
+  return *this;
+}
+
+QPersonName::~QPersonName()
+{
+}
+
+
+QString QPersonName::GetFormattedName() const
+{
+  QString result("");
+
+  /* not sortable
+  if (!m_NamePrefix.isEmpty())  result += QString("%1 ").arg(m_NamePrefix);
+  if (!m_FirstName.isEmpty())  result += QString("%1 " ).arg(m_FirstName);
+  if (!m_MiddleName.isEmpty()) result += QString("%1 ").arg(m_MiddleName);
+  if (!m_LastName.isEmpty())   result += QString("%1").arg(m_LastName);
+  if (!m_NameSuffix.isEmpty()) result += QString(", %1").arg(m_NameSuffix); // this might be unclean if last name is empty
+  */
+
+  if (!d->m_LastName.isEmpty())   result += QString("%1").arg(d->m_LastName);
+  if (!d->m_FirstName.isEmpty())  result += QString(", %1" ).arg(d->m_FirstName);
+  if (!d->m_MiddleName.isEmpty()) result += QString(" %1").arg(d->m_MiddleName);
+  if (!d->m_NameSuffix.isEmpty()) result += QString(", %1").arg(d->m_NameSuffix); // this might be unclean if last name is empty
+
+  return result;
+}
+
+QString QPersonName::GetLastName()  const
+{
+  return d->m_LastName;
+}
+
+QString QPersonName::GetFirstName()  const
+{
+  return d->m_FirstName;
+}
+
+QString QPersonName::GetMiddleName()  const
+{
+  return d->m_MiddleName;
+}
+
+QString QPersonName::GetNamePrefix()  const
+{
+  return d->m_NamePrefix;
+}
+
+QString QPersonName::GetNameSuffix()  const
+{
+  return d->m_NameSuffix;
+}
+
+QPersonName::operator QString() const
+{
+  return this->GetFormattedName();
+}
+
+std::string QPersonName::toStdString() const
+{
+  // the complicated looking .toLocal8Bit().constData() is on purpose.
+  // if we'd use .toStdString(), the string would be converted to ASCII
+  // instead of the local 8bit character encoding.
+  // changes for correctly looking output of the strings are higher with .toLocal8Bit()
+  return this->GetFormattedName().toLocal8Bit().constData();
+}
+

+ 54 - 0
Libs/DICOM/Core/ctkDICOMPersonName.h

@@ -0,0 +1,54 @@
+#ifndef CTKDICOMPERSONNAME_H
+#define CTKDICOMPERSONNAME_H
+
+#include "ctkDICOMCoreExport.h"
+
+#include <QString>
+#include <QSharedDataPointer>
+#include <QMetaType>
+
+#include <string>
+
+class QPersonNameData;
+/**
+  \brief A person's name as modelled in DICOM.
+*/
+class CTK_DICOM_CORE_EXPORT QPersonName
+{
+
+  public:
+
+    QPersonName(const QString& lastName = QString::null,
+                const QString& firstName = QString::null,
+                const QString& middleName = QString::null,
+                const QString& namePrefix = QString::null,
+                const QString& nameSuffix = QString::null);
+
+    QPersonName(const QPersonName& other);
+    QPersonName& operator=(const QPersonName& other);
+
+    virtual ~QPersonName();
+    /**
+      \brief "Lastname, FirstName MiddleName, Suffix" (useful for alphabetical sorting)
+    */
+    QString GetFormattedName() const;
+
+    QString GetLastName() const;
+    QString GetFirstName() const;
+    QString GetMiddleName() const;
+    QString GetNamePrefix() const;
+    QString GetNameSuffix() const;
+
+    /// cast operator
+    operator QString() const;
+    std::string toStdString() const;
+
+  private:
+    QSharedDataPointer<QPersonNameData> d;
+};
+
+typedef QList<QPersonName> QPersonNameList;
+Q_DECLARE_METATYPE(QPersonName);
+
+
+#endif // CTKDICOMPERSONNAME_H