File indexing completed on 2024-06-09 04:18:50
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 "entrydialog.h" 0010 0011 #include "ui_entrydialog.h" 0012 0013 #include <KGanttConstraintModel> 0014 #include <KGanttGlobal> 0015 #include <QAbstractItemModel> 0016 #include <QPersistentModelIndex> 0017 0018 Q_DECLARE_METATYPE( QPersistentModelIndex ) 0019 0020 EntryDialog::EntryDialog( const QAbstractItemModel* model, QWidget* parent, Qt::WindowFlags f ) 0021 : QDialog( parent, f ), 0022 indexList( QList<QPersistentModelIndex>() ), 0023 ui( new Ui::EntryDialog ) 0024 { 0025 ui->setupUi( this ); 0026 this->model = model; 0027 init(); 0028 } 0029 0030 void EntryDialog::init() 0031 { 0032 ui->type->addItem( tr( "Event" ), KGantt::TypeEvent ); 0033 ui->type->addItem( tr( "Task" ), KGantt::TypeTask ); 0034 ui->type->addItem( tr( "Summary" ), KGantt::TypeSummary ); 0035 ui->type->addItem( tr( "Multi" ), KGantt::TypeMulti ); 0036 0037 for (int row = 0; row < model->rowCount(); ++row ) 0038 addDependItem( model, model->index( row, 0 ) ); 0039 0040 connect( ui->startDate, SIGNAL(dateTimeChanged(QDateTime)), this, SLOT(updateEndDate(QDateTime)) ); 0041 connect( ui->readOnly, SIGNAL(toggled(bool)), this, SLOT(disableEditing(bool)) ); 0042 0043 ui->startDate->setDateTime( QDateTime::currentDateTime() ); 0044 } 0045 0046 void EntryDialog::initFrom( const QModelIndex & index, const KGantt::ConstraintModel* constraintModel ) 0047 { 0048 int row = index.row(); 0049 const QModelIndex parent = index.parent(); 0050 0051 ui->name->setText( model->data( model->index( row, 0, parent ) ).toString() ); 0052 ui->legend->setText( model->data( model->index( row, 5, parent ) ).toString() ); 0053 int idx = ui->type->findData( model->data( model->index( row, 1, parent ) ).toInt() ); 0054 ui->type->setCurrentIndex( idx ); 0055 ui->startDate->setDateTime( model->data( model->index( row, 2, parent ) ).toDateTime() ); 0056 ui->endDate->setDateTime( model->data( model->index( row, 3, parent ) ).toDateTime() ); 0057 ui->completion->setValue( model->data( model->index( row, 4, parent ) ).toInt() ); 0058 ui->readOnly->setChecked( !(model->flags( model->index( row, 0, parent ) ) & Qt::ItemIsEditable) ); 0059 0060 QList<KGantt::Constraint> constraints = constraintModel->constraintsForIndex( model->index( row, 0, parent ) ); 0061 if ( constraints.isEmpty() ) 0062 return; 0063 0064 QModelIndex constraintIndex; 0065 for ( int i = 0; i < constraints.size(); ++i ) { 0066 KGantt::Constraint constraint = constraints[i]; 0067 if ( constraint.endIndex() == index ) { 0068 constraintIndex = constraint.startIndex(); 0069 break; 0070 } 0071 } 0072 0073 if ( !constraintIndex.isValid() ) 0074 return; 0075 0076 ui->depends->setCurrentIndex( indexList.indexOf( constraintIndex ) + 1 ); 0077 } 0078 0079 void EntryDialog::addDependItem( const QAbstractItemModel* model, const QModelIndex & index, int indent) 0080 { 0081 indexList << QPersistentModelIndex( index ); 0082 QString str = QString( "%1%2" ).arg( QString().fill( ' ', indent ) ).arg( model->data( index ).toString() ); 0083 ui->depends->addItem( str ); 0084 0085 for (int row = 0; row < model->rowCount( index ); ++row ) 0086 addDependItem( model, model->index( row, 0, index ), indent + 2 ); 0087 } 0088 0089 QString EntryDialog::name() const 0090 { 0091 return ui->name->text(); 0092 } 0093 0094 int EntryDialog::type() const 0095 { 0096 return ui->type->itemData( ui->type->currentIndex() ).toInt(); 0097 } 0098 0099 QDateTime EntryDialog::startDate() const 0100 { 0101 return ui->startDate->dateTime(); 0102 } 0103 0104 QDateTime EntryDialog::endDate() const 0105 { 0106 return ui->endDate->dateTime(); 0107 } 0108 0109 int EntryDialog::completion() const 0110 { 0111 return ui->completion->value(); 0112 } 0113 0114 void EntryDialog::updateEndDate(const QDateTime & startDate) 0115 { 0116 ui->endDate->setMinimumDate( startDate.date() ); 0117 ui->endDate->setMinimumTime( startDate.time() ); 0118 } 0119 0120 bool EntryDialog::readOnly() const 0121 { 0122 return ui->readOnly->isChecked(); 0123 } 0124 0125 QModelIndex EntryDialog::depends() const 0126 { 0127 if ( ui->depends->currentIndex() == 0 ) 0128 return QModelIndex(); 0129 0130 QPersistentModelIndex index = indexList[ ui->depends->currentIndex() - 1 ]; 0131 if ( index.isValid() ) 0132 return index; 0133 0134 return QModelIndex(); 0135 } 0136 0137 QString EntryDialog::legend() const 0138 { 0139 return ui->legend->text(); 0140 } 0141 0142 void EntryDialog::disableEditing(bool disable) 0143 { 0144 ui->name->setEnabled( !disable ); 0145 ui->type->setEnabled( !disable ); 0146 ui->completion->setEnabled( !disable ); 0147 ui->startDate->setEnabled( !disable ); 0148 ui->endDate->setEnabled( !disable ); 0149 ui->depends->setEnabled( !disable ); 0150 }