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 <QStandardItemModel> 0011 #include <QPainter> 0012 #include <QHeaderView> 0013 #include <QTreeView> 0014 0015 #include <KGanttView> 0016 #include <KGanttDateTimeGrid> 0017 0018 using namespace KGantt; 0019 0020 /* A custom formatter that displays tabs for every 10 minutes. 0021 */ 0022 class MyDateTimeScaleFormatter : public DateTimeScaleFormatter { 0023 public: 0024 MyDateTimeScaleFormatter(); 0025 0026 /*reimp*/QDateTime nextRangeBegin( const QDateTime& datetime ) const override; 0027 /*reimp*/QDateTime currentRangeBegin( const QDateTime& datetime ) const override; 0028 0029 /*reimp*/QString text( const QDateTime& dt ) const override; 0030 }; 0031 0032 MyDateTimeScaleFormatter::MyDateTimeScaleFormatter() 0033 : DateTimeScaleFormatter( Hour, "hh" ) 0034 { 0035 } 0036 0037 QDateTime MyDateTimeScaleFormatter::nextRangeBegin( const QDateTime& datetime ) const 0038 { 0039 return currentRangeBegin( datetime ).addSecs( 60*10 ); 0040 } 0041 0042 QDateTime MyDateTimeScaleFormatter::currentRangeBegin( const QDateTime& datetime ) const 0043 { 0044 QDateTime dt( datetime ); 0045 dt.setTime( QTime( dt.time().hour(), ( dt.time().minute()/10 ) * 10, 0, 0 ) ); 0046 return dt; 0047 } 0048 0049 QString MyDateTimeScaleFormatter::text( const QDateTime& dt ) const 0050 { 0051 return QObject::tr( ":%1\nXX" ).arg( dt.time().toString( "mm" ) ); 0052 } 0053 0054 /* A custom headerview that is taller than standard 0055 * so we can fit more lines into it on the graphicsview 0056 * side. 0057 */ 0058 class MyHeaderView : public QHeaderView { 0059 public: 0060 explicit MyHeaderView( QWidget* parent = nullptr ) 0061 : QHeaderView( Qt::Horizontal, parent ) { 0062 } 0063 0064 /*reimp*/QSize sizeHint() const override { 0065 QSize s = QHeaderView::sizeHint(); s.rheight() *= 3; return s; 0066 } 0067 }; 0068 0069 int main( int argc, char** argv ) { 0070 QApplication app( argc, argv ); 0071 0072 QStandardItemModel model( 1, 1 ); 0073 model.setHeaderData( 0, Qt::Horizontal, QObject::tr( "Task" ) ); 0074 0075 /*** A view with some alternative header labels ***/ 0076 View view1; 0077 DateTimeGrid grid1; 0078 grid1.setUserDefinedUpperScale( new DateTimeScaleFormatter( DateTimeScaleFormatter::Year, 0079 QString::fromLatin1( "yyyy" ), 0080 QString::fromLatin1( "In the year %1." ), 0081 Qt::AlignLeft ) ); 0082 grid1.setUserDefinedLowerScale( new DateTimeScaleFormatter( DateTimeScaleFormatter::Month, 0083 QString::fromLatin1( "MMMM" ), 0084 QString::fromLatin1( "In the month %1." ), 0085 Qt::AlignRight ) ); 0086 grid1.setScale( DateTimeGrid::ScaleUserDefined ); 0087 grid1.setDayWidth( 6. ); 0088 view1.setGrid( &grid1 ); 0089 view1.setModel( &model ); 0090 view1.show(); 0091 0092 /*** A view with header and vertical grid lines for every 10 minutes */ 0093 View view2; 0094 QTreeView* tw = qobject_cast<QTreeView*>( view2.leftView() ); 0095 if ( tw ) tw->setHeader( new MyHeaderView ); 0096 DateTimeGrid grid2; 0097 grid2.setDayWidth( 5000 ); 0098 grid2.setUserDefinedUpperScale( new DateTimeScaleFormatter( DateTimeScaleFormatter::Hour, QString::fromLatin1( "hh" ) ) ); 0099 grid2.setUserDefinedLowerScale( new MyDateTimeScaleFormatter ); 0100 grid2.setScale( DateTimeGrid::ScaleUserDefined ); 0101 view2.setGrid( &grid2 ); 0102 view2.setModel( &model ); 0103 view2.show(); 0104 0105 return app.exec(); 0106 }