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 ( 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 weekStart = KGlobal::locale()->weekStartDay();
00136
00137 int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
00138
00139 QDate currentDate = d.addDays( weekStart - dayOfWeek );
00140
00141 if ( weekStart != 1 && dayOfWeek < weekStart ) {
00142 currentDate = currentDate.addDays( -7 );
00143 }
00144
00145 mSelectedDates.clear();
00146 int mask = KOGlobals::self()->getWorkWeekMask();
00147
00148 for ( int i = 0; i < 7; ++i ) {
00149 if( (1<< ((i + weekStart + 6) % 7)) & (mask) ) {
00150 mSelectedDates.append(currentDate.addDays(i));
00151 }
00152 }
00153
00154 emitSelected();
00155 }
00156
00157 void DateNavigator::selectToday()
00158 {
00159 QDate d = QDate::currentDate();
00160
00161 int dateCount = mSelectedDates.count();
00162
00163 if ( dateCount == 7 ) selectWeek( d );
00164 else selectDates( d, dateCount );
00165 }
00166
00167 void DateNavigator::selectPreviousYear()
00168 {
00169 QDate firstSelected = mSelectedDates.first();
00170 int weekDay = firstSelected.dayOfWeek();
00171 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, -1 );
00172
00173 selectWeekByDay( weekDay, firstSelected );
00174 }
00175
00176 void DateNavigator::selectPreviousMonth()
00177 {
00178 QDate firstSelected = mSelectedDates.first();
00179 int weekDay = firstSelected.dayOfWeek();
00180 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, -1 );
00181
00182 selectWeekByDay( weekDay, firstSelected );
00183 }
00184
00185 void DateNavigator::selectPreviousWeek()
00186 {
00187 QDate firstSelected = mSelectedDates.first();
00188 int weekDay = firstSelected.dayOfWeek();
00189 firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, -7 );
00190
00191 selectWeekByDay( weekDay, firstSelected );
00192 }
00193
00194 void DateNavigator::selectNextWeek()
00195 {
00196 QDate firstSelected = mSelectedDates.first();
00197 int weekDay = firstSelected.dayOfWeek();
00198
00199 firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, 7 );
00200
00201 selectWeekByDay( weekDay, firstSelected );
00202 }
00203
00204 void DateNavigator::selectNextMonth()
00205 {
00206 QDate firstSelected = mSelectedDates.first();
00207 int weekDay = firstSelected.dayOfWeek();
00208
00209 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, 1 );
00210
00211 selectWeekByDay( weekDay, firstSelected );
00212 }
00213
00214 void DateNavigator::selectNextYear()
00215 {
00216 QDate firstSelected = mSelectedDates.first();
00217 int weekDay = firstSelected.dayOfWeek();
00218 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, 1 );
00219
00220 selectWeekByDay( weekDay, firstSelected );
00221 }
00222
00223 void DateNavigator::selectPrevious()
00224 {
00225 int offset = -7;
00226 if ( datesCount() == 1 ) {
00227 offset = -1;
00228 }
00229
00230 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00231 }
00232
00233 void DateNavigator::selectNext()
00234 {
00235 int offset = 7;
00236 if ( datesCount() == 1 ) {
00237 offset = 1;
00238 }
00239
00240 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00241 }
00242
00243 void DateNavigator::selectMonth(int month)
00244 {
00245 QDate firstSelected = mSelectedDates.first();
00246 int weekDay = firstSelected.dayOfWeek();
00247
00248 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
00249 int day = calSys->day( firstSelected );
00250 calSys->setYMD( firstSelected, calSys->year(firstSelected), month, 1 );
00251 int days = calSys->daysInMonth( firstSelected );
00252
00253
00254 if ( day > days ) day = days;
00255 calSys->setYMD( firstSelected, calSys->year( firstSelected ), month, day );
00256
00257 selectWeekByDay( weekDay, firstSelected );
00258 }
00259
00260 void DateNavigator::emitSelected()
00261 {
00262 emit datesSelected( mSelectedDates );
00263 }
00264
00265 #include "datenavigator.moc"
|