File indexing completed on 2024-05-12 04:20:06
0001 /** 0002 * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved. 0003 * 0004 * This file is part of the KD Chart library. 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "mainwindow.h" 0010 0011 #include <KChartChart> 0012 #include <KChartCartesianCoordinatePlane> 0013 #include <KChartAbstractCoordinatePlane> 0014 #include <KChartCartesianAxis> 0015 #include <KChartCartesianGrid> 0016 #include <KChartAbstractDiagram> 0017 #include <KChartBarDiagram> 0018 #include <KChartLineDiagram> 0019 #include <KChartPlotter> 0020 #include <KChartPieDiagram> 0021 #include <KChartPolarCoordinatePlane> 0022 #include <KChartLegend> 0023 #include <KChartDataValueAttributes> 0024 #include <KChartMarkerAttributes> 0025 #include <KChartTextAttributes> 0026 #include <KChartGridAttributes> 0027 #include <KChartRulerAttributes> 0028 #include <KChartPieAttributes> 0029 0030 #include <TableModel.h> 0031 0032 #include <QDockWidget> 0033 0034 #include "datasetsettings.h" 0035 #include "diagramsettings.h" 0036 #include "datavaluesettings.h" 0037 #include "diagramtypedialog.h" 0038 #include "axissettings.h" 0039 0040 using namespace KChart; 0041 0042 class MainWindow::Private : public QObject 0043 { 0044 Q_OBJECT 0045 Q_PROPERTY( int datasetCount READ datasetCount NOTIFY datasetCountChanged ) 0046 public: 0047 int datasetCount() const; 0048 enum ChartType{ Bar, Line, Plotter, Polar, Pie }; 0049 Private( MainWindow *q = nullptr ); 0050 Chart *m_chartWin; 0051 CartesianCoordinatePlane *m_cartPlane; 0052 TableModel *m_model; 0053 AbstractDiagram *m_curDiagram; 0054 ChartType m_type; 0055 QHash< DiagramTypeDialog::DiagramType, QAbstractItemModel* > m_modelTable; 0056 MainWindow *qq; 0057 Q_SIGNALS: 0058 void datasetCountChanged( int ); 0059 public Q_SLOTS: 0060 void changedChartType(); 0061 }; 0062 0063 MainWindow::Private::Private( MainWindow *q ) 0064 : m_chartWin( new Chart( q ) ) 0065 , m_cartPlane( new CartesianCoordinatePlane ) 0066 , m_model( new TableModel( q ) ) 0067 , m_curDiagram( new BarDiagram( q, m_cartPlane ) ) 0068 , m_type( Bar ) 0069 , qq( q ) 0070 { 0071 m_chartWin->replaceCoordinatePlane( m_cartPlane ); 0072 m_model->loadFromCSV( ":/data/barSimple.csv" ); 0073 m_cartPlane->replaceDiagram( m_curDiagram ); 0074 m_curDiagram->setModel( m_model ); 0075 m_modelTable[ DiagramTypeDialog::Bar ] = m_model; 0076 m_modelTable[ DiagramTypeDialog::LyingBar ] = m_model; 0077 TableModel *lineModel = new TableModel( q ); 0078 lineModel->loadFromCSV( ":/data/lineSimple.csv" ); 0079 m_modelTable[ DiagramTypeDialog::Line ] = lineModel; 0080 m_modelTable[ DiagramTypeDialog::Plotter ] = lineModel; 0081 TableModel *pieModel = new TableModel( q ); 0082 pieModel->loadFromCSV( ":/data/pieSimple.csv" ); 0083 m_modelTable[ DiagramTypeDialog::Pie ] = pieModel; 0084 0085 DiagramTypeDialog *diagramTypeSettings = new DiagramTypeDialog( m_chartWin, qq ); 0086 diagramTypeSettings->setDefaultModels( m_modelTable ); 0087 QDockWidget *diagramTypeSettingsDock = new QDockWidget( tr( "DiagramType" ), qq ); 0088 diagramTypeSettingsDock->setWidget( diagramTypeSettings ); 0089 diagramTypeSettingsDock->setFloating( false ); 0090 connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), this, SLOT(changedChartType()) ); 0091 q->addDockWidget( Qt::LeftDockWidgetArea, diagramTypeSettingsDock ); 0092 0093 AxisSettings *axisSettings = new AxisSettings( m_chartWin, qq ); 0094 QDockWidget *axisSettingsDock = new QDockWidget( tr( "AxisSettings" ), qq ); 0095 axisSettingsDock->setWidget( axisSettings ); 0096 axisSettingsDock->setFloating( false ); 0097 q->addDockWidget( Qt::LeftDockWidgetArea, axisSettingsDock ); 0098 connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), axisSettings, SLOT(diagramTypeChanged()) ); 0099 0100 DatasetSettings *setSettings = new DatasetSettings( m_chartWin, qq ); 0101 QDockWidget *setSettingsDock = new QDockWidget( tr( "DatasetSettings" ), qq ); 0102 setSettingsDock->setWidget( setSettings ); 0103 setSettingsDock->setFloating( false ); 0104 q->addDockWidget( Qt::LeftDockWidgetArea, setSettingsDock ); 0105 connect( this, SIGNAL(datasetCountChanged(int)), setSettings, SLOT(setDatasetCount(int)) ); 0106 connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), setSettings, SLOT(diagramTypeChanged()) ); 0107 setSettings->setDatasetCount( m_model->columnCount() ); 0108 0109 DiagramSettings *diagSettings = new DiagramSettings( m_chartWin, qq ); 0110 QDockWidget *diagSettingsDock = new QDockWidget( tr( "DiagramSettings" ), qq ); 0111 diagSettingsDock->setWidget( diagSettings ); 0112 diagSettingsDock->setFloating( false ); 0113 q->addDockWidget( Qt::LeftDockWidgetArea, diagSettingsDock ); 0114 connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), diagSettings, SLOT(refreshSettings()) ); 0115 0116 DataValueSettings *dataValueSettings = new DataValueSettings( m_chartWin, qq ); 0117 QDockWidget *dataValueSettingsDock = new QDockWidget( tr( "DataValueSettings" ), qq ); 0118 dataValueSettingsDock->setWidget( dataValueSettings ); 0119 dataValueSettingsDock->setFloating( false ); 0120 q->addDockWidget( Qt::RightDockWidgetArea, dataValueSettingsDock ); 0121 connect( diagramTypeSettings, SIGNAL(diagramTypeChanged(DiagramType,Subtype)), dataValueSettings, SLOT(refresh()) ); 0122 0123 } 0124 0125 int MainWindow::Private::datasetCount() const 0126 { 0127 if ( m_chartWin->coordinatePlane() && m_chartWin->coordinatePlane()->diagram() ) 0128 { 0129 const AbstractDiagram *diag = m_chartWin->coordinatePlane()->diagram(); 0130 if ( !diag->model() ) 0131 return 0; 0132 return diag->model()->columnCount() / diag->datasetDimension(); 0133 } 0134 return 0; 0135 } 0136 0137 void MainWindow::Private::changedChartType() 0138 { 0139 Q_EMIT datasetCountChanged( datasetCount() ); 0140 } 0141 0142 MainWindow::MainWindow( QWidget *parent ) 0143 : QMainWindow( parent ) 0144 , d( new Private( this ) ) 0145 { 0146 setCentralWidget( d->m_chartWin ); 0147 } 0148 0149 MainWindow::~MainWindow() 0150 { 0151 delete d; 0152 } 0153 0154 #include "mainwindow.moc"