diff --git a/test/chartwidgettest/dataseriedialog.cpp b/test/chartwidgettest/dataseriedialog.cpp index 7635875..9f3d2b6 100644 --- a/test/chartwidgettest/dataseriedialog.cpp +++ b/test/chartwidgettest/dataseriedialog.cpp @@ -1,24 +1,54 @@ #include "dataseriedialog.h" #include -#include +#include +#include +#include +#include #include DataSerieDialog::DataSerieDialog(QWidget *parent) : QDialog(parent) { - QDialogButtonBox *addSeriesBox = new QDialogButtonBox(Qt::Vertical, this); - addSeriesBox->addButton("Line", QDialogButtonBox::AcceptRole); - addSeriesBox->addButton("Area", QDialogButtonBox::AcceptRole); - addSeriesBox->addButton("Bar", QDialogButtonBox::AcceptRole); - addSeriesBox->addButton("Pie", QDialogButtonBox::AcceptRole); - addSeriesBox->addButton("Scatter", QDialogButtonBox::AcceptRole); - addSeriesBox->addButton("Spline", QDialogButtonBox::AcceptRole); - connect(addSeriesBox, SIGNAL(clicked(QAbstractButton *)), this, SLOT(addSeries(QAbstractButton *))); - this->setFixedSize(addSeriesBox->sizeHint()); + // Combo box for selecting the series type + m_seriesTypeCombo = new QComboBox(this); + m_seriesTypeCombo->addItem("Line"); + m_seriesTypeCombo->addItem("Area"); + m_seriesTypeCombo->addItem("Bar"); + m_seriesTypeCombo->addItem("Pie"); + m_seriesTypeCombo->addItem("Scatter"); + m_seriesTypeCombo->addItem("Spline"); + + // Combo box for selecting data for the new series + m_testDataCombo = new QComboBox(this); + m_testDataCombo->addItem("linear"); + m_testDataCombo->addItem("SIN"); + m_testDataCombo->addItem("SIN + random"); + m_testDataCombo->addItem("TODO From file..."); + m_testDataCombo->addItem("TODO From URL..."); + + QDialogButtonBox *addSeriesBox = new QDialogButtonBox(Qt::Horizontal); + QPushButton *b = addSeriesBox->addButton(QDialogButtonBox::Ok); + connect(b, SIGNAL(clicked()), this, SLOT(accept())); + b = addSeriesBox->addButton(QDialogButtonBox::Cancel); + connect(b, SIGNAL(clicked()), this, SLOT(reject())); + + QGridLayout *grid = new QGridLayout(); + grid->addWidget(new QLabel("Series type:"), 0, 0); + grid->addWidget(m_seriesTypeCombo, 0, 1); + grid->addWidget(new QLabel("Data:"), 1, 0); + grid->addWidget(m_testDataCombo, 1, 1); + grid->addWidget(addSeriesBox, 2, 1); + + setLayout(grid); } -void DataSerieDialog::addSeries(QAbstractButton *button) +void DataSerieDialog::accept() { - addSeries(button->text().toAscii()); - accept(); + accepted(m_seriesTypeCombo->currentText(), m_testDataCombo->currentText()); + QDialog::accept(); } +//void DataSerieDialog::addSeries(QAbstractButton *button) +//{ +// addSeries(button->text().toAscii()); +// accept(); +//} diff --git a/test/chartwidgettest/dataseriedialog.h b/test/chartwidgettest/dataseriedialog.h index 12f4c20..fb13d03 100644 --- a/test/chartwidgettest/dataseriedialog.h +++ b/test/chartwidgettest/dataseriedialog.h @@ -3,7 +3,7 @@ #include -class QAbstractButton; +class QComboBox; class DataSerieDialog : public QDialog { @@ -12,10 +12,14 @@ public: explicit DataSerieDialog(QWidget *parent = 0); signals: - void addSeries(QString series); + void accepted(QString series, QString data); public slots: - void addSeries(QAbstractButton *button); + void accept(); + +private: + QComboBox *m_seriesTypeCombo; + QComboBox *m_testDataCombo; }; #endif // DATASERIEDIALOG_H diff --git a/test/chartwidgettest/mainwidget.cpp b/test/chartwidgettest/mainwidget.cpp index 74b342d..7d1b3bf 100644 --- a/test/chartwidgettest/mainwidget.cpp +++ b/test/chartwidgettest/mainwidget.cpp @@ -21,32 +21,10 @@ MainWidget::MainWidget(QWidget *parent) : m_chartWidget = new QChartWidget(this); // m_chartWidget->resize(QSize(200,200)); // m_chartWidget->setColor(Qt::red); - // Chart type - // TODO: How about multiple types? - // Should the type be a property of a graph instead of the chart? -// QComboBox *chartTypeCombo = new QComboBox(this); -// chartTypeCombo->addItem("Line"); -// chartTypeCombo->addItem("Area"); -// chartTypeCombo->addItem("Bar"); -// chartTypeCombo->addItem("Pie"); -// chartTypeCombo->addItem("Scatter"); -// chartTypeCombo->addItem("Spline"); -// connect(chartTypeCombo, SIGNAL(currentIndexChanged(int)), -// this, SLOT(chartTypeChanged(int))); QPushButton *addSeriesButton = new QPushButton("Add series"); connect(addSeriesButton, SIGNAL(clicked()), this, SLOT(addSeries())); - // Test data selector - QComboBox *testDataCombo = new QComboBox(this); - testDataCombo->addItem("linear"); - testDataCombo->addItem("SIN"); - testDataCombo->addItem("SIN + random component"); - testDataCombo->addItem("TODO From file..."); - testDataCombo->addItem("TODO From URL..."); - connect(testDataCombo, SIGNAL(currentIndexChanged(int)), - this, SLOT(testDataChanged(int))); - // Chart background QComboBox *backgroundCombo = new QComboBox(this); backgroundCombo->addItem("None"); @@ -85,10 +63,6 @@ MainWidget::MainWidget(QWidget *parent) : QHBoxLayout *hbox = new QHBoxLayout(); //grid->addWidget(new QLabel("Add series:"), 0, 0); grid->addWidget(addSeriesButton, 0, 1); -// grid->addWidget(new QLabel("Chart type:"), 0, 0); -// grid->addWidget(chartTypeCombo, 0, 1); - grid->addWidget(new QLabel("Data:"), 1, 0); - grid->addWidget(testDataCombo, 1, 1); grid->addWidget(new QLabel("Background:"), 2, 0); grid->addWidget(backgroundCombo, 2, 1); grid->addWidget(m_autoScaleCheck, 3, 0); @@ -118,24 +92,43 @@ MainWidget::MainWidget(QWidget *parent) : void MainWidget::addSeries() { DataSerieDialog dialog(this); - connect(&dialog, SIGNAL(addSeries(QString)), this, SLOT(addSeries(QString))); + connect(&dialog, SIGNAL(accepted(QString, QString)), this, SLOT(addSeries(QString, QString))); dialog.exec(); } -void MainWidget::addSeries(QString series) +void MainWidget::addSeries(QString series, QString data) { - if (series == "Scatter") { - QXYSeries* series0 = new QXYSeries(); + qDebug() << "addSeries: " << series << " data: " << data; + + QXYSeries* series0 = new QXYSeries(); + + if (data == "linear") { + // TODO + } else if (data == "SIN") { series0->setColor(Qt::blue); for (int x = 0; x < 100; x++) series0->add(x, abs(sin(3.14159265358979 / 50 * x) * 100)); QList dataset; dataset << series0; + } else if (data == "SIN + random") { + series0->setColor(Qt::blue); + for (qreal x = 0; x < 100; x += 0.1) { + series0->add(x + (rand() % 5), + abs(sin(3.14159265358979 / 50 * x) * 100) + (rand() % 5)); + } + } else { + // TODO: check if data has a valid file name + } + + QList dataset; + dataset << series0; + + if (series == "Scatter") { m_chartWidget->addDataSeries(QChart::DataSeriesTypeScatter, dataset); - //m_chartWidget->addDataSeries(dataset); + } else if (series == "Line") { + m_chartWidget->addDataSeries(QChart::DataSeriesTypeLine, dataset); } else { // TODO - qDebug() << "addSeries: " << series; } } diff --git a/test/chartwidgettest/mainwidget.h b/test/chartwidgettest/mainwidget.h index d0c2591..55ec46e 100644 --- a/test/chartwidgettest/mainwidget.h +++ b/test/chartwidgettest/mainwidget.h @@ -21,7 +21,7 @@ signals: private slots: void chartTypeChanged(int itemIndex); void addSeries(); - void addSeries(QString series); + void addSeries(QString series, QString data); void testDataChanged(int itemIndex); void backgroundChanged(int itemIndex); void autoScaleChanged(int value);