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"