diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.cpp index 78047bcec0..e8da1c95cb 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.cpp +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.cpp @@ -1,81 +1,81 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #include "QmitkImageStatisticsWidget.h" #include "QmitkStatisticsModelToStringConverter.h" #include "QmitkImageStatisticsTreeModel.h" #include #include QmitkImageStatisticsWidget::QmitkImageStatisticsWidget(QWidget* parent) : QWidget(parent) { m_Controls.setupUi(this); m_imageStatisticsModel = new QmitkImageStatisticsTreeModel(parent); CreateConnections(); m_ProxyModel = new QSortFilterProxyModel(this); m_Controls.treeViewStatistics->setEnabled(false); m_Controls.treeViewStatistics->setModel(m_ProxyModel); m_ProxyModel->setSourceModel(m_imageStatisticsModel); connect(m_imageStatisticsModel, &QmitkImageStatisticsTreeModel::dataAvailable, this, &QmitkImageStatisticsWidget::OnDataAvailable); connect(m_imageStatisticsModel, &QmitkImageStatisticsTreeModel::modelChanged, m_Controls.treeViewStatistics, &QTreeView::expandAll); } void QmitkImageStatisticsWidget::SetDataStorage(mitk::DataStorage* newDataStorage) { m_imageStatisticsModel->SetDataStorage(newDataStorage); } void QmitkImageStatisticsWidget::SetImageNodes(const std::vector& nodes) { m_imageStatisticsModel->SetImageNodes(nodes); } void QmitkImageStatisticsWidget::SetMaskNodes(const std::vector& nodes) { m_imageStatisticsModel->SetMaskNodes(nodes); } void QmitkImageStatisticsWidget::Reset() { m_imageStatisticsModel->Clear(); m_Controls.treeViewStatistics->setEnabled(false); m_Controls.buttonCopyImageStatisticsToClipboard->setEnabled(false); } void QmitkImageStatisticsWidget::CreateConnections() { connect(m_Controls.buttonCopyImageStatisticsToClipboard, &QPushButton::clicked, this, &QmitkImageStatisticsWidget::OnClipboardButtonClicked); } void QmitkImageStatisticsWidget::OnDataAvailable() { m_Controls.buttonCopyImageStatisticsToClipboard->setEnabled(true); m_Controls.treeViewStatistics->setEnabled(true); } void QmitkImageStatisticsWidget::OnClipboardButtonClicked() { QmitkStatisticsModelToStringConverter converter; converter.SetColumnDelimiter('\t'); - converter.SetTableModel(m_imageStatisticsModel); + converter.SetModel(m_imageStatisticsModel); converter.SetRootIndex(m_Controls.treeViewStatistics->rootIndex()); converter.SetIncludeHeaderData(true); QString clipboardAsString = converter.GetString(); QApplication::clipboard()->clear(); QApplication::clipboard()->setText(clipboardAsString, QClipboard::Clipboard); } diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsModelToStringConverter.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsModelToStringConverter.cpp index 5db7b4de92..9ddad668b6 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsModelToStringConverter.cpp +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsModelToStringConverter.cpp @@ -1,124 +1,128 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #include "QmitkStatisticsModelToStringConverter.h" #include "mitkExceptionMacro.h" QmitkStatisticsModelToStringConverter::QmitkStatisticsModelToStringConverter() {} -void QmitkStatisticsModelToStringConverter::SetTableModel(QmitkImageStatisticsTreeModel *model) +void QmitkStatisticsModelToStringConverter::SetModel(QmitkImageStatisticsTreeModel *model) { m_statisticsModel = model; } void QmitkStatisticsModelToStringConverter::SetRootIndex(QModelIndex rootIndex) { m_rootIndex = rootIndex; } QString QmitkStatisticsModelToStringConverter::GetString() const { if (m_statisticsModel == nullptr) { mitkThrow() << "Cannot convert TableModel to String: TableModel is nullptr"; } QString textData; int columns = m_statisticsModel->columnCount(); if (m_includeHeaderData) { for (int i = 0; i < columns; i++) { if (i > 0) { textData += m_columnDelimiter; } textData += m_statisticsModel->headerData(i, Qt::Horizontal, Qt::DisplayRole).toString(); } textData += m_rowDelimiter; } textData += Iterate(m_rootIndex, m_statisticsModel); return textData; } void QmitkStatisticsModelToStringConverter::SetRowDelimiter(QChar rowDelimiter) { m_rowDelimiter = rowDelimiter; } void QmitkStatisticsModelToStringConverter::SetColumnDelimiter(QChar columnDelimiter) { m_columnDelimiter = columnDelimiter; } void QmitkStatisticsModelToStringConverter::SetIncludeHeaderData(bool includeHeaderData) { m_includeHeaderData = includeHeaderData; } QString QmitkStatisticsModelToStringConverter::Iterate(const QModelIndex &index, const QmitkImageStatisticsTreeModel *model, - int depth) const + QString label) const { QString content; - if (index.isValid()) + if (model->hasChildren(index)) { - auto data = index.data(); - - if(static_cast(data.type()) == QMetaType::Double ) + if (index.isValid()) { - content = QString("%L1").arg(data.toDouble(), 0, 'f'); + label += index.data().toString() + QString(" >> "); } - else + + auto rows = model->rowCount(index); + for (int r = 0; r < rows; ++r) { - content = data.toString(); + auto childIndex = model->index(r, 0, index); + + if (model->hasChildren(childIndex)) + { + content += Iterate(childIndex, model, label); + } + else + { + content += label; + + auto cols = model->columnCount(index); + for (int c = 0; c < cols; ++c) + { + if (c > 0) + { + content += m_columnDelimiter; + } + + auto columnChildIndex = model->index(r, c, index); + content += Iterate(columnChildIndex, model, label); + } + content += m_rowDelimiter; + } } } - - auto rows = model->rowCount(index); - for (int r = 0; r < rows; ++r) + else { - auto childIndex = model->index(r, 0, index); - if (model->hasChildren(childIndex)) + if (index.isValid()) { - if (depth>1) + auto data = index.data(); + if (static_cast(data.type()) == QMetaType::Double) { - content += QString(" >> "); + content = QString("%L1").arg(data.toDouble(), 0, 'f'); } - content += Iterate(childIndex, model, ++depth); - } - else - { - auto cols = model->columnCount(index); - for (int c = 0; c < cols; ++c) + else { - if (c > 0) - { - content += m_columnDelimiter; - } - else - { - content += QString(" >> "); - } - - auto childIndex = model->index(r, c, index); - content += Iterate(childIndex, model, ++depth); + content = data.toString(); } - content += m_rowDelimiter; } } return content; } diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsModelToStringConverter.h b/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsModelToStringConverter.h index 091d7bdb6b..6a8117ab61 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsModelToStringConverter.h +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsModelToStringConverter.h @@ -1,63 +1,63 @@ /*============================================================================ The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center (DKFZ) All rights reserved. Use of this source code is governed by a 3-clause BSD license that can be found in the LICENSE file. ============================================================================*/ #ifndef QmitkTableModelToQString_H__INCLUDED #define QmitkTableModelToQString_H__INCLUDED #include #include /** \brief Converts the content of the statistics model to a string \details -The content of a table model is converted to a string. Each cell is converted to a string. Default +The content of a QmitkImageStatisticsTreeModel instance is converted to a string. Each cell is converted to a string. Default order: iteration over rows. The row separation delimiter (default: '\n') and the column separation delimiter (default: ',') can be chosen. It also can be chosen if the headers should be exported to the string. */ class MITKIMAGESTATISTICSUI_EXPORT QmitkStatisticsModelToStringConverter { public: QmitkStatisticsModelToStringConverter(); - void SetTableModel(QmitkImageStatisticsTreeModel *model); + void SetModel(QmitkImageStatisticsTreeModel *model); void SetRootIndex(QModelIndex rootIndex); /** \brief Returns the string \exception throws exception if model is nullptr */ QString GetString() const; void SetRowDelimiter(QChar rowDelimiter); void SetColumnDelimiter(QChar columnDelimiter); /** \brief If header data (column/row captions) are exported */ void SetIncludeHeaderData(bool includeHeaderData); private: QString Iterate(const QModelIndex &index, const QmitkImageStatisticsTreeModel *model, - int depth = 0) const; + QString label = "") const; QmitkImageStatisticsTreeModel *m_statisticsModel = nullptr; QModelIndex m_rootIndex; QChar m_rowDelimiter = '\n'; QChar m_columnDelimiter = ','; bool m_includeHeaderData = false; }; #endif // QmitkTableModelToQString_H__INCLUDED