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 ) {
00164 selectWeek( d );
00165 } else if ( dateCount == 5 ) {
00166 selectWorkWeek( d );
00167 } else {
00168 selectDates( d, dateCount );
00169 }
00170 }
00171
00172 void DateNavigator::selectPreviousYear()
00173 {
00174 QDate firstSelected = mSelectedDates.first();
00175 int weekDay = firstSelected.dayOfWeek();
00176 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, -1 );
00177
00178 selectWeekByDay( weekDay, firstSelected );
00179 }
00180
00181 void DateNavigator::selectPreviousMonth()
00182 {
00183 QDate firstSelected = mSelectedDates.first();
00184 int weekDay = firstSelected.dayOfWeek();
00185 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, -1 );
00186
00187 selectWeekByDay( weekDay, firstSelected );
00188 }
00189
00190 void DateNavigator::selectPreviousWeek()
00191 {
00192 QDate firstSelected = mSelectedDates.first();
00193 int weekDay = firstSelected.dayOfWeek();
00194 firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, -7 );
00195
00196 selectWeekByDay( weekDay, firstSelected );
00197 }
00198
00199 void DateNavigator::selectNextWeek()
00200 {
00201 QDate firstSelected = mSelectedDates.first();
00202 int weekDay = firstSelected.dayOfWeek();
00203
00204 firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, 7 );
00205
00206 selectWeekByDay( weekDay, firstSelected );
00207 }
00208
00209 void DateNavigator::selectNextMonth()
00210 {
00211 QDate firstSelected = mSelectedDates.first();
00212 int weekDay = firstSelected.dayOfWeek();
00213
00214 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, 1 );
00215
00216 selectWeekByDay( weekDay, firstSelected );
00217 }
00218
00219 void DateNavigator::selectNextYear()
00220 {
00221 QDate firstSelected = mSelectedDates.first();
00222 int weekDay = firstSelected.dayOfWeek();
00223 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, 1 );
00224
00225 selectWeekByDay( weekDay, firstSelected );
00226 }
00227
00228 void DateNavigator::selectPrevious()
00229 {
00230 int offset = -7;
00231 if ( datesCount() == 1 ) {
00232 offset = -1;
00233 }
00234
00235 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00236 }
00237
00238 void DateNavigator::selectNext()
00239 {
00240 int offset = 7;
00241 if ( datesCount() == 1 ) {
00242 offset = 1;
00243 }
00244
00245 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00246 }
00247
00248 void DateNavigator::selectMonth(int month)
00249 {
00250 QDate firstSelected = mSelectedDates.first();
00251 int weekDay = firstSelected.dayOfWeek();
00252
00253 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
00254 int day = calSys->day( firstSelected );
00255 calSys->setYMD( firstSelected, calSys->year(firstSelected), month, 1 );
00256 int days = calSys->daysInMonth( firstSelected );
00257
00258
00259 if ( day > days ) day = days;
00260 calSys->setYMD( firstSelected, calSys->year( firstSelected ), month, day );
00261
00262 selectWeekByDay( weekDay, firstSelected );
00263 }
00264
00265 void DateNavigator::selectYear( int year )
00266 {
00267 QDate firstSelected = mSelectedDates.first();
00268 int deltaYear = year - KOGlobals::self()->calendarSystem()->year( firstSelected );
00269 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, deltaYear );
00270
00271 int weekDay = firstSelected.dayOfWeek();
00272 selectWeekByDay( weekDay, firstSelected );
00273 }
00274
00275 void DateNavigator::emitSelected()
00276 {
00277 emit datesSelected( mSelectedDates );
00278 }
00279
00280 #include "datenavigator.moc"
|