summaryrefslogtreecommitdiffabout
path: root/korganizer/datenavigator.cpp
authorzautrix <zautrix>2004-06-26 19:01:18 (UTC)
committer zautrix <zautrix>2004-06-26 19:01:18 (UTC)
commitb9aad1f15dc600e4dbe4c62d3fcced6363188ba3 (patch) (side-by-side diff)
tree2c3d4004fb21c72cba65793859f9bcd8ffd3a49c /korganizer/datenavigator.cpp
downloadkdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.zip
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.gz
kdepimpi-b9aad1f15dc600e4dbe4c62d3fcced6363188ba3.tar.bz2
Initial revision
Diffstat (limited to 'korganizer/datenavigator.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/datenavigator.cpp287
1 files changed, 287 insertions, 0 deletions
diff --git a/korganizer/datenavigator.cpp b/korganizer/datenavigator.cpp
new file mode 100644
index 0000000..8d35c42
--- a/dev/null
+++ b/korganizer/datenavigator.cpp
@@ -0,0 +1,287 @@
+/*
+ This file is part of KOrganizer.
+ Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ As a special exception, permission is given to link this program
+ with any edition of Qt, and distribute the resulting executable,
+ without including the source code for Qt in the source distribution.
+*/
+
+#include "datenavigator.h"
+
+#include "koglobals.h"
+
+#include <kcalendarsystem.h>
+
+#include <kdebug.h>
+#include <kglobal.h>
+#include <klocale.h>
+
+using namespace KCal;
+
+DateNavigator::DateNavigator( QObject *parent, const char *name , KOViewManager * v)
+ : QObject( parent, name )
+{
+ mViewManager = v;
+ mSelectedDates.append( QDate::currentDate() );
+}
+
+DateNavigator::~DateNavigator()
+{
+}
+
+void DateNavigator::slotMonthSelect( int m )
+{
+ QDate firstSelected = mSelectedDates.first();
+ int weekDay = firstSelected.dayOfWeek();
+ int diff = m - firstSelected.month() ;
+ firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, diff );
+
+ if ( mSelectedDates.first().day() == 1 && mSelectedDates.count() > 27 )
+ selectMonthByDate( firstSelected );
+ else
+ selectWeekByDay( weekDay, firstSelected );
+
+}
+
+void DateNavigator::slotDaySelect( QDate d )
+{
+ QDate firstSelected = mSelectedDates.first();
+ int weekDay = firstSelected.dayOfWeek();
+ //int diff = firstSelected.daysTo( d ) ;
+ firstSelected = firstSelected.addDays( firstSelected .daysTo( d ) );
+
+ selectWeekByDay( weekDay, firstSelected );
+
+}
+
+void DateNavigator::selectMonthByDate( const QDate & firstSelected )
+{
+
+ int monthDay = firstSelected.day();
+ QDate date = firstSelected.addDays( 1-monthDay );
+ selectDates( date , date.daysInMonth ());
+
+}
+void DateNavigator::selectMonth()
+{
+
+ QDate date =mSelectedDates.first();
+ selectMonthByDate( date );
+}
+
+DateList DateNavigator::selectedDates()
+{
+ return mSelectedDates;
+}
+
+int DateNavigator::datesCount() const
+{
+ return mSelectedDates.count();
+}
+
+void DateNavigator::selectDates( const DateList& dateList )
+{
+ if (dateList.count() > 0) {
+ mSelectedDates = dateList;
+ emitSelected();
+ }
+}
+
+void DateNavigator::selectDate( const QDate &date )
+{
+ QDate d = date;
+
+ if ( !d.isValid() ) {
+ d = QDate::currentDate();
+ }
+
+ mSelectedDates.clear();
+ mSelectedDates.append( d );
+
+ emitSelected();
+}
+
+void DateNavigator::selectDates( int count )
+{
+
+ QDate d = mSelectedDates.first();
+ selectDates( d, count );
+}
+
+void DateNavigator::selectDates( const QDate &d, int count )
+{
+ DateList dates;
+
+ int i;
+ for( i = 0; i < count; ++i ) {
+ dates.append( d.addDays( i ) );
+ }
+
+ mSelectedDates = dates;
+
+ emitSelected();
+}
+
+void DateNavigator::selectWeekByDay( int weekDay, const QDate &d )
+{
+ // qDebug("selectWeekByDay( %d %s ", weekDay, d.toString().latin1());
+ int dateCount = mSelectedDates.count();
+ bool weekStart = ( weekDay == KGlobal::locale()->weekStartDay() );
+ if ( weekDay == 1 && dateCount == 5 ) selectWorkWeek( d );
+ else if ( weekStart && dateCount == 7 ) selectWeek( d );
+ else selectDates( d, dateCount );
+}
+
+void DateNavigator::selectWeek()
+{
+ QDate d = mSelectedDates.first();
+ selectWeek( d );
+}
+void DateNavigator::selectWeek( int num )
+{
+ int year = mSelectedDates.first().year();
+ if ( mSelectedDates.first().dayOfYear() > 300 && num < 10 )
+ ++year;
+ if ( mSelectedDates.first().dayOfYear() < 70 && num > 40 )
+ --year;
+ QDate d = QDate ( year, 1,1);
+ while ( d.dayOfWeek() != 4 )
+ d = d.addDays( 1 );
+ selectWeek( d.addDays ( (num-1) *7 ) );
+}
+void DateNavigator::selectWeek( const QDate &d )
+{
+ int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
+
+ int weekStart = KGlobal::locale()->weekStartDay();
+ QDate firstDate = d.addDays( weekStart - dayOfWeek );
+
+ if ( weekStart != 1 && dayOfWeek < weekStart ) {
+ firstDate = firstDate.addDays(-7 );
+ }
+
+
+ selectDates( firstDate, 7 );
+}
+
+void DateNavigator::selectWorkWeek()
+{
+ QDate d = mSelectedDates.first();
+ selectWorkWeek( d );
+}
+
+void DateNavigator::selectWorkWeek( const QDate &d )
+{
+ int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
+
+ QDate firstDate = d.addDays( 1 - dayOfWeek );
+
+ int weekStart = KGlobal::locale()->weekStartDay();
+ if ( weekStart != 1 && dayOfWeek >= weekStart ) {
+ firstDate = firstDate.addDays( 7 );
+ }
+
+ selectDates( firstDate, 5 );
+}
+
+void DateNavigator::selectToday()
+{
+ QDate d = QDate::currentDate();
+
+ int dateCount = mSelectedDates.count();
+
+ if ( dateCount == 5 ) selectWorkWeek( d );
+ else if ( dateCount == 7 ) selectWeek( d );
+ else selectDates( d, dateCount );
+}
+
+void DateNavigator::selectPreviousYear()
+{
+ QDate firstSelected = mSelectedDates.first();
+ int weekDay = firstSelected.dayOfWeek();
+ firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, -1 );
+
+ selectWeekByDay( weekDay, firstSelected );
+}
+
+void DateNavigator::selectPreviousMonth()
+{
+ QDate firstSelected = mSelectedDates.first();
+ int weekDay = firstSelected.dayOfWeek();
+ firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, -1 );
+
+
+ if ( mSelectedDates.first().day() == 1 && mSelectedDates.count() > 27 )
+ selectMonthByDate( firstSelected );
+ else
+ selectWeekByDay( weekDay, firstSelected );
+}
+
+void DateNavigator::selectNextMonth()
+{
+ QDate firstSelected = mSelectedDates.first();
+ int weekDay = firstSelected.dayOfWeek();
+
+ firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, 1 );
+
+ if ( mSelectedDates.first().day() == 1 && mSelectedDates.count() > 27 )
+ selectMonthByDate( firstSelected );
+ else
+ selectWeekByDay( weekDay, firstSelected );
+
+}
+
+void DateNavigator::selectNextYear()
+{
+ QDate firstSelected = mSelectedDates.first();
+ int weekDay = firstSelected.dayOfWeek();
+ firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, 1 );
+
+ selectWeekByDay( weekDay, firstSelected );
+}
+
+void DateNavigator::selectPrevious()
+{
+ int offset = -7;
+ if ( datesCount() == 1 ) {
+ offset = -1;
+ }
+ if ( mViewManager )
+ if ( mViewManager->showsNextDays() )
+ offset = -datesCount();
+ selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
+}
+
+void DateNavigator::selectNext()
+{
+ int offset = 7;
+ if ( datesCount() == 1 ) {
+ offset = 1;
+ }
+ if ( mViewManager )
+ if ( mViewManager->showsNextDays() )
+ offset = datesCount();
+ selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
+}
+
+void DateNavigator::emitSelected()
+{
+ emit datesSelected( mSelectedDates );
+}
+
+#include "datenavigator.moc"