diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkTableModelToStringConverter.cpp b/Modules/ImageStatisticsUI/Qmitk/QmitkTableModelToStringConverter.cpp new file mode 100644 index 0000000000..f276e497bf --- /dev/null +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkTableModelToStringConverter.cpp @@ -0,0 +1,127 @@ +/*=================================================================== + +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 "QmitkTableModelToStringConverter.h" + +#include + +QmitkTableModelToStringConverter::QmitkTableModelToStringConverter() +{ +} + +void QmitkTableModelToStringConverter::SetTableModel(QAbstractTableModel* model) +{ + m_tableModel = model; +} + +QString QmitkTableModelToStringConverter::GetString() const +{ + if (m_tableModel == nullptr) { + mitkThrow() << "Cannot convert TableModel to String: TableModel is nullptr"; + } + + if (m_transposeOutput) { + return GetStringTransposed(); + } + else { + return GetStringNonTransposed(); + } +} + +void QmitkTableModelToStringConverter::SetTransposeOutput(bool transposeOutput) +{ + m_transposeOutput = transposeOutput; +} + +void QmitkTableModelToStringConverter::SetLineDelimiter(QChar lineDelimiter) +{ + m_lineDelimiter = lineDelimiter; +} + +void QmitkTableModelToStringConverter::SetColumnDelimiter(QChar columnDelimiter) +{ + m_columnDelimiterWithSpace = columnDelimiter + QString(" "); +} + +void QmitkTableModelToStringConverter::SetIncludeHeaderData(bool includeHeaderData) +{ + m_includeHeaderData = includeHeaderData; +} + +QString QmitkTableModelToStringConverter::GetStringTransposed() const +{ + QString textData; + int rows = m_tableModel->rowCount(); + int columns = m_tableModel->columnCount(); + + if (m_includeHeaderData) { + textData += " "; + for (int i = 0; i < rows; i++) { + textData += m_columnDelimiterWithSpace; + textData += m_tableModel->headerData(i, Qt::Vertical).toString(); + } + textData += m_lineDelimiter; + } + + for (int i = 0; i < columns; i++) { + if (i > 0) { + textData += m_lineDelimiter; + } + if (m_includeHeaderData) { + textData += m_tableModel->headerData(i, Qt::Horizontal).toString() + m_columnDelimiterWithSpace; + } + for (int j = 0; j < rows; j++) { + if (j > 0) { + textData += m_columnDelimiterWithSpace; + } + textData += m_tableModel->data(m_tableModel->index(j, i)).toString(); + MITK_WARN << i << " " << j; + } + } + return textData; +} + +QString QmitkTableModelToStringConverter::GetStringNonTransposed() const +{ + QString textData; + int rows = m_tableModel->rowCount(); + int columns = m_tableModel->columnCount(); + + if (m_includeHeaderData) { + textData += " "; + for (int i = 0; i < columns; i++) { + textData += m_columnDelimiterWithSpace; + textData += m_tableModel->headerData(i, Qt::Horizontal).toString(); + } + textData += m_lineDelimiter; + } + + for (int i = 0; i < rows; i++) { + if (i > 0) { + textData += m_lineDelimiter; + } + if (m_includeHeaderData) { + textData += m_tableModel->headerData(i, Qt::Vertical).toString() + m_columnDelimiterWithSpace; + } + for (int j = 0; j < columns; j++) { + if (j > 0) { + textData += m_columnDelimiterWithSpace; + } + textData += m_tableModel->data(m_tableModel->index(i, j)).toString(); + } + } + return textData; +} diff --git a/Modules/ImageStatisticsUI/Qmitk/QmitkTableModelToStringConverter.h b/Modules/ImageStatisticsUI/Qmitk/QmitkTableModelToStringConverter.h new file mode 100644 index 0000000000..637bf34f22 --- /dev/null +++ b/Modules/ImageStatisticsUI/Qmitk/QmitkTableModelToStringConverter.h @@ -0,0 +1,67 @@ +/*=================================================================== + +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 QmitkTableModelToQString_H__INCLUDED +#define QmitkTableModelToQString_H__INCLUDED + +#include +#include + +/** +\brief Converts the content of a table model to a string + +\details +The content of a table model is converted (as-is or transposed) to a string. Each cell of the table +is converted to a string. Default oder: iteration over rows. The line separation delimiter (default: +'\n' and the column separation delimiter (default: ',') can be chosen. It also can be chosen if +the (colum/row) headers should be exported to the string. + +By default, the produced string is csv conform +*/ + +class MITKIMAGESTATISTICSUI_EXPORT QmitkTableModelToStringConverter +{ + +public: + QmitkTableModelToStringConverter(); + + void SetTableModel(QAbstractTableModel* model); + /** + \brief Returns the string + \exception throws exception if model is nullptr + */ + QString GetString() const; + /** + \brief If the table should be transposed (iterate over columns instead of rows) + */ + void SetTransposeOutput(bool transposeOutput); + void SetLineDelimiter(QChar lineDelimiter); + void SetColumnDelimiter(QChar columnDelimiter); + /** + \brief If header data (column/row captions) are exported + */ + void SetIncludeHeaderData(bool includeHeaderData); + +private: + QString GetStringTransposed() const; + QString GetStringNonTransposed() const; + + QAbstractTableModel* m_tableModel=nullptr; + bool m_transposeOutput=false; + QChar m_lineDelimiter = '\n'; + bool m_includeHeaderData = false; + QString m_columnDelimiterWithSpace = ", "; +}; +#endif // QmitkTableModelToQString_H__INCLUDED diff --git a/Modules/ImageStatisticsUI/files.cmake b/Modules/ImageStatisticsUI/files.cmake index e7f5a52732..9b02be1e28 100644 --- a/Modules/ImageStatisticsUI/files.cmake +++ b/Modules/ImageStatisticsUI/files.cmake @@ -1,24 +1,26 @@ set(CPP_FILES Qmitk/QmitkHistogramVisualizationWidget.cpp Qmitk/QmitkIntensityProfileVisualizationWidget.cpp Qmitk/QmitkImageStatisticsTableModel.cpp Qmitk/QmitkImageStatisticsCalculationJob.cpp + Qmitk/QmitkTableModelToQString.cpp ) set(H_FILES + Qmitk/QmitkTableModelToQString.h ) set(TPP_FILES ) set(UI_FILES Qmitk/QmitkHistogramVisualizationWidget.ui Qmitk/QmitkIntensityProfileVisualizationWidget.ui ) set(MOC_H_FILES Qmitk/QmitkHistogramVisualizationWidget.h Qmitk/QmitkIntensityProfileVisualizationWidget.h Qmitk/QmitkImageStatisticsTableModel.h Qmitk/QmitkImageStatisticsCalculationJob.h )