summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-04-01 19:05:18 (UTC)
committer zautrix <zautrix>2005-04-01 19:05:18 (UTC)
commit1022d8763a5185c74d1fb1fba9857d6e3afd9ff5 (patch) (unidiff)
tree116b7ac7aef10e27c20ce30f3bae548ebde84da0
parentedc032c21ae3788d02a632ea8066e4ac5a4feedb (diff)
downloadkdepimpi-1022d8763a5185c74d1fb1fba9857d6e3afd9ff5.zip
kdepimpi-1022d8763a5185c74d1fb1fba9857d6e3afd9ff5.tar.gz
kdepimpi-1022d8763a5185c74d1fb1fba9857d6e3afd9ff5.tar.bz2
fixes
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagendaview.cpp30
-rw-r--r--korganizer/kodaymatrix.cpp4
2 files changed, 16 insertions, 18 deletions
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp
index 072d464..99f547a 100644
--- a/korganizer/koagendaview.cpp
+++ b/korganizer/koagendaview.cpp
@@ -1,603 +1,599 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2001 Cornelius Schumacher <schumacher@kde.org>
4 4
5 This program is free software; you can redistribute it and/or modify 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 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 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 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 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. 17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 18
19 As a special exception, permission is given to link this program 19 As a special exception, permission is given to link this program
20 with any edition of Qt, and distribute the resulting executable, 20 with any edition of Qt, and distribute the resulting executable,
21 without including the source code for Qt in the source distribution. 21 without including the source code for Qt in the source distribution.
22*/ 22*/
23 23
24#include <qhbox.h> 24#include <qhbox.h>
25#include <qvbox.h> 25#include <qvbox.h>
26#include <qlabel.h> 26#include <qlabel.h>
27#include <qframe.h> 27#include <qframe.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#ifndef KORG_NOSPLITTER 29#ifndef KORG_NOSPLITTER
30#include <qsplitter.h> 30#include <qsplitter.h>
31#endif 31#endif
32#include <qfont.h> 32#include <qfont.h>
33#include <qfontmetrics.h> 33#include <qfontmetrics.h>
34#include <qpopupmenu.h> 34#include <qpopupmenu.h>
35#include <qtooltip.h> 35#include <qtooltip.h>
36#include <qpainter.h> 36#include <qpainter.h>
37#include <qpushbutton.h> 37#include <qpushbutton.h>
38#include <qapplication.h> 38#include <qapplication.h>
39 39
40#include <kapplication.h> 40#include <kapplication.h>
41#include <KDGanttMinimizeSplitter.h> 41#include <KDGanttMinimizeSplitter.h>
42#include <kdebug.h> 42#include <kdebug.h>
43#include <kstandarddirs.h> 43#include <kstandarddirs.h>
44#include <kiconloader.h> 44#include <kiconloader.h>
45#include <klocale.h> 45#include <klocale.h>
46#include <kconfig.h> 46#include <kconfig.h>
47#include <kglobal.h> 47#include <kglobal.h>
48#include "calendarview.h" 48#include "calendarview.h"
49#include "koviewmanager.h" 49#include "koviewmanager.h"
50 50
51#include <libkcal/calendar.h> 51#include <libkcal/calendar.h>
52#include <libkcal/icaldrag.h> 52#include <libkcal/icaldrag.h>
53#include <libkcal/dndfactory.h> 53#include <libkcal/dndfactory.h>
54 54
55#include <kcalendarsystem.h> 55#include <kcalendarsystem.h>
56 56
57#include "koglobals.h" 57#include "koglobals.h"
58#ifndef KORG_NOPLUGINS 58#ifndef KORG_NOPLUGINS
59#include "kocore.h" 59#include "kocore.h"
60#endif 60#endif
61#include "koprefs.h" 61#include "koprefs.h"
62#include "koagenda.h" 62#include "koagenda.h"
63#include "koagendaitem.h" 63#include "koagendaitem.h"
64#ifndef KORG_NOPRINTER 64#ifndef KORG_NOPRINTER
65#include "calprinter.h" 65#include "calprinter.h"
66#endif 66#endif
67 67
68#include "koagendaview.h" 68#include "koagendaview.h"
69//#include "koagendaview.moc" 69//#include "koagendaview.moc"
70 70
71//extern bool globalFlagBlockPainting; 71//extern bool globalFlagBlockPainting;
72extern int globalFlagBlockAgenda; 72extern int globalFlagBlockAgenda;
73extern int globalFlagBlockStartup; 73extern int globalFlagBlockStartup;
74extern int globalFlagBlockAgendaItemPaint; 74extern int globalFlagBlockAgendaItemPaint;
75extern int globalFlagBlockAgendaItemUpdate; 75extern int globalFlagBlockAgendaItemUpdate;
76extern int globalFlagBlockLabel; 76extern int globalFlagBlockLabel;
77using namespace KOrg; 77using namespace KOrg;
78 78
79 79
80 80
81TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) : 81TimeLabels::TimeLabels(int rows,QWidget *parent,const char *name,WFlags f) :
82 QScrollView(parent,name,f) 82 QScrollView(parent,name,f)
83{ 83{
84 myPix.resize( 1, 1 ); 84 myPix.resize( 1, 1 );
85 mRows = rows; 85 mRows = rows;
86 86
87 mRedrawNeeded = true; 87 mRedrawNeeded = true;
88 setMinimumHeight( 20 ); 88 setMinimumHeight( 20 );
89 mCellHeight = KOPrefs::instance()->mHourSize*4; 89 mCellHeight = KOPrefs::instance()->mHourSize*4;
90 90
91 enableClipper(true); 91 enableClipper(true);
92 92
93 setHScrollBarMode(AlwaysOff); 93 setHScrollBarMode(AlwaysOff);
94 setVScrollBarMode(AlwaysOff); 94 setVScrollBarMode(AlwaysOff);
95 95
96 resizeContents(50,mRows * mCellHeight); 96 resizeContents(50,mRows * mCellHeight);
97 97
98 viewport()->setBackgroundMode( PaletteBackground ); 98 viewport()->setBackgroundMode( PaletteBackground );
99} 99}
100 100
101void TimeLabels::setCellHeight(int height) 101void TimeLabels::setCellHeight(int height)
102{ 102{
103 mCellHeight = height; 103 mCellHeight = height;
104} 104}
105 105
106/* 106/*
107 Optimization so that only the "dirty" portion of the scroll view 107 Optimization so that only the "dirty" portion of the scroll view
108 is redrawn. Unfortunately, this is not called by default paintEvent() method. 108 is redrawn. Unfortunately, this is not called by default paintEvent() method.
109*/ 109*/
110void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch) 110void TimeLabels::drawContents(QPainter *p,int cx, int cy, int cw, int ch)
111{ 111{
112 112
113 // if ( globalFlagBlockAgenda ) 113 // if ( globalFlagBlockAgenda )
114 // return; 114 // return;
115 // bug: the parameters cx, cy, cw, ch are the areas that need to be 115 // bug: the parameters cx, cy, cw, ch are the areas that need to be
116 // redrawn, not the area of the widget. unfortunately, this 116 // redrawn, not the area of the widget. unfortunately, this
117 // code assumes the latter... 117 // code assumes the latter...
118 118
119 // now, for a workaround... 119 // now, for a workaround...
120 // these two assignments fix the weird redraw bug 120 // these two assignments fix the weird redraw bug
121 mRedrawNeeded = true; 121 mRedrawNeeded = true;
122 if ( mRedrawNeeded ) { 122 if ( mRedrawNeeded ) {
123 cx = contentsX() + frameWidth()*2; 123 cx = contentsX() + frameWidth()*2;
124 cw = contentsWidth() ; 124 cw = contentsWidth() ;
125 // end of workaround 125 // end of workaround
126 126
127 int cell = ((int)(cy/mCellHeight)); 127 int cell = ((int)(cy/mCellHeight));
128 int y = cell * mCellHeight; 128 int y = cell * mCellHeight;
129 QFontMetrics fm = fontMetrics(); 129 QFontMetrics fm = fontMetrics();
130 QString hour; 130 QString hour;
131 QString suffix; 131 QString suffix;
132 int tW = fm.width("24:00i"); 132 int timeHeight = fm.ascent();
133 int timeHeight = fm.height();
134 //timeHeight -= (timeHeight/4-2);
135 int borderWidth = 0;
136 QFont nFont = p->font(); 133 QFont nFont = p->font();
137 134
138 if (!KGlobal::locale()->use12Clock()) 135 if (!KGlobal::locale()->use12Clock())
139 suffix = "00"; 136 suffix = "00";
140 else 137
141 borderWidth = 0;
142 if ( timeHeight > mCellHeight ) { 138 if ( timeHeight > mCellHeight ) {
143 timeHeight = mCellHeight-1; 139 timeHeight = mCellHeight-1;
144 int pointS = nFont.pointSize(); 140 int pointS = nFont.pointSize();
145 while ( pointS > 4 ) { 141 while ( pointS > 4 ) {
146 nFont.setPointSize( pointS ); 142 nFont.setPointSize( pointS );
147 fm = QFontMetrics( nFont ); 143 fm = QFontMetrics( nFont );
148 if ( fm.height() < mCellHeight ) 144 if ( fm.ascent() < mCellHeight )
149 break; 145 break;
150 -- pointS; 146 -- pointS;
151 } 147 }
152 fm = QFontMetrics( nFont ); 148 fm = QFontMetrics( nFont );
153 borderWidth = 4; 149 timeHeight = fm.ascent();
154 timeHeight = fm.height();
155 } 150 }
156 //timeHeight -= (timeHeight/4-2); 151 //timeHeight -= (timeHeight/4-2);
157 QFont sFont = nFont; 152 QFont sFont = nFont;
158 sFont.setPointSize( sFont.pointSize()/2+2 ); 153 sFont.setPointSize( sFont.pointSize()/2 );
159 QFontMetrics fmS( sFont ); 154 QFontMetrics fmS( sFont );
160 int sHei = fmS.height(); 155 int sHei = fmS.ascent() ;
161 //sHei -= (sHei/4-2); 156 //sHei -= (sHei/4-2);
162 int startW = this->width() - frameWidth()-1; 157 int startW = this->width() - 2*frameWidth()-1;
158 int tw2 = fmS.width(suffix);
163 while (y < cy + ch) { 159 while (y < cy + ch) {
164 p->drawLine(cx,y,cx+tW,y); 160 p->drawLine(cx,y,cw,y);
165 hour.setNum(cell); 161 hour.setNum(cell);
166 162
167 // handle 24h and am/pm time formats 163 // handle 24h and am/pm time formats
168 if (KGlobal::locale()->use12Clock()) { 164 if (KGlobal::locale()->use12Clock()) {
169 if (cell > 11) suffix = "pm"; 165 if (cell > 11) suffix = "pm";
170 else 166 else
171 suffix = "am"; 167 suffix = "am";
172 if (cell == 0) hour.setNum(12); 168 if (cell == 0) hour.setNum(12);
173 if (cell > 12) hour.setNum(cell - 12); 169 if (cell > 12) hour.setNum(cell - 12);
170 tw2 = fmS.width(suffix);
174 } 171 }
175 172
176 // center and draw the time label 173 // center and draw the time label
177 int timeWidth = fm.width(hour); 174 int timeWidth = fm.width(hour);
178 int tw2 = fm.width(suffix);
179 int offset = startW - timeWidth - tw2 ; 175 int offset = startW - timeWidth - tw2 ;
180 p->setFont( nFont ); 176 p->setFont( nFont );
181 p->drawText( offset, y+ timeHeight, hour); 177 p->drawText( offset, y+ timeHeight, hour);
182 p->setFont( sFont ); 178 p->setFont( sFont );
183 offset = startW - tw2+1; 179 offset = startW - tw2+1;
184 p->drawText( offset, y+ sHei, suffix); 180 p->drawText( offset, y+ sHei, suffix);
185 181
186 // increment indices 182 // increment indices
187 y += mCellHeight; 183 y += mCellHeight;
188 cell++; 184 cell++;
189 } 185 }
190 } else { 186 } else {
191 //qDebug("NO redraw "); 187 //qDebug("NO redraw ");
192 } 188 }
193 // double buffer not yet implemented 189 // double buffer not yet implemented
194 //bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP); 190 //bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP);
195 //mRedrawNeeded = false; 191 //mRedrawNeeded = false;
196} 192}
197 193
198/** 194/**
199 Calculates the minimum width. 195 Calculates the minimum width.
200*/ 196*/
201int TimeLabels::minimumWidth() const 197int TimeLabels::minimumWidth() const
202{ 198{
203 return mMiniWidth; 199 return mMiniWidth;
204} 200}
205 201
206/** updates widget's internal state */ 202/** updates widget's internal state */
207void TimeLabels::updateConfig() 203void TimeLabels::updateConfig()
208{ 204{
209 mRedrawNeeded = true; 205 mRedrawNeeded = true;
210 // set the font 206 // set the font
211 // config->setGroup("Fonts"); 207 // config->setGroup("Fonts");
212 // QFont font = config->readFontEntry("TimeBar Font"); 208 // QFont font = config->readFontEntry("TimeBar Font");
213 setFont(KOPrefs::instance()->mTimeBarFont); 209 setFont(KOPrefs::instance()->mTimeBarFont);
214 QString test = "88:88"; 210 QString test = "20oo";
215 if (KGlobal::locale()->use12Clock()) 211 if (KGlobal::locale()->use12Clock())
216 test += "i"; 212 test = "12mi";
217 mMiniWidth = fontMetrics().width(test) + frameWidth()*2 +1 ; 213 mMiniWidth = fontMetrics().width(test) + frameWidth()*2 +1 ;
218 // update geometry restrictions based on new settings 214 // update geometry restrictions based on new settings
219 setFixedWidth(minimumWidth()); 215 setFixedWidth( mMiniWidth );
220 216
221 // update HourSize 217 // update HourSize
222 mCellHeight = KOPrefs::instance()->mHourSize*4; 218 mCellHeight = KOPrefs::instance()->mHourSize*4;
223 resizeContents(50,mRows * mCellHeight); 219 resizeContents(50,mRows * mCellHeight);
224} 220}
225 221
226/** update time label positions */ 222/** update time label positions */
227void TimeLabels::positionChanged() 223void TimeLabels::positionChanged()
228{ 224{
229 int adjustment = mAgenda->contentsY(); 225 int adjustment = mAgenda->contentsY();
230 setContentsPos(0, adjustment); 226 setContentsPos(0, adjustment);
231} 227}
232 228
233/** */ 229/** */
234void TimeLabels::setAgenda(KOAgenda* agenda) 230void TimeLabels::setAgenda(KOAgenda* agenda)
235{ 231{
236 mAgenda = agenda; 232 mAgenda = agenda;
237} 233}
238 234
239void TimeLabels::contentsMousePressEvent ( QMouseEvent * e) 235void TimeLabels::contentsMousePressEvent ( QMouseEvent * e)
240{ 236{
241 mMouseDownY = e->pos().y(); 237 mMouseDownY = e->pos().y();
242 mOrgCap = topLevelWidget()->caption(); 238 mOrgCap = topLevelWidget()->caption();
243} 239}
244 240
245void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e ) 241void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e )
246{ 242{
247 int diff = mMouseDownY - e->pos().y(); 243 int diff = mMouseDownY - e->pos().y();
248 if ( diff < 10 && diff > -10 ) 244 if ( diff < 10 && diff > -10 )
249 return; 245 return;
250 int tSize = KOPrefs::instance()->mHourSize + (diff/10) ; 246 int tSize = KOPrefs::instance()->mHourSize + (diff/10) ;
251 if ( tSize < 4 ) 247 if ( tSize < 4 )
252 tSize = 4; 248 tSize = 4;
253 if ( tSize > 22 ) 249 if ( tSize > 22 )
254 tSize = 22; 250 tSize = 22;
255 tSize = (tSize-2)/2; 251 tSize = (tSize-2)/2;
256 topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize)); 252 topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize));
257 253
258} 254}
259void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e ) 255void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e )
260{ 256{
261 topLevelWidget()->setCaption( mOrgCap ); 257 topLevelWidget()->setCaption( mOrgCap );
262 int diff = mMouseDownY - e->pos().y(); 258 int diff = mMouseDownY - e->pos().y();
263 if ( diff < 10 && diff > -10 ) 259 if ( diff < 10 && diff > -10 )
264 return; 260 return;
265 int tSize = KOPrefs::instance()->mHourSize + (diff/10); 261 int tSize = KOPrefs::instance()->mHourSize + (diff/10);
266 if ( tSize < 4 ) 262 if ( tSize < 4 )
267 tSize = 4; 263 tSize = 4;
268 if ( tSize > 22 ) 264 if ( tSize > 22 )
269 tSize = 22; 265 tSize = 22;
270 tSize = (tSize/2)*2; 266 tSize = (tSize/2)*2;
271 if ( tSize == KOPrefs::instance()->mHourSize ) 267 if ( tSize == KOPrefs::instance()->mHourSize )
272 return; 268 return;
273 KOPrefs::instance()->mHourSize = tSize; 269 KOPrefs::instance()->mHourSize = tSize;
274 emit scaleChanged(); 270 emit scaleChanged();
275} 271}
276 272
277/** This is called in response to repaint() */ 273/** This is called in response to repaint() */
278void TimeLabels::paintEvent(QPaintEvent*) 274void TimeLabels::paintEvent(QPaintEvent*)
279{ 275{
280 276
281 // kdDebug() << "paintevent..." << endl; 277 // kdDebug() << "paintevent..." << endl;
282 // this is another hack! 278 // this is another hack!
283 // QPainter painter(this); 279 // QPainter painter(this);
284 //QString c 280 //QString c
285 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); 281 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight());
286} 282}
287 283
288//////////////////////////////////////////////////////////////////////////// 284////////////////////////////////////////////////////////////////////////////
289 285
290EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) 286EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name)
291 : QFrame(parent,name) 287 : QFrame(parent,name)
292{ 288{
293 mColumns = 1; 289 mColumns = 1;
294 mTopBox = 0; 290 mTopBox = 0;
295 mLocation = loc; 291 mLocation = loc;
296 mTopLayout = 0; 292 mTopLayout = 0;
297 mPaintWidget = 0; 293 mPaintWidget = 0;
298 mXOffset = 0; 294 mXOffset = 0;
299 if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); 295 if (mLocation == Top) mPixmap = SmallIcon("1uparrow");
300 else mPixmap = SmallIcon("1downarrow"); 296 else mPixmap = SmallIcon("1downarrow");
301 mEnabled.resize(mColumns); 297 mEnabled.resize(mColumns);
302 mEnabled.fill( false ); 298 mEnabled.fill( false );
303 setMinimumHeight(mPixmap.height()); 299 setMinimumHeight(mPixmap.height());
304} 300}
305 301
306EventIndicator::~EventIndicator() 302EventIndicator::~EventIndicator()
307{ 303{
308} 304}
309 305
310void EventIndicator::drawContents(QPainter *p) 306void EventIndicator::drawContents(QPainter *p)
311{ 307{
312 308
313 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; 309 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl;
314 KDGanttSplitterHandle* han = 0; 310 KDGanttSplitterHandle* han = 0;
315 if ( mPaintWidget ) 311 if ( mPaintWidget )
316 han = mPaintWidget->firstHandle(); 312 han = mPaintWidget->firstHandle();
317 if ( ! han ) { 313 if ( ! han ) {
318 int i; 314 int i;
319 for(i=0;i<mColumns;++i) { 315 for(i=0;i<mColumns;++i) {
320 if (mEnabled[i]) { 316 if (mEnabled[i]) {
321 int cellWidth = contentsRect().right()/mColumns; 317 int cellWidth = contentsRect().right()/mColumns;
322 int xOffset = KOGlobals::self()->reverseLayout() ? 318 int xOffset = KOGlobals::self()->reverseLayout() ?
323 (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 : 319 (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 :
324 i*cellWidth + (cellWidth -mPixmap.width()) /2; 320 i*cellWidth + (cellWidth -mPixmap.width()) /2;
325 p->drawPixmap(QPoint(1+xOffset,0),mPixmap); 321 p->drawPixmap(QPoint(1+xOffset,0),mPixmap);
326 } 322 }
327 } 323 }
328 } else { 324 } else {
329 han->repaint(); 325 han->repaint();
330 //mPaintWidget->setBackgroundColor( red ); 326 //mPaintWidget->setBackgroundColor( red );
331 327
332 QPainter pa( han ); 328 QPainter pa( han );
333 int i; 329 int i;
334 bool setColor = false; 330 bool setColor = false;
335 for(i=0;i<mColumns;++i) { 331 for(i=0;i<mColumns;++i) {
336 if (mEnabled[i]) { 332 if (mEnabled[i]) {
337 setColor = true; 333 setColor = true;
338 334
339 int cellWidth = contentsRect().right()/mColumns; 335 int cellWidth = contentsRect().right()/mColumns;
340 int xOffset = KOGlobals::self()->reverseLayout() ? 336 int xOffset = KOGlobals::self()->reverseLayout() ?
341 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : 337 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 :
342 i*cellWidth + cellWidth/2 -mPixmap.width()/2; 338 i*cellWidth + cellWidth/2 -mPixmap.width()/2;
343 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); 339 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap);
344 //qDebug("222draw pix %d ",xOffset ); 340 //qDebug("222draw pix %d ",xOffset );
345 341
346 } 342 }
347 343
348 } 344 }
349 pa.end(); 345 pa.end();
350 346
351 } 347 }
352} 348}
353 349
354void EventIndicator::setXOffset( int x ) 350void EventIndicator::setXOffset( int x )
355{ 351{
356 mXOffset = x; 352 mXOffset = x;
357} 353}
358void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) 354void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w )
359{ 355{
360 mPaintWidget = w; 356 mPaintWidget = w;
361 setMaximumHeight(0); 357 setMaximumHeight(0);
362 setMinimumHeight(0); 358 setMinimumHeight(0);
363} 359}
364void EventIndicator::changeColumns(int columns) 360void EventIndicator::changeColumns(int columns)
365{ 361{
366 mColumns = columns; 362 mColumns = columns;
367 mEnabled.resize(mColumns); 363 mEnabled.resize(mColumns);
368 364
369 update(); 365 update();
370} 366}
371 367
372void EventIndicator::enableColumn(int column, bool enable) 368void EventIndicator::enableColumn(int column, bool enable)
373{ 369{
374 mEnabled[column] = enable; 370 mEnabled[column] = enable;
375} 371}
376 372
377 373
378//////////////////////////////////////////////////////////////////////////// 374////////////////////////////////////////////////////////////////////////////
379//////////////////////////////////////////////////////////////////////////// 375////////////////////////////////////////////////////////////////////////////
380//////////////////////////////////////////////////////////////////////////// 376////////////////////////////////////////////////////////////////////////////
381 377
382KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : 378KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
383 KOEventView (cal,parent,name) 379 KOEventView (cal,parent,name)
384{ 380{
385 mBlockUpdating = true; 381 mBlockUpdating = true;
386 mStartHour = 8; 382 mStartHour = 8;
387 mSelectedDates.append(QDate::currentDate()); 383 mSelectedDates.append(QDate::currentDate());
388 384
389 mLayoutDayLabels = 0; 385 mLayoutDayLabels = 0;
390 mDayLabelsFrame = 0; 386 mDayLabelsFrame = 0;
391 mDayLabels = 0; 387 mDayLabels = 0;
392 bool isRTL = KOGlobals::self()->reverseLayout(); 388 bool isRTL = KOGlobals::self()->reverseLayout();
393 QPixmap expandPix; 389 QPixmap expandPix;
394 if ( KOPrefs::instance()->mVerticalScreen ) { 390 if ( KOPrefs::instance()->mVerticalScreen ) {
395 expandPix = SmallIcon( "1updownarrow" ); 391 expandPix = SmallIcon( "1updownarrow" );
396 } else { 392 } else {
397 expandPix = SmallIcon("1leftrightarrow" ); 393 expandPix = SmallIcon("1leftrightarrow" );
398 } 394 }
399 395
400 QBoxLayout *topLayout = new QVBoxLayout(this); 396 QBoxLayout *topLayout = new QVBoxLayout(this);
401 397
402 // Create day name labels for agenda columns 398 // Create day name labels for agenda columns
403 // Create agenda splitter 399 // Create agenda splitter
404 400
405 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); 401 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this);
406 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 402 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
407 topLayout->addWidget( mSplitterAgenda ); 403 topLayout->addWidget( mSplitterAgenda );
408 mAllDayFrame = new QHBox(mSplitterAgenda); 404 mAllDayFrame = new QHBox(mSplitterAgenda);
409 mAllDayFrame->setFocusPolicy(NoFocus); 405 mAllDayFrame->setFocusPolicy(NoFocus);
410 QWidget *agendaFrame = new QWidget(mSplitterAgenda); 406 QWidget *agendaFrame = new QWidget(mSplitterAgenda);
411 agendaFrame->setFocusPolicy(NoFocus); 407 agendaFrame->setFocusPolicy(NoFocus);
412 408
413 // Create all-day agenda widget 409 // Create all-day agenda widget
414 mDummyAllDayLeft = new QVBox( mAllDayFrame ); 410 mDummyAllDayLeft = new QVBox( mAllDayFrame );
415 411
416 mExpandButton = new QPushButton(mDummyAllDayLeft); 412 mExpandButton = new QPushButton(mDummyAllDayLeft);
417 mExpandButton->setPixmap( expandPix ); 413 mExpandButton->setPixmap( expandPix );
418 int widebut = mExpandButton->sizeHint().width()+4; 414 int widebut = mExpandButton->sizeHint().width()+4;
419 int heibut = mExpandButton->sizeHint().height()+4; 415 int heibut = mExpandButton->sizeHint().height()+4;
420 if ( heibut > widebut ) 416 if ( heibut > widebut )
421 widebut = heibut ; 417 widebut = heibut ;
422 418
423 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, 419 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed,
424 // QSizePolicy::Fixed ) ); 420 // QSizePolicy::Fixed ) );
425 mExpandButton->setFixedSize( widebut, widebut); 421 mExpandButton->setFixedSize( widebut, widebut);
426 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); 422 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) );
427 mExpandButton->setFocusPolicy(NoFocus); 423 mExpandButton->setFocusPolicy(NoFocus);
428 mAllDayAgenda = new KOAgenda(1,mAllDayFrame); 424 mAllDayAgenda = new KOAgenda(1,mAllDayFrame);
429 mAllDayAgenda->setFocusPolicy(NoFocus); 425 mAllDayAgenda->setFocusPolicy(NoFocus);
430 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame); 426 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame);
431 427
432 // Create event context menu for all day agenda 428 // Create event context menu for all day agenda
433 mAllDayAgendaPopup = eventPopup(); 429 mAllDayAgendaPopup = eventPopup();
434 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 430 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
435 mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 431 mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
436 432
437 // Create agenda frame 433 // Create agenda frame
438 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3); 434 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3);
439 // QHBox *agendaFrame = new QHBox(splitterAgenda); 435 // QHBox *agendaFrame = new QHBox(splitterAgenda);
440 436
441 // create event indicator bars 437 // create event indicator bars
442 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); 438 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame);
443#ifndef DESKTOP_VERSION 439#ifndef DESKTOP_VERSION
444 // FIX 440 // FIX
445 mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); 441 mEventIndicatorTop->setPaintWidget( mSplitterAgenda );
446#endif 442#endif
447 mDayLabelsFrame = new QHBox(agendaFrame); 443 mDayLabelsFrame = new QHBox(agendaFrame);
448 //topLayout->addWidget(mDayLabelsFrame); 444 //topLayout->addWidget(mDayLabelsFrame);
449 mDayLabels = new QFrame (mDayLabelsFrame); 445 mDayLabels = new QFrame (mDayLabelsFrame);
450 mLayoutDayLabels = new QHBoxLayout(mDayLabels); 446 mLayoutDayLabels = new QHBoxLayout(mDayLabels);
451 agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2); 447 agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2);
452 agendaLayout->addWidget(mEventIndicatorTop,1,1); 448 agendaLayout->addWidget(mEventIndicatorTop,1,1);
453 449
454 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, 450 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom,
455 agendaFrame); 451 agendaFrame);
456 agendaLayout->addWidget(mEventIndicatorBottom,3,1); 452 agendaLayout->addWidget(mEventIndicatorBottom,3,1);
457 QWidget *dummyAgendaRight = new QWidget(agendaFrame); 453 QWidget *dummyAgendaRight = new QWidget(agendaFrame);
458 agendaLayout->addWidget(dummyAgendaRight,1,2); 454 agendaLayout->addWidget(dummyAgendaRight,1,2);
459 455
460 // Create time labels 456 // Create time labels
461 mTimeLabels = new TimeLabels(24,agendaFrame); 457 mTimeLabels = new TimeLabels(24,agendaFrame);
462 agendaLayout->addWidget(mTimeLabels,2,0); 458 agendaLayout->addWidget(mTimeLabels,2,0);
463 connect(mTimeLabels,SIGNAL( scaleChanged()), 459 connect(mTimeLabels,SIGNAL( scaleChanged()),
464 this,SLOT(updateConfig())); 460 this,SLOT(updateConfig()));
465 461
466 // Create agenda 462 // Create agenda
467 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); 463 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame);
468 agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2); 464 agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2);
469 agendaLayout->setColStretch(1,1); 465 agendaLayout->setColStretch(1,1);
470 mAgenda->setFocusPolicy(NoFocus); 466 mAgenda->setFocusPolicy(NoFocus);
471 // Create event context menu for agenda 467 // Create event context menu for agenda
472 mAgendaPopup = eventPopup(); 468 mAgendaPopup = eventPopup();
473 469
474 mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), 470 mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")),
475 i18n("Toggle Alarm"),mAgenda, 471 i18n("Toggle Alarm"),mAgenda,
476 SLOT(popupAlarm()),true); 472 SLOT(popupAlarm()),true);
477 473
478 474
479 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 475 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
480 mAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 476 mAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
481 477
482 // make connections between dependent widgets 478 // make connections between dependent widgets
483 mTimeLabels->setAgenda(mAgenda); 479 mTimeLabels->setAgenda(mAgenda);
484 480
485 // Update widgets to reflect user preferences 481 // Update widgets to reflect user preferences
486 // updateConfig(); 482 // updateConfig();
487 483
488 // createDayLabels(); 484 // createDayLabels();
489 485
490 // these blank widgets make the All Day Event box line up with the agenda 486 // these blank widgets make the All Day Event box line up with the agenda
491 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 487 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
492 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 488 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
493 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 489 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
494 490
495 // Scrolling 491 // Scrolling
496 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), 492 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)),
497 mTimeLabels, SLOT(positionChanged())); 493 mTimeLabels, SLOT(positionChanged()));
498 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), 494 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)),
499 SLOT(setContentsPos(int))); 495 SLOT(setContentsPos(int)));
500 496
501 connect(mAgenda,SIGNAL(showDateView( int, int)),SLOT(slotShowDateView( int, int ))); 497 connect(mAgenda,SIGNAL(showDateView( int, int)),SLOT(slotShowDateView( int, int )));
502 connect(mAllDayAgenda,SIGNAL(showDateView( int, int )), SLOT(slotShowDateView( int, int ) )); 498 connect(mAllDayAgenda,SIGNAL(showDateView( int, int )), SLOT(slotShowDateView( int, int ) ));
503 499
504 // Create/Show/Edit/Delete Event 500 // Create/Show/Edit/Delete Event
505 connect(mAgenda,SIGNAL(newEventSignal(int,int)), 501 connect(mAgenda,SIGNAL(newEventSignal(int,int)),
506 SLOT(newEvent(int,int))); 502 SLOT(newEvent(int,int)));
507 connect(mAgenda,SIGNAL(newTodoSignal(int,int)), 503 connect(mAgenda,SIGNAL(newTodoSignal(int,int)),
508 SLOT(newTodo(int,int))); 504 SLOT(newTodo(int,int)));
509 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), 505 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)),
510 SLOT(newEvent(int,int,int,int))); 506 SLOT(newEvent(int,int,int,int)));
511 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), 507 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)),
512 SLOT(newEventAllDay(int,int))); 508 SLOT(newEventAllDay(int,int)));
513 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), 509 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)),
514 SLOT(newTodoAllDay(int,int))); 510 SLOT(newTodoAllDay(int,int)));
515 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), 511 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)),
516 SLOT(newEventAllDay(int,int))); 512 SLOT(newEventAllDay(int,int)));
517 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 513 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
518 SLOT(newTimeSpanSelected(int,int,int,int))); 514 SLOT(newTimeSpanSelected(int,int,int,int)));
519 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 515 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
520 SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); 516 SLOT(newTimeSpanSelectedAllDay(int,int,int,int)));
521 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 517 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
522 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 518 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
523 519
524 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 520 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
525 SIGNAL(editIncidenceSignal(Incidence *))); 521 SIGNAL(editIncidenceSignal(Incidence *)));
526 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 522 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
527 SIGNAL(editIncidenceSignal(Incidence *))); 523 SIGNAL(editIncidenceSignal(Incidence *)));
528 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 524 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
529 SIGNAL(showIncidenceSignal(Incidence *))); 525 SIGNAL(showIncidenceSignal(Incidence *)));
530 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 526 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
531 SIGNAL(showIncidenceSignal(Incidence *))); 527 SIGNAL(showIncidenceSignal(Incidence *)));
532 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 528 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
533 SIGNAL(deleteIncidenceSignal(Incidence *))); 529 SIGNAL(deleteIncidenceSignal(Incidence *)));
534 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 530 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
535 SIGNAL(deleteIncidenceSignal(Incidence *))); 531 SIGNAL(deleteIncidenceSignal(Incidence *)));
536 532
537 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 533 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
538 SLOT(updateEventDates(KOAgendaItem *, int ))); 534 SLOT(updateEventDates(KOAgendaItem *, int )));
539 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 535 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
540 SLOT(updateEventDates(KOAgendaItem *, int))); 536 SLOT(updateEventDates(KOAgendaItem *, int)));
541 537
542 // event indicator update 538 // event indicator update
543 connect(mAgenda,SIGNAL(lowerYChanged(int)), 539 connect(mAgenda,SIGNAL(lowerYChanged(int)),
544 SLOT(updateEventIndicatorTop(int))); 540 SLOT(updateEventIndicatorTop(int)));
545 connect(mAgenda,SIGNAL(upperYChanged(int)), 541 connect(mAgenda,SIGNAL(upperYChanged(int)),
546 SLOT(updateEventIndicatorBottom(int))); 542 SLOT(updateEventIndicatorBottom(int)));
547 // drag signals 543 // drag signals
548 /* 544 /*
549 connect(mAgenda,SIGNAL(startDragSignal(Event *)), 545 connect(mAgenda,SIGNAL(startDragSignal(Event *)),
550 SLOT(startDrag(Event *))); 546 SLOT(startDrag(Event *)));
551 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), 547 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)),
552 SLOT(startDrag(Event *))); 548 SLOT(startDrag(Event *)));
553 */ 549 */
554 // synchronize selections 550 // synchronize selections
555 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 551 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
556 mAllDayAgenda, SLOT( deselectItem() ) ); 552 mAllDayAgenda, SLOT( deselectItem() ) );
557 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 553 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
558 mAgenda, SLOT( deselectItem() ) ); 554 mAgenda, SLOT( deselectItem() ) );
559 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 555 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
560 SIGNAL( incidenceSelected( Incidence * ) ) ); 556 SIGNAL( incidenceSelected( Incidence * ) ) );
561 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 557 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
562 SIGNAL( incidenceSelected( Incidence * ) ) ); 558 SIGNAL( incidenceSelected( Incidence * ) ) );
563 connect( mAgenda, SIGNAL( resizedSignal() ), 559 connect( mAgenda, SIGNAL( resizedSignal() ),
564 SLOT( updateConfig( ) ) ); 560 SLOT( updateConfig( ) ) );
565 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), 561 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ),
566 SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); 562 SLOT( addToCalSlot(Incidence *, Incidence * ) ) );
567 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), 563 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ),
568 SLOT( addToCalSlot(Incidence * , Incidence *) ) ); 564 SLOT( addToCalSlot(Incidence * , Incidence *) ) );
569 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 565 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
570 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 566 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
571 567
572 568
573} 569}
574 570
575void KOAgendaView::toggleAllDay() 571void KOAgendaView::toggleAllDay()
576{ 572{
577 if ( mSplitterAgenda->firstHandle() ) 573 if ( mSplitterAgenda->firstHandle() )
578 mSplitterAgenda->firstHandle()->toggle(); 574 mSplitterAgenda->firstHandle()->toggle();
579} 575}
580void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) 576void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld )
581{ 577{
582 calendar()->addIncidence( inc ); 578 calendar()->addIncidence( inc );
583 579
584 if ( incOld ) { 580 if ( incOld ) {
585 if ( incOld->type() == "Todo" ) 581 if ( incOld->type() == "Todo" )
586 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); 582 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED );
587 else 583 else
588 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); 584 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED);
589 } 585 }
590 586
591} 587}
592 588
593KOAgendaView::~KOAgendaView() 589KOAgendaView::~KOAgendaView()
594{ 590{
595 delete mAgendaPopup; 591 delete mAgendaPopup;
596 delete mAllDayAgendaPopup; 592 delete mAllDayAgendaPopup;
597 delete KOAgendaItem::paintPix(); 593 delete KOAgendaItem::paintPix();
598 delete KOAgendaItem::paintPixSel(); 594 delete KOAgendaItem::paintPixSel();
599} 595}
600void KOAgendaView::resizeEvent( QResizeEvent* e ) 596void KOAgendaView::resizeEvent( QResizeEvent* e )
601{ 597{
602 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); 598 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width());
603 bool uc = false; 599 bool uc = false;
diff --git a/korganizer/kodaymatrix.cpp b/korganizer/kodaymatrix.cpp
index c55f7d7..5b5703f 100644
--- a/korganizer/kodaymatrix.cpp
+++ b/korganizer/kodaymatrix.cpp
@@ -496,473 +496,475 @@ int KODayMatrix::getDayIndexFrom(int x, int y)
496 496
497 497
498 return 7*(yVal) + xVal; 498 return 7*(yVal) + xVal;
499 499
500} 500}
501 501
502// ---------------------------------------------------------------------------- 502// ----------------------------------------------------------------------------
503// M O U S E E V E N T H A N D L I N G 503// M O U S E E V E N T H A N D L I N G
504// ---------------------------------------------------------------------------- 504// ----------------------------------------------------------------------------
505 505
506void KODayMatrix::mousePressEvent (QMouseEvent* e) 506void KODayMatrix::mousePressEvent (QMouseEvent* e)
507{ 507{
508 508
509 if ( e->button() == LeftButton ) 509 if ( e->button() == LeftButton )
510 mouseDown = true; 510 mouseDown = true;
511 mSelStart = getDayIndexFrom(e->x(), e->y()); 511 mSelStart = getDayIndexFrom(e->x(), e->y());
512 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1; 512 if (mSelStart > NUMDAYS-1) mSelStart=NUMDAYS-1;
513 mSelInit = mSelStart; 513 mSelInit = mSelStart;
514 mSelEnd = mSelStart; 514 mSelEnd = mSelStart;
515 mRedrawNeeded = true; 515 mRedrawNeeded = true;
516 repaint(false); 516 repaint(false);
517} 517}
518 518
519void KODayMatrix::mouseReleaseEvent (QMouseEvent* e) 519void KODayMatrix::mouseReleaseEvent (QMouseEvent* e)
520{ 520{
521 mRedrawNeeded = true; 521 mRedrawNeeded = true;
522 if ( e->button() == LeftButton ) 522 if ( e->button() == LeftButton )
523 if ( ! mouseDown ) { 523 if ( ! mouseDown ) {
524 return; 524 return;
525 } 525 }
526 else 526 else
527 mouseDown = false; 527 mouseDown = false;
528 int tmp = getDayIndexFrom(e->x(), e->y()); 528 int tmp = getDayIndexFrom(e->x(), e->y());
529 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 529 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
530 530
531 if (mSelInit > tmp) { 531 if (mSelInit > tmp) {
532 mSelEnd = mSelInit; 532 mSelEnd = mSelInit;
533 if (tmp != mSelStart) { 533 if (tmp != mSelStart) {
534 mSelStart = tmp; 534 mSelStart = tmp;
535 repaint(false); 535 repaint(false);
536 } 536 }
537 } else { 537 } else {
538 mSelStart = mSelInit; 538 mSelStart = mSelInit;
539 539
540 //repaint only if selection has changed 540 //repaint only if selection has changed
541 if (tmp != mSelEnd) { 541 if (tmp != mSelEnd) {
542 mSelEnd = tmp; 542 mSelEnd = tmp;
543 repaint(false); 543 repaint(false);
544 } 544 }
545 } 545 }
546 546
547 DateList daylist; 547 DateList daylist;
548 if ( mSelStart < 0 ) 548 if ( mSelStart < 0 )
549 mSelStart = 0; 549 mSelStart = 0;
550 for (int i = mSelStart; i <= mSelEnd; i++) { 550 for (int i = mSelStart; i <= mSelEnd; i++) {
551 daylist.append(days[i]); 551 daylist.append(days[i]);
552 } 552 }
553 emit selected((const DateList)daylist); 553 emit selected((const DateList)daylist);
554 554
555} 555}
556 556
557void KODayMatrix::mouseMoveEvent (QMouseEvent* e) 557void KODayMatrix::mouseMoveEvent (QMouseEvent* e)
558{ 558{
559 if ( ! mouseDown ) { 559 if ( ! mouseDown ) {
560 return; 560 return;
561 } 561 }
562 mRedrawNeeded = true; 562 mRedrawNeeded = true;
563 int tmp = getDayIndexFrom(e->x(), e->y()); 563 int tmp = getDayIndexFrom(e->x(), e->y());
564 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1; 564 if (tmp > NUMDAYS-1) tmp=NUMDAYS-1;
565 565
566 if (mSelInit > tmp) { 566 if (mSelInit > tmp) {
567 mSelEnd = mSelInit; 567 mSelEnd = mSelInit;
568 if (tmp != mSelStart) { 568 if (tmp != mSelStart) {
569 mSelStart = tmp; 569 mSelStart = tmp;
570 repaint(false); 570 repaint(false);
571 } 571 }
572 } else { 572 } else {
573 mSelStart = mSelInit; 573 mSelStart = mSelInit;
574 574
575 //repaint only if selection has changed 575 //repaint only if selection has changed
576 if (tmp != mSelEnd) { 576 if (tmp != mSelEnd) {
577 mSelEnd = tmp; 577 mSelEnd = tmp;
578 repaint(false); 578 repaint(false);
579 } 579 }
580 } 580 }
581} 581}
582 582
583// ---------------------------------------------------------------------------- 583// ----------------------------------------------------------------------------
584// D R A G ' N D R O P H A N D L I N G 584// D R A G ' N D R O P H A N D L I N G
585// ---------------------------------------------------------------------------- 585// ----------------------------------------------------------------------------
586 586
587void KODayMatrix::dragEnterEvent(QDragEnterEvent *e) 587void KODayMatrix::dragEnterEvent(QDragEnterEvent *e)
588{ 588{
589#ifndef KORG_NODND 589#ifndef KORG_NODND
590 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 590 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
591 e->ignore(); 591 e->ignore();
592 return; 592 return;
593 } 593 }
594 594
595 // some visual feedback 595 // some visual feedback
596// oldPalette = palette(); 596// oldPalette = palette();
597// setPalette(my_HilitePalette); 597// setPalette(my_HilitePalette);
598// update(); 598// update();
599#endif 599#endif
600} 600}
601 601
602void KODayMatrix::dragMoveEvent(QDragMoveEvent *e) 602void KODayMatrix::dragMoveEvent(QDragMoveEvent *e)
603{ 603{
604#ifndef KORG_NODND 604#ifndef KORG_NODND
605 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 605 if ( !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
606 e->ignore(); 606 e->ignore();
607 return; 607 return;
608 } 608 }
609 609
610 e->accept(); 610 e->accept();
611#endif 611#endif
612} 612}
613 613
614void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/) 614void KODayMatrix::dragLeaveEvent(QDragLeaveEvent */*dl*/)
615{ 615{
616#ifndef KORG_NODND 616#ifndef KORG_NODND
617// setPalette(oldPalette); 617// setPalette(oldPalette);
618// update(); 618// update();
619#endif 619#endif
620} 620}
621 621
622void KODayMatrix::dropEvent(QDropEvent *e) 622void KODayMatrix::dropEvent(QDropEvent *e)
623{ 623{
624#ifndef KORG_NODND 624#ifndef KORG_NODND
625// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl; 625// kdDebug() << "KODayMatrix::dropEvent(e) begin" << endl;
626 626
627 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) { 627 if (!mCalendar || !ICalDrag::canDecode( e ) && !VCalDrag::canDecode( e ) ) {
628 e->ignore(); 628 e->ignore();
629 return; 629 return;
630 } 630 }
631 631
632 DndFactory factory( mCalendar ); 632 DndFactory factory( mCalendar );
633 Event *event = factory.createDrop(e); 633 Event *event = factory.createDrop(e);
634 634
635 if (event) { 635 if (event) {
636 e->acceptAction(); 636 e->acceptAction();
637 637
638 Event *existingEvent = mCalendar->event(event->uid()); 638 Event *existingEvent = mCalendar->event(event->uid());
639 639
640 if(existingEvent) { 640 if(existingEvent) {
641 // uniquify event 641 // uniquify event
642 event->recreate(); 642 event->recreate();
643/* 643/*
644 KMessageBox::sorry(this, 644 KMessageBox::sorry(this,
645 i18n("Event already exists in this calendar."), 645 i18n("Event already exists in this calendar."),
646 i18n("Drop Event")); 646 i18n("Drop Event"));
647 delete event; 647 delete event;
648 return; 648 return;
649*/ 649*/
650 } 650 }
651// kdDebug() << "Drop new Event" << endl; 651// kdDebug() << "Drop new Event" << endl;
652 // Adjust date 652 // Adjust date
653 QDateTime start = event->dtStart(); 653 QDateTime start = event->dtStart();
654 QDateTime end = event->dtEnd(); 654 QDateTime end = event->dtEnd();
655 int duration = start.daysTo(end); 655 int duration = start.daysTo(end);
656 int idx = getDayIndexFrom(e->pos().x(), e->pos().y()); 656 int idx = getDayIndexFrom(e->pos().x(), e->pos().y());
657 657
658 start.setDate(days[idx]); 658 start.setDate(days[idx]);
659 end.setDate(days[idx].addDays(duration)); 659 end.setDate(days[idx].addDays(duration));
660 660
661 event->setDtStart(start); 661 event->setDtStart(start);
662 event->setDtEnd(end); 662 event->setDtEnd(end);
663 mCalendar->addEvent(event); 663 mCalendar->addEvent(event);
664 664
665 emit eventDropped(event); 665 emit eventDropped(event);
666 } else { 666 } else {
667// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl; 667// kdDebug() << "KODayMatrix::dropEvent(): Event from drop not decodable" << endl;
668 e->ignore(); 668 e->ignore();
669 } 669 }
670#endif 670#endif
671} 671}
672 672
673// ---------------------------------------------------------------------------- 673// ----------------------------------------------------------------------------
674// P A I N T E V E N T H A N D L I N G 674// P A I N T E V E N T H A N D L I N G
675// ---------------------------------------------------------------------------- 675// ----------------------------------------------------------------------------
676 676
677void KODayMatrix::paintEvent(QPaintEvent * pevent) 677void KODayMatrix::paintEvent(QPaintEvent * pevent)
678{ 678{
679 679
680 if ( width() <= 0 || height() <= 0 ) 680 if ( width() <= 0 || height() <= 0 )
681 return; 681 return;
682 if ( mPendingUpdateBeforeRepaint ) { 682 if ( mPendingUpdateBeforeRepaint ) {
683 updateViewTimed(); 683 updateViewTimed();
684 mPendingUpdateBeforeRepaint = false; 684 mPendingUpdateBeforeRepaint = false;
685 } 685 }
686 if ( myPix.width() != width() || myPix.height()!=height() ) { 686 if ( myPix.width() != width() || myPix.height()!=height() ) {
687 myPix.resize(size() ); 687 myPix.resize(size() );
688 mRedrawNeeded = true; 688 mRedrawNeeded = true;
689 } 689 }
690 690
691 if ( mRedrawNeeded ) { 691 if ( mRedrawNeeded ) {
692 //qDebug("REDRAW "); 692 //qDebug("REDRAW ");
693 QPainter p(&myPix); 693 QPainter p(&myPix);
694 p.setFont(font()); 694 p.setFont(font());
695 695
696 696
697 int dheight = daysize.height(); 697 int dheight = daysize.height();
698 int dwidth = daysize.width(); 698 int dwidth = daysize.width();
699 int row,col; 699 int row,col;
700 int selw, selh; 700 int selw, selh;
701 int xyOff = frameWidth(); 701 int xyOff = frameWidth();
702 int colModulo = (width()-2) % 7; 702 int colModulo = (width()-2) % 7;
703 int rowModulo = (height()-2) % 6; 703 int rowModulo = (height()-2) % 6;
704 //qDebug("col %d row %d ",colModulo,rowModulo ); 704 //qDebug("col %d row %d ",colModulo,rowModulo );
705 705
706 bool isRTL = KOGlobals::self()->reverseLayout(); 706 bool isRTL = KOGlobals::self()->reverseLayout();
707 707
708 // draw background and topleft frame 708 // draw background and topleft frame
709 p.fillRect(0,0,width(),height(), mDefaultBackColor); 709 p.fillRect(0,0,width(),height(), mDefaultBackColor);
710 p.setPen(mDefaultTextColor); 710 p.setPen(mDefaultTextColor);
711 p.drawRect(0, 0, width(), height()); 711 p.drawRect(0, 0, width(), height());
712 int mSelStartT = mSelStart; 712 int mSelStartT = mSelStart;
713 int mSelEndT = mSelEnd; 713 int mSelEndT = mSelEnd;
714 if ( mSelEndT >= NUMDAYS ) 714 if ( mSelEndT >= NUMDAYS )
715 mSelEndT = NUMDAYS-1; 715 mSelEndT = NUMDAYS-1;
716 // draw selected days with highlighted background color 716 // draw selected days with highlighted background color
717 if (mSelStart != NOSELECTION) { 717 if (mSelStart != NOSELECTION) {
718 bool skip = false; 718 bool skip = false;
719 if ( ! mouseDown ) { 719 if ( ! mouseDown ) {
720 int mo = days[20].month(); 720 int mo = days[20].month();
721 //qDebug("-- %d %d ", mSelStartT, mSelEndT); 721 //qDebug("-- %d %d ", mSelStartT, mSelEndT);
722 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() ); 722 //qDebug("%d %d %d - d %d", mo, days[mSelStartT].month() , days[mSelEndT].month(), days[mSelEndT].day() );
723 int startMo = days[mSelStartT].month(); 723 int startMo = days[mSelStartT].month();
724 int endMo = days[mSelEndT].month(); 724 int endMo = days[mSelEndT].month();
725 if ( startMo == 12 && mo == 1 && endMo <= 2 ) 725 if ( startMo == 12 && mo == 1 && endMo <= 2 )
726 startMo = 1; 726 startMo = 1;
727 if ( endMo == 1 && mo == 12 ) 727 if ( endMo == 1 && mo == 12 )
728 endMo = 12; 728 endMo = 12;
729 if ( mo == 12 && startMo == 1 ) 729 if ( mo == 12 && startMo == 1 )
730 startMo = 13; 730 startMo = 13;
731 if ( (startMo > mo || endMo < mo) ) { 731 if ( (startMo > mo || endMo < mo) ) {
732 skip = true; 732 skip = true;
733 } else { 733 } else {
734 if ( days[mSelStartT].month() != mo ) { 734 if ( days[mSelStartT].month() != mo ) {
735 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day(); 735 int add = days[mSelStartT].daysInMonth ()-days[mSelStartT].day();
736 mSelStartT += add +1; 736 mSelStartT += add +1;
737 } 737 }
738 if ( days[mSelEndT].month() != mo ) { 738 if ( days[mSelEndT].month() != mo ) {
739 int sub = days[mSelEndT].day(); 739 int sub = days[mSelEndT].day();
740 mSelEndT -= sub ; 740 mSelEndT -= sub ;
741 } 741 }
742 } 742 }
743 } 743 }
744 //qDebug("SKIP %d ", skip); 744 //qDebug("SKIP %d ", skip);
745 if ( ! skip ) { 745 if ( ! skip ) {
746 row = mSelStartT/7; 746 row = mSelStartT/7;
747 col = mSelStartT -row*7; 747 col = mSelStartT -row*7;
748 QColor selcol = KOPrefs::instance()->mHighlightColor; 748 QColor selcol = KOPrefs::instance()->mHighlightColor;
749 int addCol = 0; 749 int addCol = 0;
750 int addRow = 0; 750 int addRow = 0;
751 int addRow2 = 0; 751 int addRow2 = 0;
752 int addCol2 = 0; 752 int addCol2 = 0;
753 if (row == mSelEndT/7) { 753 if (row == mSelEndT/7) {
754 if ( rowModulo ) { 754 if ( rowModulo ) {
755 if ( row >= 6 - rowModulo ) 755 if ( row >= 6 - rowModulo )
756 addRow = row - 5 + rowModulo; 756 addRow = row - 5 + rowModulo;
757 } 757 }
758 if ( colModulo ) { 758 if ( colModulo ) {
759 int colt1 = mSelEndT%7; 759 int colt1 = mSelEndT%7;
760 //qDebug("colt1 %d ", colt1 ); 760 //qDebug("colt1 %d ", colt1 );
761 if ( colt1 >= 7 - colModulo ) 761 if ( colt1 >= 7 - colModulo )
762 addCol = colt1 - 7 + colModulo+1; 762 addCol = colt1 - 7 + colModulo+1;
763 int colt = mSelStartT%7; 763 int colt = mSelStartT%7;
764 if ( colt >= 7 - colModulo ) 764 if ( colt >= 7 - colModulo )
765 addCol2 = colt - 7 + colModulo; 765 addCol2 = colt - 7 + colModulo;
766 addCol -= addCol2; 766 addCol -= addCol2;
767 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 ); 767 //qDebug("COL %d %d %d %d ",col , colt1 ,addCol ,addCol2 );
768 } 768 }
769 // Single row selection 769 // Single row selection
770 if ( row == 0) 770 if ( row == 0)
771 addRow = 1; 771 addRow = 1;
772 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2, 772 p.fillRect(isRTL ? (7 - (mSelEndT-mSelStartT+1) - col)*dwidth : col*dwidth+1+addCol2,
773 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol); 773 row*dheight+addRow, (mSelEndT-mSelStartT+1)*dwidth+addCol, dheight+1, selcol);
774 } else { 774 } else {
775 // draw first row to the right 775 // draw first row to the right
776 if ( colModulo ) { 776 if ( colModulo ) {
777 if ( col >= 7 - colModulo ) 777 if ( col >= 7 - colModulo )
778 addCol2 = col - 7 + colModulo; 778 addCol2 = col - 7 + colModulo;
779 } 779 }
780 if ( rowModulo ) { 780 if ( rowModulo ) {
781 if ( row >= 6 - rowModulo ) 781 if ( row >= 6 - rowModulo )
782 addRow = row - 5 + rowModulo; 782 addRow = row - 5 + rowModulo;
783 } 783 }
784 if ( row == 0) 784 if ( row == 0)
785 addRow = 1; 785 addRow = 1;
786 int drawWid = width()-(col*dwidth+1+addCol2)-1; 786 int drawWid = width()-(col*dwidth+1+addCol2)-1;
787 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid, 787 p.fillRect(isRTL ? 0 : col*dwidth+1+addCol2, row*dheight+addRow, drawWid,
788 dheight+1, selcol); 788 dheight+1, selcol);
789 // draw full block till last line 789 // draw full block till last line
790 selh = mSelEndT/7-row; 790 selh = mSelEndT/7-row;
791 addRow = 0; 791 addRow = 0;
792 if ( rowModulo ) { 792 if ( rowModulo ) {
793 if ( mSelEndT/7 >= 6 - rowModulo ) 793 if ( mSelEndT/7 >= 6 - rowModulo )
794 addRow = mSelEndT/7 - 5 + rowModulo; 794 addRow = mSelEndT/7 - 5 + rowModulo;
795 } 795 }
796 if (selh > 1) { 796 if (selh > 1) {
797 p.fillRect(1, (row+1)*dheight, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol); 797 p.fillRect(1, (row+1)*dheight, 7*dwidth+colModulo, (selh-1)*dheight+addRow,selcol);
798 } 798 }
799 // draw last block from left to mSelEndT 799 // draw last block from left to mSelEndT
800 selw = mSelEndT-7*(mSelEndT/7)+1; 800 selw = mSelEndT-7*(mSelEndT/7)+1;
801 //qDebug("esl %d ",selw ); 801 //qDebug("esl %d ",selw );
802 int add = 0; 802 int add = 0;
803 if ( colModulo ) { 803 if ( colModulo ) {
804 add = 7 - colModulo; 804 add = 7 - colModulo;
805 if ( selw > add ) 805 if ( selw > add )
806 add = selw - add; 806 add = selw - add;
807 else 807 else
808 add = 0; 808 add = 0;
809 } 809 }
810 //qDebug("add %d ", add); 810 //qDebug("add %d ", add);
811 p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow, 811 p.fillRect(isRTL ? (7-selw)*dwidth : 1, (row+selh)*dheight+addRow,
812 selw*dwidth+add, dheight+1, selcol); 812 selw*dwidth+add, dheight+1, selcol);
813 } 813 }
814 } 814 }
815 } 815 }
816 816
817 // iterate over all days in the matrix and draw the day label in appropriate colors 817 // iterate over all days in the matrix and draw the day label in appropriate colors
818 QColor actcol = mDefaultTextColorShaded; 818 QColor actcol = mDefaultTextColorShaded;
819 p.setPen(actcol); 819 p.setPen(actcol);
820 QPen tmppen; 820 QPen tmppen;
821 for(int i = 0; i < NUMDAYS; i++) { 821 for(int i = 0; i < NUMDAYS; i++) {
822 row = i/7; 822 row = i/7;
823 col = isRTL ? 6-(i-row*7) : i-row*7; 823 col = isRTL ? 6-(i-row*7) : i-row*7;
824 824
825 // if it is the first day of a month switch color from normal to shaded and vice versa 825 // if it is the first day of a month switch color from normal to shaded and vice versa
826 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) { 826 if ( KOGlobals::self()->calendarSystem()->day( days[i] ) == 1) {
827 if (actcol == mDefaultTextColorShaded) { 827 if (actcol == mDefaultTextColorShaded) {
828 actcol = mDefaultTextColor; 828 actcol = mDefaultTextColor;
829 } else { 829 } else {
830 actcol = mDefaultTextColorShaded; 830 actcol = mDefaultTextColorShaded;
831 } 831 }
832 p.setPen(actcol); 832 p.setPen(actcol);
833 } 833 }
834 if (actcol == mDefaultTextColorShaded) { 834 if (actcol == mDefaultTextColorShaded) {
835 if ( ! mouseDown ) { 835 if ( ! mouseDown ) {
836 continue; 836 continue;
837 } 837 }
838 } 838 }
839 //Reset pen color after selected days block 839 //Reset pen color after selected days block
840 if (i == mSelEndT+1) { 840 if (i == mSelEndT+1) {
841 p.setPen(actcol); 841 p.setPen(actcol);
842 } 842 }
843 843
844 // if today then draw rectangle around day 844 // if today then draw rectangle around day
845 if (today == i) { 845 if (today == i) {
846 tmppen = p.pen(); 846 tmppen = p.pen();
847 QPen mTodayPen(p.pen()); 847 QPen mTodayPen(p.pen());
848 if ( daysize.width() < 20 ) 848 if ( daysize.width() < 20 )
849 mTodayPen.setWidth(1); 849 mTodayPen.setWidth(1);
850 else 850 else
851 mTodayPen.setWidth(mTodayMarginWidth); 851 mTodayPen.setWidth(mTodayMarginWidth);
852 //draw red rectangle for holidays 852 //draw red rectangle for holidays
853 if (!mHolidays[i].isNull()) { 853 if (!mHolidays[i].isNull()) {
854 if (actcol == mDefaultTextColor) { 854 if (actcol == mDefaultTextColor) {
855 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor); 855 mTodayPen.setColor(KOPrefs::instance()->mHolidayColor);
856 } else { 856 } else {
857 mTodayPen.setColor(mHolidayColorShaded); 857 mTodayPen.setColor(mHolidayColorShaded);
858 } 858 }
859 } 859 }
860 //draw gray rectangle for today if in selection 860 //draw gray rectangle for today if in selection
861 if (i >= mSelStartT && i <= mSelEndT) { 861 if (i >= mSelStartT && i <= mSelEndT) {
862 QColor grey("grey"); 862 QColor grey("grey");
863 mTodayPen.setColor(grey); 863 mTodayPen.setColor(grey);
864 } 864 }
865 p.setPen(mTodayPen); 865 p.setPen(mTodayPen);
866 866
867 867
868 int addCol = 0; 868 int addCol = 0;
869 int addRow = 0; 869 int addRow = 0;
870 if (rowModulo) { 870 if (rowModulo) {
871 if ( row >= 6 - rowModulo ) 871 if ( row >= 6 - rowModulo )
872 addRow = row - 5 + rowModulo; 872 addRow = row - 5 + rowModulo;
873 } 873 }
874 if ( colModulo ) { 874 if ( colModulo ) {
875 if ( col >= 7 - colModulo ) 875 if ( col >= 7 - colModulo )
876 addCol = col - 6 + colModulo-1; 876 addCol = col - 6 + colModulo-1;
877 } 877 }
878 878
879 addCol += 1; 879 addCol += 1;
880 p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight+1); 880 if ( row == 0 )
881 addRow = 1;
882 p.drawRect(col*dwidth+addCol, row*dheight+addRow, dwidth+1, dheight+1);
881 p.setPen(tmppen); 883 p.setPen(tmppen);
882 } 884 }
883 885
884 // if any events are on that day then draw it using a bold font 886 // if any events are on that day then draw it using a bold font
885 if ( eDays.testBit(i) ) { 887 if ( eDays.testBit(i) ) {
886 QFont myFont = font(); 888 QFont myFont = font();
887 myFont.setBold(true); 889 myFont.setBold(true);
888 p.setFont(myFont); 890 p.setFont(myFont);
889 } 891 }
890 892
891 // if it is a holiday then use the default holiday color 893 // if it is a holiday then use the default holiday color
892 if ( !mHolidays[i].isNull()) { 894 if ( !mHolidays[i].isNull()) {
893 if ( bDays.testBit(i) ) { 895 if ( bDays.testBit(i) ) {
894 if ( hDays.testBit(i) ) 896 if ( hDays.testBit(i) )
895 p.setPen(QColor(Qt::green)); 897 p.setPen(QColor(Qt::green));
896 else 898 else
897 p.setPen(QColor(Qt::green).dark()); 899 p.setPen(QColor(Qt::green).dark());
898 } else { 900 } else {
899 if (actcol == mDefaultTextColor ) { 901 if (actcol == mDefaultTextColor ) {
900 p.setPen(KOPrefs::instance()->mHolidayColor); 902 p.setPen(KOPrefs::instance()->mHolidayColor);
901 } else { 903 } else {
902 p.setPen(mHolidayColorShaded); 904 p.setPen(mHolidayColorShaded);
903 } 905 }
904 } 906 }
905 } 907 }
906 908
907 // draw selected days with special color 909 // draw selected days with special color
908 // DO NOT specially highlight holidays in selection ! 910 // DO NOT specially highlight holidays in selection !
909 if (i >= mSelStartT && i <= mSelEndT) { 911 if (i >= mSelStartT && i <= mSelEndT) {
910 ;//p.setPen(mSelectedDaysColor); 912 ;//p.setPen(mSelectedDaysColor);
911 } 913 }
912 914
913 int addCol = 0; 915 int addCol = 0;
914 int addRow = 0; 916 int addRow = 0;
915 if ( colModulo ) { 917 if ( colModulo ) {
916 if ( col >= 7 - colModulo ) 918 if ( col >= 7 - colModulo )
917 addCol = col - 7 + colModulo; 919 addCol = col - 7 + colModulo;
918 } 920 }
919 if ( rowModulo ) { 921 if ( rowModulo ) {
920 if ( row >= 6 - rowModulo ) 922 if ( row >= 6 - rowModulo )
921 addRow = row - 5 + rowModulo; 923 addRow = row - 5 + rowModulo;
922 } 924 }
923 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow); 925 //qDebug("add %d %d -- %d %d ", col, addCol, row, addRow);
924 ++addCol;//++addCol; 926 ++addCol;//++addCol;
925 if ( row == 0) 927 if ( row == 0)
926 addRow = 1; 928 addRow = 1;
927 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight, 929 p.drawText(col*dwidth+addCol, row*dheight+addRow, dwidth, dheight,
928 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]); 930 Qt::AlignHCenter | Qt::AlignVCenter, daylbls[i]);
929 931
930 // reset color to actual color 932 // reset color to actual color
931 if (!mHolidays[i].isNull()) { 933 if (!mHolidays[i].isNull()) {
932 p.setPen(actcol); 934 p.setPen(actcol);
933 } 935 }
934 // reset bold font to plain font 936 // reset bold font to plain font
935 if ( eDays.testBit(i)) { 937 if ( eDays.testBit(i)) {
936 QFont myFont = font(); 938 QFont myFont = font();
937 myFont.setBold(false); 939 myFont.setBold(false);
938 p.setFont(myFont); 940 p.setFont(myFont);
939 } 941 }
940 } 942 }
941 } else { 943 } else {
942 //qDebug("NO redraw "); 944 //qDebug("NO redraw ");
943 } 945 }
944 bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP); 946 bitBlt (this, 0, 0, &myPix, 0 ,0,width(), height() ,CopyROP);
945 mRedrawNeeded = false; 947 mRedrawNeeded = false;
946} 948}
947 949
948// ---------------------------------------------------------------------------- 950// ----------------------------------------------------------------------------
949// R E SI Z E E V E N T H A N D L I N G 951// R E SI Z E E V E N T H A N D L I N G
950// ---------------------------------------------------------------------------- 952// ----------------------------------------------------------------------------
951 953
952void KODayMatrix::resizeEvent(QResizeEvent *) 954void KODayMatrix::resizeEvent(QResizeEvent *)
953{ 955{
954 QRect sz = frameRect(); 956 QRect sz = frameRect();
955 daysize.setHeight(sz.height()*7 / NUMDAYS); 957 daysize.setHeight(sz.height()*7 / NUMDAYS);
956 daysize.setWidth(sz.width() / 7); 958 daysize.setWidth(sz.width() / 7);
957} 959}
958 960
959QSize KODayMatrix::sizeHint() const 961QSize KODayMatrix::sizeHint() const
960{ 962{
961 963
962 QFontMetrics fm ( font() ); 964 QFontMetrics fm ( font() );
963 int wid = fm.width( "30") *7+3; 965 int wid = fm.width( "30") *7+3;
964 int hei = fm.height() * 6+3; 966 int hei = fm.height() * 6+3;
965 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei); 967 //qDebug("KODayMatrix::sizeHint()********************* %d %d", wid , hei);
966 return QSize ( wid, hei ); 968 return QSize ( wid, hei );
967 969
968} 970}