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 "koglobals.h"
00027
00028 #include <kcalendarsystem.h>
00029
00030 #include <kdebug.h>
00031 #include <kglobal.h>
00032 #include <klocale.h>
00033
00034 using namespace KCal;
00035
00036 DateNavigator::DateNavigator( QObject *parent, const char *name )
00037 : QObject( parent, name )
00038 {
00039 mSelectedDates.append( QDate::currentDate() );
00040 }
00041
00042 DateNavigator::~DateNavigator()
00043 {
00044 }
00045
00046 DateList DateNavigator::selectedDates()
00047 {
00048 return mSelectedDates;
00049 }
00050
00051 int DateNavigator::datesCount() const
00052 {
00053 return mSelectedDates.count();
00054 }
00055
00056 void DateNavigator::selectDates( const DateList& dateList )
00057 {
00058 if (dateList.count() > 0) {
00059 mSelectedDates = dateList;
00060
00061 emitSelected();
00062 }
00063 }
00064
00065 void DateNavigator::selectDate( const QDate &date )
00066 {
00067 QDate d = date;
00068
00069 if ( !d.isValid() ) {
00070 kdDebug(5850) << "DateNavigator::selectDates(QDate): an invalid date was passed as a parameter!" << endl;
00071 d = QDate::currentDate();
00072 }
00073
00074 mSelectedDates.clear();
00075 mSelectedDates.append( d );
00076
00077 emitSelected();
00078 }
00079
00080 void DateNavigator::selectDates( int count )
00081 {
00082 selectDates( mSelectedDates.first(), count );
00083 }
00084
00085 void DateNavigator::selectDates( const QDate &d, int count )
00086 {
00087 DateList dates;
00088
00089 int i;
00090 for( i = 0; i < count; ++i ) {
00091 dates.append( d.addDays( i ) );
00092 }
00093
00094 mSelectedDates = dates;
00095
00096 emitSelected();
00097 }
00098
00099 void DateNavigator::selectWeekByDay( int weekDay, const QDate &d )
00100 {
00101 int dateCount = mSelectedDates.count();
00102 bool weekStart = ( weekDay == KGlobal::locale()->weekStartDay() );
00103 if ( weekDay == 1 && dateCount == 5 ) selectWorkWeek( d );
00104 else if ( weekStart && dateCount == 7 ) selectWeek( d );
00105 else selectDates( d, dateCount );
00106 }
00107
00108 void DateNavigator::selectWeek()
00109 {
00110 selectWeek( mSelectedDates.first() );
00111 }
00112
00113 void DateNavigator::selectWeek( const QDate &d )
00114 {
00115 int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
00116
00117 int weekStart = KGlobal::locale()->weekStartDay();
00118
00119 QDate firstDate = d.addDays( weekStart - dayOfWeek );
00120
00121 if ( weekStart != 1 && dayOfWeek < weekStart ) {
00122 firstDate = firstDate.addDays( -7 );
00123 }
00124
00125 selectDates( firstDate, 7 );
00126 }
00127
00128 void DateNavigator::selectWorkWeek()
00129 {
00130 selectWorkWeek( mSelectedDates.first() );
00131 }
00132
00133 void DateNavigator::selectWorkWeek( const QDate &d )
00134 {
00135 int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
00136
00137 QDate firstDate = d.addDays( 1 - dayOfWeek );
00138
00139 int weekStart = KGlobal::locale()->weekStartDay();
00140 if ( weekStart != 1 && dayOfWeek >= weekStart ) {
00141 firstDate = firstDate.addDays( 7 );
00142 }
00143
00144 selectDates( firstDate, 5 );
00145 }
00146
00147 void DateNavigator::selectToday()
00148 {
00149 QDate d = QDate::currentDate();
00150
00151 int dateCount = mSelectedDates.count();
00152
00153 if ( dateCount == 5 ) selectWorkWeek( d );
00154 else if ( dateCount == 7 ) selectWeek( d );
00155 else selectDates( d, dateCount );
00156 }
00157
00158 void DateNavigator::selectPreviousYear()
00159 {
00160 QDate firstSelected = mSelectedDates.first();
00161 int weekDay = firstSelected.dayOfWeek();
00162 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, -1 );
00163
00164 selectWeekByDay( weekDay, firstSelected );
00165 }
00166
00167 void DateNavigator::selectPreviousMonth()
00168 {
00169 QDate firstSelected = mSelectedDates.first();
00170 int weekDay = firstSelected.dayOfWeek();
00171 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, -1 );
00172
00173 selectWeekByDay( weekDay, firstSelected );
00174 }
00175
00176 void DateNavigator::selectPreviousWeek()
00177 {
00178 QDate firstSelected = mSelectedDates.first();
00179 int weekDay = firstSelected.dayOfWeek();
00180 firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, -7 );
00181
00182 selectWeekByDay( weekDay, firstSelected );
00183 }
00184
00185 void DateNavigator::selectNextWeek()
00186 {
00187 QDate firstSelected = mSelectedDates.first();
00188 int weekDay = firstSelected.dayOfWeek();
00189
00190 firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, 7 );
00191
00192 selectWeekByDay( weekDay, firstSelected );
00193 }
00194
00195 void DateNavigator::selectNextMonth()
00196 {
00197 QDate firstSelected = mSelectedDates.first();
00198 int weekDay = firstSelected.dayOfWeek();
00199
00200 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, 1 );
00201
00202 selectWeekByDay( weekDay, firstSelected );
00203 }
00204
00205 void DateNavigator::selectNextYear()
00206 {
00207 QDate firstSelected = mSelectedDates.first();
00208 int weekDay = firstSelected.dayOfWeek();
00209 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, 1 );
00210
00211 selectWeekByDay( weekDay, firstSelected );
00212 }
00213
00214 void DateNavigator::selectPrevious()
00215 {
00216 int offset = -7;
00217 if ( datesCount() == 1 ) {
00218 offset = -1;
00219 }
00220
00221 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00222 }
00223
00224 void DateNavigator::selectNext()
00225 {
00226 int offset = 7;
00227 if ( datesCount() == 1 ) {
00228 offset = 1;
00229 }
00230
00231 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00232 }
00233
00234 void DateNavigator::selectMonth(int month)
00235 {
00236 QDate firstSelected = mSelectedDates.first();
00237 int weekDay = firstSelected.dayOfWeek();
00238
00239 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
00240 calSys->setYMD( firstSelected, calSys->year(firstSelected), month, calSys->day(firstSelected) );
00241
00242 selectWeekByDay( weekDay, firstSelected );
00243 }
00244
00245 void DateNavigator::emitSelected()
00246 {
00247 emit datesSelected( mSelectedDates );
00248 }
00249
00250 #include "datenavigator.moc"
This file is part of the documentation for korganizer Library Version 3.2.2.