korganizer Library API Documentation

datenavigator.cpp

00001 /*
00002     This file is part of KOrganizer.
00003     Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
00004 
00005     This program is free software; you can redistribute it and/or modify
00006     it under the terms of the GNU General Public License as published by
00007     the Free Software Foundation; either version 2 of the License, or
00008     (at your option) any later version.
00009 
00010     This program is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00013     GNU General Public License for more details.
00014 
00015     You should have received a copy of the GNU General Public License
00016     along with this program; if not, write to the Free Software
00017     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018 
00019     As a special exception, permission is given to link this program
00020     with any edition of Qt, and distribute the resulting executable,
00021     without including the source code for Qt in the source distribution.
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"
KDE Logo
This file is part of the documentation for korganizer Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:38:27 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003