diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp index 1ab75e25a1..959e3b5688 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp @@ -1,212 +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 (parent.isValid()) + { + return 0; + } - if (m_viewMode == ViewMode::imageXStatistic) - { if (!m_statistics.empty()){ return static_cast(m_statistics.front()->GetStatisticsAsOrderedVector().size()); } else { return 0; } - } - else - { - throw mitk::Exception("Cannot count rows: View mode not yet implemented."); - } - - } int QmitkImageStatisticsTableModel::columnCount(const QModelIndex &parent) const { - if (parent.isValid()) - { - return 0; - } + if (parent.isValid()) + return 0; - if (m_viewMode == ViewMode::imageXStatistic) - { return static_cast(m_statistics.size()); - } - else - { - throw mitk::Exception("Cannot count columns: View mode not yet implemented."); - } - } QVariant QmitkImageStatisticsTableModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); - auto statisticsVector = GetStatisticsContainer(index,role); - QVariant result = GetStatisticsValue(statisticsVector,index); - - return result; -} - -mitk::StatisticsContainer::ConstPointer QmitkImageStatisticsTableModel::GetStatisticsContainer(const QModelIndex &index, const int role) const -{ - if (Qt::DisplayRole == role) - { - if (m_viewMode == ViewMode::imageXStatistic) - { - if(index.column() < static_cast(m_statistics.size()) && !m_statistics.empty()) + QVariant result; + if (m_viewMode == viewMode::imageXStatistic) { + if (!m_statistics.empty() && index.row() < m_statistics.front()->GetStatisticsAsOrderedVector().size() && index.column() < m_statistics.size()) { - return m_statistics.at(index.column()); - } - - } - } - - return nullptr; -} - -QVariant QmitkImageStatisticsTableModel::GetStatisticsValue(const auto &statisticsContainer, const QModelIndex &index) const -{ - if(statisticsContainer == nullptr) - { - throw mitk::Exception("Cannot get statistics value: Statistic Container is Null"); - } + 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()); + } - if (m_viewMode == ViewMode::imageXStatistic) - { - if(index.row() < static_cast(m_statistics.front()->GetStatisticsAsOrderedVector().size())) - { - auto statisticsVector = statisticsContainer->GetStatisticsAsOrderedVector(); - auto statisticsValueString = statisticsVector.at(index.row()).second; - return QVariant(QString::fromStdString(statisticsValueString)); - } - else - { - throw mitk::Exception("Cannot get statistics value: Index out of bounds."); + } } - } - else - { - throw mitk::Exception("Cannot get statistics value: View mode not yet implemented."); - } + 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) + if ((Qt::DisplayRole == role) && (Qt::Horizontal == orientation)) { - if (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()); + 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::Vertical == orientation) - { - if (!m_statistics.empty()) { - if (m_viewMode == ViewMode::imageXStatistic) { - return QVariant(m_statisticNames.at(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); } } emit endResetModel(); emit dataChanged(QModelIndex(), QModelIndex()); } void QmitkImageStatisticsTableModel::SetImageNodes(const std::vector& nodes) { std::vector tempNodes; for (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) +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/QmitkImageStatisticsTableModel.h b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.h index 2f47d0dc83..bd46a3e727 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.h +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.h @@ -1,77 +1,69 @@ /*=================================================================== 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 QmitkImageStatisticsTableModel_h #define QmitkImageStatisticsTableModel_h #include //MITK #include #include #include /*! \class QmitkImageStatisticsTableModel Model that takes a mitk::StatisticsContainer and represents it as model in context of the QT view-model-concept. */ class MITKIMAGESTATISTICSUI_EXPORT QmitkImageStatisticsTableModel : public QAbstractTableModel { Q_OBJECT public: - /* - * different view modes: - * imageXStatistic: statistics(rows), images(columns) - */ - enum class ViewMode { + enum class viewMode { imageXStatistic, imageXMask }; QmitkImageStatisticsTableModel(QObject *parent = nullptr); virtual ~QmitkImageStatisticsTableModel() {}; void SetStatistics(const std::vector& statistics); void SetImageNodes(const std::vector& nodes); void SetMaskNodes(const std::vector& nodes); - void SetViewMode(ViewMode m); + void SetViewMode(viewMode m); void SetStatisticsToShow(const std::vector& statisticNames); + void SetStatisticsToIgnore(const std::vector& statisticNames); void Clear(); virtual Qt::ItemFlags flags(const QModelIndex &index) const override; virtual QVariant data(const QModelIndex &index, int role) const override; virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const override; virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override; - -protected: - mitk::StatisticsContainer::ConstPointer GetStatisticsContainer(const QModelIndex &index, const int role) const; - QVariant GetStatisticsValue(const auto &statisticContainer, const QModelIndex &index) const; - - private: std::vector m_statistics; std::vector m_imageNodes; std::vector m_maskNodes; std::vector m_statisticNamesToShow; + std::vector m_statisticNamesToIgnore; std::vector m_statisticNames; - ViewMode m_viewMode = ViewMode::imageXStatistic; + viewMode m_viewMode = viewMode::imageXStatistic; }; #endif // mitkQmitkImageStatisticsTableModel_h