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"