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"