~ubuntu-branches/ubuntu/oneiric/kdepim/oneiric-updates

« back to all changes in this revision

Viewing changes to korganizer/datenavigator.cpp

  • Committer: Package Import Robot
  • Author(s): Philip Muškovac
  • Date: 2011-06-28 19:33:24 UTC
  • mfrom: (0.2.13) (0.1.13 sid)
  • Revision ID: package-import@ubuntu.com-20110628193324-8yvjs8sdv9rdoo6c
Tags: 4:4.7.0-0ubuntu1
* New upstream release
  - update install files
  - add missing kdepim-doc package to control file
  - Fix Vcs lines
  - kontact breaks/replaces korganizer << 4:4.6.80
  - tighten the dependency of kdepim-dev on libkdepim4 to fix lintian error

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
  Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
4
4
  Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
5
5
 
 
6
  Copyright (C) 2010 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.net>
 
7
  Author: Sergio Martins <sergio@kdab.com>
 
8
 
6
9
  This program is free software; you can redistribute it and/or modify
7
10
  it under the terms of the GNU General Public License as published by
8
11
  the Free Software Foundation; either version 2 of the License, or
30
33
#include <kglobal.h>
31
34
#include <klocale.h>
32
35
 
33
 
using namespace KCal;
 
36
using namespace KCalCore;
34
37
 
35
38
DateNavigator::DateNavigator( QObject *parent ) : QObject( parent )
36
39
{
51
54
  return mSelectedDates.count();
52
55
}
53
56
 
54
 
void DateNavigator::selectDates( const DateList &dateList )
 
57
void DateNavigator::selectDates( const DateList &dateList, const QDate &preferredMonth )
55
58
{
56
59
  if ( dateList.count() > 0 ) {
57
60
    mSelectedDates = dateList;
58
 
    emitSelected();
 
61
    emitSelected( preferredMonth );
59
62
  }
60
63
}
61
64
 
67
70
    kDebug() << "an invalid date was passed as a parameter!";
68
71
    d = QDate::currentDate();
69
72
  }
70
 
 
71
73
  mSelectedDates.clear();
72
74
  mSelectedDates.append( d );
73
75
 
76
78
 
77
79
void DateNavigator::selectDates( int count )
78
80
{
 
81
  count = qMin( count, static_cast<int>( MAX_SELECTABLE_DAYS ) );
79
82
  selectDates( mSelectedDates.first(), count );
80
83
}
81
84
 
82
 
void DateNavigator::selectDates( const QDate &d, int count )
 
85
void DateNavigator::selectDates( const QDate &d, int count,
 
86
                                 const QDate &preferredMonth )
83
87
{
84
88
  DateList dates;
85
89
 
89
93
  }
90
94
 
91
95
  mSelectedDates = dates;
92
 
  emitSelected();
 
96
  emitSelected( preferredMonth );
93
97
}
94
98
 
95
 
void DateNavigator::selectWeekByDay( int weekDay, const QDate &d )
 
99
void DateNavigator::selectWeekByDay( int weekDay, const QDate &d, const QDate &preferredMonth )
96
100
{
97
101
  int dateCount = mSelectedDates.count();
98
102
  bool weekStart = ( weekDay == KGlobal::locale()->weekStartDay() );
99
103
  if ( weekStart && dateCount == 7 ) {
100
 
    selectWeek( d );
 
104
    selectWeek( d, preferredMonth );
101
105
  } else {
102
 
    selectDates( d, dateCount );
 
106
    selectDates( d, dateCount, preferredMonth );
103
107
  }
104
108
}
105
109
 
108
112
  selectWeek( mSelectedDates.first() );
109
113
}
110
114
 
111
 
void DateNavigator::selectWeek( const QDate &d )
 
115
void DateNavigator::selectWeek( const QDate &d, const QDate &preferredMonth )
112
116
{
113
 
  int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
114
 
 
115
 
  int weekStart = KGlobal::locale()->weekStartDay();
 
117
  const int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
 
118
  const int weekStart = KGlobal::locale()->weekStartDay();
116
119
 
117
120
  QDate firstDate = d.addDays( weekStart - dayOfWeek );
118
121
 
120
123
    firstDate = firstDate.addDays( -7 );
121
124
  }
122
125
 
123
 
  selectDates( firstDate, 7 );
 
126
  selectDates( firstDate, 7, preferredMonth );
124
127
}
125
128
 
126
129
void DateNavigator::selectWorkWeek()
130
133
 
131
134
void DateNavigator::selectWorkWeek( const QDate &d )
132
135
{
133
 
  int weekStart = KGlobal::locale()->weekStartDay();
134
 
  int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
 
136
  const int weekStart = KGlobal::locale()->weekStartDay();
 
137
  const int dayOfWeek = KOGlobals::self()->calendarSystem()->dayOfWeek( d );
135
138
  QDate currentDate = d.addDays( weekStart - dayOfWeek );
136
139
 
137
140
  if ( weekStart != 1 && dayOfWeek < weekStart ) {
139
142
  }
140
143
 
141
144
  mSelectedDates.clear();
142
 
  int mask = KOGlobals::self()->getWorkWeekMask();
 
145
  const int mask = KOGlobals::self()->getWorkWeekMask();
143
146
 
144
147
  for ( int i = 0; i < 7; ++i ) {
145
148
    if ( ( 1 << ( ( i + weekStart + 6 ) % 7 ) ) & (mask) ) {
174
177
  selectWeekByDay( weekDay, firstSelected );
175
178
}
176
179
 
177
 
void DateNavigator::selectPreviousMonth()
 
180
void DateNavigator::selectPreviousMonth( const QDate &currentMonth,
 
181
                                         const QDate &selectionLowerLimit,
 
182
                                         const QDate &selectionUpperLimit )
178
183
{
179
 
  QDate firstSelected = mSelectedDates.first();
180
 
  int weekDay = firstSelected.dayOfWeek();
181
 
  firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, -1 );
182
 
 
183
 
  selectWeekByDay( weekDay, firstSelected );
 
184
  shiftMonth( currentMonth,
 
185
              selectionLowerLimit,
 
186
              selectionUpperLimit,
 
187
              -1 );
184
188
}
185
189
 
186
190
void DateNavigator::selectPreviousWeek()
187
191
{
188
192
  QDate firstSelected = mSelectedDates.first();
189
 
  int weekDay = firstSelected.dayOfWeek();
 
193
  const int weekDay = firstSelected.dayOfWeek();
190
194
  firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, -7 );
191
195
 
192
196
  selectWeekByDay( weekDay, firstSelected );
195
199
void DateNavigator::selectNextWeek()
196
200
{
197
201
  QDate firstSelected = mSelectedDates.first();
198
 
  int weekDay = firstSelected.dayOfWeek();
 
202
  const int weekDay = firstSelected.dayOfWeek();
199
203
 
200
204
  firstSelected = KOGlobals::self()->calendarSystem()->addDays( firstSelected, 7 );
201
205
 
202
206
  selectWeekByDay( weekDay, firstSelected );
203
207
}
204
208
 
205
 
void DateNavigator::selectNextMonth()
 
209
void DateNavigator::shiftMonth( const QDate &currentMonth,
 
210
                                const QDate &selectionLowerLimit,
 
211
                                const QDate &selectionUpperLimit,
 
212
                                int offset )
206
213
{
 
214
  const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
 
215
 
207
216
  QDate firstSelected = mSelectedDates.first();
208
 
  int weekDay = firstSelected.dayOfWeek();
209
 
 
210
 
  firstSelected = KOGlobals::self()->calendarSystem()->addMonths( firstSelected, 1 );
211
 
 
212
 
  selectWeekByDay( weekDay, firstSelected );
 
217
  const int weekDay = firstSelected.dayOfWeek();
 
218
  firstSelected = calSys->addMonths( firstSelected, offset );
 
219
 
 
220
  /* Don't trust firstSelected to calculate the nextMonth. firstSelected
 
221
     can belong to a month other than currentMonth because KDateNavigator
 
222
     displays 7*6 days. firstSelected should only be used for selection
 
223
     purposes */
 
224
  const QDate nextMonth = currentMonth.isValid() ?
 
225
                          calSys->addMonths( currentMonth, offset ) : firstSelected;
 
226
 
 
227
  /* When firstSelected doesn't belong to currentMonth it can happen
 
228
     that the new selection won't be visible on our KDateNavigators
 
229
     so we must adjust it */
 
230
  if ( selectionLowerLimit.isValid() &&
 
231
       firstSelected < selectionLowerLimit ) {
 
232
    firstSelected = selectionLowerLimit;
 
233
  } else if ( selectionUpperLimit.isValid() &&
 
234
              firstSelected > selectionUpperLimit ) {
 
235
    firstSelected = selectionUpperLimit.addDays( -6 );
 
236
  }
 
237
 
 
238
  selectWeekByDay( weekDay, firstSelected, nextMonth );
 
239
}
 
240
 
 
241
void DateNavigator::selectNextMonth( const QDate &currentMonth,
 
242
                                     const QDate &selectionLowerLimit,
 
243
                                     const QDate &selectionUpperLimit )
 
244
{
 
245
  shiftMonth( currentMonth,
 
246
              selectionLowerLimit,
 
247
              selectionUpperLimit,
 
248
              1 );
213
249
}
214
250
 
215
251
void DateNavigator::selectNextYear()
243
279
 
244
280
void DateNavigator::selectMonth( int month )
245
281
{
 
282
  const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
 
283
 
246
284
  // always display starting at the first week of the specified month
247
 
 
248
285
  QDate firstSelected = QDate( mSelectedDates.first().year(), month, 1 );
249
286
 
250
 
  const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
251
287
  int day = calSys->day( firstSelected );
252
288
  calSys->setYMD( firstSelected, calSys->year( firstSelected ), month, 1 );
253
289
  int days = calSys->daysInMonth( firstSelected );
256
292
  if ( day > days ) {
257
293
    day = days;
258
294
  }
 
295
  QDate requestedMonth;
259
296
  calSys->setYMD( firstSelected, calSys->year( firstSelected ), month, day );
 
297
  calSys->setYMD( requestedMonth, calSys->year( firstSelected ), month, 1 );
260
298
 
261
 
  selectWeekByDay( 1, firstSelected );
 
299
  selectWeekByDay( 1, firstSelected, requestedMonth );
262
300
}
263
301
 
264
302
void DateNavigator::selectYear( int year )
265
303
{
266
304
  QDate firstSelected = mSelectedDates.first();
267
 
  int deltaYear = year - KOGlobals::self()->calendarSystem()->year( firstSelected );
 
305
  const int deltaYear = year - KOGlobals::self()->calendarSystem()->year( firstSelected );
268
306
  firstSelected = KOGlobals::self()->calendarSystem()->addYears( firstSelected, deltaYear );
269
307
 
270
 
  int weekDay = firstSelected.dayOfWeek();
 
308
  const int weekDay = firstSelected.dayOfWeek();
271
309
  selectWeekByDay( weekDay, firstSelected );
272
310
}
273
311
 
274
 
void DateNavigator::emitSelected()
 
312
void DateNavigator::emitSelected( const QDate &preferredMonth )
275
313
{
276
 
  emit datesSelected( mSelectedDates );
 
314
  emit datesSelected( mSelectedDates, preferredMonth );
277
315
}
278
316
 
279
317
#include "datenavigator.moc"