kdganttconstraint.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 "kdganttconstraint.h"
00024 #include "kdganttconstraint_p.h"
00025
00026 #include <QDateTime>
00027
00028 using namespace KDGantt;
00029
00048 Constraint::Private::Private()
00049 : type( TypeSoft ),
00050 relationType( FinishStart )
00051 {
00052 }
00053
00054 Constraint::Private::Private( const Private& other )
00055 : QSharedData( other ),
00056 start( other.start ),
00057 end( other.end ),
00058 type( other.type ),
00059 relationType( other.relationType ),
00060 data( other.data )
00061 {
00062 }
00063
00077 Constraint::Constraint( const QModelIndex& idx1,
00078 const QModelIndex& idx2,
00079 Constraint::Type type,
00080 Constraint::RelationType relationType,
00081 const QMap<int, QVariant>& dataMap )
00082 : d( new Private )
00083 {
00084 d->start=idx1;
00085 d->end=idx2;
00086 d->type=type;
00087 d->relationType=relationType;
00088 d->data=dataMap;
00089 Q_ASSERT_X( idx1 != idx2 || !idx1.isValid(), "Constraint::Constraint", "cannot create a constraint with idx1 == idx2" );
00090 }
00091
00093 Constraint::Constraint()
00094 : d( new Private )
00095 {
00096 }
00097
00099 Constraint::Constraint( const Constraint& other )
00100 : d( other.d )
00101 {
00102 }
00103
00105 Constraint::~Constraint()
00106 {
00107 }
00108
00110 Constraint& Constraint::operator=( const Constraint& other )
00111 {
00112 d = other.d;
00113 return *this;
00114 }
00115
00117 Constraint::Type Constraint::type() const
00118 {
00119 return d->type;
00120 }
00121
00123 Constraint::RelationType Constraint::relationType() const
00124 {
00125 return d->relationType;
00126 }
00127
00129 QModelIndex Constraint::startIndex() const
00130 {
00131 return d->start;
00132 }
00133
00135 QModelIndex Constraint::endIndex() const
00136 {
00137 return d->end;
00138 }
00139
00144 QVariant Constraint::data( int role ) const
00145 {
00146 return d->data.value( role );
00147 }
00148
00154 void Constraint::setData( int role, const QVariant& value )
00155 {
00156 d->data.insert( role, value );
00157 }
00158
00162 void Constraint::setDataMap( const QMap< int, QVariant >& datamap )
00163 {
00164 d->data = datamap;
00165 }
00166
00169 QMap< int, QVariant > Constraint::dataMap() const
00170 {
00171 return d->data;
00172 }
00173
00174
00175 bool Constraint::compareIndexes(const Constraint& other) const
00176 {
00177 return (d->start==other.startIndex() || (!d->start.isValid() && !other.startIndex().isValid()))
00178 && (d->end==other.endIndex() || (!d->end.isValid() && !other.endIndex().isValid()));
00179 }
00180
00184 bool Constraint::operator==( const Constraint& other ) const
00185 {
00186 if ( d == other.d ) return true;
00187 return ( *d ).equals( *( other.d ) );
00188 }
00189
00191 uint Constraint::hash() const
00192 {
00193 return ::qHash( d->start ) ^ ::qHash( d->end ) ^ ::qHash( static_cast<uint>( d->type ) );
00194 }
00195
00196 #ifndef QT_NO_DEBUG_STREAM
00197
00198 QDebug operator<<( QDebug dbg, const Constraint& c )
00199 {
00200 return c.debug( dbg );
00201 }
00202
00203 QDebug Constraint::debug( QDebug dbg ) const
00204 {
00205 dbg << "KDGantt::Constraint[ start=" << d->start << "end=" << d->end << "relationType=" << d->relationType << "], data=" << d->data;
00206 return dbg;
00207 }
00208
00209 #endif
00210
00211 #ifndef KDAB_NO_UNIT_TESTS
00212
00213 #include <QStandardItemModel>
00214
00215 #include "unittest/test.h"
00216
00217 KDAB_SCOPED_UNITTEST_SIMPLE( KDGantt, Constraint, "test" )
00218 {
00219 QStandardItemModel dummyModel( 100, 100 );
00220 QModelIndex idx1 = dummyModel.index( 7, 17, QModelIndex() );
00221 QModelIndex idx2 = dummyModel.index( 42, 17, QModelIndex() );
00222
00223 Constraint c1 = Constraint( QModelIndex(), QModelIndex(), Constraint::TypeSoft );
00224 Constraint c2 = Constraint( QModelIndex(), QModelIndex(), Constraint::TypeSoft );
00225 Constraint c3 = c2;
00226 Constraint c4( idx1, idx2 );
00227 Constraint c5( idx2, idx1 );
00228
00229 assertTrue( c1==c2 );
00230 assertEqual( qHash( c1 ), qHash( c2 ) );
00231 assertTrue( c1==c3 );
00232 assertEqual( qHash( c1 ), qHash( c3 ) );
00233 assertTrue( c2==c3 );
00234 assertEqual( qHash( c2 ), qHash( c3 ) );
00235
00236 assertFalse( c2==c4 );
00237 assertNotEqual( qHash( c2 ), qHash( c4 ) );
00238
00239 assertFalse( c4==c5 );
00240
00241 assertEqual( c3.type(), Constraint::TypeSoft );
00242
00243 dummyModel.removeRow( 8 );
00244 assertFalse( c4==c5 );
00245 }
00246
00247 #endif