/** * Copyright (C) 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved. * * This file is part of the KD Chart library. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "mainwindow.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "datasetsettings.h" #include "diagramsettings.h" #include "datavaluesettings.h" #include "diagramtypedialog.h" #include "axissettings.h" using namespace KChart; class MainWindow::Private : public QObject { Q_OBJECT Q_PROPERTY( int datasetCount READ datasetCount NOTIFY datasetCountChanged ) public: int datasetCount() const; enum ChartType{ Bar, Line, Plotter, Polar, Pie }; Private( MainWindow *q = nullptr ); Chart *m_chartWin; CartesianCoordinatePlane *m_cartPlane; TableModel *m_model; AbstractDiagram *m_curDiagram; ChartType m_type; QHash< DiagramTypeDialog::DiagramType, QAbstractItemModel* > m_modelTable; MainWindow *qq; Q_SIGNALS: void datasetCountChanged( int ); public Q_SLOTS: void changedChartType(); }; MainWindow::Private::Private( MainWindow *q ) : m_chartWin( new Chart( q ) ) , m_cartPlane( new CartesianCoordinatePlane ) , m_model( new TableModel( q ) ) , m_curDiagram( new BarDiagram( q, m_cartPlane ) ) , m_type( Bar ) , qq( q ) { m_chartWin->replaceCoordinatePlane( m_cartPlane ); m_model->loadFromCSV( ":/data/barSimple.csv" ); m_cartPlane->replaceDiagram( m_curDiagram ); m_curDiagram->setModel( m_model ); m_modelTable[ DiagramTypeDialog::Bar ] = m_model; m_modelTable[ DiagramTypeDialog::LyingBar ] = m_model; TableModel *lineModel = new TableModel( q ); lineModel->loadFromCSV( ":/data/lineSimple.csv" ); m_modelTable[ DiagramTypeDialog::Line ] = lineModel; m_modelTable[ DiagramTypeDialog::Plotter ] = lineModel; TableModel *pieModel = new TableModel( q ); pieModel->loadFromCSV( ":/data/pieSimple.csv" ); m_modelTable[ DiagramTypeDialog::Pie ] = pieModel; DiagramTypeDialog *diagramTypeSettings = new DiagramTypeDialog( m_chartWin, qq ); diagramTypeSettings->setDefaultModels( m_modelTable ); QDockWidget *diagramTypeSettingsDock = new QDockWidget( tr( "DiagramType" ), qq ); diagramTypeSettingsDock->setWidget( diagramTypeSettings ); diagramTypeSettingsDock->setFloating( false ); connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), this, SLOT(changedChartType()) ); q->addDockWidget( Qt::LeftDockWidgetArea, diagramTypeSettingsDock ); AxisSettings *axisSettings = new AxisSettings( m_chartWin, qq ); QDockWidget *axisSettingsDock = new QDockWidget( tr( "AxisSettings" ), qq ); axisSettingsDock->setWidget( axisSettings ); axisSettingsDock->setFloating( false ); q->addDockWidget( Qt::LeftDockWidgetArea, axisSettingsDock ); connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), axisSettings, SLOT(diagramTypeChanged()) ); DatasetSettings *setSettings = new DatasetSettings( m_chartWin, qq ); QDockWidget *setSettingsDock = new QDockWidget( tr( "DatasetSettings" ), qq ); setSettingsDock->setWidget( setSettings ); setSettingsDock->setFloating( false ); q->addDockWidget( Qt::LeftDockWidgetArea, setSettingsDock ); connect( this, SIGNAL(datasetCountChanged(int)), setSettings, SLOT(setDatasetCount(int)) ); connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), setSettings, SLOT(diagramTypeChanged()) ); setSettings->setDatasetCount( m_model->columnCount() ); DiagramSettings *diagSettings = new DiagramSettings( m_chartWin, qq ); QDockWidget *diagSettingsDock = new QDockWidget( tr( "DiagramSettings" ), qq ); diagSettingsDock->setWidget( diagSettings ); diagSettingsDock->setFloating( false ); q->addDockWidget( Qt::LeftDockWidgetArea, diagSettingsDock ); connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), diagSettings, SLOT(refreshSettings()) ); DataValueSettings *dataValueSettings = new DataValueSettings( m_chartWin, qq ); QDockWidget *dataValueSettingsDock = new QDockWidget( tr( "DataValueSettings" ), qq ); dataValueSettingsDock->setWidget( dataValueSettings ); dataValueSettingsDock->setFloating( false ); q->addDockWidget( Qt::RightDockWidgetArea, dataValueSettingsDock ); connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), dataValueSettings, SLOT(refresh()) ); } int MainWindow::Private::datasetCount() const { if ( m_chartWin->coordinatePlane() && m_chartWin->coordinatePlane()->diagram() ) { const AbstractDiagram *diag = m_chartWin->coordinatePlane()->diagram(); if ( !diag->model() ) return 0; return diag->model()->columnCount() / diag->datasetDimension(); } return 0; } void MainWindow::Private::changedChartType() { Q_EMIT datasetCountChanged( datasetCount() ); } MainWindow::MainWindow( QWidget *parent ) : QMainWindow( parent ) , d( new Private( this ) ) { setCentralWidget( d->m_chartWin ); } MainWindow::~MainWindow() { delete d; } #include "mainwindow.moc"