diff --git a/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExample.cpp b/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExample.cpp index 092fcde0cb..43153e3b2c 100644 --- a/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExample.cpp +++ b/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExample.cpp @@ -1,329 +1,386 @@ /*=================================================================== 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. ===================================================================*/ // Blueberry #include <berryIQtStyleManager.h> #include <berryWorkbenchPlugin.h> // Qmitk #include "ChartExample.h" // Qt #include <QRandomGenerator> const std::string ChartExample::VIEW_ID = "org.mitk.views.chartexample"; void ChartExample::SetFocus() { m_Controls.m_buttonCreateChart->setFocus(); } void ChartExample::CreateQtPartControl(QWidget *parent) { // create GUI widgets from the Qt Designer's .ui file m_Controls.setupUi(parent); connect(m_Controls.m_buttonCreateChart, &QPushButton::clicked, this, &ChartExample::CreateChart); connect(m_Controls.m_buttonClearChart, &QPushButton::clicked, this, &ChartExample::ClearChart); connect(m_Controls.m_buttonAddData, &QPushButton::clicked, this, &ChartExample::AddData); connect(m_Controls.m_checkBoxEnableDataX, &QCheckBox::toggled, this, &ChartExample::ShowXData); connect(m_Controls.m_checkBoxEnableErrors, &QCheckBox::toggled, this, &ChartExample::ShowErrorOptions); connect(m_Controls.m_checkBoxEnableXErrors, &QCheckBox::toggled, this, &ChartExample::ShowXErrorOptions); connect(m_Controls.m_checkBoxEnableYErrors, &QCheckBox::toggled, this, &ChartExample::ShowYErrorOptions); connect(m_Controls.m_doubleSpinBox_minZoomX, &QSpinBox::editingFinished, this, &ChartExample::AdaptZoomX); connect(m_Controls.m_doubleSpinBox_maxZoomX, &QSpinBox::editingFinished, this, &ChartExample::AdaptZoomX); connect(m_Controls.m_doubleSpinBox_minZoomY, &QSpinBox::editingFinished, this, &ChartExample::AdaptZoomY); connect(m_Controls.m_doubleSpinBox_maxZoomY, &QSpinBox::editingFinished, this, &ChartExample::AdaptZoomY); + connect(m_Controls.m_comboBoxChartType, &QComboBox::currentTextChanged, this, &ChartExample::AdaptDataGUI); m_Controls.m_groupBoxErrors->setVisible(false); m_Controls.m_groupBoxXErrors->setVisible(false); m_Controls.m_groupBoxYErrors->setVisible(false); m_Controls.m_lineEditDataXVector->setVisible(false); m_Controls.m_lineEditDataXVector->setText("0;1;2;3;4;5;6;7;8;9"); + ResetDataGUI(); m_Controls.m_doubleSpinBox_maxZoomX->setValue(10); m_Controls.m_doubleSpinBox_maxZoomY->setValue(10); FillRandomDataValues(); auto chartStyle = GetColorTheme(); m_Controls.m_Chart->SetTheme(chartStyle); m_Controls.m_lineEditXAxisLabel->setText("xLabel"); m_Controls.m_lineEditYAxisLabel->setText("yLabel"); m_ChartNameToChartType.emplace("bar", QmitkChartWidget::ChartType::bar); m_ChartNameToChartType.emplace("line", QmitkChartWidget::ChartType::line); m_ChartNameToChartType.emplace("spline", QmitkChartWidget::ChartType::spline); m_ChartNameToChartType.emplace("pie", QmitkChartWidget::ChartType::pie); m_ChartNameToChartType.emplace("area", QmitkChartWidget::ChartType::area); m_ChartNameToChartType.emplace("area-spline", QmitkChartWidget::ChartType::area_spline); m_ChartNameToChartType.emplace("scatter", QmitkChartWidget::ChartType::scatter); m_LineNameToLineType.emplace("solid", QmitkChartWidget::LineStyle::solid); m_LineNameToLineType.emplace("dashed", QmitkChartWidget::LineStyle::dashed); m_AxisScaleNameToAxisScaleType.emplace("linear", QmitkChartWidget::AxisScale::linear); m_AxisScaleNameToAxisScaleType.emplace("logarithmic", QmitkChartWidget::AxisScale::log); m_LegendPositionNameToLegendPositionType.emplace("bottom middle", QmitkChartWidget::LegendPosition::bottomMiddle); m_LegendPositionNameToLegendPositionType.emplace("bottom right", QmitkChartWidget::LegendPosition::bottomRight); m_LegendPositionNameToLegendPositionType.emplace("top right", QmitkChartWidget::LegendPosition::topRight); m_LegendPositionNameToLegendPositionType.emplace("top left", QmitkChartWidget::LegendPosition::topLeft); m_LegendPositionNameToLegendPositionType.emplace("middle right", QmitkChartWidget::LegendPosition::middleRight); } void ChartExample::FillRandomDataValues() { std::vector<double> numbers = GenerateRandomNumbers(10, 10.0); std::string text = ConvertToText(numbers); m_Controls.m_lineEditDataYVector->setText(QString::fromStdString(text)); m_Controls.m_lineEditDataLabel->setText("test" + QString::number(countForUID)); numbers = GenerateRandomNumbers(10, 10.0); text = ConvertToText(numbers); m_Controls.m_lineEditXErrorPlus->setText(QString::fromStdString(text)); numbers = GenerateRandomNumbers(10, 10.0); text = ConvertToText(numbers); m_Controls.m_lineEditXErrorMinus->setText(QString::fromStdString(text)); numbers = GenerateRandomNumbers(10, 10.0); text = ConvertToText(numbers); m_Controls.m_lineEditYErrorPlus->setText(QString::fromStdString(text)); numbers = GenerateRandomNumbers(10, 10.0); text = ConvertToText(numbers); m_Controls.m_lineEditYErrorMinus->setText(QString::fromStdString(text)); countForUID++; } void ChartExample::CreateChart() { auto dataYAxisScaleType = m_AxisScaleNameToAxisScaleType.at(m_Controls.m_comboBoxYAxisScale->currentText().toStdString()); auto xAxisLabel = m_Controls.m_lineEditXAxisLabel->text().toStdString(); auto yAxisLabel = m_Controls.m_lineEditYAxisLabel->text().toStdString(); auto showLegend = m_Controls.m_checkBoxShowLegend->isChecked(); auto legendPosition = m_LegendPositionNameToLegendPositionType.at(m_Controls.m_comboBoxLegendPosition->currentText().toStdString()); auto showDataPoints = m_Controls.m_checkBoxShowDataPoints->isChecked(); auto stackedData = m_Controls.m_checkBoxStackedData->isChecked(); auto showSubchart = m_Controls.m_checkBoxShowSubchart->isChecked(); auto title = m_Controls.title->text().toStdString(); m_Controls.m_Chart->SetTitle(title); m_Controls.m_Chart->SetYAxisScale(dataYAxisScaleType); m_Controls.m_Chart->SetXAxisLabel(xAxisLabel); m_Controls.m_Chart->SetYAxisLabel(yAxisLabel); m_Controls.m_Chart->SetShowLegend(showLegend); m_Controls.m_Chart->SetLegendPosition(legendPosition); m_Controls.m_Chart->SetShowErrorBars(true); m_Controls.m_Chart->SetShowDataPoints(showDataPoints); m_Controls.m_Chart->SetStackedData(stackedData); m_Controls.m_Chart->Show(showSubchart); } void ChartExample::ClearChart() { m_Controls.m_Chart->Clear(); m_Controls.m_plainTextEditDataView->clear(); } -std::vector<double> ChartExample::ConvertToVector(const QString &data, QChar delimiter) const +std::vector<double> ChartExample::ConvertToDoubleVector(const QString &data, QChar delimiter) const { std::vector<double> output; if (data.isEmpty()) { return output; } for (const QString entry : data.split(delimiter)) { output.push_back(entry.toDouble()); } return output; } +std::vector<std::string> ChartExample::ConvertToStringVector(const QString &data, QChar delimiter) const +{ + std::vector<std::string> output; + if (data.isEmpty()) + { + return output; + } + + for (const QString entry : data.split(delimiter)) + { + output.push_back(entry.toStdString()); + } + return output; +} + void ChartExample::AddData() { QString data = m_Controls.m_lineEditDataYVector->text(); - auto dataY = ConvertToVector(data); + auto dataY = ConvertToDoubleVector(data); auto chartType = m_ChartNameToChartType.at(m_Controls.m_comboBoxChartType->currentText().toStdString()); std::string dataLabel = m_Controls.m_lineEditDataLabel->text().toStdString(); std::string dataColor = m_Controls.m_lineEditColor->text().toStdString(); auto dataLineStyleType = m_LineNameToLineType.at(m_Controls.m_comboBoxLineStyle->currentText().toStdString()); if (m_Controls.m_checkBoxEnableDataX->isChecked()) { QString lineEditDataX = m_Controls.m_lineEditDataXVector->text(); - auto dataX = ConvertToVector(lineEditDataX); + auto dataX = ConvertToDoubleVector(lineEditDataX); if (dataX.size() != dataY.size()) { mitkThrow() << "data x and y size have to be equal"; } auto dataXandY = CreateMap(dataX, dataY); data = QString::fromStdString(ConvertToText(dataXandY)); m_Controls.m_Chart->AddData2D(dataXandY, dataLabel, chartType); } else { m_Controls.m_Chart->AddData1D(dataY, dataLabel, chartType); } if (!dataColor.empty()) { m_Controls.m_Chart->SetColor(dataLabel, dataColor); } + if (chartType == QmitkChartWidget::ChartType::pie) + { + QString pieLabelsData = m_Controls.m_lineEditPieDataLabel->text(); + if (!pieLabelsData.isEmpty()) + { + auto pieLabels = ConvertToStringVector(pieLabelsData); + m_Controls.m_Chart->SetPieLabels(pieLabels, dataLabel); + } + } if (m_Controls.m_checkBoxEnableErrors->isChecked()) { if (m_Controls.m_checkBoxEnableXErrors->isChecked()) { - auto errorsPlus = ConvertToVector(m_Controls.m_lineEditXErrorPlus->text()); - auto errorsMinus = ConvertToVector(m_Controls.m_lineEditXErrorMinus->text()); + auto errorsPlus = ConvertToDoubleVector(m_Controls.m_lineEditXErrorPlus->text()); + auto errorsMinus = ConvertToDoubleVector(m_Controls.m_lineEditXErrorMinus->text()); m_Controls.m_Chart->SetXErrorBars(m_Controls.m_lineEditDataLabel->text().toStdString(), errorsPlus, errorsMinus); } if (m_Controls.m_checkBoxEnableYErrors->isChecked()) { - auto errorsPlus = ConvertToVector(m_Controls.m_lineEditYErrorPlus->text()); - auto errorsMinus = ConvertToVector(m_Controls.m_lineEditYErrorMinus->text()); + auto errorsPlus = ConvertToDoubleVector(m_Controls.m_lineEditYErrorPlus->text()); + auto errorsMinus = ConvertToDoubleVector(m_Controls.m_lineEditYErrorMinus->text()); m_Controls.m_Chart->SetYErrorBars(m_Controls.m_lineEditDataLabel->text().toStdString(), errorsPlus, errorsMinus); } } m_Controls.m_Chart->SetLineStyle(dataLabel, dataLineStyleType); QString dataOverview; dataOverview.append(m_Controls.m_lineEditDataLabel->text()); dataOverview.append("(").append(m_Controls.m_comboBoxChartType->currentText()); if (!dataColor.empty()) { dataOverview.append(", ").append(dataColor.c_str()); } dataOverview.append(", ").append(m_Controls.m_comboBoxLineStyle->currentText()); dataOverview.append(")"); dataOverview.append(":").append(data); m_Controls.m_plainTextEditDataView->appendPlainText(dataOverview); FillRandomDataValues(); } void ChartExample::ShowXData(bool show) { m_Controls.m_lineEditDataXVector->setVisible(show); } void ChartExample::ShowErrorOptions(bool show) { m_Controls.m_groupBoxErrors->setVisible(show); } void ChartExample::ShowXErrorOptions(bool show) { m_Controls.m_groupBoxXErrors->setVisible(show); } void ChartExample::ShowYErrorOptions(bool show) { m_Controls.m_groupBoxYErrors->setVisible(show); } -void ChartExample::AdaptZoomX() { +void ChartExample::AdaptZoomX() +{ m_Controls.m_Chart->UpdateMinMaxValueXView(m_Controls.m_doubleSpinBox_minZoomX->value(), m_Controls.m_doubleSpinBox_maxZoomX->value()); } void ChartExample::AdaptZoomY() { m_Controls.m_Chart->UpdateMinMaxValueYView(m_Controls.m_doubleSpinBox_minZoomY->value(), m_Controls.m_doubleSpinBox_maxZoomY->value()); } +void ChartExample::AdaptDataGUI(const QString &chartType) +{ + ResetDataGUI(); + auto chartTypeEnum = m_ChartNameToChartType.at(chartType.toStdString()); + if (chartTypeEnum == QmitkChartWidget::ChartType::pie) + { + m_Controls.m_labelPieData->setVisible(true); + m_Controls.m_lineEditPieDataLabel->setVisible(true); + m_Controls.m_labelColor->setVisible(false); + m_Controls.m_lineEditColor->setVisible(false); + } + else if (chartTypeEnum == QmitkChartWidget::ChartType::line || chartTypeEnum == QmitkChartWidget::ChartType::area || + chartTypeEnum == QmitkChartWidget::ChartType::area_spline || + chartTypeEnum == QmitkChartWidget::ChartType::spline) + { + m_Controls.m_labelLineStyle->setVisible(true); + m_Controls.m_comboBoxLineStyle->setVisible(true); + } +} + +void ChartExample::ResetDataGUI() { + m_Controls.m_labelPieData->setVisible(false); + m_Controls.m_lineEditPieDataLabel->setVisible(false); + m_Controls.m_labelColor->setVisible(true); + m_Controls.m_lineEditColor->setVisible(true); + m_Controls.m_labelLineStyle->setVisible(false); + m_Controls.m_comboBoxLineStyle->setVisible(false); +} + std::vector<double> ChartExample::GenerateRandomNumbers(unsigned int amount, double max) const { QRandomGenerator gen; gen.seed(time(NULL)); std::vector<double> data; for (unsigned int i = 0; i < amount; i++) { data.push_back(gen.bounded(max)); } return data; } -std::map<double, double> ChartExample::CreateMap(std::vector<double> keys, - std::vector<double> values) const { +std::map<double, double> ChartExample::CreateMap(std::vector<double> keys, std::vector<double> values) const +{ std::map<double, double> aMap; std::transform(keys.begin(), keys.end(), values.begin(), std::inserter(aMap, aMap.end()), [](double a, double b) { return std::make_pair(a, b); }); return aMap; } std::string ChartExample::ConvertToText(std::vector<double> numbers, std::string delimiter) const { std::ostringstream oss; oss.precision(3); if (!numbers.empty()) { for (auto number : numbers) { oss << number << delimiter; } } auto aString = oss.str(); aString.pop_back(); return aString; } -std::string ChartExample::ConvertToText(std::map<double, double> numbers, std::string delimiter) const { +std::string ChartExample::ConvertToText(std::map<double, double> numbers, std::string delimiter) const +{ std::ostringstream oss; oss.precision(3); if (!numbers.empty()) { for (const auto keyValue : numbers) { oss << keyValue.first << ":" << keyValue.second << delimiter; } } auto aString = oss.str(); aString.pop_back(); return aString; } QmitkChartWidget::ColorTheme ChartExample::GetColorTheme() const { ctkPluginContext *context = berry::WorkbenchPlugin::GetDefault()->GetPluginContext(); ctkServiceReference styleManagerRef = context->getServiceReference<berry::IQtStyleManager>(); if (styleManagerRef) { auto styleManager = context->getService<berry::IQtStyleManager>(styleManagerRef); if (styleManager->GetStyle().name == "Dark") { return QmitkChartWidget::ColorTheme::darkstyle; } else { return QmitkChartWidget::ColorTheme::lightstyle; } } return QmitkChartWidget::ColorTheme::darkstyle; } diff --git a/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExample.h b/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExample.h index 8cf18c1aec..f07dc2f3c1 100644 --- a/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExample.h +++ b/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExample.h @@ -1,79 +1,79 @@ /*=================================================================== 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 ChartExample_h #define ChartExample_h #include <QmitkAbstractView.h> #include "ui_ChartExampleControls.h" /** \brief Basic example for use of module mitkChart \sa QmitkAbstractView \ingroup ${plugin_target}_internal */ class ChartExample : public QmitkAbstractView { // this is needed for all Qt objects that should have a Qt meta-object // (everything that derives from QObject and wants to have signal/slots) Q_OBJECT public: static const std::string VIEW_ID; protected: virtual void CreateQtPartControl(QWidget *parent) override; virtual void SetFocus() override; void CreateChart(); void ClearChart(); void AddData(); void ShowXData(bool show); void ShowErrorOptions(bool show); void ShowXErrorOptions(bool show); void ShowYErrorOptions(bool show); void AdaptZoomX(); void AdaptZoomY(); void AdaptDataGUI(const QString &chartType); void ResetDataGUI(); private: void FillRandomDataValues(); std::vector<double> GenerateRandomNumbers(unsigned int amount, double max) const; - std::vector<double> ConvertToVector(const QString& data, QChar delimiter=';') const; + std::vector<double> ConvertToDoubleVector(const QString &data, QChar delimiter = ';') const; std::vector<std::string> ConvertToStringVector(const QString &data, QChar delimiter = ';') const; std::map<double, double> CreateMap(std::vector<double> keys, std::vector<double> values) const; std::string ConvertToText(std::vector<double> numbers, std::string delimiter = ";") const; std::string ConvertToText(std::map<double, double> numbers, std::string delimiter = ";") const; QmitkChartWidget::ColorTheme GetColorTheme() const; std::map<std::string, QmitkChartWidget::ChartType> m_ChartNameToChartType; std::map<std::string, QmitkChartWidget::LineStyle> m_LineNameToLineType; std::map<std::string, QmitkChartWidget::AxisScale> m_AxisScaleNameToAxisScaleType; std::map<std::string, QmitkChartWidget::LegendPosition> m_LegendPositionNameToLegendPositionType; unsigned int countForUID = 0; Ui::ChartExampleControls m_Controls; }; #endif // ChartExample_h diff --git a/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExampleControls.ui b/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExampleControls.ui index 82daa5d965..1b2ad58200 100644 --- a/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExampleControls.ui +++ b/Plugins/org.mitk.gui.qt.chartExample/src/internal/ChartExampleControls.ui @@ -1,658 +1,678 @@ <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>ChartExampleControls</class> <widget class="QWidget" name="ChartExampleControls"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>455</width> <height>1054</height> </rect> </property> <property name="minimumSize"> <size> <width>0</width> <height>0</height> </size> </property> <property name="windowTitle"> <string>QmitkTemplate</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QToolBox" name="toolBox"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="currentIndex"> <number>0</number> </property> <widget class="QWidget" name="page"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>420</width> - <height>411</height> + <height>436</height> </rect> </property> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <attribute name="label"> <string>Data</string> </attribute> <layout class="QVBoxLayout" name="verticalLayout_7"> <item> <layout class="QFormLayout" name="formLayout"> <item row="0" column="0"> <widget class="QLabel" name="label"> <property name="text"> <string>data entry</string> </property> </widget> </item> <item row="0" column="1"> <layout class="QFormLayout" name="formLayout_6"> <item row="1" column="1"> <widget class="QLineEdit" name="m_lineEditDataYVector"/> </item> <item row="0" column="1"> <widget class="QLineEdit" name="m_lineEditDataXVector"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string/> </property> </widget> </item> <item row="0" column="0"> <widget class="QCheckBox" name="m_checkBoxEnableDataX"> <property name="text"> <string>x</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_13"> <property name="text"> <string>y:</string> </property> </widget> </item> </layout> </item> <item row="1" column="0"> <widget class="QCheckBox" name="m_checkBoxEnableErrors"> <property name="text"> <string>error</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QGroupBox" name="m_groupBoxErrors"> <property name="minimumSize"> <size> <width>0</width> <height>0</height> </size> </property> <property name="title"> <string>Error values</string> </property> <layout class="QVBoxLayout" name="verticalLayout_4"> <item> <layout class="QFormLayout" name="formLayout_3"> <item row="0" column="0"> <widget class="QCheckBox" name="m_checkBoxEnableYErrors"> <property name="text"> <string>y error</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QCheckBox" name="m_checkBoxEnableXErrors"> <property name="text"> <string>x error</string> </property> </widget> </item> <item row="2" column="1"> <widget class="QGroupBox" name="m_groupBoxXErrors"> <property name="minimumSize"> <size> <width>0</width> <height>0</height> </size> </property> <property name="title"> <string>GroupBox</string> </property> <layout class="QVBoxLayout" name="verticalLayout_6"> <item> <layout class="QFormLayout" name="formLayout_5"> <item row="0" column="0"> <widget class="QLabel" name="label_11"> <property name="text"> <string>plus error</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_12"> <property name="text"> <string>minus error</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QLineEdit" name="m_lineEditXErrorPlus"/> </item> <item row="1" column="1"> <widget class="QLineEdit" name="m_lineEditXErrorMinus"/> </item> </layout> </item> </layout> </widget> </item> <item row="0" column="1"> <widget class="QGroupBox" name="m_groupBoxYErrors"> <property name="minimumSize"> <size> <width>0</width> <height>0</height> </size> </property> <property name="title"> <string>GroupBox</string> </property> <layout class="QVBoxLayout" name="verticalLayout_5"> <item> <layout class="QFormLayout" name="formLayout_4"> <item row="0" column="0"> <widget class="QLabel" name="label_10"> <property name="text"> <string>plus error</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QLineEdit" name="m_lineEditYErrorPlus"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string/> </property> </widget> </item> <item row="1" column="1"> <widget class="QLineEdit" name="m_lineEditYErrorMinus"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="text"> <string/> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_6"> <property name="text"> <string>minus error</string> </property> </widget> </item> </layout> </item> </layout> </widget> </item> </layout> </item> </layout> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="label_5"> <property name="text"> <string>data label</string> </property> </widget> </item> <item row="2" column="1"> <widget class="QLineEdit" name="m_lineEditDataLabel"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> </widget> </item> <item row="3" column="1"> <widget class="QLineEdit" name="m_lineEditPieDataLabel"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="label_2"> <property name="text"> <string>Chart type</string> </property> </widget> </item> <item row="4" column="1"> <widget class="QComboBox" name="m_comboBoxChartType"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <item> <property name="text"> <string>bar</string> </property> </item> <item> <property name="text"> <string>line</string> </property> </item> <item> <property name="text"> <string>area</string> </property> </item> + <item> + <property name="text"> + <string>pie</string> + </property> + </item> <item> <property name="text"> <string>spline</string> </property> </item> <item> <property name="text"> <string>area-spline</string> </property> </item> <item> <property name="text"> <string>scatter</string> </property> </item> </widget> </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_7"> + <item row="5" column="0"> + <widget class="QLabel" name="m_labelColor"> <property name="text"> <string>Color</string> </property> </widget> </item> - <item row="4" column="1"> + <item row="5" column="1"> <widget class="QLineEdit" name="m_lineEditColor"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> </widget> </item> - <item row="5" column="0"> - <widget class="QLabel" name="label_8"> + <item row="6" column="0"> + <widget class="QLabel" name="m_labelLineStyle"> <property name="text"> <string>Line style</string> </property> </widget> </item> - <item row="5" column="1"> + <item row="6" column="1"> <widget class="QComboBox" name="m_comboBoxLineStyle"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <item> <property name="text"> <string>solid</string> </property> </item> <item> <property name="text"> <string>dashed</string> </property> </item> </widget> </item> + <item row="3" column="0"> + <widget class="QLabel" name="m_labelPieData"> + <property name="text"> + <string>pie data label</string> + </property> + </widget> + </item> </layout> </item> <item> <widget class="QPushButton" name="m_buttonAddData"> <property name="text"> <string>Add data</string> </property> </widget> </item> </layout> </widget> <widget class="QWidget" name="page_2"> <property name="geometry"> <rect> <x>0</x> <y>0</y> - <width>420</width> + <width>437</width> <height>236</height> </rect> </property> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <attribute name="label"> <string>Global options</string> </attribute> <layout class="QVBoxLayout" name="verticalLayout_8"> <item> <layout class="QFormLayout" name="formLayout_2"> <property name="sizeConstraint"> <enum>QLayout::SetDefaultConstraint</enum> </property> <property name="fieldGrowthPolicy"> <enum>QFormLayout::AllNonFixedFieldsGrow</enum> </property> <item row="0" column="0"> <widget class="QLabel" name="titleLabel"> <property name="text"> <string>Title</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QLineEdit" name="title"/> </item> <item row="1" column="0"> <widget class="QLabel" name="label_3"> <property name="text"> <string>XAxis label</string> </property> </widget> </item> <item row="1" column="1"> <widget class="QLineEdit" name="m_lineEditXAxisLabel"/> </item> <item row="2" column="0"> <widget class="QLabel" name="label_4"> <property name="text"> <string>YAxis label</string> </property> </widget> </item> <item row="2" column="1"> <widget class="QLineEdit" name="m_lineEditYAxisLabel"/> </item> <item row="3" column="0"> <widget class="QLabel" name="label_9"> <property name="text"> <string>Y Axis scale</string> </property> </widget> </item> <item row="3" column="1"> <widget class="QComboBox" name="m_comboBoxYAxisScale"> <item> <property name="text"> <string>linear</string> </property> </item> <item> <property name="text"> <string>logarithmic</string> </property> </item> </widget> </item> <item row="5" column="0"> <widget class="QCheckBox" name="m_checkBoxShowLegend"> <property name="text"> <string>Show legend</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> <item row="6" column="0"> <widget class="QCheckBox" name="m_checkBoxStackedData"> <property name="text"> <string>Stacked data</string> </property> </widget> </item> <item row="7" column="0"> <widget class="QCheckBox" name="m_checkBoxShowDataPoints"> <property name="text"> <string>Show data points</string> </property> <property name="checked"> <bool>true</bool> </property> </widget> </item> <item row="8" column="0"> <widget class="QCheckBox" name="m_checkBoxShowSubchart"> <property name="text"> <string>Show Subchart</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="label_16"> <property name="text"> <string>Legend position</string> </property> </widget> </item> <item row="4" column="1"> <widget class="QComboBox" name="m_comboBoxLegendPosition"> <property name="currentIndex"> <number>2</number> </property> <item> <property name="text"> <string>bottom middle</string> </property> </item> <item> <property name="text"> <string>bottom right</string> </property> </item> <item> <property name="text"> <string>top right</string> </property> </item> <item> <property name="text"> <string>top left</string> </property> </item> <item> <property name="text"> <string>middle right</string> </property> </item> </widget> </item> </layout> </item> </layout> </widget> <widget class="QWidget" name="page_3"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>437</width> + <height>187</height> + </rect> + </property> <attribute name="label"> <string>Zoom</string> </attribute> <widget class="QWidget" name="gridLayoutWidget"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>431</width> <height>121</height> </rect> </property> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> <widget class="QLabel" name="label_14"> <property name="text"> <string>x:</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_15"> <property name="text"> <string>y:</string> </property> </widget> </item> <item row="0" column="1"> <widget class="QDoubleSpinBox" name="m_doubleSpinBox_minZoomX"/> </item> <item row="1" column="1"> <widget class="QDoubleSpinBox" name="m_doubleSpinBox_minZoomY"/> </item> <item row="0" column="2"> <widget class="QDoubleSpinBox" name="m_doubleSpinBox_maxZoomX"/> </item> <item row="1" column="2"> <widget class="QDoubleSpinBox" name="m_doubleSpinBox_maxZoomY"/> </item> </layout> </widget> </widget> </widget> </item> <item> <widget class="QPushButton" name="m_buttonCreateChart"> <property name="toolTip"> <string>Do image processing</string> </property> <property name="text"> <string>Create chart</string> </property> </widget> </item> <item> <widget class="QPushButton" name="m_buttonClearChart"> <property name="text"> <string>Clear chart</string> </property> </widget> </item> <item> <widget class="Line" name="line"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> </widget> </item> <item> <widget class="QStackedWidget" name="m_StatisticsWidgetStack"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="minimumSize"> <size> <width>0</width> <height>250</height> </size> </property> <property name="currentIndex"> <number>0</number> </property> <widget class="QmitkChartWidget" name="m_Chart"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> </widget> </widget> </item> <item> <widget class="QPlainTextEdit" name="m_plainTextEditDataView"> <property name="sizePolicy"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> <property name="maximumSize"> <size> <width>16777215</width> <height>150</height> </size> </property> </widget> </item> <item> <spacer name="spacer1"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeType"> <enum>QSizePolicy::Expanding</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>0</height> </size> </property> </spacer> </item> </layout> </widget> <layoutdefault spacing="6" margin="11"/> <customwidgets> <customwidget> <class>QmitkChartWidget</class> <extends>QWidget</extends> <header location="global">QmitkChartWidget.h</header> </customwidget> </customwidgets> <resources/> <connections/> </ui>