File indexing completed on 2024-05-12 04:20:39

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 "kganttconstraintproxy.h"
0010 #include "kganttconstraintmodel.h"
0011 
0012 #include <QAbstractProxyModel>
0013 
0014 using namespace KGantt;
0015 
0016 
0017 
0018 ConstraintProxy::ConstraintProxy( QObject* parent )
0019     : QObject( parent )
0020 {
0021 }
0022 
0023 ConstraintProxy::~ConstraintProxy()
0024 {
0025 }
0026 
0027 void ConstraintProxy::setSourceModel( ConstraintModel* src )
0028 {
0029     if ( m_source ) m_source->disconnect( this );
0030     m_source = src;
0031 
0032     copyFromSource();
0033 
0034     connect( m_source, SIGNAL(constraintAdded(KGantt::Constraint)),
0035              this, SLOT(slotSourceConstraintAdded(KGantt::Constraint)) );
0036     connect( m_source, SIGNAL(constraintRemoved(KGantt::Constraint)),
0037              this, SLOT(slotSourceConstraintRemoved(KGantt::Constraint)) );
0038 }
0039 
0040 void ConstraintProxy::setDestinationModel( ConstraintModel* dest )
0041 {
0042     if ( m_destination ) m_destination->disconnect( this );
0043     m_destination = dest;
0044 
0045     copyFromSource();
0046 
0047     connect( m_destination, SIGNAL(constraintAdded(KGantt::Constraint)),
0048              this, SLOT(slotDestinationConstraintAdded(KGantt::Constraint)) );
0049     connect( m_destination, SIGNAL(constraintRemoved(KGantt::Constraint)),
0050              this, SLOT(slotDestinationConstraintRemoved(KGantt::Constraint)) );
0051 }
0052 
0053 void ConstraintProxy::setProxyModel( QAbstractProxyModel* proxy )
0054 {
0055     if ( m_proxy == proxy ) return;
0056     if ( m_proxy ) m_proxy->disconnect( this );
0057     m_proxy = proxy;
0058     if ( m_proxy ) {
0059         connect( m_proxy, SIGNAL(layoutChanged()), this, SLOT(slotLayoutChanged()) );
0060         connect( m_proxy, SIGNAL(modelReset()), this, SLOT(slotLayoutChanged()) );
0061     }
0062 }
0063 
0064 ConstraintModel* ConstraintProxy::sourceModel() const { return m_source; }
0065 ConstraintModel* ConstraintProxy::destinationModel() const { return m_destination; }
0066 QAbstractProxyModel* ConstraintProxy::proxyModel() const { return m_proxy; }
0067 
0068 
0069 void ConstraintProxy::copyFromSource()
0070 {
0071     if ( m_destination ) {
0072         m_destination->clear();
0073         if ( !m_source ) return;
0074         const QList<Constraint> lst = m_source->constraints();
0075         for( const Constraint& c : lst )
0076         {
0077            Constraint temp( m_proxy->mapFromSource( c.startIndex() ), m_proxy->mapFromSource( c.endIndex() ),
0078                             c.type(), c.relationType(), c.dataMap() );
0079            m_destination->addConstraint( temp );
0080         }
0081     }
0082 }
0083 
0084 void ConstraintProxy::slotSourceConstraintAdded( const KGantt::Constraint& c )
0085 {
0086     if ( m_destination )
0087     {
0088         Constraint temp( m_proxy->mapFromSource( c.startIndex() ), m_proxy->mapFromSource( c.endIndex() ),
0089                          c.type(), c.relationType(), c.dataMap() );
0090         m_destination->addConstraint( temp );
0091     }
0092 }
0093 
0094 void ConstraintProxy::slotSourceConstraintRemoved( const KGantt::Constraint& c )
0095 {
0096     if ( m_destination )
0097     {
0098         Constraint temp( m_proxy->mapFromSource( c.startIndex() ), m_proxy->mapFromSource( c.endIndex() ),
0099                          c.type(), c.relationType(), c.dataMap() );
0100         m_destination->removeConstraint( temp );
0101     }
0102 }
0103 
0104 void ConstraintProxy::slotDestinationConstraintAdded( const KGantt::Constraint& c )
0105 {
0106     if ( m_source )
0107     {
0108         Constraint temp( m_proxy->mapToSource( c.startIndex() ), m_proxy->mapToSource( c.endIndex() ),
0109                          c.type(), c.relationType(), c.dataMap() );
0110         m_source->addConstraint( temp );
0111     }
0112 }
0113 
0114 void ConstraintProxy::slotDestinationConstraintRemoved( const KGantt::Constraint& c )
0115 {
0116     if ( m_source )
0117     {
0118         Constraint temp( m_proxy->mapToSource( c.startIndex() ), m_proxy->mapToSource( c.endIndex() ),
0119                          c.type(), c.relationType(), c.dataMap() );
0120         m_source->removeConstraint( temp );
0121     }
0122 }
0123 
0124 void ConstraintProxy::slotLayoutChanged()
0125 {
0126     copyFromSource();
0127 }
0128 
0129 #include "moc_kganttconstraintproxy.cpp"