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) (unidiff)
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 @@
1/*
2 This file is part of KOrganizer.
3 Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
4
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version.
9
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution.
22*/
23
24#include "datenavigator.h"
25
26#include "koglobals.h"
27
28#include <kcalendarsystem.h>
29
30#include <kdebug.h>
31#include <kglobal.h>
32#include <klocale.h>
33
34using namespace KCal;
35
36DateNavigator::DateNavigator( QObject *parent, const char *name , KOViewManager * v)
37 : QObject( parent, name )
38{
39 mViewManager = v;
40 mSelectedDates.append( QDate::currentDate() );
41}
42
43DateNavigator::~DateNavigator()
44{
45}
46
47void DateNavigator::slotMonthSelect( int m )
48{
49 QDate firstSelected = mSelectedDates.first();
50 int weekDay = firstSelected.dayOfWeek();
51 int diff = m - firstSelected.month() ;
52 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, diff );
53
54 if ( mSelectedDates.first().day() == 1 && mSelectedDates.count() > 27 )
55 selectMonthByDate( firstSelected );
56 else
57 selectWeekByDay( weekDay, firstSelected );
58
59}
60
61void DateNavigator::slotDaySelect( QDate d )
62{
63 QDate firstSelected = mSelectedDates.first();
64 int weekDay = firstSelected.dayOfWeek();
65 //int diff = firstSelected.daysTo( d ) ;
66 firstSelected = firstSelected.addDays( firstSelected .daysTo( d ) );
67
68 selectWeekByDay( weekDay, firstSelected );
69
70}
71
72void DateNavigator::selectMonthByDate( const QDate & firstSelected )
73{
74
75 int monthDay = firstSelected.day();
76 QDate date = firstSelected.addDays( 1-monthDay );
77 selectDates( date , date.daysInMonth ());
78
79}
80void DateNavigator::selectMonth()
81{
82
83 QDate date =mSelectedDates.first();
84 selectMonthByDate( date );
85}
86
87DateList DateNavigator::selectedDates()
88{
89 return mSelectedDates;
90}
91
92int DateNavigator::datesCount() const
93{
94 return mSelectedDates.count();
95}
96
97void DateNavigator::selectDates( const DateList& dateList )
98{
99 if (dateList.count() > 0) {
100 mSelectedDates = dateList;
101 emitSelected();
102 }
103}
104
105void DateNavigator::selectDate( const QDate &date )
106{
107 QDate d = date;
108
109 if ( !d.isValid() ) {
110 d = QDate::currentDate();
111 }
112
113 mSelectedDates.clear();
114 mSelectedDates.append( d );
115
116 emitSelected();
117}
118
119void DateNavigator::selectDates( int count )
120{
121
122 QDate d = mSelectedDates.first();
123 selectDates( d, count );
124}
125
126void DateNavigator::selectDates( const QDate &d, int count )
127{
128 DateList dates;
129
130 int i;
131 for( i = 0; i < count; ++i ) {
132 dates.append( d.addDays( i ) );
133 }
134
135 mSelectedDates = dates;
136
137 emitSelected();
138}
139
140void DateNavigator::selectWeekByDay( int weekDay, const QDate &d )
141{
142 // qDebug("selectWeekByDay( %d %s ", weekDay, d.toString().latin1());
143 int dateCount = mSelectedDates.count();
144 bool weekStart = ( weekDay == KGlobal::locale()->weekStartDay() );
145 if ( weekDay == 1 && dateCount == 5 ) selectWorkWeek( d );
146 else if ( weekStart && dateCount == 7 ) selectWeek( d );
147 else selectDates( d, dateCount );
148}
149
150void DateNavigator::selectWeek()
151{
152 QDate d = mSelectedDates.first();
153 selectWeek( d );
154}
155void DateNavigator::selectWeek( int num )
156{
157 int year = mSelectedDates.first().year();
158 if ( mSelectedDates.first().dayOfYear() > 300 && num < 10 )
159 ++year;
160 if ( mSelectedDates.first().dayOfYear() < 70 && num > 40 )
161 --year;
162 QDate d = QDate ( year, 1,1);
163 while ( d.dayOfWeek() != 4 )
164 d = d.addDays( 1 );
165 selectWeek( d.addDays ( (num-1) *7 ) );
166}
167void DateNavigator::selectWeek( const QDate &d )
168{
169 int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
170
171 int weekStart = KGlobal::locale()->weekStartDay();
172 QDate firstDate = d.addDays( weekStart - dayOfWeek );
173
174 if ( weekStart != 1 && dayOfWeek < weekStart ) {
175 firstDate = firstDate.addDays(-7 );
176 }
177
178
179 selectDates( firstDate, 7 );
180}
181
182void DateNavigator::selectWorkWeek()
183{
184 QDate d = mSelectedDates.first();
185 selectWorkWeek( d );
186}
187
188void DateNavigator::selectWorkWeek( const QDate &d )
189{
190 int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
191
192 QDate firstDate = d.addDays( 1 - dayOfWeek );
193
194 int weekStart = KGlobal::locale()->weekStartDay();
195 if ( weekStart != 1 && dayOfWeek >= weekStart ) {
196 firstDate = firstDate.addDays( 7 );
197 }
198
199 selectDates( firstDate, 5 );
200}
201
202void DateNavigator::selectToday()
203{
204 QDate d = QDate::currentDate();
205
206 int dateCount = mSelectedDates.count();
207
208 if ( dateCount == 5 ) selectWorkWeek( d );
209 else if ( dateCount == 7 ) selectWeek( d );
210 else selectDates( d, dateCount );
211}
212
213void DateNavigator::selectPreviousYear()
214{
215 QDate firstSelected = mSelectedDates.first();
216 int weekDay = firstSelected.dayOfWeek();
217 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, -1 );
218
219 selectWeekByDay( weekDay, firstSelected );
220}
221
222void DateNavigator::selectPreviousMonth()
223{
224 QDate firstSelected = mSelectedDates.first();
225 int weekDay = firstSelected.dayOfWeek();
226 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, -1 );
227
228
229 if ( mSelectedDates.first().day() == 1 && mSelectedDates.count() > 27 )
230 selectMonthByDate( firstSelected );
231 else
232 selectWeekByDay( weekDay, firstSelected );
233}
234
235void DateNavigator::selectNextMonth()
236{
237 QDate firstSelected = mSelectedDates.first();
238 int weekDay = firstSelected.dayOfWeek();
239
240 firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, 1 );
241
242 if ( mSelectedDates.first().day() == 1 && mSelectedDates.count() > 27 )
243 selectMonthByDate( firstSelected );
244 else
245 selectWeekByDay( weekDay, firstSelected );
246
247}
248
249void DateNavigator::selectNextYear()
250{
251 QDate firstSelected = mSelectedDates.first();
252 int weekDay = firstSelected.dayOfWeek();
253 firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, 1 );
254
255 selectWeekByDay( weekDay, firstSelected );
256}
257
258void DateNavigator::selectPrevious()
259{
260 int offset = -7;
261 if ( datesCount() == 1 ) {
262 offset = -1;
263 }
264 if ( mViewManager )
265 if ( mViewManager->showsNextDays() )
266 offset = -datesCount();
267 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
268}
269
270void DateNavigator::selectNext()
271{
272 int offset = 7;
273 if ( datesCount() == 1 ) {
274 offset = 1;
275 }
276 if ( mViewManager )
277 if ( mViewManager->showsNextDays() )
278 offset = datesCount();
279 selectDates( mSelectedDates.first().addDays( offset ), datesCount() );
280}
281
282void DateNavigator::emitSelected()
283{
284 emit datesSelected( mSelectedDates );
285}
286
287#include "datenavigator.moc"