File indexing completed on 2024-05-26 04:24:16

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 <QModelIndex>
0011 #include <QStandardItemModel>
0012 #include <QPushButton>
0013 #include <QPointer>
0014 
0015 #include <stdlib.h>
0016 
0017 #include <KGanttGraphicsView>
0018 #include <KGanttAbstractRowController>
0019 #include <KGanttStyleOptionGanttItem>
0020 
0021 class MyRowController : public KGantt::AbstractRowController {
0022 private:
0023     static const int ROW_HEIGHT;
0024     QPointer<QAbstractItemModel> m_model;
0025 public:
0026     MyRowController()
0027     {
0028     }
0029 
0030     void setModel( QAbstractItemModel* model )
0031     {
0032         m_model = model;
0033     }
0034 
0035     /*reimp*/int headerHeight() const override { return 40; }
0036 
0037     /*reimp*/ bool isRowVisible( const QModelIndex& ) const override { return true;}
0038     /*reimp*/ bool isRowExpanded( const QModelIndex& ) const override { return false; }
0039     /*reimp*/ KGantt::Span rowGeometry( const QModelIndex& idx ) const override
0040     {
0041         qDebug() << "rowGeometry(" << idx.row()<<")";
0042         return KGantt::Span( idx.row()*ROW_HEIGHT, ROW_HEIGHT );
0043     }
0044     /*reimp*/ int maximumItemHeight() const override {
0045         return ROW_HEIGHT/2;
0046     }
0047     /*reimp*/ int totalHeight() const override {
0048         return m_model.isNull()?0:m_model->rowCount()*ROW_HEIGHT;
0049     }
0050 
0051     /*reimp*/ QModelIndex indexAt( int height ) const override {
0052         return m_model->index( height/ROW_HEIGHT, 0 );
0053     }
0054 
0055     /*reimp*/ QModelIndex indexBelow( const QModelIndex& idx ) const override {
0056         if ( !idx.isValid() )return QModelIndex();
0057         return idx.model()->index( idx.row()+1, idx.column(), idx.parent() );
0058     }
0059     /*reimp*/ QModelIndex indexAbove( const QModelIndex& idx ) const override {
0060         if ( !idx.isValid() )return QModelIndex();
0061         return idx.model()->index( idx.row()-1, idx.column(), idx.parent() );
0062     }
0063 
0064 };
0065 
0066 const int MyRowController::ROW_HEIGHT = 30;
0067 
0068 class MyStandardItemModel : public QStandardItemModel {
0069 public:
0070     /*reimp*/bool setData( const QModelIndex& idx, const QVariant& value, int role ) override
0071     {
0072         //qDebug() << "MyStandardItemModel::setData("<<idx<< value<<role<<")";
0073         return QStandardItemModel::setData( idx, value, role );
0074     }
0075 };
0076 
0077 static Qt::Alignment random_alignment()
0078 {
0079     int r = (int) (3.0*rand()/(RAND_MAX+1.0));
0080     switch ( r ) {
0081     case 0: return Qt::AlignTop;
0082     case 1: return Qt::AlignBottom;
0083     case 2: return Qt::AlignCenter;
0084     }
0085     return Qt::Alignment();
0086 }
0087 
0088 static KGantt::StyleOptionGanttItem::Position random_position()
0089 {
0090     int r = (int) (3.0*rand()/(RAND_MAX+1.0));
0091     switch ( r ) {
0092     case 0: return KGantt::StyleOptionGanttItem::Left;
0093     case 1: return KGantt::StyleOptionGanttItem::Right;
0094     case 2:
0095     default: return KGantt::StyleOptionGanttItem::Center;
0096     }
0097 }
0098 
0099 int main( int argc, char** argv ) {
0100     QApplication app( argc, argv );
0101 
0102 
0103     KGantt::GraphicsView* view = new KGantt::GraphicsView;
0104     MyRowController* rowController = new MyRowController;
0105     view->setReadOnly(true);
0106     view->setRowController( rowController );
0107     view->show();
0108 
0109     MyStandardItemModel model;
0110     for ( int i = 0; i < 10; ++i ) {
0111         QList<QStandardItem*> items;
0112         for ( int j = 0; j < 10; ++j ) {
0113             QStandardItem* item = new QStandardItem;
0114             //for ( int col = 0; col < 5; ++col ) {
0115             //  QStandardItem* colitem = new QStandardItem;
0116             item->setText( QString::fromLatin1( "Item %1" ).arg( i ) );
0117             item->setData( KGantt::TypeTask, KGantt::ItemTypeRole );
0118             item->setData( QDateTime::currentDateTime().addDays( 2*j ).addMSecs( 100000*i ), KGantt::StartTimeRole );
0119             item->setData( QDateTime::currentDateTime().addDays( 2*j+1 ).addMSecs( 100000*i ), KGantt::EndTimeRole );
0120             item->setData( QVariant::fromValue<int>( random_alignment() ), Qt::TextAlignmentRole );
0121             item->setData( QVariant::fromValue<int>( random_position()), KGantt::TextPositionRole );
0122             item->setFlags( item->flags() & ~Qt::ItemIsSelectable );
0123             //  item->appendColumn( QList<QStandardItem*>() << colitem );
0124             //}
0125             items.push_back( item );
0126         }
0127         model.appendRow( items );
0128     }
0129     qDebug() << &model;
0130     rowController->setModel( &model );
0131     view->setModel( &model );
0132 #if 0
0133     QPushButton* pb = new QPushButton( QObject::tr( "Reset" ) );
0134     QObject::connect( pb, SIGNAL(clicked()),
0135                       &model, SIGNAL(modelReset()) );
0136     pb->show();
0137 #endif
0138     return app.exec();
0139     //return 0;
0140 }