summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/kodaymatrix.cpp42
1 files changed, 20 insertions, 22 deletions
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index 507f18e..f864022 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -1,892 +1,890 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Eitzenberger Thomas <thomas.eitzenberger@siemens.at> 3 Copyright (c) 2001 Eitzenberger Thomas <thomas.eitzenberger@siemens.at>
4 Parts of the source code have been copied from kdpdatebutton.cpp 4 Parts of the source code have been copied from kdpdatebutton.cpp
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source ode for Qt in the source distribution. 22 without including the source ode for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qevent.h> 25#include <qevent.h>
26#include <qpainter.h> 26#include <qpainter.h>
27#include <qptrlist.h> 27#include <qptrlist.h>
28#include <qtimer.h> 28#include <qtimer.h>
29#include <qwhatsthis.h> 29#include <qwhatsthis.h>
30 30
31#include <kglobal.h> 31#include <kglobal.h>
32#include <kdebug.h> 32#include <kdebug.h>
33#include <klocale.h> 33#include <klocale.h>
34 34
35#include <libkcal/vcaldrag.h> 35#include <libkcal/vcaldrag.h>
36#include <libkcal/icaldrag.h> 36#include <libkcal/icaldrag.h>
37#include <libkcal/dndfactory.h> 37#include <libkcal/dndfactory.h>
38#include <libkcal/calendarresources.h> 38#include <libkcal/calendarresources.h>
39#include <libkcal/resourcecalendar.h> 39#include <libkcal/resourcecalendar.h>
40#include <kresources/resourceselectdialog.h> 40#include <kresources/resourceselectdialog.h>
41 41
42#include <kcalendarsystem.h> 42#include <kcalendarsystem.h>
43 43
44#ifndef KORG_NOPLUGINS 44#ifndef KORG_NOPLUGINS
45#include "kocore.h" 45#include "kocore.h"
46#endif 46#endif
47#include "koprefs.h" 47#include "koprefs.h"
48#include "koglobals.h" 48#include "koglobals.h"
49 49
50#include "kodaymatrix.h" 50#include "kodaymatrix.h"
51 51
52// ============================================================================ 52// ============================================================================
53// D Y N A M I C T I P 53// D Y N A M I C T I P
54// ============================================================================ 54// ============================================================================
55 55
56DynamicTip::DynamicTip( QWidget * parent ) 56DynamicTip::DynamicTip( QWidget * parent )
57 : QToolTip( parent ) 57 : QToolTip( parent )
58{ 58{
59 matrix = (KODayMatrix*)parent; 59 matrix = (KODayMatrix*)parent;
60} 60}
61 61
62class KODaymatrixWhatsThis :public QWhatsThis 62class KODaymatrixWhatsThis :public QWhatsThis
63{ 63{
64public: 64public:
65 KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { }; 65 KODaymatrixWhatsThis( KODayMatrix* view ) : QWhatsThis( view ),_view (view) { };
66 66
67protected: 67protected:
68 virtual QString text( const QPoint& p ) 68 virtual QString text( const QPoint& p )
69 { 69 {
70 return _view->getWhatsThisText( p ) ; 70 return _view->getWhatsThisText( p ) ;
71 } 71 }
72private: 72private:
73 KODayMatrix * _view; 73 KODayMatrix * _view;
74}; 74};
75 75
76void DynamicTip::maybeTip( const QPoint &pos ) 76void DynamicTip::maybeTip( const QPoint &pos )
77{ 77{
78 //calculate which cell of the matrix the mouse is in 78 //calculate which cell of the matrix the mouse is in
79 QRect sz = matrix->frameRect(); 79 QRect sz = matrix->frameRect();
80 int dheight = sz.height()*7 / 42; 80 int dheight = sz.height()*7 / 42;
81 int dwidth = sz.width() / 7; 81 int dwidth = sz.width() / 7;
82 int row = pos.y()/dheight; 82 int row = pos.y()/dheight;
83 int col = pos.x()/dwidth; 83 int col = pos.x()/dwidth;
84 84
85 QRect rct(col*dwidth, row*dheight, dwidth, dheight); 85 QRect rct(col*dwidth, row*dheight, dwidth, dheight);
86 86
87// kdDebug() << "DynamicTip::maybeTip matrix cell index [" << 87// kdDebug() << "DynamicTip::maybeTip matrix cell index [" <<
88// col << "][" << row << "] => " <<(col+row*7) << endl; 88// col << "][" << row << "] => " <<(col+row*7) << endl;
89 89
90 //show holiday names only 90 //show holiday names only
91 QString str = matrix->getHolidayLabel(col+row*7); 91 QString str = matrix->getHolidayLabel(col+row*7);
92 if (str.isEmpty()) return; 92 if (str.isEmpty()) return;
93 tip(rct, str); 93 tip(rct, str);
94} 94}
95 95
96 96
97// ============================================================================ 97// ============================================================================
98// K O D A Y M A T R I X 98// K O D A Y M A T R I X
99// ============================================================================ 99// ============================================================================
100 100
101const int KODayMatrix::NOSELECTION = -1000; 101const int KODayMatrix::NOSELECTION = -1000;
102const int KODayMatrix::NUMDAYS = 42; 102const int KODayMatrix::NUMDAYS = 42;
103 103
104KODayMatrix::KODayMatrix( QWidget *parent, const char *name ) 104KODayMatrix::KODayMatrix( QWidget *parent, const char *name )
105 : QFrame( parent, name ), mCalendar( 0 ) 105 : QFrame( parent, name ), mCalendar( 0 )
106 106
107#if 0 107#if 0
108KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) : 108KODayMatrix::KODayMatrix(QWidget *parent, Calendar* calendar, QDate date, const char *name) :
109 QFrame(parent, name) 109 QFrame(parent, name)
110#endif 110#endif
111{ 111{
112 new KODaymatrixWhatsThis(this); 112 new KODaymatrixWhatsThis(this);
113 mPendingUpdateBeforeRepaint = false; 113 mPendingUpdateBeforeRepaint = false;
114 mouseDown = false; 114 mouseDown = false;
115 // initialize dynamic arrays 115 // initialize dynamic arrays
116 bDays.resize ( NUMDAYS ); 116 bDays.resize ( NUMDAYS );
117 days = new QDate[NUMDAYS]; 117 days = new QDate[NUMDAYS];
118 daylbls = new QString[NUMDAYS]; 118 daylbls = new QString[NUMDAYS];
119 events = new int[NUMDAYS]; 119 events = new int[NUMDAYS];
120 mToolTip = new DynamicTip(this); 120 mToolTip = new DynamicTip(this);
121 121
122 // set default values used for drawing the matrix 122 // set default values used for drawing the matrix
123 mDefaultBackColor = palette().active().base(); 123 mDefaultBackColor = palette().active().base();
124 mDefaultTextColor = palette().active().foreground(); 124 mDefaultTextColor = palette().active().foreground();
125 mDefaultTextColorShaded = getShadedColor(mDefaultTextColor); 125 mDefaultTextColorShaded = getShadedColor(mDefaultTextColor);
126 mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor); 126 mHolidayColorShaded = getShadedColor(KOPrefs::instance()->mHolidayColor);
127 mSelectedDaysColor = QColor("white"); 127 mSelectedDaysColor = QColor("white");
128 mTodayMarginWidth = 2; 128 mTodayMarginWidth = 2;
129 mSelEnd = mSelStart = NOSELECTION; 129 mSelEnd = mSelStart = NOSELECTION;
130 130
131 setAcceptDrops(true); 131 setAcceptDrops(true);
132 //setFont( QFont("Arial", 10) ); 132 //setFont( QFont("Arial", 10) );
133 133
134 mUpdateTimer = new QTimer( this ); 134 mUpdateTimer = new QTimer( this );
135 connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() )); 135 connect (mUpdateTimer ,SIGNAL(timeout()), this, SLOT ( updateViewTimed() ));
136 mRepaintTimer = new QTimer( this ); 136 mRepaintTimer = new QTimer( this );
137 connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() )); 137 connect (mRepaintTimer ,SIGNAL(timeout()), this, SLOT ( repaintViewTimed() ));
138 mDayChanged = false; 138 mDayChanged = false;
139 updateView(); 139 updateView();
140} 140}
141QString KODayMatrix::getWhatsThisText( QPoint p ) 141QString KODayMatrix::getWhatsThisText( QPoint p )
142{ 142{
143 143
144 int tmp = getDayIndexFrom(p.x(), p.y()); 144 int tmp = getDayIndexFrom(p.x(), p.y());
145 if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar ) 145 if ( tmp < 0 || tmp > NUMDAYS-1 || !mCalendar )
146 return QString(); 146 return QString();
147 QDate mDate = days[tmp]; 147 QDate mDate = days[tmp];
148 QPtrList<Event> eventlist = mCalendar->events(mDate); 148 QPtrList<Event> eventlist = mCalendar->events(mDate);
149 Event *event; 149 Event *event;
150 QStringList mToolTip; 150 QStringList mToolTip;
151 for(event=eventlist.first();event != 0;event=eventlist.next()) { 151 for(event=eventlist.first();event != 0;event=eventlist.next()) {
152 QString mToolTipText; 152 QString mToolTipText;
153 QString text; 153 QString text;
154 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day 154 int multiday = 0;// 1 = start, 2 = midddle, 3 = end day
155 if (event->isMultiDay()) { 155 if (event->isMultiDay()) {
156 QString prefix = "<->";multiday = 2; 156 QString prefix = "<->";multiday = 2;
157 QString time; 157 QString time;
158 if ( event->doesRecur() ) { 158 if ( event->doesRecur() ) {
159 if ( event->recursOn( mDate) ) { 159 if ( event->recursOn( mDate) ) {
160 prefix ="->" ;multiday = 1; 160 prefix ="->" ;multiday = 1;
161 } 161 }
162 else { 162 else {
163 int days = event->dtStart().date().daysTo ( event->dtEnd().date() ); 163 int days = event->dtStart().date().daysTo ( event->dtEnd().date() );
164 if ( event->recursOn( mDate.addDays( -days)) ) { 164 if ( event->recursOn( mDate.addDays( -days)) ) {
165 prefix ="<-" ;multiday = 3; 165 prefix ="<-" ;multiday = 3;
166 } 166 }
167 } 167 }
168 } else { 168 } else {
169 if (mDate == event->dtStart().date()) { 169 if (mDate == event->dtStart().date()) {
170 prefix ="->" ;multiday = 1; 170 prefix ="->" ;multiday = 1;
171 } else if (mDate == event->dtEnd().date()) { 171 } else if (mDate == event->dtEnd().date()) {
172 prefix ="<-" ;multiday = 3; 172 prefix ="<-" ;multiday = 3;
173 } 173 }
174 } 174 }
175 if ( !event->doesFloat() ) { 175 if ( !event->doesFloat() ) {
176 if ( mDate == event->dtStart().date () ) 176 if ( mDate == event->dtStart().date () )
177 time = KGlobal::locale()->formatTime(event->dtStart().time())+" "; 177 time = KGlobal::locale()->formatTime(event->dtStart().time())+" ";
178 else if ( mDate == event->dtEnd().date () ) 178 else if ( mDate == event->dtEnd().date () )
179 time = KGlobal::locale()->formatTime(event->dtEnd().time())+" "; 179 time = KGlobal::locale()->formatTime(event->dtEnd().time())+" ";
180 180
181 } 181 }
182 text = time + event->summary(); 182 text = time + event->summary();
183 mToolTipText += prefix + text; 183 mToolTipText += prefix + text;
184 } else { 184 } else {
185 if (event->doesFloat()) { 185 if (event->doesFloat()) {
186 text = event->summary(); 186 text = event->summary();
187 mToolTipText += text; 187 mToolTipText += text;
188 } 188 }
189 else { 189 else {
190 text = KGlobal::locale()->formatTime(event->dtStart().time()); 190 text = KGlobal::locale()->formatTime(event->dtStart().time());
191 text += " " + event->summary(); 191 text += " " + event->summary();
192 mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary(); 192 mToolTipText += KGlobal::locale()->formatTime(event->dtStart().time()) +"-"+KGlobal::locale()->formatTime(event->dtEnd().time())+" " + event->summary();
193 } 193 }
194 } 194 }
195 mToolTip.append( mToolTipText ); 195 mToolTip.append( mToolTipText );
196 } 196 }
197 mToolTip.sort(); 197 mToolTip.sort();
198 return "<b>"+KGlobal::locale()->formatDate(days[tmp]) + "</b><br>" + mToolTip.join("<br>"); 198 return "<b>"+KGlobal::locale()->formatDate(days[tmp]) + "</b><br>" + mToolTip.join("<br>");
199} 199}
200void KODayMatrix::setCalendar( Calendar *cal ) 200void KODayMatrix::setCalendar( Calendar *cal )
201{ 201{
202 mCalendar = cal; 202 mCalendar = cal;
203 203
204 setAcceptDrops( mCalendar ); 204 setAcceptDrops( mCalendar );
205 205
206 updateEvents(); 206 updateEvents();
207} 207}
208 208
209QColor KODayMatrix::getShadedColor(QColor color) 209QColor KODayMatrix::getShadedColor(QColor color)
210{ 210{
211 QColor shaded; 211 QColor shaded;
212 int h=0; 212 int h=0;
213 int s=0; 213 int s=0;
214 int v=0; 214 int v=0;
215 color.hsv(&h,&s,&v); 215 color.hsv(&h,&s,&v);
216 s = s/4; 216 s = s/4;
217 v = 192+v/4; 217 v = 192+v/4;
218 shaded.setHsv(h,s,v); 218 shaded.setHsv(h,s,v);
219 219
220 return shaded; 220 return shaded;
221} 221}
222 222
223KODayMatrix::~KODayMatrix() 223KODayMatrix::~KODayMatrix()
224{ 224{
225 delete [] days; 225 delete [] days;
226 delete [] daylbls; 226 delete [] daylbls;
227 delete [] events; 227 delete [] events;
228 delete mToolTip; 228 delete mToolTip;
229} 229}
230 230
231/* 231/*
232void KODayMatrix::setStartDate(QDate start) 232void KODayMatrix::setStartDate(QDate start)
233{ 233{
234 updateView(start); 234 updateView(start);
235} 235}
236*/ 236*/
237 237
238void KODayMatrix::addSelectedDaysTo(DateList& selDays) 238void KODayMatrix::addSelectedDaysTo(DateList& selDays)
239{ 239{
240 240
241 if (mSelStart == NOSELECTION) { 241 if (mSelStart == NOSELECTION) {
242 return; 242 return;
243 } 243 }
244 244
245 //cope with selection being out of matrix limits at top (< 0) 245 //cope with selection being out of matrix limits at top (< 0)
246 int i0 = mSelStart; 246 int i0 = mSelStart;
247 if (i0 < 0) { 247 if (i0 < 0) {
248 for (int i = i0; i < 0; i++) { 248 for (int i = i0; i < 0; i++) {
249 selDays.append(days[0].addDays(i)); 249 selDays.append(days[0].addDays(i));
250 } 250 }
251 i0 = 0; 251 i0 = 0;
252 } 252 }
253 253
254 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1) 254 //cope with selection being out of matrix limits at bottom (> NUMDAYS-1)
255 if (mSelEnd > NUMDAYS-1) { 255 if (mSelEnd > NUMDAYS-1) {
256 for (int i = i0; i <= NUMDAYS-1; i++) { 256 for (int i = i0; i <= NUMDAYS-1; i++) {
257 selDays.append(days[i]); 257 selDays.append(days[i]);
258 } 258 }
259 for (int i = NUMDAYS; i < mSelEnd; i++) { 259 for (int i = NUMDAYS; i < mSelEnd; i++) {
260 selDays.append(days[0].addDays(i)); 260 selDays.append(days[0].addDays(i));
261 } 261 }
262 262
263 // apply normal routine to selection being entirely within matrix limits 263 // apply normal routine to selection being entirely within matrix limits
264 } else { 264 } else {
265 for (int i = i0; i <= mSelEnd; i++) { 265 for (int i = i0; i <= mSelEnd; i++) {
266 selDays.append(days[i]); 266 selDays.append(days[i]);
267 } 267 }
268 } 268 }
269} 269}
270 270
271void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end) 271void KODayMatrix::setSelectedDaysFrom(const QDate& start, const QDate& end)
272{ 272{
273 mSelStart = startdate.daysTo(start); 273 mSelStart = startdate.daysTo(start);
274 if ( mSelStart < 0 ) 274 if ( mSelStart < 0 )
275 mSelStart = 0; 275 mSelStart = 0;
276 mSelEnd = startdate.daysTo(end); 276 mSelEnd = startdate.daysTo(end);
277 if ( mSelEnd < 0 ) 277 if ( mSelEnd < 0 )
278 clearSelection(); 278 clearSelection();
279} 279}
280void KODayMatrix::clearSelection() 280void KODayMatrix::clearSelection()
281{ 281{
282 mSelEnd = mSelStart = NOSELECTION; 282 mSelEnd = mSelStart = NOSELECTION;
283} 283}
284 284
285 285
286void KODayMatrix::recalculateToday() 286void KODayMatrix::recalculateToday()
287{ 287{
288 today = -1; 288 today = -1;
289 for (int i=0; i<NUMDAYS; i++) { 289 for (int i=0; i<NUMDAYS; i++) {
290 events[i] = 0; 290 events[i] = 0;
291 days[i] = startdate.addDays(i); 291 days[i] = startdate.addDays(i);
292 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] )); 292 daylbls[i] = QString::number( KOGlobals::self()->calendarSystem()->day( days[i] ));
293 293
294 // if today is in the currently displayed month, hilight today 294 // if today is in the currently displayed month, hilight today
295 if (days[i].year() == QDate::currentDate().year() && 295 if (days[i].year() == QDate::currentDate().year() &&
296 days[i].month() == QDate::currentDate().month() && 296 days[i].month() == QDate::currentDate().month() &&
297 days[i].day() == QDate::currentDate().day()) { 297 days[i].day() == QDate::currentDate().day()) {
298 today = i; 298 today = i;
299 } 299 }
300 } 300 }
301 // qDebug(QString("Today is visible at %1.").arg(today)); 301 // qDebug(QString("Today is visible at %1.").arg(today));
302} 302}
303 303
304void KODayMatrix::updateView() 304void KODayMatrix::updateView()
305{ 305{
306 updateView(startdate); 306 updateView(startdate);
307} 307}
308void KODayMatrix::repaintViewTimed() 308void KODayMatrix::repaintViewTimed()
309{ 309{
310 mRepaintTimer->stop(); 310 mRepaintTimer->stop();
311 repaint(false); 311 repaint(false);
312} 312}
313void KODayMatrix::updateViewTimed() 313void KODayMatrix::updateViewTimed()
314{ 314{
315 mUpdateTimer->stop(); 315 mUpdateTimer->stop();
316 if ( !mCalendar ) { 316 if ( !mCalendar ) {
317 qDebug("NOT CAL "); 317 qDebug("NOT CAL ");
318 return; 318 return;
319 } 319 }
320 //qDebug("KODayMatrix::updateViewTimed "); 320 //qDebug("KODayMatrix::updateViewTimed ");
321 for(int i = 0; i < NUMDAYS; i++) { 321 for(int i = 0; i < NUMDAYS; i++) {
322 // if events are set for the day then remember to draw it bold 322 // if events are set for the day then remember to draw it bold
323 QPtrList<Event> eventlist = mCalendar->events(days[i]); 323 QPtrList<Event> eventlist = mCalendar->events(days[i]);
324 Event *event; 324 Event *event;
325 int numEvents = eventlist.count(); 325 int numEvents = eventlist.count();
326 QString holiStr = ""; 326 QString holiStr = "";
327 bDays.clearBit(i); 327 bDays.clearBit(i);
328 for(event=eventlist.first();event != 0;event=eventlist.next()) { 328 for(event=eventlist.first();event != 0;event=eventlist.next()) {
329 ushort recurType = event->recurrence()->doesRecur(); 329 ushort recurType = event->recurrence()->doesRecur();
330 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) || 330 if ((recurType == Recurrence::rDaily && !KOPrefs::instance()->mDailyRecur) ||
331 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) { 331 (recurType == Recurrence::rWeekly && !KOPrefs::instance()->mWeeklyRecur)) {
332 numEvents--; 332 numEvents--;
333 } 333 }
334 if ( event->categories().contains( i18n("Holiday") ) || event->categories().contains( "Holiday" )) { 334 if ( event->categories().contains( i18n("Holiday") ) || event->categories().contains( "Holiday" )) {
335 if ( !holiStr.isEmpty() ) 335 if ( !holiStr.isEmpty() )
336 holiStr += "\n"; 336 holiStr += "\n";
337 holiStr += event->summary(); 337 holiStr += event->summary();
338 } 338 }
339 if ( event->categories().contains( i18n("Birthday") ) || event->categories().contains( "Birthday" )) { 339 if ( event->categories().contains( i18n("Birthday") ) || event->categories().contains( "Birthday" )) {
340 if ( !holiStr.isEmpty() ) 340 if ( !holiStr.isEmpty() )
341 holiStr += "\n"; 341 holiStr += "\n";
342 holiStr += event->summary(); 342 holiStr += event->summary();
343 bDays.setBit(i); 343 bDays.setBit(i);
344 } 344 }
345 } 345 }
346 events[i] = numEvents; 346 events[i] = numEvents;
347 //if it is a holy day then draw it red. Sundays are consider holidays, too 347 //if it is a holy day then draw it red. Sundays are consider holidays, too
348 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) || 348 if ( (KOGlobals::self()->calendarSystem()->dayOfWeek(days[i]) == KOGlobals::self()->calendarSystem()->weekDayOfPray()) ||
349 !holiStr.isEmpty()) { 349 !holiStr.isEmpty()) {
350 mHolidays[i] = holiStr; 350 mHolidays[i] = holiStr;
351 } else { 351 } else {
352 mHolidays[i] = QString::null; 352 mHolidays[i] = QString::null;
353 } 353 }
354 } 354 }
355 if ( ! mPendingUpdateBeforeRepaint ) 355 if ( ! mPendingUpdateBeforeRepaint )
356 repaint(false); 356 repaint(false);
357} 357}
358void KODayMatrix::updateView(QDate actdate) 358void KODayMatrix::updateView(QDate actdate)
359{ 359{
360 360
361 if ( ! actdate.isValid() ) { 361 if ( ! actdate.isValid() ) {
362 //qDebug("date not valid "); 362 //qDebug("date not valid ");
363 return; 363 return;
364 } 364 }
365 mDayChanged = false; 365 mDayChanged = false;
366 //flag to indicate if the starting day of the matrix has changed by this call 366 //flag to indicate if the starting day of the matrix has changed by this call
367 //mDayChanged = false; 367 //mDayChanged = false;
368 // if a new startdate is to be set then apply Cornelius's calculation 368 // if a new startdate is to be set then apply Cornelius's calculation
369 // of the first day to be shown 369 // of the first day to be shown
370 if (actdate != startdate) { 370 if (actdate != startdate) {
371 // reset index of selection according to shift of starting date from startdate to actdate 371 // reset index of selection according to shift of starting date from startdate to actdate
372 if (mSelStart != NOSELECTION) { 372 if (mSelStart != NOSELECTION) {
373 int tmp = actdate.daysTo(startdate); 373 int tmp = actdate.daysTo(startdate);
374 //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl; 374 //kdDebug() << "Shift of Selection1: " << mSelStart << " - " << mSelEnd << " -> " << tmp << "(" << offset << ")" << endl;
375 // shift selection if new one would be visible at least partly ! 375 // shift selection if new one would be visible at least partly !
376 376
377 if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) { 377 if (mSelStart+tmp < NUMDAYS && mSelEnd+tmp >= 0) {
378 // nested if is required for next X display pushed from a different month - correction required 378 // nested if is required for next X display pushed from a different month - correction required
379 // otherwise, for month forward and backward, it must be avoided 379 // otherwise, for month forward and backward, it must be avoided
380 if( mSelStart > NUMDAYS || mSelStart < 0 ) 380 if( mSelStart > NUMDAYS || mSelStart < 0 )
381 mSelStart = mSelStart + tmp; 381 mSelStart = mSelStart + tmp;
382 if( mSelEnd > NUMDAYS || mSelEnd < 0 ) 382 if( mSelEnd > NUMDAYS || mSelEnd < 0 )
383 mSelEnd = mSelEnd + tmp; 383 mSelEnd = mSelEnd + tmp;
384 } 384 }
385 } 385 }
386 startdate = actdate; 386 startdate = actdate;
387 mDayChanged = true; 387 mDayChanged = true;
388 recalculateToday(); 388 recalculateToday();
389 } 389 }
390 //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() ); 390 //qDebug("restart Timer %d vis: %d", mDayChanged, isVisible() );
391 if ( !isVisible() ) { 391 if ( !isVisible() ) {
392 mPendingUpdateBeforeRepaint = true; 392 mPendingUpdateBeforeRepaint = true;
393 } else { 393 } else {
394#ifdef DESKTOP_VERSION 394#ifdef DESKTOP_VERSION
395 //mRepaintTimer->start( 150 ); 395 //mRepaintTimer->start( 150 );
396 mUpdateTimer->start( 150 ); 396 mUpdateTimer->start( 150 );
397#else 397#else
398 mRepaintTimer->start( 350 ); 398 mRepaintTimer->start( 350 );
399 mUpdateTimer->start( 1200 ); 399 mUpdateTimer->start( 1200 );
400#endif 400#endif
401 } 401 }
402} 402}
403void KODayMatrix::updateEvents() 403void KODayMatrix::updateEvents()
404{ 404{
405 if ( !mCalendar ) return; 405 if ( !mCalendar ) return;
406 406
407 for( int i = 0; i < NUMDAYS; i++ ) { 407 for( int i = 0; i < NUMDAYS; i++ ) {
408 // if events are set for the day then remember to draw it bold 408 // if events are set for the day then remember to draw it bold
409 QPtrList<Event> eventlist = mCalendar->events( days[ i ] ); 409 QPtrList<Event> eventlist = mCalendar->events( days[ i ] );
410 int numEvents = eventlist.count(); 410 int numEvents = eventlist.count();
411 Event *event; 411 Event *event;
412 for( event = eventlist.first(); event != 0;event=eventlist.next()) { 412 for( event = eventlist.first(); event != 0;event=eventlist.next()) {
413 ushort recurType = event->doesRecur(); 413 ushort recurType = event->doesRecur();
414 414
415 if ( ( recurType == Recurrence::rDaily && 415 if ( ( recurType == Recurrence::rDaily &&
416 !KOPrefs::instance()->mDailyRecur ) || 416 !KOPrefs::instance()->mDailyRecur ) ||
417 ( recurType == Recurrence::rWeekly && 417 ( recurType == Recurrence::rWeekly &&
418 !KOPrefs::instance()->mWeeklyRecur ) ) { 418 !KOPrefs::instance()->mWeeklyRecur ) ) {
419 numEvents--; 419 numEvents--;
420 } 420 }
421 } 421 }
422 events[ i ] = numEvents; 422 events[ i ] = numEvents;
423 } 423 }
424} 424}
425 425
426const QDate& KODayMatrix::getDate(int offset) 426const QDate& KODayMatrix::getDate(int offset)
427{ 427{
428 if (offset < 0 || offset > NUMDAYS-1) { 428 if (offset < 0 || offset > NUMDAYS-1) {
429 qDebug("Wrong offset2 "); 429 qDebug("Wrong offset2 ");
430 return days[0]; 430 return days[0];
431 } 431 }
432 return days[offset]; 432 return days[offset];
433} 433}
434 434
435QString KODayMatrix::getHolidayLabel(int offset) 435QString KODayMatrix::getHolidayLabel(int offset)
436{ 436{
437 if (offset < 0 || offset > NUMDAYS-1) { 437 if (offset < 0 || offset > NUMDAYS-1) {
438 qDebug("Wrong offset1 "); 438 qDebug("Wrong offset1 ");
439 return 0; 439 return 0;
440 } 440 }
441 return mHolidays[offset]; 441 return mHolidays[offset];
442} 442}
443 443
444int KODayMatrix::getDayIndexFrom(int x, int y) 444int KODayMatrix::getDayIndexFrom(int x, int y)
445{ 445{
446 return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ? 446 return 7*(y/daysize.height()) + (KOGlobals::self()->reverseLayout() ?
447 6 - x/daysize.width() : x/daysize.width()); 447 6 - x/daysize.width() : x/daysize.width());
448} 448}
449 449
450// ---------------------------------------------------------------------------- 450// ----------------------------------------------------------------------------
451// M O U S E E V E N T H A N D L I N G 451// M O U S E E V E N T H A N D L I N G
452// ---------------------------------------------------------------------------- 452// ----------------------------------------------------------------------------
453 453
454void KODayMatrix::mousePressEvent (QMouseEvent* e) 454void KODayMatrix::mousePressEvent (QMouseEvent* e)
455{ 455{
456 456
457 if ( e->button() == LeftButton ) 457 if ( e->button() == LeftButton )
458 mouseDown = true; 458 mouseDown = true;
459 mSelStart = getDayIndexFrom(e->x(), e->y()); 459 mSelStart = getDayIndexFrom(e->x(), e->y());
460 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1; 460 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1;
461 mSelInit = mSelStart; 461 mSelInit = mSelStart;
462 mSelEnd = mSelStart;
463 repaint(false);
462} 464}
463 465
464void KODayMatrix::mouseReleaseEvent (QMouseEvent* e) 466void KODayMatrix::mouseReleaseEvent (QMouseEvent* e)
465{ 467{
466 if ( e->button() == LeftButton ) 468 if ( e->button() == LeftButton )
467 if ( ! mouseDown ) { 469 if ( ! mouseDown ) {
468 return; 470 return;
469 } 471 }
470 else 472 else
471 mouseDown = false; 473 mouseDown = false;
472 int tmp = getDayIndexFrom(e->x(), e->y()); 474 int tmp = getDayIndexFrom(e->x(), e->y());
473 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 475 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
474 476
475 if (mSelInit > tmp) { 477 if (mSelInit > tmp) {
476 mSelEnd = mSelInit; 478 mSelEnd = mSelInit;
477 if (tmp != mSelStart) { 479 if (tmp != mSelStart) {
478 mSelStart = tmp; 480 mSelStart = tmp;
479 repaint(false); 481 repaint(false);
480 } 482 }
481 } else { 483 } else {
482 mSelStart = mSelInit; 484 mSelStart = mSelInit;
483 485
484 //repaint only if selection has changed 486 //repaint only if selection has changed
485 if (tmp != mSelEnd) { 487 if (tmp != mSelEnd) {
486 mSelEnd = tmp; 488 mSelEnd = tmp;
487 repaint(false); 489 repaint(false);
488 } 490 }
489 } 491 }
490 492
491 DateList daylist; 493 DateList daylist;
492 if ( mSelStart < 0 ) 494 if ( mSelStart < 0 )
493 mSelStart = 0; 495 mSelStart = 0;
494 for (int i = mSelStart; i <= mSelEnd; i++) { 496 for (int i = mSelStart; i <= mSelEnd; i++) {
495 daylist.append(days[i]); 497 daylist.append(days[i]);
496 } 498 }
497 emit selected((const DateList)daylist); 499 emit selected((const DateList)daylist);
498 500
499} 501}
500 502
501void KODayMatrix::mouseMoveEvent (QMouseEvent* e) 503void KODayMatrix::mouseMoveEvent (QMouseEvent* e)
502{ 504{
503 if ( ! mouseDown ) { 505 if ( ! mouseDown ) {
504 return; 506 return;
505 } 507 }
506 int tmp = getDayIndexFrom(e->x(), e->y()); 508 int tmp = getDayIndexFrom(e->x(), e->y());
507 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 509 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
508 510
509 if (mSelInit > tmp) { 511 if (mSelInit > tmp) {
510 mSelEnd = mSelInit; 512 mSelEnd = mSelInit;
511 if (tmp != mSelStart) { 513 if (tmp != mSelStart) {
512 mSelStart = tmp; 514 mSelStart = tmp;
513 repaint(false); 515 repaint(false);
514 } 516 }
515 } else { 517 } else {
516 mSelStart = mSelInit; 518 mSelStart = mSelInit;
517 519
518 //repaint only if selection has changed 520 //repaint only if selection has changed
519 if (tmp != mSelEnd) { 521 if (tmp != mSelEnd) {
520 mSelEnd = tmp; 522 mSelEnd = tmp;
521 repaint(false); 523 repaint(false);
522 } 524 }
523 } 525 }
524} 526}
525 527
526// ---------------------------------------------------------------------------- 528// ----------------------------------------------------------------------------
527// D R A G ' N D R O P H A N D L I N G 529// D R A G ' N D R O P H A N D L I N G
528// ---------------------------------------------------------------------------- 530// ----------------------------------------------------------------------------
529 531
530void KODayMatrix::dragEnterEvent(QDragEnterEvent *e) 532void KODayMatrix::dragEnterEvent(QDragEnterEvent *e)
531{ 533{
532#ifndef KORG_NODND 534#ifndef KORG_NODND
533 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 535 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
534 e->ignore(); 536 e->ignore();
535 return; 537 return;
536 } 538 }
537 539
538 // some visual feedback 540 // some visual feedback
539// oldPalette = palette(); 541// oldPalette = palette();
540// setPalette(my_HilitePalette); 542// setPalette(my_HilitePalette);
541// update(); 543// update();
542#endif 544#endif
543} 545}
544 546
545void KODayMatrix::dragMoveEvent(QDragMoveEvent *e) 547void KODayMatrix::dragMoveEvent(QDragMoveEvent *e)
546{ 548{
547#ifndef KORG_NODND 549#ifndef KORG_NODND
548 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 550 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
549 e->ignore(); 551 e->ignore();
550 return; 552 return;
551 } 553 }
552 554
553 e->accept(); 555 e->accept();
554#endif 556#endif
555} 557}
556 558
557void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/) 559void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/)
558{ 560{
559#ifndef KORG_NODND 561#ifndef KORG_NODND
560// setPalette(oldPalette); 562// setPalette(oldPalette);
561// update(); 563// update();
562#endif 564#endif
563} 565}
564 566
565void KODayMatrix::dropEvent(QDropEvent *e) 567void KODayMatrix::dropEvent(QDropEvent *e)
566{ 568{
567#ifndef KORG_NODND 569#ifndef KORG_NODND
568// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; 570// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl;
569 571
570 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 572 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
571 e->ignore(); 573 e->ignore();
572 return; 574 return;
573 } 575 }
574 576
575 DndFactory factory( mCalendar ); 577 DndFactory factory( mCalendar );
576 Event *event = factory.createDrop(e); 578 Event *event = factory.createDrop(e);
577 579
578 if (event) { 580 if (event) {
579 e->acceptAction(); 581 e->acceptAction();
580 582
581 Event *existingEvent = mCalendar->event(event->uid()); 583 Event *existingEvent = mCalendar->event(event->uid());
582 584
583 if(existingEvent) { 585 if(existingEvent) {
584 // uniquify event 586 // uniquify event
585 event->recreate(); 587 event->recreate();
586/* 588/*
587 KMessageBox::sorry(this, 589 KMessageBox::sorry(this,
588 i18n("Event already exists in this calendar."), 590 i18n("Event already exists in this calendar."),
589 i18n("Drop Event")); 591 i18n("Drop Event"));
590 delete event; 592 delete event;
591 return; 593 return;
592*/ 594*/
593 } 595 }
594// kdDebug() << "Drop new Event" << endl; 596// kdDebug() << "Drop new Event" << endl;
595 // Adjust date 597 // Adjust date
596 QDateTime start = event->dtStart(); 598 QDateTime start = event->dtStart();
597 QDateTime end = event->dtEnd(); 599 QDateTime end = event->dtEnd();
598 int duration = start.daysTo(end); 600 int duration = start.daysTo(end);
599 int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); 601 int idx = getDayIndexFrom(e->pos().x(), e->pos().y());
600 602
601 start.setDate(days[idx]); 603 start.setDate(days[idx]);
602 end.setDate(days[idx].addDays(duration)); 604 end.setDate(days[idx].addDays(duration));
603 605
604 event->setDtStart(start); 606 event->setDtStart(start);
605 event->setDtEnd(end); 607 event->setDtEnd(end);
606 mCalendar->addEvent(event); 608 mCalendar->addEvent(event);
607 609
608 emit eventDropped(event); 610 emit eventDropped(event);
609 } else { 611 } else {
610// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; 612// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl;
611 e->ignore(); 613 e->ignore();
612 } 614 }
613#endif 615#endif
614} 616}
615 617
616// ---------------------------------------------------------------------------- 618// ----------------------------------------------------------------------------
617// P A I N T E V E N T H A N D L I N G 619// P A I N T E V E N T H A N D L I N G
618// ---------------------------------------------------------------------------- 620// ----------------------------------------------------------------------------
619 621
620void KODayMatrix::paintEvent(QPaintEvent * pevent) 622void KODayMatrix::paintEvent(QPaintEvent * pevent)
621{ 623{
622 QRect sz = frameRect(); 624 QRect sz = frameRect();
623 if ( sz.width() <= 0 || sz.height() <= 0 ) 625 if ( sz.width() <= 0 || sz.height() <= 0 )
624 return; 626 return;
625 if ( mPendingUpdateBeforeRepaint ) { 627 if ( mPendingUpdateBeforeRepaint ) {
626 updateViewTimed(); 628 updateViewTimed();
627 mPendingUpdateBeforeRepaint = false; 629 mPendingUpdateBeforeRepaint = false;
628 } 630 }
629 if ( myPix.width() != sz.width() || myPix.height()!=sz.height() ) { 631 if ( myPix.width() != sz.width() || myPix.height()!=sz.height() ) {
630 myPix.resize(sz.size() ); 632 myPix.resize(sz.size() );
631 } 633 }
632 QPainter p(&myPix); 634 QPainter p(&myPix);
633 p.setFont(font()); 635 p.setFont(font());
634 636
635 637
636 int dheight = daysize.height(); 638 int dheight = daysize.height();
637 int dwidth = daysize.width(); 639 int dwidth = daysize.width();
638 int row,col; 640 int row,col;
639 int selw, selh; 641 int selw, selh;
640 int xyOff = frameWidth(); 642 int xyOff = frameWidth();
641 int colModulo = sz.width() % 7; 643 int colModulo = sz.width() % 7;
642 int rowModulo = sz.height() % 6; 644 int rowModulo = sz.height() % 6;
643 //qDebug("off %d col %d row %d ",xyOff,colModulo,rowModulo ); 645 qDebug("col %d row %d ",colModulo,rowModulo );
644 646
645 bool isRTL = KOGlobals::self()->reverseLayout(); 647 bool isRTL = KOGlobals::self()->reverseLayout();
646 648
647 // draw background and topleft frame 649 // draw background and topleft frame
648 p.fillRect(pevent->rect(), mDefaultBackColor); 650 p.fillRect(pevent->rect(), mDefaultBackColor);
649 p.setPen(mDefaultTextColor); 651 p.setPen(mDefaultTextColor);
650 p.drawRect(0, 0, sz.width()+1, sz.height()+1); 652 p.drawRect(0, 0, sz.width()+1, sz.height()+1);
651 int mSelStartT = mSelStart; 653 int mSelStartT = mSelStart;
652 int mSelEndT = mSelEnd; 654 int mSelEndT = mSelEnd;
653 if ( mSelEndT >= NUMDAYS ) 655 if ( mSelEndT >= NUMDAYS )
654 mSelEndT = NUMDAYS-1; 656 mSelEndT = NUMDAYS-1;
655 // draw selected days with highlighted background color 657 // draw selected days with highlighted background color
656 if (mSelStart != NOSELECTION) { 658 if (mSelStart != NOSELECTION) {
657 bool skip = false; 659 bool skip = false;
658 if ( ! mouseDown ) { 660 if ( ! mouseDown ) {
659 int mo = days[20].month(); 661 int mo = days[20].month();
660 //qDebug("-- %d %d ", mSelStartT, mSelEndT); 662 //qDebug("-- %d %d ", mSelStartT, mSelEndT);
661 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); 663 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
662 if ( days[mSelStartT].month() > mo || days[mSelEndT].month() < mo ) { 664 if ( days[mSelStartT].month() > mo || days[mSelEndT].month() < mo ) {
663 skip = true; 665 skip = true;
664 } else { 666 } else {
665 if ( days[mSelStartT].month() != mo ) { 667 if ( days[mSelStartT].month() != mo ) {
666 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); 668 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
667 mSelStartT += add +1; 669 mSelStartT += add +1;
668 } 670 }
669 if ( days[mSelEndT].month() != mo ) { 671 if ( days[mSelEndT].month() != mo ) {
670 int sub = days[mSelEndT].day(); 672 int sub = days[mSelEndT].day();
671 mSelEndT -= sub ; 673 mSelEndT -= sub ;
672 } 674 }
673 } 675 }
674 } 676 }
675 if ( ! skip ) { 677 if ( ! skip ) {
676 row = mSelStartT/7; 678 row = mSelStartT/7;
677 col = mSelStartT -row*7; 679 col = mSelStartT -row*7;
678 QColor selcol = KOPrefs::instance()->mHighlightColor; 680 QColor selcol = KOPrefs::instance()->mHighlightColor;
679
680
681
682 int addCol = 0; 681 int addCol = 0;
683 int addRow = 0; 682 int addRow = 0;
684 int addRow2 = 0; 683 int addRow2 = 0;
685 int addCol2 = 0; 684 int addCol2 = 0;
686#if 0
687 if ( colModulo ) {
688 if ( col >= 7 - colModulo )
689 addCol = col - 7 + colModulo;
690 }
691 if ( rowModulo ) {
692 if ( row >= 6 - rowModulo )
693 addRow = row - 5 + rowModulo;
694 }
695#endif
696
697
698
699
700
701 if (row == mSelEndT/7) { 685 if (row == mSelEndT/7) {
702 if ( rowModulo ) { 686 if ( rowModulo ) {
703 if ( row >= 6 - rowModulo ) 687 if ( row >= 6 - rowModulo )
704 addRow = row - 5 + rowModulo; 688 addRow = row - 5 + rowModulo;
705 } 689 }
706 if ( colModulo ) { 690 if ( colModulo ) {
707 int colt1 = mSelEndT%7; 691 int colt1 = mSelEndT%7;
708 //qDebug("colt1 %d ", colt1 ); 692 //qDebug("colt1 %d ", colt1 );
709 if ( colt1 >= 7 - colModulo ) 693 if ( colt1 >= 7 - colModulo )
710 addCol = colt1 - 7 + colModulo+1; 694 addCol = colt1 - 7 + colModulo+1;
711 int colt = mSelStartT%7; 695 int colt = mSelStartT%7;
712 if ( colt >= 7 - colModulo ) 696 if ( colt >= 7 - colModulo )
713 addCol2 = colt - 7 + colModulo; 697 addCol2 = colt - 7 + colModulo;
714 addCol -= addCol2; 698 addCol -= addCol2;
715 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 ); 699 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 );
716 } 700 }
717 // Single row selection 701 // Single row selection
718 if ( row == 0) 702 if ( row == 0)
719 addRow = 1; 703 addRow = 1;
720 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2, 704 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2,
721 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); 705 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol);
722 } else { 706 } else {
723 // draw first row to the right 707 // draw first row to the right
724 if ( colModulo ) { 708 if ( colModulo ) {
725 if ( col >= 7 - colModulo ) 709 if ( col >= 7 - colModulo )
726 addCol2 = col - 7 + colModulo; 710 addCol2 = col - 7 + colModulo;
727 } 711 }
728 if ( rowModulo ) { 712 if ( rowModulo ) {
729 if ( row >= 6 - rowModulo ) 713 if ( row >= 6 - rowModulo )
730 addRow = row - 5 + rowModulo; 714 addRow = row - 5 + rowModulo;
731 } 715 }
732 if ( row == 0) 716 if ( row == 0)
733 addRow = 1; 717 addRow = 1;
734 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, (7-col)*dwidth+colModulo, 718 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, (7-col)*dwidth+colModulo,
735 dheight+1, selcol); 719 dheight+1, selcol);
736 // draw full block till last line 720 // draw full block till last line
737 selh = mSelEndT/7-row; 721 selh = mSelEndT/7-row;
738 addRow = 0; 722 addRow = 0;
739 if ( rowModulo ) { 723 if ( rowModulo ) {
740 if ( mSelEndT/7 >= 6 - rowModulo ) 724 if ( mSelEndT/7 >= 6 - rowModulo )
741 addRow = mSelEndT/7 - 5 + rowModulo; 725 addRow = mSelEndT/7 - 5 + rowModulo;
742 } 726 }
743 if (selh > 1) { 727 if (selh > 1) {
744 p.fillRect(1, (row+1)*dheight, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol); 728 p.fillRect(1, (row+1)*dheight, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol);
745 } 729 }
746 // draw last block from left to mSelEndT 730 // draw last block from left to mSelEndT
747 selw = mSelEndT-7*(mSelEndT/7)+1; 731 selw = mSelEndT-7*(mSelEndT/7)+1;
748 //qDebug("esl %d ",selw ); 732 //qDebug("esl %d ",selw );
749 int add = 0; 733 int add = 0;
750 if ( colModulo ) { 734 if ( colModulo ) {
751 add = 7 - colModulo; 735 add = 7 - colModulo;
752 if ( selw > add ) 736 if ( selw > add )
753 add = selw - add; 737 add = selw - add;
754 else 738 else
755 add = 0; 739 add = 0;
756 } 740 }
757 //qDebug("add %d ", add); 741 //qDebug("add %d ", add);
758 p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow, 742 p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow,
759 selw*dwidth+add, dheight+1, selcol); 743 selw*dwidth+add, dheight+1, selcol);
760 } 744 }
761 } 745 }
762 } 746 }
763 747
764 // iterate over all days in the matrix and draw the day label in appropriate colors 748 // iterate over all days in the matrix and draw the day label in appropriate colors
765 QColor actcol = mDefaultTextColorShaded; 749 QColor actcol = mDefaultTextColorShaded;
766 p.setPen(actcol); 750 p.setPen(actcol);
767 QPen tmppen; 751 QPen tmppen;
768 for(int i = 0; i < NUMDAYS; i++) { 752 for(int i = 0; i < NUMDAYS; i++) {
769 row = i/7; 753 row = i/7;
770 col = isRTL ? 6-(i-row*7) : i-row*7; 754 col = isRTL ? 6-(i-row*7) : i-row*7;
771 755
772 // if it is the first day of a month switch color from normal to shaded and vice versa 756 // if it is the first day of a month switch color from normal to shaded and vice versa
773 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) { 757 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) {
774 if (actcol == mDefaultTextColorShaded) { 758 if (actcol == mDefaultTextColorShaded) {
775 actcol = mDefaultTextColor; 759 actcol = mDefaultTextColor;
776 } else { 760 } else {
777 actcol = mDefaultTextColorShaded; 761 actcol = mDefaultTextColorShaded;
778 } 762 }
779 p.setPen(actcol); 763 p.setPen(actcol);
780 } 764 }
781 if (actcol == mDefaultTextColorShaded) { 765 if (actcol == mDefaultTextColorShaded) {
782 if ( ! mouseDown ) { 766 if ( ! mouseDown ) {
783 continue; 767 continue;
784 } 768 }
785 } 769 }
786 //Reset pen color after selected days block 770 //Reset pen color after selected days block
787 if (i == mSelEndT+1) { 771 if (i == mSelEndT+1) {
788 p.setPen(actcol); 772 p.setPen(actcol);
789 } 773 }
790 774
791 // if today then draw rectangle around day 775 // if today then draw rectangle around day
792 if (today == i) { 776 if (today == i) {
793 tmppen = p.pen(); 777 tmppen = p.pen();
794 QPen mTodayPen(p.pen()); 778 QPen mTodayPen(p.pen());
795 779 if ( daysize.width() < 20 )
796 mTodayPen.setWidth(mTodayMarginWidth); 780 mTodayPen.setWidth(1);
781 else
782 mTodayPen.setWidth(mTodayMarginWidth);
797 //draw red rectangle for holidays 783 //draw red rectangle for holidays
798 if (!mHolidays[i].isNull()) { 784 if (!mHolidays[i].isNull()) {
799 if (actcol == mDefaultTextColor) { 785 if (actcol == mDefaultTextColor) {
800 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor); 786 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor);
801 } else { 787 } else {
802 mTodayPen.setColor(mHolidayColorShaded); 788 mTodayPen.setColor(mHolidayColorShaded);
803 } 789 }
804 } 790 }
805 //draw gray rectangle for today if in selection 791 //draw gray rectangle for today if in selection
806 if (i >= mSelStartT && i <= mSelEndT) { 792 if (i >= mSelStartT && i <= mSelEndT) {
807 QColor grey("grey"); 793 QColor grey("grey");
808 mTodayPen.setColor(grey); 794 mTodayPen.setColor(grey);
809 } 795 }
810 p.setPen(mTodayPen); 796 p.setPen(mTodayPen);
811 p.drawRect(col*dwidth, row*dheight, dwidth, dheight); 797
798
799 int addCol = 0;
800 int addRow = 0;
801 if (rowModulo) {
802 if ( row >= 6 - rowModulo )
803 addRow = row - 5 + rowModulo;
804 }
805 if ( colModulo ) {
806 if ( col >= 7 - colModulo )
807 addCol = col - 6 + colModulo-1;
808 }
809 p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight+1);
812 p.setPen(tmppen); 810 p.setPen(tmppen);
813 } 811 }
814 812
815 // if any events are on that day then draw it using a bold font 813 // if any events are on that day then draw it using a bold font
816 if (events[i] > 0) { 814 if (events[i] > 0) {
817 QFont myFont = font(); 815 QFont myFont = font();
818 myFont.setBold(true); 816 myFont.setBold(true);
819 p.setFont(myFont); 817 p.setFont(myFont);
820 } 818 }
821 819
822 // if it is a holiday then use the default holiday color 820 // if it is a holiday then use the default holiday color
823 if (!mHolidays[i].isNull()) { 821 if (!mHolidays[i].isNull()) {
824 if ( bDays.testBit(i) ) { 822 if ( bDays.testBit(i) ) {
825 p.setPen(Qt::green); 823 p.setPen(Qt::green);
826 } else { 824 } else {
827 if (actcol == mDefaultTextColor) { 825 if (actcol == mDefaultTextColor) {
828 p.setPen(KOPrefs::instance()->mHolidayColor); 826 p.setPen(KOPrefs::instance()->mHolidayColor);
829 } else { 827 } else {
830 p.setPen(mHolidayColorShaded); 828 p.setPen(mHolidayColorShaded);
831 } 829 }
832 } 830 }
833 } 831 }
834 832
835 // draw selected days with special color 833 // draw selected days with special color
836 // DO NOT specially highlight holidays in selection ! 834 // DO NOT specially highlight holidays in selection !
837 if (i >= mSelStartT && i <= mSelEndT) { 835 if (i >= mSelStartT && i <= mSelEndT) {
838 ;//p.setPen(mSelectedDaysColor); 836 ;//p.setPen(mSelectedDaysColor);
839 } 837 }
840 838
841 int addCol = 0; 839 int addCol = 0;
842 int addRow = 0; 840 int addRow = 0;
843 if ( colModulo ) { 841 if ( colModulo ) {
844 if ( col >= 7 - colModulo ) 842 if ( col >= 7 - colModulo )
845 addCol = col - 7 + colModulo; 843 addCol = col - 7 + colModulo;
846 } 844 }
847 if ( rowModulo ) { 845 if ( rowModulo ) {
848 if ( row >= 6 - rowModulo ) 846 if ( row >= 6 - rowModulo )
849 addRow = row - 5 + rowModulo; 847 addRow = row - 5 + rowModulo;
850 } 848 }
851 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); 849 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow);
852 ++addCol;//++addCol; 850 ++addCol;//++addCol;
853 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, 851 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight,
854 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); 852 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]);
855 853
856 // reset color to actual color 854 // reset color to actual color
857 if (!mHolidays[i].isNull()) { 855 if (!mHolidays[i].isNull()) {
858 p.setPen(actcol); 856 p.setPen(actcol);
859 } 857 }
860 // reset bold font to plain font 858 // reset bold font to plain font
861 if (events[i] > 0) { 859 if (events[i] > 0) {
862 QFont myFont = font(); 860 QFont myFont = font();
863 myFont.setBold(false); 861 myFont.setBold(false);
864 p.setFont(myFont); 862 p.setFont(myFont);
865 } 863 }
866 } 864 }
867 int off = xyOff; 865 int off = xyOff;
868 bitBlt (this, off, off, &myPix, 0 ,0,width(), height() ,CopyROP); 866 bitBlt (this, off, off, &myPix, 0 ,0,width(), height() ,CopyROP);
869 //qDebug("ffffffffff %d ", off); 867 //qDebug("ffffffffff %d ", off);
870} 868}
871 869
872// ---------------------------------------------------------------------------- 870// ----------------------------------------------------------------------------
873// R E SI Z E E V E N T H A N D L I N G 871// R E SI Z E E V E N T H A N D L I N G
874// ---------------------------------------------------------------------------- 872// ----------------------------------------------------------------------------
875 873
876void KODayMatrix::resizeEvent(QResizeEvent *) 874void KODayMatrix::resizeEvent(QResizeEvent *)
877{ 875{
878 QRect sz = frameRect(); 876 QRect sz = frameRect();
879 daysize.setHeight(sz.height()*7 / NUMDAYS); 877 daysize.setHeight(sz.height()*7 / NUMDAYS);
880 daysize.setWidth(sz.width() / 7); 878 daysize.setWidth(sz.width() / 7);
881} 879}
882 880
883QSize KODayMatrix::sizeHint() const 881QSize KODayMatrix::sizeHint() const
884{ 882{
885 883
886 QFontMetrics fm ( font() ); 884 QFontMetrics fm ( font() );
887 int wid = fm.width( "30") *7+3; 885 int wid = fm.width( "30") *7+3;
888 int hei = fm.height() * 6+3; 886 int hei = fm.height() * 6+3;
889 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); 887 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei);
890 return QSize ( wid, hei ); 888 return QSize ( wid, hei );
891 889
892} 890}