diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp index 157a19c4fd..fbe2808ed9 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.cpp @@ -1,166 +1,213 @@ /*=================================================================== 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(); - QVariant result; - if (m_viewMode == viewMode::imageXStatistic) { - if (!m_statistics.empty() && index.row() < m_statistics.front()->GetStatisticsAsOrderedVector().size() && index.column() < 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()); - } + 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()) + { + return m_statistics.at(index.column()); } + } + } - return result; + 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 (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."); + } } + 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 (Qt::DisplayRole == role) { - 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(); + 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()); } - 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()); + else if (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 bd46a3e727..2f47d0dc83 100644 --- a/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.h +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkImageStatisticsTableModel.h @@ -1,69 +1,77 @@ /*=================================================================== 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: - enum class viewMode { + /* + * different view modes: + * imageXStatistic: statistics(rows), images(columns) + */ + 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