kdgantt
kdganttconstraintproxy.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "kdganttconstraintproxy.h"
00024 #include "kdganttconstraintmodel.h"
00025
00026 #include <QAbstractProxyModel>
00027
00028 using namespace KDGantt;
00029
00034 ConstraintProxy::ConstraintProxy( QObject* parent )
00035 : QObject( parent )
00036 {
00037 }
00038
00039 ConstraintProxy::~ConstraintProxy()
00040 {
00041 }
00042
00043 void ConstraintProxy::setSourceModel( ConstraintModel* src )
00044 {
00045 if ( m_source ) disconnect( m_source );
00046 m_source = src;
00047
00048 copyFromSource();
00049
00050 connect( m_source, SIGNAL( constraintAdded( const Constraint& ) ),
00051 this, SLOT( slotSourceConstraintAdded( const Constraint& ) ) );
00052 connect( m_source, SIGNAL( constraintRemoved( const Constraint& ) ),
00053 this, SLOT( slotSourceConstraintRemoved( const Constraint& ) ) );
00054 }
00055
00056 void ConstraintProxy::setDestinationModel( ConstraintModel* dest )
00057 {
00058 if ( m_destination ) disconnect( m_destination );
00059 m_destination = dest;
00060
00061 copyFromSource();
00062
00063 connect( m_destination, SIGNAL( constraintAdded( const Constraint& ) ),
00064 this, SLOT( slotDestinationConstraintAdded( const Constraint& ) ) );
00065 connect( m_destination, SIGNAL( constraintRemoved( const Constraint& ) ),
00066 this, SLOT( slotDestinationConstraintRemoved( const Constraint& ) ) );
00067 }
00068
00069 void ConstraintProxy::setProxyModel( QAbstractProxyModel* proxy )
00070 {
00071 m_proxy = proxy;
00072 }
00073
00074 ConstraintModel* ConstraintProxy::sourceModel() const { return m_source; }
00075 ConstraintModel* ConstraintProxy::destinationModel() const { return m_destination; }
00076 QAbstractProxyModel* ConstraintProxy::proxyModel() const { return m_proxy; }
00077
00078
00079 void ConstraintProxy::copyFromSource()
00080 {
00081 if ( m_destination ) {
00082 m_destination->clear();
00083 if ( !m_source ) return;
00084 QList<Constraint> lst = m_source->constraints();
00085 Q_FOREACH( const Constraint& c, lst ) {
00086 m_destination->addConstraint( Constraint( m_proxy->mapFromSource( c.startIndex() ),
00087 m_proxy->mapFromSource( c.endIndex() ),
00088 c.type(), c.relationType() ) );
00089 }
00090 }
00091 }
00092
00093 void ConstraintProxy::slotSourceConstraintAdded( const Constraint& c )
00094 {
00095
00096 if ( m_destination ) m_destination->addConstraint( Constraint( m_proxy->mapFromSource( c.startIndex() ),
00097 m_proxy->mapFromSource( c.endIndex() ),
00098 c.type(), c.relationType() ) );
00099 }
00100
00101 void ConstraintProxy::slotSourceConstraintRemoved( const Constraint& c )
00102 {
00103
00104 if ( m_destination ) m_destination->removeConstraint( Constraint( m_proxy->mapFromSource( c.startIndex() ),
00105 m_proxy->mapFromSource( c.endIndex() ),
00106 c.type(), c.relationType() ) );
00107 }
00108
00109 void ConstraintProxy::slotDestinationConstraintAdded( const Constraint& c )
00110 {
00111
00112 if ( m_source ) m_source->addConstraint( Constraint( m_proxy->mapToSource( c.startIndex() ),
00113 m_proxy->mapToSource( c.endIndex() ),
00114 c.type(), c.relationType() ) );
00115 }
00116
00117 void ConstraintProxy::slotDestinationConstraintRemoved( const Constraint& c )
00118 {
00119
00120 if ( m_source ) m_source->removeConstraint( Constraint( m_proxy->mapToSource( c.startIndex() ),
00121 m_proxy->mapToSource( c.endIndex() ),
00122 c.type(), c.relationType() ) );
00123 }
00124
00125 #include "moc_kdganttconstraintproxy.cpp"