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"