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