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 }