Warning, file /graphics/kdiagram/examples/demo/mainwindow.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /**
0002  * Copyright (C) 2001-2015 Klaralvdalens Datakonsult AB.  All rights reserved.
0003  *
0004  * This file is part of the KD Chart library.
0005  *
0006  * This program is free software; you can redistribute it and/or
0007  * modify it under the terms of the GNU General Public License as
0008  * published by the Free Software Foundation; either version 2 of
0009  * the License, or (at your option) any later version.
0010  *
0011  * This program is distributed in the hope that it will be useful,
0012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014  * GNU General Public License for more details.
0015  *
0016  * You should have received a copy of the GNU General Public License
0017  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
0018  */
0019 
0020 #include "mainwindow.h"
0021 
0022 #include <KChartChart>
0023 #include <KChartCartesianCoordinatePlane>
0024 #include <KChartAbstractCoordinatePlane>
0025 #include <KChartCartesianAxis>
0026 #include <KChartCartesianGrid>
0027 #include <KChartAbstractDiagram>
0028 #include <KChartBarDiagram>
0029 #include <KChartLineDiagram>
0030 #include <KChartPlotter>
0031 #include <KChartPieDiagram>
0032 #include <KChartPolarCoordinatePlane>
0033 #include <KChartLegend>
0034 #include <KChartDataValueAttributes>
0035 #include <KChartMarkerAttributes>
0036 #include <KChartTextAttributes>
0037 #include <KChartGridAttributes>
0038 #include <KChartRulerAttributes>
0039 #include <KChartPieAttributes>
0040 
0041 #include <TableModel.h>
0042 
0043 #include <QDockWidget>
0044 
0045 #include "datasetsettings.h"
0046 #include "diagramsettings.h"
0047 #include "datavaluesettings.h"
0048 #include "diagramtypedialog.h"
0049 #include "axissettings.h"
0050 
0051 using namespace KChart;
0052 
0053 class MainWindow::Private : public QObject
0054 {
0055     Q_OBJECT
0056     Q_PROPERTY( int datasetCount READ datasetCount NOTIFY datasetCountChanged )
0057 public:
0058     int datasetCount() const;
0059     enum ChartType{ Bar, Line, Plotter, Polar, Pie };
0060     Private( MainWindow *q = nullptr );
0061     Chart *m_chartWin;
0062     CartesianCoordinatePlane *m_cartPlane;
0063     TableModel *m_model;
0064     AbstractDiagram *m_curDiagram;
0065     ChartType m_type;
0066     QHash< DiagramTypeDialog::DiagramType, QAbstractItemModel* > m_modelTable;
0067     MainWindow *qq;
0068 Q_SIGNALS:
0069     void datasetCountChanged( int );
0070 public Q_SLOTS:
0071     void changedChartType();
0072 };
0073 
0074 MainWindow::Private::Private( MainWindow *q )
0075     : m_chartWin( new Chart( q ) )
0076     , m_cartPlane( new CartesianCoordinatePlane )
0077     , m_model( new TableModel( q ) )
0078     , m_curDiagram( new BarDiagram( q, m_cartPlane ) )
0079     , m_type( Bar )
0080     , qq( q )
0081 {
0082     m_chartWin->replaceCoordinatePlane( m_cartPlane );
0083     m_model->loadFromCSV( ":/data/barSimple.csv" );
0084     m_cartPlane->replaceDiagram( m_curDiagram );
0085     m_curDiagram->setModel( m_model );
0086     m_modelTable[ DiagramTypeDialog::Bar ] = m_model;
0087     m_modelTable[ DiagramTypeDialog::LyingBar ] = m_model;
0088     TableModel *lineModel = new TableModel( q );
0089     lineModel->loadFromCSV( ":/data/lineSimple.csv" );
0090     m_modelTable[ DiagramTypeDialog::Line ] = lineModel;
0091     m_modelTable[ DiagramTypeDialog::Plotter ] = lineModel;
0092     TableModel *pieModel = new TableModel( q );
0093     pieModel->loadFromCSV( ":/data/pieSimple.csv" );
0094     m_modelTable[ DiagramTypeDialog::Pie ] = pieModel;
0095 
0096     DiagramTypeDialog *diagramTypeSettings = new DiagramTypeDialog( m_chartWin, qq );
0097     diagramTypeSettings->setDefaultModels( m_modelTable );
0098     QDockWidget *diagramTypeSettingsDock = new QDockWidget( tr( "DiagramType" ), qq );
0099     diagramTypeSettingsDock->setWidget( diagramTypeSettings );
0100     diagramTypeSettingsDock->setFloating( false );
0101     connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), this, SLOT(changedChartType()) );
0102     q->addDockWidget( Qt::LeftDockWidgetArea, diagramTypeSettingsDock );
0103 
0104     AxisSettings *axisSettings = new AxisSettings( m_chartWin, qq );
0105     QDockWidget *axisSettingsDock = new QDockWidget( tr( "AxisSettings" ), qq );
0106     axisSettingsDock->setWidget( axisSettings );
0107     axisSettingsDock->setFloating( false );
0108     q->addDockWidget( Qt::LeftDockWidgetArea, axisSettingsDock );
0109     connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), axisSettings, SLOT(diagramTypeChanged()) );
0110 
0111     DatasetSettings *setSettings = new DatasetSettings( m_chartWin, qq );
0112     QDockWidget *setSettingsDock = new QDockWidget( tr( "DatasetSettings" ), qq );
0113     setSettingsDock->setWidget( setSettings );
0114     setSettingsDock->setFloating( false );
0115     q->addDockWidget( Qt::LeftDockWidgetArea, setSettingsDock );
0116     connect( this, SIGNAL(datasetCountChanged(int)), setSettings, SLOT(setDatasetCount(int)) );
0117     connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), setSettings, SLOT(diagramTypeChanged()) );
0118     setSettings->setDatasetCount( m_model->columnCount() );
0119 
0120     DiagramSettings *diagSettings = new DiagramSettings( m_chartWin, qq );
0121     QDockWidget *diagSettingsDock = new QDockWidget( tr( "DiagramSettings" ), qq );
0122     diagSettingsDock->setWidget( diagSettings );
0123     diagSettingsDock->setFloating( false );
0124     q->addDockWidget( Qt::LeftDockWidgetArea, diagSettingsDock );
0125     connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), diagSettings, SLOT(refreshSettings()) );
0126 
0127     DataValueSettings *dataValueSettings = new DataValueSettings( m_chartWin, qq );
0128     QDockWidget *dataValueSettingsDock = new QDockWidget( tr( "DataValueSettings" ), qq );
0129     dataValueSettingsDock->setWidget( dataValueSettings );
0130     dataValueSettingsDock->setFloating( false );
0131     q->addDockWidget( Qt::RightDockWidgetArea, dataValueSettingsDock );
0132     connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), dataValueSettings, SLOT(refresh()) );
0133 
0134 }
0135 
0136 int MainWindow::Private::datasetCount() const
0137 {
0138     if ( m_chartWin->coordinatePlane() && m_chartWin->coordinatePlane()->diagram() )
0139     {
0140         const AbstractDiagram *diag = m_chartWin->coordinatePlane()->diagram();
0141         if ( !diag->model() )
0142             return 0;
0143         return diag->model()->columnCount() / diag->datasetDimension();
0144     }
0145     return 0;
0146 }
0147 
0148 void MainWindow::Private::changedChartType()
0149 {
0150     Q_EMIT datasetCountChanged( datasetCount() );
0151 }
0152 
0153 MainWindow::MainWindow( QWidget *parent )
0154     : QMainWindow( parent )
0155     , d( new Private( this ) )
0156 {
0157     setCentralWidget( d->m_chartWin );
0158 }
0159 
0160 MainWindow::~MainWindow()
0161 {
0162     delete d;
0163 }
0164 
0165 #include "mainwindow.moc"