diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp index 959e3b5688..75a96af145 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp @@ -1,165 +1,165 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkImageStatisticsTableModel.h" QmitkImageStatisticsTableModel::QmitkImageStatisticsTableModel(QObject *parent) : QAbstractTableModel(parent) {} int QmitkImageStatisticsTableModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) { return 0; } if (!m_statistics.empty()){ return static_cast(m_statistics.front()->GetStatisticsAsOrderedVector().size()); } else { return 0; } } int QmitkImageStatisticsTableModel::columnCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return static_cast(m_statistics.size()); } QVariant QmitkImageStatisticsTableModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); QVariant result; if (m_viewMode == viewMode::imageXStatistic) { - if (!m_statistics.empty() && index.row() < m_statistics.front()->GetStatisticsAsOrderedVector().size() && index.column() < m_statistics.size()) + if (!m_statistics.empty() && index.row() < static_cast(m_statistics.front()->GetStatisticsAsOrderedVector().size()) && index.column() < static_cast(m_statistics.size())) { if (Qt::DisplayRole == role) { auto statistics = m_statistics.at(index.column()); auto statisticsVector = statistics->GetStatisticsAsOrderedVector(); auto statisticsValueString = statisticsVector.at(index.row()).second; result = QVariant(QString::fromStdString(statisticsValueString)); } else if (Qt::UserRole == role) { result = QVariant(index.row()); } } } return result; } Qt::ItemFlags QmitkImageStatisticsTableModel::flags(const QModelIndex &index) const { Qt::ItemFlags flags = QAbstractItemModel::flags(index); return flags; } QVariant QmitkImageStatisticsTableModel::headerData(int section, Qt::Orientation orientation, int role) const { if ((Qt::DisplayRole == role) && (Qt::Horizontal == orientation)) { if (!m_imageNodes.empty()) { if (m_viewMode == viewMode::imageXStatistic) { std::string maskName; if (!m_maskNodes.empty() && m_maskNodes.size() == m_imageNodes.size()) { maskName = " / " + m_maskNodes.at(section)->GetName(); } return QVariant((m_imageNodes.at(section)->GetName() + maskName + std::to_string(section)).c_str()); } } } else if ((Qt::DisplayRole == role) && (Qt::Vertical == orientation)){ if (!m_statistics.empty()) { if (m_viewMode == viewMode::imageXStatistic) { return QVariant(m_statisticNames.at(section).c_str()); } } } return QVariant(); } void QmitkImageStatisticsTableModel::SetStatistics(const std::vector& statistics) { emit beginResetModel(); m_statistics = statistics; if (m_statisticNames.empty() && !statistics.empty()) { auto firstStatisticAsMap = statistics.front()->GetStatisticsAsOrderedVector(); for (const auto& keyValue : firstStatisticAsMap) { - m_statisticNames.push_back(keyValue.first); + m_statisticNames.push_back(keyValue.first); } } emit endResetModel(); emit dataChanged(QModelIndex(), QModelIndex()); } void QmitkImageStatisticsTableModel::SetImageNodes(const std::vector& nodes) { std::vector tempNodes; - for (int i = 0; i < nodes.size(); i++) + for (unsigned int i = 0; i < nodes.size(); i++) { int timeSteps = nodes.at(i)->GetData()->GetTimeSteps(); for (int j = 0; j < timeSteps; j++) { tempNodes.push_back(nodes.at(i)); } } m_imageNodes = tempNodes; } void QmitkImageStatisticsTableModel::SetMaskNodes(const std::vector& nodes) { m_maskNodes = nodes; } void QmitkImageStatisticsTableModel::SetViewMode(viewMode m) { m_viewMode = m; } void QmitkImageStatisticsTableModel::SetStatisticsToShow(const std::vector& statisticNames) { m_statisticNamesToShow = statisticNames; } void QmitkImageStatisticsTableModel::SetStatisticsToIgnore(const std::vector& statisticNames) { m_statisticNamesToIgnore = statisticNames; } void QmitkImageStatisticsTableModel::Clear() { emit beginResetModel(); m_statistics.clear(); m_imageNodes.clear(); m_maskNodes.clear(); m_statisticNamesToIgnore.clear(); m_statisticNamesToShow.clear(); m_statisticNames.clear(); emit endResetModel(); emit dataChanged(QModelIndex(), QModelIndex()); } diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.cpp index 8c4625a82c..8153f035a4 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.cpp +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.cpp @@ -1,92 +1,99 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "QmitkImageStatisticsWidget.h" #include "QmitkTableModelToStringConverter.h" - #include #include QmitkImageStatisticsWidget::QmitkImageStatisticsWidget(QWidget* parent) : QWidget(parent) { m_Controls.setupUi(this); m_imageStatisticsModel = new QmitkImageStatisticsTableModel(parent); + m_ProxyModel = new QmitkStatisticsSortFilterProxyModel(this); m_Controls.checkBox4dCompleteTable->setVisible(false); CreateConnections(); } void QmitkImageStatisticsWidget::SetStatistics(const std::vector& sc) { m_imageStatisticsModel->SetStatistics(sc); - QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); - proxyModel->setSourceModel(m_imageStatisticsModel); - m_Controls.tableViewStatistics->setModel(proxyModel); + //QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); + m_ProxyModel->setSourceModel(m_imageStatisticsModel); + m_Controls.tableViewStatistics->setModel(m_ProxyModel); m_Controls.tableViewStatistics->resizeColumnsToContents(); m_Controls.tableViewStatistics->resizeRowsToContents(); EnableAllGUIElements(); } 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() { DisableAllGUIElements(); m_imageStatisticsModel->Clear(); } void QmitkImageStatisticsWidget::CreateConnections() { - connect(m_Controls.buttonCopyImageStatisticsToClipboard, &QPushButton::clicked, this, &QmitkImageStatisticsWidget::OnClipboardButtonClicked); + connect(m_Controls.buttonCopyImageStatisticsToClipboard, &QPushButton::clicked, this, &QmitkImageStatisticsWidget::OnClipboardButtonClicked); + connect(m_Controls.checkBoxAdvancedStatistics, &QCheckBox::clicked, this, &QmitkImageStatisticsWidget::OnShowAdvancedStatisticsClicked); } void QmitkImageStatisticsWidget::EnableAllGUIElements() { this->setEnabled(true); m_Controls.buttonCopyImageStatisticsToClipboard->setEnabled(true); //temporarily disabled because 4D clipboard functionality is not implemented yet //m_Controls.checkBox4dCompleteTable->setEnabled(true); m_Controls.tableViewStatistics->setEnabled(true); m_Controls.groupBoxStatistics->setEnabled(true); } void QmitkImageStatisticsWidget::DisableAllGUIElements() { this->setEnabled(false); m_Controls.buttonCopyImageStatisticsToClipboard->setEnabled(false); m_Controls.checkBox4dCompleteTable->setEnabled(false); m_Controls.tableViewStatistics->setEnabled(false); m_Controls.groupBoxStatistics->setEnabled(false); } void QmitkImageStatisticsWidget::OnClipboardButtonClicked() { QmitkTableModelToStringConverter converter; converter.SetTableModel(m_imageStatisticsModel); converter.SetIncludeHeaderData(true); converter.SetColumnDelimiter('\t'); QString clipboardAsString = converter.GetString(); QApplication::clipboard()->setText(clipboardAsString, QClipboard::Clipboard); } + +void QmitkImageStatisticsWidget::OnShowAdvancedStatisticsClicked(bool showAdvancedStatistic) +{ + m_ProxyModel->SetShowAdvancedStatistic(showAdvancedStatistic); +} + diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.h b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.h index eb5c3bd002..0dfe145c09 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.h +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.h @@ -1,53 +1,56 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef QmitkImageStatisticsWidget_H__INCLUDED #define QmitkImageStatisticsWidget_H__INCLUDED #include #include #include #include +#include "QmitkStatisticsSortFilterProxyModel.h" //Qt #include class MITKIMAGESTATISTICSUI_EXPORT QmitkImageStatisticsWidget : public QWidget { Q_OBJECT public: QmitkImageStatisticsWidget(QWidget* parent = nullptr); - void SetStatistics(const std::vector& sc); + void SetStatistics(const std::vector& sc); void SetImageNodes(const std::vector& nodes); void SetMaskNodes(const std::vector& nodes); void Reset(); private: - void CreateConnections(); + void CreateConnections(); void EnableAllGUIElements(); void DisableAllGUIElements(); /** \brief Saves the image statistics to the clipboard */ void OnClipboardButtonClicked(); /** \brief Toogle GUI elements if histogram default bin size checkbox value changed. */ + void OnShowAdvancedStatisticsClicked(bool showAdvancedStatistic); private: - Ui::QmitkImageStatisticsControls m_Controls; + Ui::QmitkImageStatisticsControls m_Controls; QmitkImageStatisticsTableModel* m_imageStatisticsModel; + QmitkStatisticsSortFilterProxyModel *m_ProxyModel; }; #endif // QmitkImageStatisticsWidget_H__INCLUDED diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.ui b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.ui index 1dde1f32ca..acd3894240 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.ui +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsWidget.ui @@ -1,120 +1,127 @@ QmitkImageStatisticsControls 0 0 318 400 300 300 Form false 300 250 0 150 0 0 false 0 0 Copy to Clipboard Qt::Horizontal QSizePolicy::Fixed 20 20 false copy complete table Qt::Horizontal 40 20 + + + + Show advanced statistics + + + diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsSortFilterProxyModel.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsSortFilterProxyModel.cpp new file mode 100644 index 0000000000..d409bad3c4 --- /dev/null +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsSortFilterProxyModel.cpp @@ -0,0 +1,37 @@ +#include "QmitkStatisticsSortFilterProxyModel.h" + +QmitkStatisticsSortFilterProxyModel::QmitkStatisticsSortFilterProxyModel(QObject *parent) + : QSortFilterProxyModel(parent), m_ShowAdvancedStatistic(false) +{ + +} + +void QmitkStatisticsSortFilterProxyModel::SetShowAdvancedStatistic(bool showAdvancedStatistic) +{ + m_ShowAdvancedStatistic=showAdvancedStatistic; + invalidateFilter(); +} + +bool QmitkStatisticsSortFilterProxyModel::GetShowAdvancedStatistic() +{ + return m_ShowAdvancedStatistic; +} + +bool QmitkStatisticsSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const +{ + Q_UNUSED(source_parent); + + if (m_ShowAdvancedStatistic==true) + { + return true; + } + + if (source_row <= 9) + { + return true; + } + return false; +} + + + diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsSortFilterProxyModel.h b/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsSortFilterProxyModel.h new file mode 100644 index 0000000000..e64ad0ab23 --- /dev/null +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkStatisticsSortFilterProxyModel.h @@ -0,0 +1,22 @@ +#ifndef QMITKSTATISTICSSORTFILTERPROXYMODEL_H +#define QMITKSTATISTICSSORTFILTERPROXYMODEL_H + +#include + +class QmitkStatisticsSortFilterProxyModel : public QSortFilterProxyModel +{ + Q_OBJECT + +public: + QmitkStatisticsSortFilterProxyModel(QObject *parent = 0); + + void SetShowAdvancedStatistic(bool showAdvancedStatistic); + bool GetShowAdvancedStatistic(); + +protected: + bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; +private: + bool m_ShowAdvancedStatistic; +}; + +#endif // QMITKSTATISTICSSORTFILTERPROXYMODEL_H diff --git a/Modules/ImageStatisticsUI/files.cmake b/Modules/ImageStatisticsUI/files.cmake index 1dfe81aeba..36537387e9 100644 --- a/Modules/ImageStatisticsUI/files.cmake +++ b/Modules/ImageStatisticsUI/files.cmake @@ -1,29 +1,32 @@ set(CPP_FILES Qmitk/QmitkHistogramVisualizationWidget.cpp Qmitk/QmitkImageStatisticsWidget.cpp Qmitk/QmitkImageStatisticsTableModel.cpp Qmitk/QmitkIntensityProfileVisualizationWidget.cpp Qmitk/QmitkImageStatisticsCalculationJob.cpp Qmitk/QmitkTableModelToStringConverter.cpp + Qmitk/QmitkStatisticsSortFilterProxyModel.cpp ) set(H_FILES Qmitk/QmitkTableModelToStringConverter.h + Qmitk/QmitkStatisticsSortFilterProxyModel.h ) set(TPP_FILES ) set(UI_FILES Qmitk/QmitkHistogramVisualizationWidget.ui Qmitk/QmitkIntensityProfileVisualizationWidget.ui Qmitk/QmitkImageStatisticsWidget.ui ) set(MOC_H_FILES Qmitk/QmitkHistogramVisualizationWidget.h Qmitk/QmitkImageStatisticsWidget.h Qmitk/QmitkImageStatisticsTableModel.h Qmitk/QmitkIntensityProfileVisualizationWidget.h Qmitk/QmitkImageStatisticsCalculationJob.h + Qmitk/QmitkStatisticsSortFilterProxyModel.h )