File indexing completed on 2025-02-02 04:12:55
0001 /** 0002 * SPDX-FileCopyrightText: 2001-2015 Klaralvdalens Datakonsult AB. All rights reserved. 0003 * 0004 * This file is part of the KGantt library. 0005 * 0006 * SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include <QApplication> 0010 #include <QDateTime> 0011 #include <QStandardItemModel> 0012 #include <QDebug> 0013 #include <QSlider> 0014 #include <QVBoxLayout> 0015 #include <QPixmap> 0016 #include <QLabel> 0017 #include <QPainter> 0018 #include <QPixmapCache> 0019 #include <QMenu> 0020 0021 #include <KGanttView> 0022 #include <KGanttGraphicsView> 0023 #include <KGanttConstraintModel> 0024 #include <KGanttDateTimeGrid> 0025 0026 class MyGraphicsView : public KGantt::GraphicsView { 0027 Q_OBJECT 0028 public: 0029 MyGraphicsView( QWidget* parent = nullptr ) : KGantt::GraphicsView( parent ) 0030 { 0031 } 0032 0033 /*reimp*/void addConstraint( const QModelIndex& from, 0034 const QModelIndex& to, 0035 Qt::KeyboardModifiers modifiers ) override 0036 { 0037 qDebug() << "MyGraphicsView::addConstraint()"; 0038 if ( isReadOnly() ) return; 0039 KGantt::ConstraintModel* cmodel = constraintModel(); 0040 KGantt::Constraint c( from, to, ( modifiers&Qt::ShiftModifier )?KGantt::Constraint::TypeHard:KGantt::Constraint::TypeSoft ); 0041 c.setData( KGantt::Constraint::ValidConstraintPen, QPen( QColor( Qt::green ), 3, Qt::DashLine ) ); 0042 c.setData( KGantt::Constraint::InvalidConstraintPen, QPen( QColor( Qt::blue ), 3, Qt::DashLine ) ); 0043 if ( cmodel->hasConstraint( c ) ) cmodel->removeConstraint( c ); 0044 else cmodel->addConstraint( c ); 0045 } 0046 0047 }; 0048 0049 class MyStandardItem : public QStandardItem { 0050 public: 0051 MyStandardItem( const QVariant& v ) : QStandardItem() 0052 { 0053 setData( v, Qt::DisplayRole ); 0054 } 0055 MyStandardItem( const QString& v ) : QStandardItem() 0056 { 0057 setData( v, Qt::DisplayRole ); 0058 } 0059 MyStandardItem( const QDateTime& dt, int role ) : QStandardItem() 0060 { 0061 setData( QVariant::fromValue( dt ), role ); 0062 } 0063 }; 0064 0065 class MyWidget : public QWidget { 0066 Q_OBJECT 0067 public: 0068 MyWidget() : QWidget( nullptr ) 0069 { 0070 view.setGraphicsView( new MyGraphicsView ); 0071 0072 qDebug() << "Building data"; 0073 //proxyModel.setSourceModel( &model ); 0074 for ( int h = 0; h < 2; ++h ) { 0075 QList<QStandardItem*> items; 0076 items 0077 << new MyStandardItem( QString::fromLatin1( "Item %1" ).arg( h ) ) 0078 << new MyStandardItem( KGantt::TypeTask ) 0079 << new MyStandardItem( QDateTime::currentDateTime().addDays( h ), KGantt::StartTimeRole ) 0080 << new MyStandardItem( QDateTime::currentDateTime().addDays( h+1 ), KGantt::EndTimeRole ) 0081 << new MyStandardItem( 50 ); 0082 model.appendRow( items ); 0083 } 0084 0085 qDebug() << "Creating view"; 0086 slider.setOrientation( Qt::Horizontal ); 0087 slider.setRange( 1, 10000 ); 0088 slider.setValue( 100 ); 0089 QVBoxLayout* l = new QVBoxLayout( this ); 0090 l->addWidget( &view ); 0091 l->addWidget( &slider ); 0092 grid.setStartDateTime( QDateTime::currentDateTime().addDays( -3 ) ); 0093 grid.setDayWidth( 100 ); 0094 //grid.setNoInformationBrush( Qt::NoBrush ); 0095 view.setGrid( &grid ); 0096 view.setModel(&model); 0097 0098 connect( &slider, SIGNAL(valueChanged(int)), 0099 this, SLOT(slotZoom(int)) ); 0100 } 0101 0102 public Q_SLOTS: 0103 void slotZoom( int z ) 0104 { 0105 grid.setDayWidth( z ); 0106 } 0107 0108 private: 0109 KGantt::View view; 0110 KGantt::DateTimeGrid grid; 0111 QSlider slider; 0112 QStandardItemModel model; 0113 }; 0114 0115 int main( int argc, char** argv ) { 0116 QApplication app( argc, argv ); 0117 //QPixmapCache::setCacheLimit( 30*1024 ); 0118 0119 MyWidget w; 0120 w.show(); 0121 0122 return app.exec(); 0123 } 0124 0125 #include "main.moc"