File indexing completed on 2024-05-12 04:20:46

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 <KChartAbstractCoordinatePlane>
0013 #include <KChartLineDiagram>
0014 #include <KChartBarDiagram>
0015 
0016 #include <QDebug>
0017 #include <QPainter>
0018 
0019 using namespace KChart;
0020 
0021 #define USE_ROOTINDEX 1
0022 
0023 MainWindow::MainWindow( QWidget* parent ) :
0024     QWidget( parent )
0025 {
0026     setupUi( this );
0027 
0028     QHBoxLayout* chartLayout = new QHBoxLayout( chartFrame );
0029     m_chart = new Chart();
0030     chartLayout->addWidget( m_chart );
0031 
0032 #if USE_ROOTINDEX
0033     m_model.insertRows( 0,2, QModelIndex() );
0034     m_model.insertColumns( 0,1, QModelIndex() );
0035     QModelIndex idx1 = m_model.index( 0,0,QModelIndex() );
0036     QModelIndex idx2 = m_model.index( 1,0,QModelIndex() );
0037 
0038     m_model.setData( idx1, 3.14 );
0039     m_model.setData( idx2, 2*3.14 );
0040 
0041     m_model.insertRows( 0,5, idx1 );
0042     m_model.insertColumns( 0,5, idx1 );
0043     
0044     for ( int i = 0; i < 5; ++i ) {
0045       for ( int j = 0; j < 5; ++j ) {
0046     m_model.setData( m_model.index( i,j,idx1), (qreal)i*j );
0047       }
0048     }
0049 
0050     m_model.insertRows( 0,2, idx2 );
0051     m_model.insertColumns( 0,2, idx2 );
0052     
0053     for ( int i = 0; i < 2; ++i ) {
0054       for ( int j = 0; j < 2; ++j ) {
0055     m_model.setData( m_model.index( i,j,idx2), 10.*(i+1.)/(j+1.) );
0056       }
0057     }
0058 #else
0059     QModelIndex idx1 = QModelIndex();
0060     m_model.insertRows( 0,5, idx1 );
0061     m_model.insertColumns( 0,5, idx1 );
0062     
0063     for ( int i = 0; i < 5; ++i ) {
0064       for ( int j = 0; j < 5; ++j ) {
0065     m_model.setData( m_model.index( i,j,idx1), (qreal)i*j );
0066       }
0067     }
0068     QModelIndex idx2 = idx1;
0069 
0070     m_model2.insertRows( 0,2, idx2 );
0071     m_model2.insertColumns( 0,2, idx2 );
0072     
0073     for ( int i = 0; i < 2; ++i ) {
0074       for ( int j = 0; j < 2; ++j ) {
0075     m_model2.setData( m_model2.index( i,j,idx2), 10.*(i+1.)/(j+1.) );
0076       }
0077     }
0078     
0079 #endif
0080 
0081     // Set up the diagram
0082     m_lines = new LineDiagram();
0083     m_lines->setModel( &m_model );
0084 #if USE_ROOTINDEX
0085     m_lines->setRootIndex(idx1);
0086 #endif
0087 
0088     m_bars = new BarDiagram();
0089 #if USE_ROOTINDEX
0090     m_bars->setModel( &m_model );
0091     m_bars->setRootIndex(idx2);
0092 #else
0093     m_bars->setModel( &m_model2 );
0094 #endif
0095 
0096     plane = new CartesianCoordinatePlane( m_chart );
0097 
0098     CartesianAxis *xAxis = new CartesianAxis( m_lines );
0099     CartesianAxis *yAxis = new CartesianAxis ( m_lines );
0100     CartesianAxis *yAxis3 = new CartesianAxis ( m_lines );
0101     xAxis->setPosition ( KChart::CartesianAxis::Bottom );
0102     yAxis->setPosition ( KChart::CartesianAxis::Left );
0103     yAxis3->setPosition ( KChart::CartesianAxis::Left );
0104 
0105     CartesianAxis *yAxis2 = new CartesianAxis ( m_bars );
0106     yAxis2->setPosition ( KChart::CartesianAxis::Right );
0107 
0108     // explicitly add it to the second diagram, we want to share it
0109     m_bars->addAxis( xAxis );
0110 
0111     m_chart->coordinatePlane()->replaceDiagram( m_lines );
0112     plane->replaceDiagram( m_bars );
0113     // We want both planes to use the same space.
0114     plane->setReferenceCoordinatePlane( m_chart->coordinatePlane() );
0115     m_chart->addCoordinatePlane( plane/*, 1*/);
0116 }