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 }