• Skip to content
  • Skip to link menu
KDE 4.2 API Reference
  • KDE API Reference
  • kdepim
  • Sitemap
  • Contact Us
 

korganizer

datenavigator.cpp

Go to the documentation of this file.
00001 /*
00002   This file is part of KOrganizer.
00003   Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
00004   Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
00005 
00006   This program is free software; you can redistribute it and/or modify
00007   it under the terms of the GNU General Public License as published by
00008   the Free Software Foundation; either version 2 of the License, or
00009   (at your option) any later version.
00010 
00011   This program is distributed in the hope that it will be useful,
00012   but WITHOUT ANY WARRANTY; without even the implied warranty of
00013   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00014   GNU General Public License for more details.
00015 
00016   You should have received a copy of the GNU General Public License along
00017   with this program; if not, write to the Free Software Foundation, Inc.,
00018   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
00019 
00020   As a special exception, permission is given to link this program
00021   with any edition of Qt, and distribute the resulting executable,
00022   without including the source code for Qt in the source distribution.
00023 */
00024 
00025 #include "datenavigator.h"
00026 #include "koglobals.h"
00027 
00028 #include <kcalendarsystem.h>
00029 #include <kdebug.h>
00030 #include <kglobal.h>
00031 #include <klocale.h>
00032 
00033 using namespace KCal;
00034 
00035 DateNavigator::DateNavigator( QObject *parent ) : QObject( parent )
00036 {
00037   mSelectedDates.append( QDate::currentDate() );
00038 }
00039 
00040 DateNavigator::~DateNavigator()
00041 {
00042 }
00043 
00044 DateList DateNavigator::selectedDates()
00045 {
00046   return mSelectedDates;
00047 }
00048 
00049 int DateNavigator::datesCount() const
00050 {
00051   return mSelectedDates.count();
00052 }
00053 
00054 void DateNavigator::selectDates( const DateList &dateList )
00055 {
00056   if ( dateList.count() > 0 ) {
00057     mSelectedDates = dateList;
00058     emitSelected();
00059   }
00060 }
00061 
00062 void DateNavigator::selectDate( const QDate &date )
00063 {
00064   QDate d = date;
00065 
00066   if ( !d.isValid() ) {
00067     kDebug() << "an invalid date was passed as a parameter!";
00068     d = QDate::currentDate();
00069   }
00070 
00071   mSelectedDates.clear();
00072   mSelectedDates.append( d );
00073 
00074   emitSelected();
00075 }
00076 
00077 void DateNavigator::selectDates( int count )
00078 {
00079   selectDates( mSelectedDates.first(), count );
00080 }
00081 
00082 void DateNavigator::selectDates( const QDate &d, int count )
00083 {
00084   DateList dates;
00085 
00086   int i;
00087   for ( i = 0; i < count; ++i ) {
00088     dates.append( d.addDays( i ) );
00089   }
00090 
00091   mSelectedDates = dates;
00092   emitSelected();
00093 }
00094 
00095 void DateNavigator::selectWeekByDay( int weekDay, const QDate &d )
00096 {
00097   int dateCount = mSelectedDates.count();
00098   bool weekStart = ( weekDay == KGlobal::locale()->weekStartDay() );
00099   if ( weekStart && dateCount == 7 ) {
00100     selectWeek( d );
00101   } else {
00102     selectDates( d, dateCount );
00103   }
00104 }
00105 
00106 void DateNavigator::selectWeek()
00107 {
00108   selectWeek( mSelectedDates.first() );
00109 }
00110 
00111 void DateNavigator::selectWeek( const QDate &d )
00112 {
00113   int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
00114 
00115   int weekStart = KGlobal::locale()->weekStartDay();
00116 
00117   QDate firstDate = d.addDays( weekStart - dayOfWeek );
00118 
00119   if ( weekStart != 1 && dayOfWeek < weekStart ) {
00120     firstDate = firstDate.addDays( -7 );
00121   }
00122 
00123   selectDates( firstDate, 7 );
00124 }
00125 
00126 void DateNavigator::selectWorkWeek()
00127 {
00128   selectWorkWeek( mSelectedDates.first() );
00129 }
00130 
00131 void DateNavigator::selectWorkWeek( const QDate &d )
00132 {
00133   int weekStart = KGlobal::locale()->weekStartDay();
00134   int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
00135   QDate currentDate = d.addDays( weekStart - dayOfWeek );
00136 
00137   if ( weekStart != 1 && dayOfWeek < weekStart ) {
00138     currentDate = currentDate.addDays( -7 );
00139   }
00140 
00141   mSelectedDates.clear();
00142   int mask = KOGlobals::self()->getWorkWeekMask();
00143 
00144   for ( int i = 0; i < 7; ++i ) {
00145     if ( ( 1 << ( ( i + weekStart + 6 ) % 7 ) ) & (mask) ) {
00146       mSelectedDates.append( currentDate.addDays( i ) );
00147     }
00148   }
00149 
00150   emitSelected();
00151 }
00152 
00153 void DateNavigator::selectToday()
00154 {
00155   QDate d = QDate::currentDate();
00156 
00157   int dateCount = mSelectedDates.count();
00158 
00159   if ( dateCount == 7 ) {
00160     selectWeek( d );
00161   } else {
00162     selectDates( d, dateCount );
00163   }
00164 }
00165 
00166 void DateNavigator::selectPreviousYear()
00167 {
00168   QDate firstSelected = mSelectedDates.first();
00169   int weekDay = firstSelected.dayOfWeek();
00170   firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, -1 );
00171 
00172   selectWeekByDay( weekDay, firstSelected );
00173 }
00174 
00175 void DateNavigator::selectPreviousMonth()
00176 {
00177   QDate firstSelected = mSelectedDates.first();
00178   int weekDay = firstSelected.dayOfWeek();
00179   firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, -1 );
00180 
00181   selectWeekByDay( weekDay, firstSelected );
00182 }
00183 
00184 void DateNavigator::selectPreviousWeek()
00185 {
00186   QDate firstSelected = mSelectedDates.first();
00187   int weekDay = firstSelected.dayOfWeek();
00188   firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, -7 );
00189 
00190   selectWeekByDay( weekDay, firstSelected );
00191 }
00192 
00193 void DateNavigator::selectNextWeek()
00194 {
00195   QDate firstSelected = mSelectedDates.first();
00196   int weekDay = firstSelected.dayOfWeek();
00197 
00198   firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, 7 );
00199 
00200   selectWeekByDay( weekDay, firstSelected );
00201 }
00202 
00203 void DateNavigator::selectNextMonth()
00204 {
00205   QDate firstSelected = mSelectedDates.first();
00206   int weekDay = firstSelected.dayOfWeek();
00207 
00208   firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, 1 );
00209 
00210   selectWeekByDay( weekDay, firstSelected );
00211 }
00212 
00213 void DateNavigator::selectNextYear()
00214 {
00215   QDate firstSelected = mSelectedDates.first();
00216   int weekDay = firstSelected.dayOfWeek();
00217   firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, 1 );
00218 
00219   selectWeekByDay( weekDay, firstSelected );
00220 }
00221 
00222 void DateNavigator::selectPrevious()
00223 {
00224   int offset = -7;
00225   if ( datesCount() == 1 ) {
00226     offset = -1;
00227   }
00228 
00229   selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00230 }
00231 
00232 void DateNavigator::selectNext()
00233 {
00234   int offset = 7;
00235   if ( datesCount() == 1 ) {
00236     offset = 1;
00237   }
00238 
00239   selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
00240 }
00241 
00242 void DateNavigator::selectMonth( int month )
00243 {
00244   QDate firstSelected = mSelectedDates.first();
00245   int weekDay = firstSelected.dayOfWeek();
00246 
00247   const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
00248   int day = calSys->day( firstSelected );
00249   calSys->setYMD( firstSelected, calSys->year( firstSelected ), month, 1 );
00250   int days = calSys->daysInMonth( firstSelected );
00251   // As day we use either the selected date, or if the month has less days
00252   // than that, we use the max day of that month
00253   if ( day > days ) {
00254     day = days;
00255   }
00256   calSys->setYMD( firstSelected, calSys->year( firstSelected ), month, day );
00257 
00258   selectWeekByDay( weekDay, firstSelected );
00259 }
00260 
00261 void DateNavigator::selectYear( int year )
00262 {
00263   QDate firstSelected = mSelectedDates.first();
00264   int deltaYear = year - KOGlobals::self()->calendarSystem()->year( firstSelected );
00265   firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, deltaYear );
00266 
00267   int weekDay = firstSelected.dayOfWeek();
00268   selectWeekByDay( weekDay, firstSelected );
00269 }
00270 
00271 void DateNavigator::emitSelected()
00272 {
00273   emit datesSelected( mSelectedDates );
00274 }
00275 
00276 #include "datenavigator.moc"

korganizer

Skip menu "korganizer"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members

kdepim

Skip menu "kdepim"
  • akonadi
  •   clients
  •   kabc
  •   kcal
  •   kcm
  • akregator
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt
  • kdgantt1
  • kjots
  • kleopatra
  • kmail
  • kmobiletools
  • knode
  • knotes
  • kontact
  • kontactinterfaces
  • korganizer
  •   korgac
  • kpilot
  • ktimetracker
  •   doc
  • libkdepim
  • libkholidays
  • libkleo
  • libkpgp
  • maildir
Generated for kdepim by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal