File indexing completed on 2024-05-26 04:23:41
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 <QApplication> 0010 0011 #include <KChartChart> 0012 #include <KChartLeveyJenningsAxis> 0013 #include <KChartLeveyJenningsDiagram> 0014 #include <KChartLeveyJenningsCoordinatePlane> 0015 #include <KChartLeveyJenningsGridAttributes> 0016 0017 #include <QDateTime> 0018 #include <QStandardItemModel> 0019 #include <QSplitter> 0020 #include <QTableView> 0021 #include <QTimer> 0022 0023 class SelectionAnimator : public QObject 0024 { 0025 Q_OBJECT 0026 public: 0027 SelectionAnimator( QAbstractItemView* view ) 0028 : QObject( view ), 0029 view( view ) 0030 { 0031 QTimer* const t = new QTimer( this ); 0032 connect( t, SIGNAL(timeout()), this, SLOT(animate()) ); 0033 t->start( 1000 ); 0034 } 0035 0036 protected Q_SLOTS: 0037 void animate() 0038 { 0039 const int row = ( view->selectionModel()->currentIndex().row() + 1 ) % view->model()->rowCount(); 0040 view->selectionModel()->setCurrentIndex( view->model()->index( row, 0 ), QItemSelectionModel::ClearAndSelect ); 0041 } 0042 0043 private: 0044 QAbstractItemView* const view; 0045 0046 }; 0047 0048 #include "main.moc" 0049 0050 int main( int argc, char** argv ) 0051 { 0052 QApplication app( argc, argv ); 0053 0054 QStandardItemModel model( 14, 6 ); 0055 0056 model.setHeaderData( 0, Qt::Horizontal, QObject::tr( "Lot" ) ); 0057 model.setHeaderData( 1, Qt::Horizontal, QObject::tr( "Value" ) ); 0058 model.setHeaderData( 2, Qt::Horizontal, QObject::tr( "OK" ) ); 0059 model.setHeaderData( 3, Qt::Horizontal, QObject::tr( "Date/Time" ) ); 0060 model.setHeaderData( 4, Qt::Horizontal, QObject::tr( "Mean Value" ) ); 0061 model.setHeaderData( 5, Qt::Horizontal, QObject::tr( "Standard Deviation" ) ); 0062 0063 // Lot 1 0064 model.setData( model.index( 0, 0 ), 1 ); // lot number 0065 model.setData( model.index( 0, 1 ), 210 ); // value 0066 model.setData( model.index( 0, 2 ), true ); // QC value ok/not ok 0067 model.setData( model.index( 0, 3 ), QDateTime::fromString( "2007-07-06T09:00:00", Qt::ISODate ) ); 0068 0069 model.setData( model.index( 1, 0 ), 1 ); 0070 model.setData( model.index( 1, 1 ), 9.5 ); 0071 model.setData( model.index( 1, 2 ), true ); 0072 model.setData( model.index( 1, 3 ), QDateTime::fromString( "2007-07-06T21:00:00", Qt::ISODate ) ); 0073 model.setData( model.index( 1, 4 ), 7.5 ); 0074 model.setData( model.index( 1, 5 ), 1.0 ); 0075 0076 model.setData( model.index( 2, 0 ), 1 ); 0077 model.setData( model.index( 2, 1 ), 200 ); 0078 model.setData( model.index( 2, 2 ), true ); 0079 model.setData( model.index( 2, 3 ), QDateTime::fromString( "2007-07-07T09:00:00", Qt::ISODate ) ); 0080 0081 // This values should be missing (lot is needed anyway) 0082 model.setData( model.index( 3, 0 ), 1 ); 0083 model.setData( model.index( 3, 3 ), QDateTime::fromString( "2007-07-07T21:00:00", Qt::ISODate ) ); 0084 0085 model.setData( model.index( 4, 0 ), 1 ); 0086 model.setData( model.index( 4, 1 ), 180 ); 0087 model.setData( model.index( 4, 2 ), true ); 0088 model.setData( model.index( 4, 3 ), QDateTime::fromString( "2007-07-08T09:00:00", Qt::ISODate ) ); 0089 0090 0091 // Lot 2 0092 model.setData( model.index( 5, 0 ), 2 ); 0093 model.setData( model.index( 5, 1 ), 210 ); 0094 model.setData( model.index( 5, 2 ), true ); 0095 model.setData( model.index( 5, 3 ), QDateTime::fromString( "2007-07-08T21:00:00", Qt::ISODate ) ); 0096 0097 model.setData( model.index( 6, 0 ), 2 ); 0098 model.setData( model.index( 6, 1 ), 195 ); 0099 model.setData( model.index( 6, 2 ), true ); 0100 model.setData( model.index( 6, 3 ), QDateTime::fromString( "2007-07-09T09:00:00", Qt::ISODate ) ); 0101 0102 // this value is not OK 0103 model.setData( model.index( 7, 0 ), 2 ); 0104 model.setData( model.index( 7, 1 ), 200 ); 0105 model.setData( model.index( 7, 2 ), false ); 0106 model.setData( model.index( 7, 3 ), QDateTime::fromString( "2007-07-09T21:00:00", Qt::ISODate ) ); 0107 0108 model.setData( model.index( 8, 0 ), 2 ); 0109 model.setData( model.index( 8, 1 ), 210 ); 0110 model.setData( model.index( 8, 2 ), true ); 0111 model.setData( model.index( 8, 3 ), QDateTime::fromString( "2007-07-10T09:00:00", Qt::ISODate ) ); 0112 0113 model.setData( model.index( 9, 0 ), 2 ); 0114 model.setData( model.index( 9, 1 ), 180 ); 0115 model.setData( model.index( 9, 2 ), true ); 0116 model.setData( model.index( 9, 3 ), QDateTime::fromString( "2007-07-10T21:00:00", Qt::ISODate ) ); 0117 0118 // this values is completely out of bounds and therefore cut/truncated 0119 model.setData( model.index( 10,0 ), 2 ); 0120 model.setData( model.index( 10,1 ), 290 ); 0121 model.setData( model.index( 10,2 ), true ); 0122 model.setData( model.index( 10,3 ), QDateTime::fromString( "2007-07-11T09:00:00", Qt::ISODate ) ); 0123 0124 // this value is ok again 0125 model.setData( model.index( 11,0 ), 2 ); 0126 model.setData( model.index( 11,1 ), 210 ); 0127 model.setData( model.index( 11,2 ), true ); 0128 model.setData( model.index( 11,3 ), QDateTime::fromString( "2007-07-11T21:00:00", Qt::ISODate ) ); 0129 0130 model.setData( model.index( 12,0 ), 2 ); 0131 model.setData( model.index( 12,1 ), 205 ); 0132 model.setData( model.index( 12,2 ), true ); 0133 model.setData( model.index( 12,3 ), QDateTime::fromString( "2007-07-12T09:00:00", Qt::ISODate ) ); 0134 0135 model.setData( model.index( 13,0 ), 2 ); 0136 model.setData( model.index( 13,1 ), 204 ); 0137 model.setData( model.index( 13,2 ), true ); 0138 model.setData( model.index( 13,3 ), QDateTime::fromString( "2007-07-12T21:00:00", Qt::ISODate ) ); 0139 0140 KChart::Chart* chart = new KChart::Chart(); 0141 0142 KChart::LeveyJenningsDiagram* diagram = new KChart::LeveyJenningsDiagram; 0143 diagram->setModel( &model ); 0144 diagram->setExpectedMeanValue( 200 ); 0145 diagram->setExpectedStandardDeviation( 20 ); 0146 KChart::LeveyJenningsCoordinatePlane* plane = new KChart::LeveyJenningsCoordinatePlane; 0147 chart->replaceCoordinatePlane( plane ); 0148 plane->replaceDiagram( diagram ); 0149 0150 /*diagram->setLotChangedSymbolPosition( Qt::AlignBottom ); 0151 diagram->setSensorChangedSymbolPosition( Qt::AlignTop ); 0152 diagram->setFluidicsPackChangedSymbolPosition( Qt::AlignTop );*/ 0153 0154 //diagram->setScanLinePen( QPen( Qt::green ) ); 0155 //diagram->setSymbol( KChart::LeveyJenningsDiagram::NotOkDataPoint, 0156 // diagram->symbol( KChart::LeveyJenningsDiagram::OkDataPoint ) ); 0157 0158 diagram->setFluidicsPackChanges( QVector< QDateTime >() << QDateTime::fromString( "2007-07-11T15:00:00", Qt::ISODate ) ); 0159 diagram->setSensorChanges( QVector< QDateTime >() << QDateTime::fromString( "2007-07-10T11:00:00", Qt::ISODate ) ); 0160 0161 KChart::LeveyJenningsAxis* axis = new KChart::LeveyJenningsAxis( diagram ); 0162 axis->setPosition( KChart::CartesianAxis::Left ); 0163 diagram->addAxis( axis ); 0164 0165 KChart::LeveyJenningsAxis* axis2 = new KChart::LeveyJenningsAxis( diagram ); 0166 axis2->setPosition( KChart::CartesianAxis::Right ); 0167 axis2->setType( KChart::LeveyJenningsGridAttributes::Calculated ); 0168 diagram->addAxis( axis2 ); 0169 0170 KChart::CartesianAxis* axis3 = new KChart::LeveyJenningsAxis( diagram ); 0171 axis3->setPosition( KChart::CartesianAxis::Bottom ); 0172 diagram->addAxis( axis3 ); 0173 0174 QTableView* tv = new QTableView; 0175 tv->setModel( &model ); 0176 tv->setSelectionModel( diagram->selectionModel() ); 0177 0178 QSplitter* splitter = new QSplitter; 0179 splitter->addWidget( tv ); 0180 splitter->addWidget( chart ); 0181 0182 splitter->show(); 0183 0184 new SelectionAnimator( tv );//diagram ); 0185 0186 return app.exec(); 0187 }