|
@@ -43,6 +43,7 @@ public:
|
|
~ctkDICOMObjectListWidgetPrivate();
|
|
~ctkDICOMObjectListWidgetPrivate();
|
|
void populateDICOMObjectTreeView(const QString& fileName);
|
|
void populateDICOMObjectTreeView(const QString& fileName);
|
|
void setPathLabel(const QString& currentFile);
|
|
void setPathLabel(const QString& currentFile);
|
|
|
|
+ QString dicomObjectModelAsString(QModelIndex parent = QModelIndex(), int indent = 0);
|
|
|
|
|
|
QString currentFile;
|
|
QString currentFile;
|
|
QStringList fileList;
|
|
QStringList fileList;
|
|
@@ -76,6 +77,49 @@ void ctkDICOMObjectListWidgetPrivate::setPathLabel(const QString& currentFile)
|
|
currentPathLabel->setText(currentFile);
|
|
currentPathLabel->setText(currentFile);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+// --------------------------------------------------------------------------
|
|
|
|
+QString ctkDICOMObjectListWidgetPrivate::dicomObjectModelAsString(QModelIndex parent /*=QModelIndex()*/, int indent /*=0*/)
|
|
|
|
+{
|
|
|
|
+ QString dump;
|
|
|
|
+ QString indentString(indent, '\t'); // add tab characters, (indent) number of times
|
|
|
|
+#ifdef WIN32
|
|
|
|
+ QString newLine = "\r\n";
|
|
|
|
+#else
|
|
|
|
+ QString newLine = "\n";
|
|
|
|
+#endif
|
|
|
|
+ for (int r = 0; r < this->dicomObjectModel->rowCount(parent); ++r)
|
|
|
|
+ {
|
|
|
|
+ dump += indentString;
|
|
|
|
+ for (int c = 0; c < this->dicomObjectModel->columnCount(); ++c)
|
|
|
|
+ {
|
|
|
|
+ QModelIndex index = this->dicomObjectModel->index(r, c, parent);
|
|
|
|
+ QString name = this->dicomObjectModel->data(index).toString();
|
|
|
|
+ if (c == 0)
|
|
|
|
+ {
|
|
|
|
+ // Replace round brackets by square brackets.
|
|
|
|
+ // If the text is copied into Excel, Excel would recognize tag (0008,0012)
|
|
|
|
+ // as a negative number (-80,012). Instead, [0008,0012] is displayed fine.
|
|
|
|
+ name.replace('(', '[');
|
|
|
|
+ name.replace(')', ']');
|
|
|
|
+ dump += name;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ dump += "\t" + name;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ dump += newLine;
|
|
|
|
+ // here is your applicable code
|
|
|
|
+ QModelIndex index0 = this->dicomObjectModel->index(r, 0, parent);
|
|
|
|
+ if (this->dicomObjectModel->hasChildren(index0))
|
|
|
|
+ {
|
|
|
|
+ dump += dicomObjectModelAsString(index0, indent+1);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return dump;
|
|
|
|
+}
|
|
|
|
+
|
|
//----------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------
|
|
// ctkDICOMObjectListWidget methods
|
|
// ctkDICOMObjectListWidget methods
|
|
|
|
|
|
@@ -95,6 +139,7 @@ ctkDICOMObjectListWidget::ctkDICOMObjectListWidget(QWidget* _parent):Superclass(
|
|
connect(d->dcmObjectTreeView, SIGNAL(doubleClicked(const QModelIndex&))
|
|
connect(d->dcmObjectTreeView, SIGNAL(doubleClicked(const QModelIndex&))
|
|
,this, SLOT(openLookupUrl(const QModelIndex&)));
|
|
,this, SLOT(openLookupUrl(const QModelIndex&)));
|
|
connect(d->copyPathPushButton , SIGNAL(clicked(bool)),this, SLOT(copyPath()));
|
|
connect(d->copyPathPushButton , SIGNAL(clicked(bool)),this, SLOT(copyPath()));
|
|
|
|
+ connect(d->copyMetadataPushButton, SIGNAL(clicked(bool)), this, SLOT(copyMetadata()));
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
//----------------------------------------------------------------------------
|
|
@@ -116,11 +161,10 @@ void ctkDICOMObjectListWidget::setFileList(const QStringList& fileList)
|
|
{
|
|
{
|
|
Q_D(ctkDICOMObjectListWidget);
|
|
Q_D(ctkDICOMObjectListWidget);
|
|
d->fileList = fileList;
|
|
d->fileList = fileList;
|
|
- if (d-> fileList.size()> 0)
|
|
|
|
|
|
+ if (d->fileList.size() > 0)
|
|
{
|
|
{
|
|
d->currentFile = d->fileList[0];
|
|
d->currentFile = d->fileList[0];
|
|
d->setPathLabel(d->currentFile );
|
|
d->setPathLabel(d->currentFile );
|
|
- d->currentPathLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
|
|
|
|
d->populateDICOMObjectTreeView(d->currentFile );
|
|
d->populateDICOMObjectTreeView(d->currentFile );
|
|
d->fileSliderWidget->setMaximum(fileList.size()-1);
|
|
d->fileSliderWidget->setMaximum(fileList.size()-1);
|
|
}
|
|
}
|
|
@@ -167,3 +211,20 @@ void ctkDICOMObjectListWidget::copyPath()
|
|
QClipboard *clipboard = QApplication::clipboard();
|
|
QClipboard *clipboard = QApplication::clipboard();
|
|
clipboard->setText(d->currentFile);
|
|
clipboard->setText(d->currentFile);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+// --------------------------------------------------------------------------
|
|
|
|
+
|
|
|
|
+QString ctkDICOMObjectListWidget::metadataAsText()
|
|
|
|
+{
|
|
|
|
+ Q_D(ctkDICOMObjectListWidget);
|
|
|
|
+ return d->dicomObjectModelAsString();
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+// --------------------------------------------------------------------------
|
|
|
|
+
|
|
|
|
+void ctkDICOMObjectListWidget::copyMetadata()
|
|
|
|
+{
|
|
|
|
+ Q_D(ctkDICOMObjectListWidget);
|
|
|
|
+ QClipboard *clipboard = QApplication::clipboard();
|
|
|
|
+ clipboard->setText(metadataAsText());
|
|
|
|
+}
|