File indexing completed on 2024-05-12 04:20:41
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 "kganttglobal.h" 0010 0011 using namespace KGantt; 0012 0013 0014 DateTimeSpan::DateTimeSpan() 0015 { 0016 } 0017 0018 DateTimeSpan::DateTimeSpan( const QDateTime& start, const QDateTime& end ) 0019 : m_start( start ), m_end( end ) 0020 { 0021 } 0022 0023 DateTimeSpan::DateTimeSpan( const DateTimeSpan& other ) 0024 { 0025 *this = other; 0026 } 0027 0028 DateTimeSpan::~DateTimeSpan() 0029 { 0030 } 0031 0032 DateTimeSpan& DateTimeSpan::operator=( const DateTimeSpan& other ) 0033 { 0034 if ( this != &other ) { 0035 m_start = other.m_start; 0036 m_end = other.m_end; 0037 } 0038 return *this; 0039 } 0040 0041 bool DateTimeSpan::isValid() const 0042 { 0043 return m_start.isValid() && m_end.isValid(); 0044 } 0045 0046 bool DateTimeSpan::equals( const DateTimeSpan& other ) const 0047 { 0048 return m_start==other.m_start && m_end==other.m_end; 0049 } 0050 0051 #ifndef QT_NO_DEBUG_STREAM 0052 0053 QDebug operator<<( QDebug dbg, KGantt::ItemDataRole r) 0054 { 0055 switch (r) { 0056 case KGantt::StartTimeRole: dbg << "KGantt::StartTimeRole"; break; 0057 case KGantt::EndTimeRole: dbg << "KGantt::EndTimeRole"; break; 0058 case KGantt::TaskCompletionRole: dbg << "KGantt::TaskCompletionRole"; break; 0059 case KGantt::ItemTypeRole: dbg << "KGantt::ItemTypeRole"; break; 0060 case KGantt::LegendRole: dbg << "KGantt::LegendRole"; break; 0061 default: dbg << static_cast<Qt::ItemDataRole>(r); 0062 } 0063 return dbg; 0064 } 0065 0066 QDebug operator<<( QDebug dbg, KGantt::ItemType t) 0067 { 0068 switch ( t ) { 0069 case KGantt::TypeNone: dbg << "KGantt::TypeNone"; break; 0070 case KGantt::TypeEvent: dbg << "KGantt::TypeEvent"; break; 0071 case KGantt::TypeTask: dbg << "KGantt::TypeTask"; break; 0072 case KGantt::TypeSummary: dbg << "KGantt::TypeSummary"; break; 0073 case KGantt::TypeMulti: dbg << "KGantt::TypeMulti"; break; 0074 case KGantt::TypeUser: dbg << "KGantt::TypeUser"; break; 0075 default: dbg << static_cast<int>(t); 0076 } 0077 return dbg; 0078 } 0079 0080 QDebug operator<<( QDebug dbg, const KGantt::Span& s ) 0081 { 0082 dbg << "KGantt::Span[ start="<<s.start()<<" length="<<s.length()<<"]"; 0083 return dbg; 0084 } 0085 QDebug operator<<( QDebug dbg, const KGantt::DateTimeSpan& s ) 0086 { 0087 dbg << "KGantt::DateTimeSpan[ start="<<s.start()<<" end="<<s.end()<<"]"; 0088 return dbg; 0089 } 0090 0091 #endif /* QT_NO_DEBUG_STREAM */ 0092 0093 #ifndef KDAB_NO_UNIT_TESTS 0094 0095 #include <ostream> 0096 0097 static std::ostream& operator<<( std::ostream& os, const Span& span ) 0098 { 0099 os << "Span[ start="<<span.start()<<", length="<<span.length()<<"]"; 0100 return os; 0101 } 0102 0103 static std::ostream& operator<<( std::ostream& os, const DateTimeSpan& span ) 0104 { 0105 #ifdef QT_NO_STL 0106 os << "DateTimeSpan[ start="<<span.start().toString().toLatin1().constData() 0107 << ", end="<<span.end().toString().toLatin1().constData() << "]"; 0108 #else 0109 os << "DateTimeSpan[ start="<<span.start().toString().toStdString() 0110 << ", end="<<span.end().toString().toStdString() << "]"; 0111 #endif 0112 return os; 0113 } 0114 0115 #include "unittest/test.h" 0116 0117 KDAB_SCOPED_UNITTEST_SIMPLE( KGantt, Span, "test" ) { 0118 Span s1; 0119 assertFalse( s1.isValid() ); 0120 s1.setStart( 10. ); 0121 s1.setLength( 2. ); 0122 0123 Span s2( s1.start(), s1.length() ); 0124 assertEqual( s1, s2 ); 0125 } 0126 0127 KDAB_SCOPED_UNITTEST_SIMPLE( KGantt, DateTimeSpan, "test" ) { 0128 DateTimeSpan s1; 0129 assertFalse( s1.isValid() ); 0130 QDateTime dt = QDateTime::currentDateTime(); 0131 s1.setStart( dt ); 0132 assertTrue( dt.isValid() ); 0133 s1.setEnd( dt.addDays( 1 ) ); 0134 0135 DateTimeSpan s2( dt, dt.addDays( 1 ) ); 0136 0137 assertEqual( s1, s2 ); 0138 0139 DateTimeSpan s3; 0140 0141 assertNotEqual( s1, s3 ); 0142 } 0143 #endif /* KDAB_NO_UNIT_TESTS */