datenavigator.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "datenavigator.h"
00025
00026 #include <calendarsystem/kcalendarsystem.h>
00027
00028 #include "kocore.h"
00029
00030 #include <kdebug.h>
00031
00032 using namespace KCal;
00033
00034 DateNavigator::DateNavigator( QObject *parent, const char *name )
00035 : QObject( parent, name )
00036 {
00037 mSelectedDates.append( QDate::currentDate() );
00038 }
00039
00040 DateNavigator::~DateNavigator()
00041 {
00042 }
00043
00044 DateList DateNavigator::selectedDates()
00045 {
00046 return mSelectedDates;
00047 }
00048
00049 int DateNavigator::datesCount() const
00050 {
00051 return mSelectedDates.count();
00052 }
00053
00054 void DateNavigator::selectDates( const DateList& dateList )
00055 {
00056 if (dateList.count() > 0) {
00057 mSelectedDates = dateList;
00058
00059 emitSelected();
00060 }
00061 }
00062
00063 void DateNavigator::selectDate( const QDate &date )
00064 {
00065 QDate d = date;
00066
00067 if ( !d.isValid() ) {
00068 kdDebug() << "DateNavigator::selectDates(QDate): an invalid date was passed as a parameter!" << endl;
00069 d = QDate::currentDate();
00070 }
00071
00072 mSelectedDates.clear();
00073 mSelectedDates.append( d );
00074
00075 emitSelected();
00076 }
00077
00078 void DateNavigator::selectDates( int count )
00079 {
00080 selectDates( mSelectedDates.first(), count );
00081 }
00082
00083 void DateNavigator::selectDates( const QDate &d, int count )
00084 {
00085 DateList dates;
00086
00087 int i;
00088 for( i = 0; i < count; ++i ) {
00089 dates.append( d.addDays( i ) );
00090 }
00091
00092 mSelectedDates = dates;
00093
00094 emitSelected();
00095 }
00096
00097 void DateNavigator::selectWeekByDay( int weekDay, const QDate &d )
00098 {
00099 int dateCount = mSelectedDates.count();
00100 bool weekStart = ( weekDay == KGlobal::locale()->weekStartDay() );
00101 if ( weekDay == 1 && dateCount == 5 ) selectWorkWeek( d );
00102 else if ( weekStart && dateCount == 7 ) selectWeek( d );
00103 else selectDates( d, dateCount );
00104 }
00105
00106 void DateNavigator::selectWeek()
00107 {
00108 selectWeek( mSelectedDates.first() );
00109 }
00110
00111 void DateNavigator::selectWeek( const QDate &d )
00112 {
00113 int dayOfWeek = KOCore::self()->calendarSystem()->dayOfTheWeek( d );
00114
00115 int weekStart = KGlobal::locale()->weekStartDay();
00116
00117 QDate firstDate = d.addDays( weekStart - dayOfWeek );
00118
00119 if ( weekStart != 1 && dayOfWeek < weekStart ) {
00120 firstDate = firstDate.addDays( -7 );
00121 }
00122
00123 selectDates( firstDate, 7 );
00124 }
00125
00126 void DateNavigator::selectWorkWeek()
00127 {
00128 selectWorkWeek( mSelectedDates.first() );
00129 }
00130
00131 void DateNavigator::selectWorkWeek( const QDate &d )
00132 {
00133 int dayOfWeek = KOCore::self()->calendarSystem()->dayOfTheWeek( d );
00134
00135 QDate firstDate = d.addDays( 1 - dayOfWeek );
00136
00137 int weekStart = KGlobal::locale()->weekStartDay();
00138 if ( weekStart != 1 && dayOfWeek >= weekStart ) {
00139 firstDate = firstDate.addDays( 7 );
00140 }
00141
00142 selectDates( firstDate, 5 );
00143 }
00144
00145 void DateNavigator::selectToday()
00146 {
00147 QDate d = QDate::currentDate();
00148
00149 int dateCount = mSelectedDates.count();
00150
00151 if ( dateCount == 5 ) selectWorkWeek( d );
00152 else if ( dateCount == 7 ) selectWeek( d );
00153 else selectDates( d, dateCount );
00154 }
00155
00156 void DateNavigator::selectPreviousYear()
00157 {
00158 QDate firstSelected = mSelectedDates.first();
00159 int weekDay = firstSelected.dayOfWeek();
00160 KOCore::self()->calendarSystem()->previousYearDate( firstSelected );
00161
00162 selectWeekByDay( weekDay, firstSelected );
00163 }
00164
00165 void DateNavigator::selectPreviousMonth()
00166 {
00167 QDate firstSelected = mSelectedDates.first();
00168 int weekDay = firstSelected.dayOfWeek();
00169 KOCore::self()->calendarSystem()->previousMonthDate( firstSelected );
00170
00171 selectWeekByDay( weekDay, firstSelected );
00172 }
00173
00174 void DateNavigator::selectNextMonth()
00175 {
00176 QDate firstSelected = mSelectedDates.first();
00177 int weekDay = firstSelected.dayOfWeek();
00178
00179 KOCore::self()->calendarSystem()->nextMonthDate( firstSelected );
00180
00181 selectWeekByDay( weekDay, firstSelected );
00182 }
00183
00184 void DateNavigator::selectNextYear()
00185 {
00186 QDate firstSelected = mSelectedDates.first();
00187 int weekDay = firstSelected.dayOfWeek();
00188 KOCore::self()->calendarSystem()->nextYearDate( firstSelected );
00189
00190 selectWeekByDay( weekDay, firstSelected );
00191 }
00192
00193 void DateNavigator::selectPrevious()
00194 {
00195 int offset = -7;
00196 if ( datesCount() == 1 ) {
00197 offset = -1;
00198 }
00199
00200 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00201 }
00202
00203 void DateNavigator::selectNext()
00204 {
00205 int offset = 7;
00206 if ( datesCount() == 1 ) {
00207 offset = 1;
00208 }
00209
00210 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00211 }
00212
00213 void DateNavigator::emitSelected()
00214 {
00215 emit datesSelected( mSelectedDates );
00216 }
00217
00218 #include "datenavigator.moc"
This file is part of the documentation for kdelibs Version 3.1.4.