summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagenda.cpp14
-rw-r--r--korganizer/koagenda.h1
-rw-r--r--korganizer/koagendaview.cpp2
3 files changed, 12 insertions, 5 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index 7e9fa71..7d9d674 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -1,2056 +1,2062 @@
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 Marcus Bains line. 5 Marcus Bains line.
6 Copyright (c) 2001 Ali Rahimi 6 Copyright (c) 2001 Ali Rahimi
7 7
8 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or 10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version. 11 (at your option) any later version.
12 12
13 This program is distributed in the hope that it will be useful, 13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details. 16 GNU General Public License for more details.
17 17
18 You should have received a copy of the GNU General Public License 18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software 19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
21 21
22 As a special exception, permission is given to link this program 22 As a special exception, permission is given to link this program
23 with any edition of Qt, and distribute the resulting executable, 23 with any edition of Qt, and distribute the resulting executable,
24 without including the source code for Qt in the source distribution. 24 without including the source code for Qt in the source distribution.
25*/ 25*/
26 26
27#ifndef _WIN32_ 27#ifndef _WIN32_
28#define protected public 28#define protected public
29#include <qwidget.h> 29#include <qwidget.h>
30#undef protected 30#undef protected
31#endif 31#endif
32#include <qintdict.h> 32#include <qintdict.h>
33#include <qdatetime.h> 33#include <qdatetime.h>
34#include <qapplication.h> 34#include <qapplication.h>
35#include <qpopupmenu.h> 35#include <qpopupmenu.h>
36#include <qcursor.h> 36#include <qcursor.h>
37#include <qpainter.h> 37#include <qpainter.h>
38 38
39#include <kdebug.h> 39#include <kdebug.h>
40#include <klocale.h> 40#include <klocale.h>
41#include <kiconloader.h> 41#include <kiconloader.h>
42#include <kglobal.h> 42#include <kglobal.h>
43 43
44#include "koagendaitem.h" 44#include "koagendaitem.h"
45#include "koprefs.h" 45#include "koprefs.h"
46#include "koglobals.h" 46#include "koglobals.h"
47 47
48#include "koagenda.h" 48#include "koagenda.h"
49 49
50#include <libkcal/event.h> 50#include <libkcal/event.h>
51#include <libkcal/todo.h> 51#include <libkcal/todo.h>
52 52
53#ifndef DESKTOP_VERSION 53#ifndef DESKTOP_VERSION
54#include <qpe/qpeapplication.h> 54#include <qpe/qpeapplication.h>
55#endif 55#endif
56 56
57//extern bool globalFlagBlockPainting; 57//extern bool globalFlagBlockPainting;
58extern int globalFlagBlockAgenda; 58extern int globalFlagBlockAgenda;
59extern int globalFlagBlockAgendaItemPaint; 59extern int globalFlagBlockAgendaItemPaint;
60extern int globalFlagBlockAgendaItemUpdate; 60extern int globalFlagBlockAgendaItemUpdate;
61extern int globalFlagBlockStartup; 61extern int globalFlagBlockStartup;
62 62
63 63
64//////////////////////////////////////////////////////////////////////////// 64////////////////////////////////////////////////////////////////////////////
65MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name) 65MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name)
66 : QFrame(_agenda->viewport(),name), agenda(_agenda) 66 : QFrame(_agenda->viewport(),name), agenda(_agenda)
67{ 67{
68 setLineWidth(0); 68 setLineWidth(0);
69 setMargin(0); 69 setMargin(0);
70 setBackgroundColor(Qt::red); 70 setBackgroundColor(Qt::red);
71 minutes = new QTimer(this); 71 minutes = new QTimer(this);
72 connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc())); 72 connect(minutes, SIGNAL(timeout()), this, SLOT(updateLoc()));
73 minutes->start(0, true); 73 minutes->start(0, true);
74 mTimeBox = new QLabel(this); 74 mTimeBox = new QLabel(this);
75 mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom); 75 mTimeBox->setAlignment(Qt::AlignRight | Qt::AlignBottom);
76 QPalette pal = mTimeBox->palette(); 76 QPalette pal = mTimeBox->palette();
77 pal.setColor(QColorGroup::Foreground, Qt::red); 77 pal.setColor(QColorGroup::Foreground, Qt::red);
78 mTimeBox->setPalette(pal); 78 mTimeBox->setPalette(pal);
79 //mTimeBox->setAutoMask(true); 79 //mTimeBox->setAutoMask(true);
80 80
81 agenda->addChild(mTimeBox); 81 agenda->addChild(mTimeBox);
82 82
83 oldToday = -1; 83 oldToday = -1;
84} 84}
85 85
86MarcusBains::~MarcusBains() 86MarcusBains::~MarcusBains()
87{ 87{
88 //delete minutes; 88 //delete minutes;
89} 89}
90void MarcusBains::hideMe() 90void MarcusBains::hideMe()
91{ 91{
92 hide(); mTimeBox->hide(); 92 hide(); mTimeBox->hide();
93} 93}
94int MarcusBains::todayColumn() 94int MarcusBains::todayColumn()
95{ 95{
96 QDate currentDate = QDate::currentDate(); 96 QDate currentDate = QDate::currentDate();
97 97
98 DateList dateList = agenda->dateList(); 98 DateList dateList = agenda->dateList();
99 DateList::ConstIterator it; 99 DateList::ConstIterator it;
100 int col = 0; 100 int col = 0;
101 for(it = dateList.begin(); it != dateList.end(); ++it) { 101 for(it = dateList.begin(); it != dateList.end(); ++it) {
102 if((*it) == currentDate) 102 if((*it) == currentDate)
103 return KOGlobals::self()->reverseLayout() ? 103 return KOGlobals::self()->reverseLayout() ?
104 agenda->columns() - 1 - col : col; 104 agenda->columns() - 1 - col : col;
105 ++col; 105 ++col;
106 } 106 }
107 107
108 return -1; 108 return -1;
109} 109}
110void MarcusBains::updateLoc() 110void MarcusBains::updateLoc()
111{ 111{
112 updateLocation(); 112 if ( !agenda->invalidPixmap() )
113 updateLocation();
113} 114}
114void MarcusBains::updateLocation(bool recalculate) 115void MarcusBains::updateLocation(bool recalculate)
115{ 116{
116 117
117 QTime tim = QTime::currentTime(); 118 QTime tim = QTime::currentTime();
118 //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1()); 119 //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1());
119 if((tim.hour() == 0) && (oldTime.hour()==23)) 120 if((tim.hour() == 0) && (oldTime.hour()==23))
120 recalculate = true; 121 recalculate = true;
121 122
122 int mins = tim.hour()*60 + tim.minute(); 123 int mins = tim.hour()*60 + tim.minute();
123 int minutesPerCell = 24 * 60 / agenda->rows(); 124 int minutesPerCell = 24 * 60 / agenda->rows();
124 int y = mins*agenda->gridSpacingY()/minutesPerCell; 125 int y = mins*agenda->gridSpacingY()/minutesPerCell;
125 int today = recalculate ? todayColumn() : oldToday; 126 int today = recalculate ? todayColumn() : oldToday;
126 int x = agenda->gridSpacingX()*today; 127 int x = agenda->gridSpacingX()*today;
127 bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled); 128 bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled);
128 129
129 oldTime = tim; 130 oldTime = tim;
130 oldToday = today; 131 oldToday = today;
131 132
132 if(disabled || (today<0)) { 133 if(disabled || (today<0)) {
133 hide(); mTimeBox->hide(); 134 hide(); mTimeBox->hide();
134 return; 135 return;
135 } else { 136 } else {
136 show(); mTimeBox->show(); 137 show(); mTimeBox->show();
137 } 138 }
138 139
139 if(recalculate) 140 if(recalculate)
140 setFixedSize(agenda->gridSpacingX(),1); 141 setFixedSize(agenda->gridSpacingX(),1);
141 agenda->moveChild(this, x, y); 142 agenda->moveChild(this, x, y);
142 raise(); 143 raise();
143 144
144 if(recalculate) 145 if(recalculate)
145 //mTimeBox->setFont(QFont("helvetica",10)); 146 //mTimeBox->setFont(QFont("helvetica",10));
146 mTimeBox->setFont(KOPrefs::instance()->mMarcusBainsFont); 147 mTimeBox->setFont(KOPrefs::instance()->mMarcusBainsFont);
147 148
148 mTimeBox->setText(KGlobal::locale()->formatTime(tim, KOPrefs::instance()->mMarcusBainsShowSeconds)); 149 mTimeBox->setText(KGlobal::locale()->formatTime(tim, KOPrefs::instance()->mMarcusBainsShowSeconds));
149 mTimeBox->adjustSize(); 150 mTimeBox->adjustSize();
150 // the -2 below is there because there is a bug in this program 151 // the -2 below is there because there is a bug in this program
151 // somewhere, where the last column of this widget is a few pixels 152 // somewhere, where the last column of this widget is a few pixels
152 // narrower than the other columns. 153 // narrower than the other columns.
153 int offs = (today==agenda->columns()-1) ? -4 : 0; 154 int offs = (today==agenda->columns()-1) ? -4 : 0;
154 agenda->moveChild(mTimeBox, 155 agenda->moveChild(mTimeBox,
155 x+agenda->gridSpacingX()-mTimeBox->width()+offs-1, 156 x+agenda->gridSpacingX()-mTimeBox->width()+offs-1,
156 y-mTimeBox->height()); 157 y-mTimeBox->height());
157 mTimeBox->raise(); 158 mTimeBox->raise();
158 //mTimeBox->setAutoMask(true); 159 //mTimeBox->setAutoMask(true);
159 int secs = QTime::currentTime().second(); 160 int secs = QTime::currentTime().second();
160 minutes->start( (60 - secs +1)*1000 ,true); 161 minutes->start( (60 - secs +1)*1000 ,true);
161} 162}
162 163
163 164
164//////////////////////////////////////////////////////////////////////////// 165////////////////////////////////////////////////////////////////////////////
165 166
166 167
167/* 168/*
168 Create an agenda widget with rows rows and columns columns. 169 Create an agenda widget with rows rows and columns columns.
169*/ 170*/
170KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent, 171KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent,
171 const char *name,WFlags f) : 172 const char *name,WFlags f) :
172 QScrollView(parent,name,f) 173 QScrollView(parent,name,f)
173{ 174{
174 175
175 mAllAgendaPopup = 0; 176 mAllAgendaPopup = 0;
176 mColumns = columns; 177 mColumns = columns;
177 mRows = rows; 178 mRows = rows;
178 mGridSpacingY = rowSize; 179 mGridSpacingY = rowSize;
179 mAllDayMode = false; 180 mAllDayMode = false;
180#ifndef DESKTOP_VERSION 181#ifndef DESKTOP_VERSION
181 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 182 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
182#endif 183#endif
183 mHolidayMask = 0; 184 mHolidayMask = 0;
184 init(); 185 init();
185 connect ( this, SIGNAL (contentsMoving ( int , int ) ), this, SLOT ( slotContentMove(int,int)) ); 186 connect ( this, SIGNAL (contentsMoving ( int , int ) ), this, SLOT ( slotContentMove(int,int)) );
186} 187}
187 188
188/* 189/*
189 Create an agenda widget with columns columns and one row. This is used for 190 Create an agenda widget with columns columns and one row. This is used for
190 all-day events. 191 all-day events.
191*/ 192*/
192KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) : 193KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) :
193 QScrollView(parent,name,f) 194 QScrollView(parent,name,f)
194{ 195{
195 mAllAgendaPopup = 0; 196 mAllAgendaPopup = 0;
196 blockResize = false; 197 blockResize = false;
197 mColumns = columns; 198 mColumns = columns;
198 mRows = 1; 199 mRows = 1;
199 //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize); 200 //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize);
200 mGridSpacingY = KOPrefs::instance()->mAllDaySize; 201 mGridSpacingY = KOPrefs::instance()->mAllDaySize;
201 mAllDayMode = true; 202 mAllDayMode = true;
202#ifndef DESKTOP_VERSION 203#ifndef DESKTOP_VERSION
203 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 204 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
204#endif 205#endif
205 mHolidayMask = 0; 206 mHolidayMask = 0;
206 init(); 207 init();
207} 208}
208 209
209 210
210KOAgenda::~KOAgenda() 211KOAgenda::~KOAgenda()
211{ 212{
212 if(mMarcusBains) delete mMarcusBains; 213 if(mMarcusBains) delete mMarcusBains;
213 214
214} 215}
215 216
216Incidence *KOAgenda::selectedIncidence() const 217Incidence *KOAgenda::selectedIncidence() const
217{ 218{
218 return (mSelectedItem ? mSelectedItem->incidence() : 0); 219 return (mSelectedItem ? mSelectedItem->incidence() : 0);
219} 220}
220 221
221 222
222QDate KOAgenda::selectedIncidenceDate() const 223QDate KOAgenda::selectedIncidenceDate() const
223{ 224{
224 return (mSelectedItem ? mSelectedItem->itemDate() : QDate()); 225 return (mSelectedItem ? mSelectedItem->itemDate() : QDate());
225} 226}
226 227
227 228
228void KOAgenda::init() 229void KOAgenda::init()
229{ 230{
230 mPopupTimer = new QTimer(this); 231 mPopupTimer = new QTimer(this);
231 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); 232 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu()));
232 233
233 mNewItemPopup = new QPopupMenu( this ); 234 mNewItemPopup = new QPopupMenu( this );
234 connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) ); 235 connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) );
235 QString pathString = ""; 236 QString pathString = "";
236 if ( !KOPrefs::instance()->mToolBarMiniIcons ) { 237 if ( !KOPrefs::instance()->mToolBarMiniIcons ) {
237 if ( QApplication::desktop()->width() < 480 ) 238 if ( QApplication::desktop()->width() < 480 )
238 pathString += "icons16/"; 239 pathString += "icons16/";
239 } else 240 } else
240 pathString += "iconsmini/"; 241 pathString += "iconsmini/";
241 242
242 mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."), 1 ); 243 mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."), 1 );
243 mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 ); 244 mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 );
244 mNewItemPopup->insertSeparator ( ); 245 mNewItemPopup->insertSeparator ( );
245 mNewItemPopup->insertItem ( SmallIcon( pathString +"day" ), i18n("Day view"),3 ); 246 mNewItemPopup->insertItem ( SmallIcon( pathString +"day" ), i18n("Day view"),3 );
246 mNewItemPopup->insertItem ( SmallIcon( pathString +"xdays" ), i18n("Next days"),8 ); 247 mNewItemPopup->insertItem ( SmallIcon( pathString +"xdays" ), i18n("Next days"),8 );
247 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next week"),4 ); 248 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next week"),4 );
248 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next two weeks"),5 ); 249 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next two weeks"),5 );
249 mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("This month"),6 ); 250 mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("This month"),6 );
250 mNewItemPopup->insertItem ( SmallIcon( pathString +"journal" ), i18n("Journal view"),7 ); 251 mNewItemPopup->insertItem ( SmallIcon( pathString +"journal" ), i18n("Journal view"),7 );
251#ifndef _WIN32_ 252#ifndef _WIN32_
252 int wflags = viewport()-> getWFlags() |WRepaintNoErase;//WResizeNoErase 253 int wflags = viewport()-> getWFlags() |WRepaintNoErase;//WResizeNoErase
253 viewport()->setWFlags ( wflags); 254 viewport()->setWFlags ( wflags);
254#endif 255#endif
255 mGridSpacingX = 80; 256 mGridSpacingX = 80;
256 mResizeBorderWidth = 8; 257 mResizeBorderWidth = 8;
257 mScrollBorderWidth = 8; 258 mScrollBorderWidth = 8;
258 mScrollDelay = 30; 259 mScrollDelay = 30;
259 mScrollOffset = 10; 260 mScrollOffset = 10;
260 mPaintPixmap.resize( 20,20); 261 mPaintPixmap.resize( 20,20);
261 //enableClipper(true); 262 //enableClipper(true);
262 263
263 // Grab key strokes for keyboard navigation of agenda. Seems to have no 264 // Grab key strokes for keyboard navigation of agenda. Seems to have no
264 // effect. Has to be fixed. 265 // effect. Has to be fixed.
265 setFocusPolicy(WheelFocus); 266 setFocusPolicy(WheelFocus);
266 267
267 connect(&mScrollUpTimer,SIGNAL(timeout()),SLOT(scrollUp())); 268 connect(&mScrollUpTimer,SIGNAL(timeout()),SLOT(scrollUp()));
268 connect(&mScrollDownTimer,SIGNAL(timeout()),SLOT(scrollDown())); 269 connect(&mScrollDownTimer,SIGNAL(timeout()),SLOT(scrollDown()));
269 connect(&mResizeTimer,SIGNAL(timeout()),SLOT(finishResize())); 270 connect(&mResizeTimer,SIGNAL(timeout()),SLOT(finishResize()));
270 271
271 mStartCellX = 0; 272 mStartCellX = 0;
272 mStartCellY = 0; 273 mStartCellY = 0;
273 mCurrentCellX = 0; 274 mCurrentCellX = 0;
274 mCurrentCellY = 0; 275 mCurrentCellY = 0;
275 276
276 mSelectionCellX = 0; 277 mSelectionCellX = 0;
277 mSelectionYTop = 0; 278 mSelectionYTop = 0;
278 mSelectionHeight = 0; 279 mSelectionHeight = 0;
279 280
280 mOldLowerScrollValue = -1; 281 mOldLowerScrollValue = -1;
281 mOldUpperScrollValue = -1; 282 mOldUpperScrollValue = -1;
282 283
283 mClickedItem = 0; 284 mClickedItem = 0;
284 285
285 mActionItem = 0; 286 mActionItem = 0;
286 mActionType = NOP; 287 mActionType = NOP;
287 mItemMoved = false; 288 mItemMoved = false;
288 289
289 mSelectedItem = 0; 290 mSelectedItem = 0;
290 291
291 // mItems.setAutoDelete(true); 292 // mItems.setAutoDelete(true);
292 293
293 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 294 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
294 295
295 viewport()->update(); 296 viewport()->update();
296 297
297 setMinimumSize(30, 1); 298 setMinimumSize(30, 1);
298// setMaximumHeight(mGridSpacingY * mRows + 5); 299// setMaximumHeight(mGridSpacingY * mRows + 5);
299 300
300 // Disable horizontal scrollbar. This is a hack. The geometry should be 301 // Disable horizontal scrollbar. This is a hack. The geometry should be
301 // controlled in a way that the contents horizontally always fits. Then it is 302 // controlled in a way that the contents horizontally always fits. Then it is
302 // not necessary to turn off the scrollbar. 303 // not necessary to turn off the scrollbar.
303 setHScrollBarMode(AlwaysOff); 304 setHScrollBarMode(AlwaysOff);
304 if ( ! mAllDayMode ) 305 if ( ! mAllDayMode )
305 setVScrollBarMode(AlwaysOn); 306 setVScrollBarMode(AlwaysOn);
306 else 307 else
307 setVScrollBarMode(AlwaysOff); 308 setVScrollBarMode(AlwaysOff);
308 309
309 setStartHour(KOPrefs::instance()->mDayBegins); 310 setStartHour(KOPrefs::instance()->mDayBegins);
310 311
311 calculateWorkingHours(); 312 calculateWorkingHours();
312 313
313 connect(verticalScrollBar(),SIGNAL(valueChanged(int)), 314 connect(verticalScrollBar(),SIGNAL(valueChanged(int)),
314 SLOT(checkScrollBoundaries(int))); 315 SLOT(checkScrollBoundaries(int)));
315 316
316 // Create the Marcus Bains line. 317 // Create the Marcus Bains line.
317 if(mAllDayMode) 318 if(mAllDayMode)
318 mMarcusBains = 0; 319 mMarcusBains = 0;
319 else { 320 else {
320 mMarcusBains = new MarcusBains(this); 321 mMarcusBains = new MarcusBains(this);
321 addChild(mMarcusBains); 322 addChild(mMarcusBains);
322 } 323 }
323 mPopupKind = 0; 324 mPopupKind = 0;
324 mPopupItem = 0; 325 mPopupItem = 0;
325 mInvalidPixmap = false; 326 mInvalidPixmap = false;
326 327
327} 328}
328 329
329void KOAgenda::shrinkPixmap() 330void KOAgenda::shrinkPixmap()
330{ 331{
331 mPaintPixmap.resize( 20,20); 332 mPaintPixmap.resize( 20,20);
332 mInvalidPixmap = true; 333 mInvalidPixmap = true;
333} 334}
334void KOAgenda::slotContentMove(int,int) 335void KOAgenda::slotContentMove(int,int)
335{ 336{
336 emit sendPing(); 337 emit sendPing();
337 if ( mActionType == NOP ) 338 if ( mActionType == NOP )
338 slotClearSelection(); 339 slotClearSelection();
339 if ( mSelectedItem && !mActionItem ) { 340 if ( mSelectedItem && !mActionItem ) {
340 deselectItem(); 341 deselectItem();
341 emit incidenceSelected( 0 ); 342 emit incidenceSelected( 0 );
342 } 343 }
343} 344}
344void KOAgenda::clear() 345void KOAgenda::clear()
345{ 346{
346 KOAgendaItem *item; 347 KOAgendaItem *item;
347 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 348 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
348 mUnusedItems.append( item ); 349 mUnusedItems.append( item );
349 //item->hide(); 350 //item->hide();
350 } 351 }
351 mItems.clear(); 352 mItems.clear();
352 mSelectedItem = 0; 353 mSelectedItem = 0;
353 clearSelection(); 354 clearSelection();
354} 355}
355 356
356void KOAgenda::clearSelection() 357void KOAgenda::clearSelection()
357{ 358{
358 mSelectionCellX = 0; 359 mSelectionCellX = 0;
359 mSelectionYTop = 0; 360 mSelectionYTop = 0;
360 mSelectionHeight = 0; 361 mSelectionHeight = 0;
361} 362}
362 363
363void KOAgenda::marcus_bains() 364void KOAgenda::marcus_bains()
364{ 365{
365 if(mMarcusBains) mMarcusBains->updateLocation(true); 366 if(mMarcusBains) mMarcusBains->updateLocation(true);
366} 367}
367 368
368 369
369void KOAgenda::changeColumns(int columns) 370void KOAgenda::changeColumns(int columns)
370{ 371{
371 if (columns == 0) { 372 if (columns == 0) {
372 qDebug("KOAgenda::changeColumns() called with argument 0 "); 373 qDebug("KOAgenda::changeColumns() called with argument 0 ");
373 return; 374 return;
374 } 375 }
375 clear(); 376 clear();
376 mColumns = columns; 377 mColumns = columns;
377 computeSizes(); 378 computeSizes();
378 if(mMarcusBains) mMarcusBains->hideMe(); 379 if(mMarcusBains) mMarcusBains->hideMe();
379} 380}
380 381
381/* 382/*
382 This is the eventFilter function, which gets all events from the KOAgendaItems 383 This is the eventFilter function, which gets all events from the KOAgendaItems
383 contained in the agenda. It has to handle moving and resizing for all items. 384 contained in the agenda. It has to handle moving and resizing for all items.
384*/ 385*/
385bool KOAgenda::eventFilter ( QObject *object, QEvent *event ) 386bool KOAgenda::eventFilter ( QObject *object, QEvent *event )
386{ 387{
387 // kdDebug() << "KOAgenda::eventFilter" << endl; 388 // kdDebug() << "KOAgenda::eventFilter" << endl;
388 switch(event->type()) { 389 switch(event->type()) {
389 case QEvent::MouseButtonPress: 390 case QEvent::MouseButtonPress:
390 case QEvent::MouseButtonDblClick: 391 case QEvent::MouseButtonDblClick:
391 case QEvent::MouseButtonRelease: 392 case QEvent::MouseButtonRelease:
392 case QEvent::MouseMove: 393 case QEvent::MouseMove:
393 return eventFilter_mouse(object, static_cast<QMouseEvent *>(event)); 394 return eventFilter_mouse(object, static_cast<QMouseEvent *>(event));
394 395
395 case (QEvent::Leave): 396 case (QEvent::Leave):
396 if (!mActionItem) 397 if (!mActionItem)
397 setCursor(arrowCursor); 398 setCursor(arrowCursor);
398 return true; 399 return true;
399 400
400 default: 401 default:
401 return QScrollView::eventFilter(object,event); 402 return QScrollView::eventFilter(object,event);
402 } 403 }
403} 404}
404void KOAgenda::popupMenu() 405void KOAgenda::popupMenu()
405{ 406{
406 mPopupTimer->stop(); 407 mPopupTimer->stop();
407 if ( mPopupKind == 1 || mPopupKind == 3 ) { 408 if ( mPopupKind == 1 || mPopupKind == 3 ) {
408 if (mActionItem ) { 409 if (mActionItem ) {
409 endItemAction(); 410 endItemAction();
410 } 411 }
411 mLeftMouseDown = false; // no more leftMouse computation 412 mLeftMouseDown = false; // no more leftMouse computation
412 if (mPopupItem) { 413 if (mPopupItem) {
413 //mClickedItem = mPopupItem; 414 //mClickedItem = mPopupItem;
414 selectItem(mPopupItem); 415 selectItem(mPopupItem);
415 if ( mAllAgendaPopup && KOPrefs::instance()->mBlockPopupMenu && mPopupKind == 1 ) 416 if ( mAllAgendaPopup && KOPrefs::instance()->mBlockPopupMenu && mPopupKind == 1 )
416 mAllAgendaPopup->installEventFilter( this ); 417 mAllAgendaPopup->installEventFilter( this );
417 emit showIncidencePopupSignal(mPopupItem->incidence()); 418 emit showIncidencePopupSignal(mPopupItem->incidence());
418 419
419 } 420 }
420 } else if ( mPopupKind == 2 || mPopupKind == 4 ) { 421 } else if ( mPopupKind == 2 || mPopupKind == 4 ) {
421 if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action 422 if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action
422 endSelectAction( false ); // do not emit new event signal 423 endSelectAction( false ); // do not emit new event signal
423 mLeftMouseDown = false; // no more leftMouse computation 424 mLeftMouseDown = false; // no more leftMouse computation
424 } 425 }
425 if ( KOPrefs::instance()->mBlockPopupMenu && mPopupKind == 2 ) 426 if ( KOPrefs::instance()->mBlockPopupMenu && mPopupKind == 2 )
426 mNewItemPopup->installEventFilter( this ); 427 mNewItemPopup->installEventFilter( this );
427 mNewItemPopup->popup( mPopupPos); 428 mNewItemPopup->popup( mPopupPos);
428 429
429 } 430 }
430 mLeftMouseDown = false; 431 mLeftMouseDown = false;
431 mPopupItem = 0; 432 mPopupItem = 0;
432 mPopupKind = 0; 433 mPopupKind = 0;
433} 434}
434void KOAgenda::categoryChanged(Incidence * inc) 435void KOAgenda::categoryChanged(Incidence * inc)
435{ 436{
436 KOAgendaItem *item; 437 KOAgendaItem *item;
437 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 438 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
438 if ( item->incidence() == inc ) { 439 if ( item->incidence() == inc ) {
439 item->initColor (); 440 item->initColor ();
440 item->updateItem(); 441 item->updateItem();
441 } 442 }
442 } 443 }
443} 444}
445bool KOAgenda::invalidPixmap()
446{
447 return mInvalidPixmap;
448}
444bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me) 449bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me)
445{ 450{
446 451
447 if ( mInvalidPixmap ) { 452 if ( mInvalidPixmap ) {
448 mInvalidPixmap = false; 453 mInvalidPixmap = false;
449 qDebug("KO: Upsizing Pixmaps "); 454 qDebug("KO: efm Upsizing Pixmaps %s", QDateTime::currentDateTime().toString().latin1());
450 computeSizes(); 455 computeSizes();
451 emit updateViewSignal(); 456 emit updateViewSignal();
452 return true; 457 return true;
453 } 458 }
454 emit sendPing(); 459 emit sendPing();
455 static int startX = 0; 460 static int startX = 0;
456 static int startY = 0; 461 static int startY = 0;
457 int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 7 : 9 ); 462 int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 7 : 9 );
458 static bool blockMoving = true; 463 static bool blockMoving = true;
459 464
460 //qDebug("KOAgenda::eventFilter_mous "); 465 //qDebug("KOAgenda::eventFilter_mous ");
461 if ( object == mNewItemPopup ) { 466 if ( object == mNewItemPopup ) {
462 //qDebug("mNewItemPopup "); 467 //qDebug("mNewItemPopup ");
463 if ( me->type() == QEvent::MouseButtonRelease ) { 468 if ( me->type() == QEvent::MouseButtonRelease ) {
464 mNewItemPopup->removeEventFilter( this ); 469 mNewItemPopup->removeEventFilter( this );
465 int dX = me->globalPos().x() - mPopupPos.x();; 470 int dX = me->globalPos().x() - mPopupPos.x();;
466 if ( dX < 0 ) 471 if ( dX < 0 )
467 dX = -dX; 472 dX = -dX;
468 int dY = me->globalPos().y() - mPopupPos.y(); 473 int dY = me->globalPos().y() - mPopupPos.y();
469 if ( dY < 0 ) 474 if ( dY < 0 )
470 dY = -dY; 475 dY = -dY;
471 if ( dX > blockmoveDist || dY > blockmoveDist ) { 476 if ( dX > blockmoveDist || dY > blockmoveDist ) {
472 mNewItemPopup->hide(); 477 mNewItemPopup->hide();
473 } 478 }
474 } 479 }
475 return true; 480 return true;
476 } 481 }
477 if ( object == mAllAgendaPopup ) { 482 if ( object == mAllAgendaPopup ) {
478 //qDebug(" mAllAgendaPopup "); 483 //qDebug(" mAllAgendaPopup ");
479 if ( me->type() == QEvent::MouseButtonRelease ) { 484 if ( me->type() == QEvent::MouseButtonRelease ) {
480 mAllAgendaPopup->removeEventFilter( this ); 485 mAllAgendaPopup->removeEventFilter( this );
481 int dX = me->globalPos().x() - mPopupPos.x();; 486 int dX = me->globalPos().x() - mPopupPos.x();;
482 if ( dX < 0 ) 487 if ( dX < 0 )
483 dX = -dX; 488 dX = -dX;
484 int dY = me->globalPos().y() - mPopupPos.y(); 489 int dY = me->globalPos().y() - mPopupPos.y();
485 if ( dY < 0 ) 490 if ( dY < 0 )
486 dY = -dY; 491 dY = -dY;
487 if ( dX > blockmoveDist || dY > blockmoveDist ) { 492 if ( dX > blockmoveDist || dY > blockmoveDist ) {
488 mAllAgendaPopup->hide(); 493 mAllAgendaPopup->hide();
489 } 494 }
490 } 495 }
491 return true; 496 return true;
492 } 497 }
493 QPoint viewportPos; 498 QPoint viewportPos;
494 if (object != viewport()) { 499 if (object != viewport()) {
495 blockmoveDist = blockmoveDist*2; 500 blockmoveDist = blockmoveDist*2;
496 viewportPos = ((QWidget *)object)->mapToParent(me->pos()); 501 viewportPos = ((QWidget *)object)->mapToParent(me->pos());
497 } else { 502 } else {
498 viewportPos = me->pos(); 503 viewportPos = me->pos();
499 } 504 }
500 bool objIsNotViewport = (object != viewport()); 505 bool objIsNotViewport = (object != viewport());
501 bool leftButt = false; 506 bool leftButt = false;
502#ifdef DESKTOP_VERSION 507#ifdef DESKTOP_VERSION
503 leftButt = (me->button() == LeftButton); 508 leftButt = (me->button() == LeftButton);
504#endif 509#endif
505 switch (me->type()) { 510 switch (me->type()) {
506 case QEvent::MouseButtonPress: 511 case QEvent::MouseButtonPress:
507 if (me->button() == LeftButton) { 512 if (me->button() == LeftButton) {
508 mPopupTimer->start( 600 ); 513 mPopupTimer->start( 600 );
509 mLeftMouseDown = true; 514 mLeftMouseDown = true;
510 } 515 }
511 blockMoving = true; 516 blockMoving = true;
512 startX = viewportPos.x(); 517 startX = viewportPos.x();
513 startY = viewportPos.y(); 518 startY = viewportPos.y();
514 mPopupPos = me->globalPos(); 519 mPopupPos = me->globalPos();
515 if ( objIsNotViewport && !leftButt ) { 520 if ( objIsNotViewport && !leftButt ) {
516 KOAgendaItem * tempItem = (KOAgendaItem *)object; 521 KOAgendaItem * tempItem = (KOAgendaItem *)object;
517 if (mAllDayMode) { 522 if (mAllDayMode) {
518 if ( tempItem->height() > 10 ) { 523 if ( tempItem->height() > 10 ) {
519 int minV = tempItem->height()/4; 524 int minV = tempItem->height()/4;
520 if ( minV > (blockmoveDist/2)-2 ) { 525 if ( minV > (blockmoveDist/2)-2 ) {
521 if ( minV > blockmoveDist ) 526 if ( minV > blockmoveDist )
522 minV = blockmoveDist; 527 minV = blockmoveDist;
523 else 528 else
524 minV = (blockmoveDist/2); 529 minV = (blockmoveDist/2);
525 } 530 }
526 bool border = false; 531 bool border = false;
527 int diff = tempItem->y() - viewportPos.y(); 532 int diff = tempItem->y() - viewportPos.y();
528 if ( diff < 0 ) 533 if ( diff < 0 )
529 diff *= -1; 534 diff *= -1;
530 if ( diff < minV ) { 535 if ( diff < minV ) {
531 border = true; 536 border = true;
532 objIsNotViewport = false; 537 objIsNotViewport = false;
533 } 538 }
534 if ( ! border ) { 539 if ( ! border ) {
535 diff = tempItem->y() + tempItem->height()- viewportPos.y(); 540 diff = tempItem->y() + tempItem->height()- viewportPos.y();
536 if ( diff < 0 ) 541 if ( diff < 0 )
537 diff *= -1; 542 diff *= -1;
538 if ( diff < minV ) { 543 if ( diff < minV ) {
539 border = true; 544 border = true;
540 objIsNotViewport = false; 545 objIsNotViewport = false;
541 } 546 }
542 } 547 }
543 } 548 }
544 } else { // not allday 549 } else { // not allday
545 if ( tempItem->width() > 10 ) { 550 if ( tempItem->width() > 10 ) {
546 int minH = tempItem->width()/4; 551 int minH = tempItem->width()/4;
547 if ( minH > (blockmoveDist/2)-2 ) { 552 if ( minH > (blockmoveDist/2)-2 ) {
548 if ( minH > blockmoveDist ) 553 if ( minH > blockmoveDist )
549 minH = blockmoveDist; 554 minH = blockmoveDist;
550 else 555 else
551 minH = (blockmoveDist/2); 556 minH = (blockmoveDist/2);
552 } 557 }
553 bool border = false; 558 bool border = false;
554 int diff = tempItem->x() - viewportPos.x(); 559 int diff = tempItem->x() - viewportPos.x();
555 if ( diff < 0 ) 560 if ( diff < 0 )
556 diff *= -1; 561 diff *= -1;
557 if ( diff < minH ) { 562 if ( diff < minH ) {
558 border = true; 563 border = true;
559 objIsNotViewport = false; 564 objIsNotViewport = false;
560 } 565 }
561 if ( ! border ) { 566 if ( ! border ) {
562 diff = tempItem->x() + tempItem->width() - viewportPos.x(); 567 diff = tempItem->x() + tempItem->width() - viewportPos.x();
563 if ( diff < 0 ) 568 if ( diff < 0 )
564 diff *= -1; 569 diff *= -1;
565 if ( diff < minH ) { 570 if ( diff < minH ) {
566 border = true; 571 border = true;
567 objIsNotViewport = false; 572 objIsNotViewport = false;
568 } 573 }
569 } 574 }
570 } 575 }
571 } 576 }
572 } 577 }
573 if ( objIsNotViewport ) { 578 if ( objIsNotViewport ) {
574 mPopupItem = (KOAgendaItem *)object; 579 mPopupItem = (KOAgendaItem *)object;
575 mPopupKind = 1; 580 mPopupKind = 1;
576 if (me->button() == RightButton) { 581 if (me->button() == RightButton) {
577 mPopupKind = 3; 582 mPopupKind = 3;
578 popupMenu(); 583 popupMenu();
579 } else if (me->button() == LeftButton) { 584 } else if (me->button() == LeftButton) {
580 mActionItem = (KOAgendaItem *)object; 585 mActionItem = (KOAgendaItem *)object;
581 if (mActionItem) { 586 if (mActionItem) {
582 emit signalClearSelection(); 587 emit signalClearSelection();
583 slotClearSelection(); 588 slotClearSelection();
584 selectItem(mActionItem); 589 selectItem(mActionItem);
585 Incidence *incidence = mActionItem->incidence(); 590 Incidence *incidence = mActionItem->incidence();
586 if ( incidence->isReadOnly() /*|| incidence->doesRecur() */) { 591 if ( incidence->isReadOnly() /*|| incidence->doesRecur() */) {
587 mActionItem = 0; 592 mActionItem = 0;
588 } else { 593 } else {
589 startItemAction(viewportPos); 594 startItemAction(viewportPos);
590 } 595 }
591 } 596 }
592 } 597 }
593 } else { // ---------- viewport() 598 } else { // ---------- viewport()
594 mPopupItem = 0; 599 mPopupItem = 0;
595 mPopupKind = 2; 600 mPopupKind = 2;
596 selectItem(0); 601 selectItem(0);
597 mActionItem = 0; 602 mActionItem = 0;
598 if (me->button() == RightButton) { 603 if (me->button() == RightButton) {
599 int x,y; 604 int x,y;
600 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 605 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
601 int gx,gy; 606 int gx,gy;
602 contentsToGrid(x,y,gx,gy); 607 contentsToGrid(x,y,gx,gy);
603 mCurrentCellX = gx; 608 mCurrentCellX = gx;
604 mCurrentCellY = gy; 609 mCurrentCellY = gy;
605 mStartCellX = gx; 610 mStartCellX = gx;
606 mStartCellY = gy; 611 mStartCellY = gy;
607 mPopupKind = 4; 612 mPopupKind = 4;
608 popupMenu(); 613 popupMenu();
609 } else if (me->button() == LeftButton) { 614 } else if (me->button() == LeftButton) {
610 setCursor(arrowCursor); 615 setCursor(arrowCursor);
611 startSelectAction(viewportPos); 616 startSelectAction(viewportPos);
612 } 617 }
613 } 618 }
614 break; 619 break;
615 620
616 case QEvent::MouseButtonRelease: 621 case QEvent::MouseButtonRelease:
617 if (me->button() == LeftButton ) { 622 if (me->button() == LeftButton ) {
618 mPopupTimer->stop(); 623 mPopupTimer->stop();
619 } 624 }
620 if (object != viewport()) { 625 if (object != viewport()) {
621 if (me->button() == LeftButton && mLeftMouseDown) { 626 if (me->button() == LeftButton && mLeftMouseDown) {
622 if (mActionItem) { 627 if (mActionItem) {
623 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 628 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos));
624 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 ); 629 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 );
625 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) { 630 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) {
626 mScrollUpTimer.stop(); 631 mScrollUpTimer.stop();
627 mScrollDownTimer.stop(); 632 mScrollDownTimer.stop();
628 mActionItem->resetMove(); 633 mActionItem->resetMove();
629 placeSubCells( mActionItem ); 634 placeSubCells( mActionItem );
630 // emit startDragSignal( mActionItem->incidence() ); 635 // emit startDragSignal( mActionItem->incidence() );
631 setCursor( arrowCursor ); 636 setCursor( arrowCursor );
632 mActionItem = 0; 637 mActionItem = 0;
633 mActionType = NOP; 638 mActionType = NOP;
634 mItemMoved = 0; 639 mItemMoved = 0;
635 mLeftMouseDown = false; 640 mLeftMouseDown = false;
636 return true; 641 return true;
637 } 642 }
638 endItemAction(); 643 endItemAction();
639 } 644 }
640 } 645 }
641 646
642 } else { // ---------- viewport() 647 } else { // ---------- viewport()
643 if (me->button() == LeftButton && mLeftMouseDown ) { //left click 648 if (me->button() == LeftButton && mLeftMouseDown ) { //left click
644 endSelectAction( true ); // emit new event signal 649 endSelectAction( true ); // emit new event signal
645 } 650 }
646 } 651 }
647 if (me->button() == LeftButton) 652 if (me->button() == LeftButton)
648 mLeftMouseDown = false; 653 mLeftMouseDown = false;
649 654
650 break; 655 break;
651 656
652 case QEvent::MouseMove: 657 case QEvent::MouseMove:
653 //qDebug("mm "); 658 //qDebug("mm ");
654 if ( !mLeftMouseDown ) 659 if ( !mLeftMouseDown )
655 return false; 660 return false;
656 if ( blockMoving ) { 661 if ( blockMoving ) {
657 int dX, dY; 662 int dX, dY;
658 dX = startX - viewportPos.x(); 663 dX = startX - viewportPos.x();
659 if ( dX < 0 ) 664 if ( dX < 0 )
660 dX = -dX; 665 dX = -dX;
661 dY = viewportPos.y() - startY; 666 dY = viewportPos.y() - startY;
662 if ( dY < 0 ) 667 if ( dY < 0 )
663 dY = -dY; 668 dY = -dY;
664 //qDebug("%d %d %d ", dX, dY , blockmoveDist ); 669 //qDebug("%d %d %d ", dX, dY , blockmoveDist );
665 if ( dX > blockmoveDist || dY > blockmoveDist ) { 670 if ( dX > blockmoveDist || dY > blockmoveDist ) {
666 blockMoving = false; 671 blockMoving = false;
667 } 672 }
668 } 673 }
669 if ( ! blockMoving ) 674 if ( ! blockMoving )
670 mPopupTimer->stop(); 675 mPopupTimer->stop();
671 if (object != viewport()) { 676 if (object != viewport()) {
672 KOAgendaItem *moveItem = (KOAgendaItem *)object; 677 KOAgendaItem *moveItem = (KOAgendaItem *)object;
673 if (!moveItem->incidence()->isReadOnly() ) { 678 if (!moveItem->incidence()->isReadOnly() ) {
674 if (!mActionItem) 679 if (!mActionItem)
675 setNoActionCursor(moveItem,viewportPos); 680 setNoActionCursor(moveItem,viewportPos);
676 else { 681 else {
677 if ( !blockMoving ) 682 if ( !blockMoving )
678 performItemAction(viewportPos); 683 performItemAction(viewportPos);
679 } 684 }
680 } 685 }
681 } else { // ---------- viewport() 686 } else { // ---------- viewport()
682 mPopupPos = viewport()->mapToGlobal( me->pos() ); 687 mPopupPos = viewport()->mapToGlobal( me->pos() );
683 if ( mActionType == SELECT ) { 688 if ( mActionType == SELECT ) {
684 performSelectAction( viewportPos ); 689 performSelectAction( viewportPos );
685 } 690 }
686 } 691 }
687 break; 692 break;
688 693
689 case QEvent::MouseButtonDblClick: 694 case QEvent::MouseButtonDblClick:
690 mPopupTimer->stop(); 695 mPopupTimer->stop();
691 if (object == viewport()) { 696 if (object == viewport()) {
692 selectItem(0); 697 selectItem(0);
693 int x,y; 698 int x,y;
694 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 699 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
695 int gx,gy; 700 int gx,gy;
696 contentsToGrid(x,y,gx,gy); 701 contentsToGrid(x,y,gx,gy);
697 emit newEventSignal(gx,gy); 702 emit newEventSignal(gx,gy);
698 } else { 703 } else {
699 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object; 704 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object;
700 selectItem(doubleClickedItem); 705 selectItem(doubleClickedItem);
701 if ( KOPrefs::instance()->mEditOnDoubleClick ) 706 if ( KOPrefs::instance()->mEditOnDoubleClick )
702 emit editIncidenceSignal(doubleClickedItem->incidence()); 707 emit editIncidenceSignal(doubleClickedItem->incidence());
703 else 708 else
704 emit showIncidenceSignal(doubleClickedItem->incidence()); 709 emit showIncidenceSignal(doubleClickedItem->incidence());
705 } 710 }
706 break; 711 break;
707 712
708 default: 713 default:
709 break; 714 break;
710 } 715 }
711 return true; 716 return true;
712 717
713} 718}
714 719
715void KOAgenda::newItem( int item ) 720void KOAgenda::newItem( int item )
716{ 721{
717 if ( item == 1 ) { //new event 722 if ( item == 1 ) { //new event
718 newEventSignal(mStartCellX ,mStartCellY ); 723 newEventSignal(mStartCellX ,mStartCellY );
719 } else 724 } else
720 if ( item == 2 ) { //new event 725 if ( item == 2 ) { //new event
721 newTodoSignal(mStartCellX ,mStartCellY ); 726 newTodoSignal(mStartCellX ,mStartCellY );
722 } else 727 } else
723 { 728 {
724 emit showDateView( item, mStartCellX ); 729 emit showDateView( item, mStartCellX );
725 // 3Day view 730 // 3Day view
726 // 4Week view 731 // 4Week view
727 // 5Month view 732 // 5Month view
728 // 6Journal view 733 // 6Journal view
729 } 734 }
730} 735}
731void KOAgenda::slotClearSelection() 736void KOAgenda::slotClearSelection()
732{ 737{
733 if (mSelectionHeight) { 738 if (mSelectionHeight) {
734 int selectionX = mSelectionCellX * mGridSpacingX; 739 int selectionX = mSelectionCellX * mGridSpacingX;
735 int top = mSelectionYTop - 2 *mGridSpacingY; 740 int top = mSelectionYTop - 2 *mGridSpacingY;
736 int hei = mSelectionHeight + 4 *mGridSpacingY; 741 int hei = mSelectionHeight + 4 *mGridSpacingY;
737 clearSelection(); 742 clearSelection();
738 repaintContents( selectionX, top, 743 repaintContents( selectionX, top,
739 mGridSpacingX, hei ,false ); 744 mGridSpacingX, hei ,false );
740 } 745 }
741 746
742} 747}
743void KOAgenda::startSelectAction(QPoint viewportPos) 748void KOAgenda::startSelectAction(QPoint viewportPos)
744{ 749{
745 750
746 emit signalClearSelection(); 751 emit signalClearSelection();
747 slotClearSelection(); 752 slotClearSelection();
748 753
749 mActionType = SELECT; 754 mActionType = SELECT;
750 755
751 int x,y; 756 int x,y;
752 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 757 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
753 int gx,gy; 758 int gx,gy;
754 contentsToGrid(x,y,gx,gy); 759 contentsToGrid(x,y,gx,gy);
755 760
756 mStartCellX = gx; 761 mStartCellX = gx;
757 mStartCellY = gy; 762 mStartCellY = gy;
758 mCurrentCellX = gx; 763 mCurrentCellX = gx;
759 mCurrentCellY = gy; 764 mCurrentCellY = gy;
760 765
761 // Store new selection 766 // Store new selection
762 mSelectionCellX = gx; 767 mSelectionCellX = gx;
763 mSelectionYTop = gy * mGridSpacingY; 768 mSelectionYTop = gy * mGridSpacingY;
764 mSelectionHeight = mGridSpacingY; 769 mSelectionHeight = mGridSpacingY;
765 770
766 // Paint new selection 771 // Paint new selection
767 repaintContents( mSelectionCellX * mGridSpacingX+1, mSelectionYTop, 772 repaintContents( mSelectionCellX * mGridSpacingX+1, mSelectionYTop,
768 mGridSpacingX-1, mSelectionHeight ); 773 mGridSpacingX-1, mSelectionHeight );
769} 774}
770 775
771void KOAgenda::performSelectAction(QPoint viewportPos) 776void KOAgenda::performSelectAction(QPoint viewportPos)
772{ 777{
773 int x,y; 778 int x,y;
774 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 779 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
775 int gx,gy; 780 int gx,gy;
776 contentsToGrid(x,y,gx,gy); 781 contentsToGrid(x,y,gx,gy);
777 782
778 QPoint clipperPos = clipper()-> 783 QPoint clipperPos = clipper()->
779 mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 784 mapFromGlobal(viewport()->mapToGlobal(viewportPos));
780 785
781 // Scroll if cursor was moved to upper or lower end of agenda. 786 // Scroll if cursor was moved to upper or lower end of agenda.
782 if (clipperPos.y() < mScrollBorderWidth) { 787 if (clipperPos.y() < mScrollBorderWidth) {
783 mScrollUpTimer.start(mScrollDelay); 788 mScrollUpTimer.start(mScrollDelay);
784 } else if (visibleHeight() - clipperPos.y() < 789 } else if (visibleHeight() - clipperPos.y() <
785 mScrollBorderWidth) { 790 mScrollBorderWidth) {
786 mScrollDownTimer.start(mScrollDelay); 791 mScrollDownTimer.start(mScrollDelay);
787 } else { 792 } else {
788 mScrollUpTimer.stop(); 793 mScrollUpTimer.stop();
789 mScrollDownTimer.stop(); 794 mScrollDownTimer.stop();
790 } 795 }
791 796
792 if ( gy > mCurrentCellY ) { 797 if ( gy > mCurrentCellY ) {
793 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; 798 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop;
794 799
795 800
796 repaintContents( (KOGlobals::self()->reverseLayout() ? 801 repaintContents( (KOGlobals::self()->reverseLayout() ?
797 mColumns - 1 - mSelectionCellX : mSelectionCellX) * 802 mColumns - 1 - mSelectionCellX : mSelectionCellX) *
798 mGridSpacingX, mSelectionYTop, 803 mGridSpacingX, mSelectionYTop,
799 mGridSpacingX, mSelectionHeight , false); 804 mGridSpacingX, mSelectionHeight , false);
800 805
801 mCurrentCellY = gy; 806 mCurrentCellY = gy;
802 } else if ( gy < mCurrentCellY ) { 807 } else if ( gy < mCurrentCellY ) {
803 if ( gy >= mStartCellY ) { 808 if ( gy >= mStartCellY ) {
804 int selectionHeight = mSelectionHeight; 809 int selectionHeight = mSelectionHeight;
805 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; 810 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop;
806 811
807 repaintContents( (KOGlobals::self()->reverseLayout() ? 812 repaintContents( (KOGlobals::self()->reverseLayout() ?
808 mColumns - 1 - mSelectionCellX : mSelectionCellX) * 813 mColumns - 1 - mSelectionCellX : mSelectionCellX) *
809 mGridSpacingX, mSelectionYTop, 814 mGridSpacingX, mSelectionYTop,
810 mGridSpacingX, selectionHeight,false ); 815 mGridSpacingX, selectionHeight,false );
811 816
812 mCurrentCellY = gy; 817 mCurrentCellY = gy;
813 } else { 818 } else {
814 } 819 }
815 } 820 }
816} 821}
817 822
818void KOAgenda::endSelectAction( bool emitNewEvent ) 823void KOAgenda::endSelectAction( bool emitNewEvent )
819{ 824{
820 mActionType = NOP; 825 mActionType = NOP;
821 mScrollUpTimer.stop(); 826 mScrollUpTimer.stop();
822 mScrollDownTimer.stop(); 827 mScrollDownTimer.stop();
823 828
824 emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); 829 emit newTimeSpanSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY);
825 if ( emitNewEvent && mStartCellY < mCurrentCellY ) { 830 if ( emitNewEvent && mStartCellY < mCurrentCellY ) {
826 emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY); 831 emit newEventSignal(mStartCellX,mStartCellY,mCurrentCellX,mCurrentCellY);
827 } 832 }
828} 833}
829 834
830void KOAgenda::startItemAction(QPoint viewportPos) 835void KOAgenda::startItemAction(QPoint viewportPos)
831{ 836{
832 int x,y; 837 int x,y;
833 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 838 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
834 int gx,gy; 839 int gx,gy;
835 contentsToGrid(x,y,gx,gy); 840 contentsToGrid(x,y,gx,gy);
836 841
837 mStartCellX = gx; 842 mStartCellX = gx;
838 mStartCellY = gy; 843 mStartCellY = gy;
839 mCurrentCellX = gx; 844 mCurrentCellX = gx;
840 mCurrentCellY = gy; 845 mCurrentCellY = gy;
841 846
842 if (mAllDayMode) { 847 if (mAllDayMode) {
843 int gridDistanceX = (x - gx * mGridSpacingX); 848 int gridDistanceX = (x - gx * mGridSpacingX);
844 if (gridDistanceX < mResizeBorderWidth && 849 if (gridDistanceX < mResizeBorderWidth &&
845 mActionItem->cellX() == mCurrentCellX) { 850 mActionItem->cellX() == mCurrentCellX) {
846 mActionType = RESIZELEFT; 851 mActionType = RESIZELEFT;
847 setCursor(sizeHorCursor); 852 setCursor(sizeHorCursor);
848 } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth && 853 } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth &&
849 mActionItem->cellXWidth() == mCurrentCellX) { 854 mActionItem->cellXWidth() == mCurrentCellX) {
850 mActionType = RESIZERIGHT; 855 mActionType = RESIZERIGHT;
851 setCursor(sizeHorCursor); 856 setCursor(sizeHorCursor);
852 } else { 857 } else {
853 mActionType = MOVE; 858 mActionType = MOVE;
854 mActionItem->startMove(); 859 mActionItem->startMove();
855 setCursor(sizeAllCursor); 860 setCursor(sizeAllCursor);
856 } 861 }
857 } else { 862 } else {
858 int gridDistanceY = (y - gy * mGridSpacingY); 863 int gridDistanceY = (y - gy * mGridSpacingY);
859 bool allowResize = ( mActionItem->incidence()->typeID() != todoID ); 864 bool allowResize = ( mActionItem->incidence()->typeID() != todoID );
860 if (allowResize && gridDistanceY < mResizeBorderWidth && 865 if (allowResize && gridDistanceY < mResizeBorderWidth &&
861 mActionItem->cellYTop() == mCurrentCellY && 866 mActionItem->cellYTop() == mCurrentCellY &&
862 !mActionItem->firstMultiItem()) { 867 !mActionItem->firstMultiItem()) {
863 mActionType = RESIZETOP; 868 mActionType = RESIZETOP;
864 setCursor(sizeVerCursor); 869 setCursor(sizeVerCursor);
865 } else if (allowResize &&(mGridSpacingY - gridDistanceY) < mResizeBorderWidth && 870 } else if (allowResize &&(mGridSpacingY - gridDistanceY) < mResizeBorderWidth &&
866 mActionItem->cellYBottom() == mCurrentCellY && 871 mActionItem->cellYBottom() == mCurrentCellY &&
867 !mActionItem->lastMultiItem()) { 872 !mActionItem->lastMultiItem()) {
868 mActionType = RESIZEBOTTOM; 873 mActionType = RESIZEBOTTOM;
869 setCursor(sizeVerCursor); 874 setCursor(sizeVerCursor);
870 } else { 875 } else {
871 mActionType = MOVE; 876 mActionType = MOVE;
872 mActionItem->startMove(); 877 mActionItem->startMove();
873 setCursor(sizeAllCursor); 878 setCursor(sizeAllCursor);
874 } 879 }
875 } 880 }
876} 881}
877 882
878void KOAgenda::performItemAction(QPoint viewportPos) 883void KOAgenda::performItemAction(QPoint viewportPos)
879{ 884{
880// kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl; 885// kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl;
881// QPoint point = viewport()->mapToGlobal(viewportPos); 886// QPoint point = viewport()->mapToGlobal(viewportPos);
882// kdDebug() << "Global: " << point.x() << "," << point.y() << endl; 887// kdDebug() << "Global: " << point.x() << "," << point.y() << endl;
883// point = clipper()->mapFromGlobal(point); 888// point = clipper()->mapFromGlobal(point);
884// kdDebug() << "clipper: " << point.x() << "," << point.y() << endl; 889// kdDebug() << "clipper: " << point.x() << "," << point.y() << endl;
885// kdDebug() << "visible height: " << visibleHeight() << endl; 890// kdDebug() << "visible height: " << visibleHeight() << endl;
886 int x,y; 891 int x,y;
887 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 892 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
888// kdDebug() << "contents: " << x << "," << y << "\n" << endl; 893// kdDebug() << "contents: " << x << "," << y << "\n" << endl;
889 int gx,gy; 894 int gx,gy;
890 contentsToGrid(x,y,gx,gy); 895 contentsToGrid(x,y,gx,gy);
891 QPoint clipperPos = clipper()-> 896 QPoint clipperPos = clipper()->
892 mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 897 mapFromGlobal(viewport()->mapToGlobal(viewportPos));
893 898
894 // Cursor left active agenda area. 899 // Cursor left active agenda area.
895 // This starts a drag. 900 // This starts a drag.
896 if ( /*clipperPos.y() < 0 || clipperPos.y() > visibleHeight() ||*/ 901 if ( /*clipperPos.y() < 0 || clipperPos.y() > visibleHeight() ||*/
897 clipperPos.x() < 0 || clipperPos.x() > visibleWidth() ) { 902 clipperPos.x() < 0 || clipperPos.x() > visibleWidth() ) {
898 if ( mActionType == MOVE ) { 903 if ( mActionType == MOVE ) {
899 mScrollUpTimer.stop(); 904 mScrollUpTimer.stop();
900 mScrollDownTimer.stop(); 905 mScrollDownTimer.stop();
901 mActionItem->resetMove(); 906 mActionItem->resetMove();
902 placeSubCells( mActionItem ); 907 placeSubCells( mActionItem );
903 // emit startDragSignal( mActionItem->incidence() ); 908 // emit startDragSignal( mActionItem->incidence() );
904 setCursor( arrowCursor ); 909 setCursor( arrowCursor );
905 mActionItem = 0; 910 mActionItem = 0;
906 mActionType = NOP; 911 mActionType = NOP;
907 mItemMoved = 0; 912 mItemMoved = 0;
908 return; 913 return;
909 } 914 }
910 } else { 915 } else {
911 switch ( mActionType ) { 916 switch ( mActionType ) {
912 case MOVE: 917 case MOVE:
913 setCursor( sizeAllCursor ); 918 setCursor( sizeAllCursor );
914 break; 919 break;
915 case RESIZETOP: 920 case RESIZETOP:
916 case RESIZEBOTTOM: 921 case RESIZEBOTTOM:
917 setCursor( sizeVerCursor ); 922 setCursor( sizeVerCursor );
918 break; 923 break;
919 case RESIZELEFT: 924 case RESIZELEFT:
920 case RESIZERIGHT: 925 case RESIZERIGHT:
921 setCursor( sizeHorCursor ); 926 setCursor( sizeHorCursor );
922 break; 927 break;
923 default: 928 default:
924 setCursor( arrowCursor ); 929 setCursor( arrowCursor );
925 } 930 }
926 } 931 }
927 932
928 // Scroll if item was moved to upper or lower end of agenda. 933 // Scroll if item was moved to upper or lower end of agenda.
929 if (clipperPos.y() < mScrollBorderWidth) { 934 if (clipperPos.y() < mScrollBorderWidth) {
930 mScrollUpTimer.start(mScrollDelay); 935 mScrollUpTimer.start(mScrollDelay);
931 } else if (visibleHeight() - clipperPos.y() < 936 } else if (visibleHeight() - clipperPos.y() <
932 mScrollBorderWidth) { 937 mScrollBorderWidth) {
933 mScrollDownTimer.start(mScrollDelay); 938 mScrollDownTimer.start(mScrollDelay);
934 } else { 939 } else {
935 mScrollUpTimer.stop(); 940 mScrollUpTimer.stop();
936 mScrollDownTimer.stop(); 941 mScrollDownTimer.stop();
937 } 942 }
938 943
939 // Move or resize item if necessary 944 // Move or resize item if necessary
940 if (mCurrentCellX != gx || mCurrentCellY != gy) { 945 if (mCurrentCellX != gx || mCurrentCellY != gy) {
941 mItemMoved = true; 946 mItemMoved = true;
942 mActionItem->raise(); 947 mActionItem->raise();
943 if (mActionType == MOVE) { 948 if (mActionType == MOVE) {
944 // Move all items belonging to a multi item 949 // Move all items belonging to a multi item
945 KOAgendaItem *moveItem = mActionItem->firstMultiItem(); 950 KOAgendaItem *moveItem = mActionItem->firstMultiItem();
946 bool isMultiItem = (moveItem || mActionItem->lastMultiItem()); 951 bool isMultiItem = (moveItem || mActionItem->lastMultiItem());
947 if (!moveItem) moveItem = mActionItem; 952 if (!moveItem) moveItem = mActionItem;
948 while (moveItem) { 953 while (moveItem) {
949 int dy; 954 int dy;
950 if (isMultiItem) dy = 0; 955 if (isMultiItem) dy = 0;
951 else dy = gy - mCurrentCellY; 956 else dy = gy - mCurrentCellY;
952 moveItem->moveRelative(gx - mCurrentCellX,dy); 957 moveItem->moveRelative(gx - mCurrentCellX,dy);
953 int x,y; 958 int x,y;
954 gridToContents(moveItem->cellX(),moveItem->cellYTop(),x,y); 959 gridToContents(moveItem->cellX(),moveItem->cellYTop(),x,y);
955 moveItem->resize(mGridSpacingX * moveItem->cellWidth(), 960 moveItem->resize(mGridSpacingX * moveItem->cellWidth(),
956 mGridSpacingY * moveItem->cellHeight()); 961 mGridSpacingY * moveItem->cellHeight());
957 moveItem->raise(); 962 moveItem->raise();
958 moveChild(moveItem,x,y); 963 moveChild(moveItem,x,y);
959 moveItem = moveItem->nextMultiItem(); 964 moveItem = moveItem->nextMultiItem();
960 } 965 }
961 } else if (mActionType == RESIZETOP) { 966 } else if (mActionType == RESIZETOP) {
962 if (mCurrentCellY <= mActionItem->cellYBottom()) { 967 if (mCurrentCellY <= mActionItem->cellYBottom()) {
963 mActionItem->expandTop(gy - mCurrentCellY); 968 mActionItem->expandTop(gy - mCurrentCellY);
964 mActionItem->resize(mActionItem->width(), 969 mActionItem->resize(mActionItem->width(),
965 mGridSpacingY * mActionItem->cellHeight()); 970 mGridSpacingY * mActionItem->cellHeight());
966 int x,y; 971 int x,y;
967 gridToContents(mCurrentCellX,mActionItem->cellYTop(),x,y); 972 gridToContents(mCurrentCellX,mActionItem->cellYTop(),x,y);
968 //moveChild(mActionItem,childX(mActionItem),y); 973 //moveChild(mActionItem,childX(mActionItem),y);
969 QScrollView::moveChild( mActionItem,childX(mActionItem),y ); 974 QScrollView::moveChild( mActionItem,childX(mActionItem),y );
970 } 975 }
971 } else if (mActionType == RESIZEBOTTOM) { 976 } else if (mActionType == RESIZEBOTTOM) {
972 if (mCurrentCellY >= mActionItem->cellYTop()) { 977 if (mCurrentCellY >= mActionItem->cellYTop()) {
973 mActionItem->expandBottom(gy - mCurrentCellY); 978 mActionItem->expandBottom(gy - mCurrentCellY);
974 mActionItem->resize(mActionItem->width(), 979 mActionItem->resize(mActionItem->width(),
975 mGridSpacingY * mActionItem->cellHeight()); 980 mGridSpacingY * mActionItem->cellHeight());
976 } 981 }
977 } else if (mActionType == RESIZELEFT) { 982 } else if (mActionType == RESIZELEFT) {
978 if (mCurrentCellX <= mActionItem->cellXWidth()) { 983 if (mCurrentCellX <= mActionItem->cellXWidth()) {
979 mActionItem->expandLeft(gx - mCurrentCellX); 984 mActionItem->expandLeft(gx - mCurrentCellX);
980 mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(), 985 mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(),
981 mActionItem->height()); 986 mActionItem->height());
982 int x,y; 987 int x,y;
983 gridToContents(mActionItem->cellX(),mActionItem->cellYTop(),x,y); 988 gridToContents(mActionItem->cellX(),mActionItem->cellYTop(),x,y);
984 moveChild(mActionItem,x,childY(mActionItem)); 989 moveChild(mActionItem,x,childY(mActionItem));
985 } 990 }
986 } else if (mActionType == RESIZERIGHT) { 991 } else if (mActionType == RESIZERIGHT) {
987 if (mCurrentCellX >= mActionItem->cellX()) { 992 if (mCurrentCellX >= mActionItem->cellX()) {
988 mActionItem->expandRight(gx - mCurrentCellX); 993 mActionItem->expandRight(gx - mCurrentCellX);
989 mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(), 994 mActionItem->resize(mGridSpacingX * mActionItem->cellWidth(),
990 mActionItem->height()); 995 mActionItem->height());
991 } 996 }
992 } 997 }
993 mCurrentCellX = gx; 998 mCurrentCellX = gx;
994 mCurrentCellY = gy; 999 mCurrentCellY = gy;
995 } 1000 }
996} 1001}
997 1002
998void KOAgenda::endItemAction() 1003void KOAgenda::endItemAction()
999{ 1004{
1000 1005
1001 if ( mItemMoved ) { 1006 if ( mItemMoved ) {
1002 KOAgendaItem *placeItem = mActionItem->firstMultiItem(); 1007 KOAgendaItem *placeItem = mActionItem->firstMultiItem();
1003 if ( !placeItem ) { 1008 if ( !placeItem ) {
1004 placeItem = mActionItem; 1009 placeItem = mActionItem;
1005 } 1010 }
1006 if ( placeItem->incidence()->doesRecur() ) { 1011 if ( placeItem->incidence()->doesRecur() ) {
1007 Incidence* oldInc = placeItem->incidence(); 1012 Incidence* oldInc = placeItem->incidence();
1008 placeItem->recreateIncidence(); 1013 placeItem->recreateIncidence();
1009 emit addToCalSignal(placeItem->incidence(), oldInc ); 1014 emit addToCalSignal(placeItem->incidence(), oldInc );
1010 } 1015 }
1011 int type = mActionType; 1016 int type = mActionType;
1012 if ( mAllDayMode ) 1017 if ( mAllDayMode )
1013 type = -1; 1018 type = -1;
1014 KOAgendaItem *modifiedItem = placeItem; 1019 KOAgendaItem *modifiedItem = placeItem;
1015 //emit itemModified( placeItem, mActionType /*KOGlobals::EVENTEDITED */); 1020 //emit itemModified( placeItem, mActionType /*KOGlobals::EVENTEDITED */);
1016 QPtrList<KOAgendaItem> oldconflictItems ;//= placeItem->conflictItems(); 1021 QPtrList<KOAgendaItem> oldconflictItems ;//= placeItem->conflictItems();
1017 KOAgendaItem *item; 1022 KOAgendaItem *item;
1018 1023
1019 if ( placeItem->incidence()->typeID() == todoID ) { 1024 if ( placeItem->incidence()->typeID() == todoID ) {
1020 mSelectedItem = 0; 1025 mSelectedItem = 0;
1021 //qDebug("todo %d %d %d ", mCurrentCellX, modifiedItem->cellX() ,modifiedItem->cellXWidth()); 1026 //qDebug("todo %d %d %d ", mCurrentCellX, modifiedItem->cellX() ,modifiedItem->cellXWidth());
1022 modifiedItem->mLastMoveXPos = mCurrentCellX; 1027 modifiedItem->mLastMoveXPos = mCurrentCellX;
1023 emit itemModified( modifiedItem, mActionType ); 1028 emit itemModified( modifiedItem, mActionType );
1024 } 1029 }
1025 else { 1030 else {
1026 1031
1027 1032
1028 globalFlagBlockAgendaItemPaint = 1; 1033 globalFlagBlockAgendaItemPaint = 1;
1029 for ( item=oldconflictItems.first(); item != 0; 1034 for ( item=oldconflictItems.first(); item != 0;
1030 item=oldconflictItems.next() ) { 1035 item=oldconflictItems.next() ) {
1031 placeSubCells(item); 1036 placeSubCells(item);
1032 } 1037 }
1033 while ( placeItem ) { 1038 while ( placeItem ) {
1034 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); 1039 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1());
1035 oldconflictItems = placeItem->conflictItems(); 1040 oldconflictItems = placeItem->conflictItems();
1036 for ( item=oldconflictItems.first(); item != 0; 1041 for ( item=oldconflictItems.first(); item != 0;
1037 item=oldconflictItems.next() ) { 1042 item=oldconflictItems.next() ) {
1038 placeSubCells(item); 1043 placeSubCells(item);
1039 } 1044 }
1040 placeSubCells( placeItem ); 1045 placeSubCells( placeItem );
1041 placeItem = placeItem->nextMultiItem(); 1046 placeItem = placeItem->nextMultiItem();
1042 } 1047 }
1043 globalFlagBlockAgendaItemPaint = 0; 1048 globalFlagBlockAgendaItemPaint = 0;
1044 for ( item=oldconflictItems.first(); item != 0; 1049 for ( item=oldconflictItems.first(); item != 0;
1045 item=oldconflictItems.next() ) { 1050 item=oldconflictItems.next() ) {
1046 globalFlagBlockAgendaItemUpdate = 0; 1051 globalFlagBlockAgendaItemUpdate = 0;
1047 item->repaintMe(); 1052 item->repaintMe();
1048 globalFlagBlockAgendaItemUpdate = 1; 1053 globalFlagBlockAgendaItemUpdate = 1;
1049 item->repaint( false ); 1054 item->repaint( false );
1050 } 1055 }
1051 placeItem = modifiedItem; 1056 placeItem = modifiedItem;
1052 1057
1053 while ( placeItem ) { 1058 while ( placeItem ) {
1054 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1()); 1059 //qDebug("placeItem %s ", placeItem->incidence()->summary().latin1());
1055 globalFlagBlockAgendaItemUpdate = 0; 1060 globalFlagBlockAgendaItemUpdate = 0;
1056 placeItem->repaintMe(); 1061 placeItem->repaintMe();
1057 globalFlagBlockAgendaItemUpdate = 1; 1062 globalFlagBlockAgendaItemUpdate = 1;
1058 placeItem->repaint(false); 1063 placeItem->repaint(false);
1059 placeItem = placeItem->nextMultiItem(); 1064 placeItem = placeItem->nextMultiItem();
1060 } 1065 }
1061 emit itemModified( modifiedItem, mActionType ); 1066 emit itemModified( modifiedItem, mActionType );
1062 1067
1063 1068
1064 placeItem = modifiedItem; 1069 placeItem = modifiedItem;
1065 while ( placeItem ) { 1070 while ( placeItem ) {
1066 oldconflictItems = placeItem->conflictItems(); 1071 oldconflictItems = placeItem->conflictItems();
1067 for ( item=oldconflictItems.first(); item != 0; 1072 for ( item=oldconflictItems.first(); item != 0;
1068 item=oldconflictItems.next() ) { 1073 item=oldconflictItems.next() ) {
1069 placeSubCells(item); 1074 placeSubCells(item);
1070 } 1075 }
1071 placeSubCells( placeItem ); 1076 placeSubCells( placeItem );
1072 placeItem = placeItem->nextMultiItem(); 1077 placeItem = placeItem->nextMultiItem();
1073 1078
1074 } 1079 }
1075 placeItem = modifiedItem; 1080 placeItem = modifiedItem;
1076 while ( placeItem ) { 1081 while ( placeItem ) {
1077 oldconflictItems = placeItem->conflictItems(); 1082 oldconflictItems = placeItem->conflictItems();
1078 for ( item=oldconflictItems.first(); item != 0; 1083 for ( item=oldconflictItems.first(); item != 0;
1079 item=oldconflictItems.next() ) { 1084 item=oldconflictItems.next() ) {
1080 globalFlagBlockAgendaItemUpdate = 0; 1085 globalFlagBlockAgendaItemUpdate = 0;
1081 item->repaintMe(); 1086 item->repaintMe();
1082 globalFlagBlockAgendaItemUpdate = 1; 1087 globalFlagBlockAgendaItemUpdate = 1;
1083 item->repaint(false); 1088 item->repaint(false);
1084 } 1089 }
1085 placeItem = placeItem->nextMultiItem(); 1090 placeItem = placeItem->nextMultiItem();
1086 } 1091 }
1087 /* 1092 /*
1088 1093
1089 oldconflictItems = modifiedItem->conflictItems(); 1094 oldconflictItems = modifiedItem->conflictItems();
1090 for ( item=oldconflictItems.first(); item != 0; 1095 for ( item=oldconflictItems.first(); item != 0;
1091 item=oldconflictItems.next() ) { 1096 item=oldconflictItems.next() ) {
1092 globalFlagBlockAgendaItemUpdate = 0; 1097 globalFlagBlockAgendaItemUpdate = 0;
1093 item->paintMe(false); 1098 item->paintMe(false);
1094 globalFlagBlockAgendaItemUpdate = 1; 1099 globalFlagBlockAgendaItemUpdate = 1;
1095 item->repaint(false); 1100 item->repaint(false);
1096 } 1101 }
1097 */ 1102 */
1098 1103
1099 1104
1100 } 1105 }
1101 1106
1102 } 1107 }
1103 if ( mActionItem ) 1108 if ( mActionItem )
1104 emit incidenceSelected( mActionItem->incidence() ); 1109 emit incidenceSelected( mActionItem->incidence() );
1105 mScrollUpTimer.stop(); 1110 mScrollUpTimer.stop();
1106 mScrollDownTimer.stop(); 1111 mScrollDownTimer.stop();
1107 setCursor( arrowCursor ); 1112 setCursor( arrowCursor );
1108 mActionItem = 0; 1113 mActionItem = 0;
1109 mActionType = NOP; 1114 mActionType = NOP;
1110 mItemMoved = 0; 1115 mItemMoved = 0;
1111 1116
1112} 1117}
1113 1118
1114void KOAgenda::setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos) 1119void KOAgenda::setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos)
1115{ 1120{
1116// kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl; 1121// kdDebug() << "viewportPos: " << viewportPos.x() << "," << viewportPos.y() << endl;
1117// QPoint point = viewport()->mapToGlobal(viewportPos); 1122// QPoint point = viewport()->mapToGlobal(viewportPos);
1118// kdDebug() << "Global: " << point.x() << "," << point.y() << endl; 1123// kdDebug() << "Global: " << point.x() << "," << point.y() << endl;
1119// point = clipper()->mapFromGlobal(point); 1124// point = clipper()->mapFromGlobal(point);
1120// kdDebug() << "clipper: " << point.x() << "," << point.y() << endl; 1125// kdDebug() << "clipper: " << point.x() << "," << point.y() << endl;
1121 1126
1122 int x,y; 1127 int x,y;
1123 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 1128 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
1124// kdDebug() << "contents: " << x << "," << y << "\n" << endl; 1129// kdDebug() << "contents: " << x << "," << y << "\n" << endl;
1125 int gx,gy; 1130 int gx,gy;
1126 contentsToGrid(x,y,gx,gy); 1131 contentsToGrid(x,y,gx,gy);
1127 1132
1128 // Change cursor to resize cursor if appropriate 1133 // Change cursor to resize cursor if appropriate
1129 if (mAllDayMode) { 1134 if (mAllDayMode) {
1130 int gridDistanceX = (x - gx * mGridSpacingX); 1135 int gridDistanceX = (x - gx * mGridSpacingX);
1131 if (gridDistanceX < mResizeBorderWidth && 1136 if (gridDistanceX < mResizeBorderWidth &&
1132 moveItem->cellX() == gx) { 1137 moveItem->cellX() == gx) {
1133 setCursor(sizeHorCursor); 1138 setCursor(sizeHorCursor);
1134 } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth && 1139 } else if ((mGridSpacingX - gridDistanceX) < mResizeBorderWidth &&
1135 moveItem->cellXWidth() == gx) { 1140 moveItem->cellXWidth() == gx) {
1136 setCursor(sizeHorCursor); 1141 setCursor(sizeHorCursor);
1137 } else { 1142 } else {
1138 setCursor(arrowCursor); 1143 setCursor(arrowCursor);
1139 } 1144 }
1140 } else { 1145 } else {
1141 int gridDistanceY = (y - gy * mGridSpacingY); 1146 int gridDistanceY = (y - gy * mGridSpacingY);
1142 if (gridDistanceY < mResizeBorderWidth && 1147 if (gridDistanceY < mResizeBorderWidth &&
1143 moveItem->cellYTop() == gy && 1148 moveItem->cellYTop() == gy &&
1144 !moveItem->firstMultiItem()) { 1149 !moveItem->firstMultiItem()) {
1145 setCursor(sizeVerCursor); 1150 setCursor(sizeVerCursor);
1146 } else if ((mGridSpacingY - gridDistanceY) < mResizeBorderWidth && 1151 } else if ((mGridSpacingY - gridDistanceY) < mResizeBorderWidth &&
1147 moveItem->cellYBottom() == gy && 1152 moveItem->cellYBottom() == gy &&
1148 !moveItem->lastMultiItem()) { 1153 !moveItem->lastMultiItem()) {
1149 setCursor(sizeVerCursor); 1154 setCursor(sizeVerCursor);
1150 } else { 1155 } else {
1151 setCursor(arrowCursor); 1156 setCursor(arrowCursor);
1152 } 1157 }
1153 } 1158 }
1154} 1159}
1155 1160
1156 1161
1157/* 1162/*
1158 Place item in cell and take care that multiple items using the same cell do 1163 Place item in cell and take care that multiple items using the same cell do
1159 not overlap. This method is not yet optimal. It doesn´t use the maximum space 1164 not overlap. This method is not yet optimal. It doesn´t use the maximum space
1160 it can get in all cases. 1165 it can get in all cases.
1161 At the moment the method has a bug: When an item is placed only the sub cell 1166 At the moment the method has a bug: When an item is placed only the sub cell
1162 widths of the items are changed, which are within the Y region the item to 1167 widths of the items are changed, which are within the Y region the item to
1163 place spans. When the sub cell width change of one of this items affects a 1168 place spans. When the sub cell width change of one of this items affects a
1164 cell, where other items are, which do not overlap in Y with the item to place, 1169 cell, where other items are, which do not overlap in Y with the item to place,
1165 the display gets corrupted, although the corruption looks quite nice. 1170 the display gets corrupted, although the corruption looks quite nice.
1166*/ 1171*/
1167void KOAgenda::placeSubCells(KOAgendaItem *placeItem) 1172void KOAgenda::placeSubCells(KOAgendaItem *placeItem)
1168{ 1173{
1169 1174
1170 QPtrList<KOAgendaItem> conflictItems; 1175 QPtrList<KOAgendaItem> conflictItems;
1171 int maxSubCells = 0; 1176 int maxSubCells = 0;
1172 QIntDict<KOAgendaItem> subCellDict(7); 1177 QIntDict<KOAgendaItem> subCellDict(7);
1173 1178
1174 KOAgendaItem *item; 1179 KOAgendaItem *item;
1175 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1180 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1176 if (item != placeItem) { 1181 if (item != placeItem) {
1177 if (placeItem->cellX() <= item->cellXWidth() && 1182 if (placeItem->cellX() <= item->cellXWidth() &&
1178 placeItem->cellXWidth() >= item->cellX()) { 1183 placeItem->cellXWidth() >= item->cellX()) {
1179 if ((placeItem->cellYTop() <= item->cellYBottom()) && 1184 if ((placeItem->cellYTop() <= item->cellYBottom()) &&
1180 (placeItem->cellYBottom() >= item->cellYTop())) { 1185 (placeItem->cellYBottom() >= item->cellYTop())) {
1181 conflictItems.append(item); 1186 conflictItems.append(item);
1182 if (item->subCells() > maxSubCells) 1187 if (item->subCells() > maxSubCells)
1183 maxSubCells = item->subCells(); 1188 maxSubCells = item->subCells();
1184 subCellDict.insert(item->subCell(),item); 1189 subCellDict.insert(item->subCell(),item);
1185 } 1190 }
1186 } 1191 }
1187 } 1192 }
1188 } 1193 }
1189 1194
1190 if (conflictItems.count() > 0) { 1195 if (conflictItems.count() > 0) {
1191 // Look for unused sub cell and insert item 1196 // Look for unused sub cell and insert item
1192 int i; 1197 int i;
1193 for(i=0;i<maxSubCells;++i) { 1198 for(i=0;i<maxSubCells;++i) {
1194 if (!subCellDict.find(i)) { 1199 if (!subCellDict.find(i)) {
1195 placeItem->setSubCell(i); 1200 placeItem->setSubCell(i);
1196 break; 1201 break;
1197 } 1202 }
1198 } 1203 }
1199 if (i == maxSubCells) { 1204 if (i == maxSubCells) {
1200 placeItem->setSubCell(maxSubCells); 1205 placeItem->setSubCell(maxSubCells);
1201 maxSubCells++; // add new item to number of sub cells 1206 maxSubCells++; // add new item to number of sub cells
1202 } 1207 }
1203 1208
1204 // Prepare for sub cell geometry adjustment 1209 // Prepare for sub cell geometry adjustment
1205 int newSubCellWidth; 1210 int newSubCellWidth;
1206 if (mAllDayMode) newSubCellWidth = mGridSpacingY / maxSubCells; 1211 if (mAllDayMode) newSubCellWidth = mGridSpacingY / maxSubCells;
1207 else newSubCellWidth = mGridSpacingX / maxSubCells; 1212 else newSubCellWidth = mGridSpacingX / maxSubCells;
1208 conflictItems.append(placeItem); 1213 conflictItems.append(placeItem);
1209 1214
1210 1215
1211 // Adjust sub cell geometry of all direct conflict items 1216 // Adjust sub cell geometry of all direct conflict items
1212 for ( item=conflictItems.first(); item != 0; 1217 for ( item=conflictItems.first(); item != 0;
1213 item=conflictItems.next() ) { 1218 item=conflictItems.next() ) {
1214 item->setSubCells(maxSubCells); 1219 item->setSubCells(maxSubCells);
1215 if (mAllDayMode) { 1220 if (mAllDayMode) {
1216 item->resize(item->cellWidth() * mGridSpacingX, newSubCellWidth); 1221 item->resize(item->cellWidth() * mGridSpacingX, newSubCellWidth);
1217 } else { 1222 } else {
1218 item->resize(newSubCellWidth, item->cellHeight() * mGridSpacingY); 1223 item->resize(newSubCellWidth, item->cellHeight() * mGridSpacingY);
1219 } 1224 }
1220 int x,y; 1225 int x,y;
1221 gridToContents(item->cellX(),item->cellYTop(),x,y); 1226 gridToContents(item->cellX(),item->cellYTop(),x,y);
1222 if (mAllDayMode) { 1227 if (mAllDayMode) {
1223 y += item->subCell() * newSubCellWidth; 1228 y += item->subCell() * newSubCellWidth;
1224 } else { 1229 } else {
1225 x += item->subCell() * newSubCellWidth; 1230 x += item->subCell() * newSubCellWidth;
1226 } 1231 }
1227 moveChild(item,x,y); 1232 moveChild(item,x,y);
1228 // qDebug("moveChild %s %d %d ", item->incidence()->summary().latin1() ,x,y); 1233 // qDebug("moveChild %s %d %d ", item->incidence()->summary().latin1() ,x,y);
1229 //item->updateItem(); 1234 //item->updateItem();
1230 } 1235 }
1231 // Adjust sub cell geometry of all conflict items of all conflict items 1236 // Adjust sub cell geometry of all conflict items of all conflict items
1232 for ( item=conflictItems.first(); item != 0; 1237 for ( item=conflictItems.first(); item != 0;
1233 item=conflictItems.next() ) { 1238 item=conflictItems.next() ) {
1234 if ( placeItem != item ) { 1239 if ( placeItem != item ) {
1235 KOAgendaItem *item2; 1240 KOAgendaItem *item2;
1236 QPtrList<KOAgendaItem> conflictItems2 = item->conflictItems(); 1241 QPtrList<KOAgendaItem> conflictItems2 = item->conflictItems();
1237 for ( item2=conflictItems2.first(); item2 != 0; 1242 for ( item2=conflictItems2.first(); item2 != 0;
1238 item2=conflictItems2.next() ) { 1243 item2=conflictItems2.next() ) {
1239 if ( item2->subCells() != maxSubCells) { 1244 if ( item2->subCells() != maxSubCells) {
1240 item2->setSubCells(maxSubCells); 1245 item2->setSubCells(maxSubCells);
1241 if (mAllDayMode) { 1246 if (mAllDayMode) {
1242 item2->resize(item2->cellWidth() * mGridSpacingX, newSubCellWidth); 1247 item2->resize(item2->cellWidth() * mGridSpacingX, newSubCellWidth);
1243 } else { 1248 } else {
1244 item2->resize(newSubCellWidth, item2->cellHeight() * mGridSpacingY); 1249 item2->resize(newSubCellWidth, item2->cellHeight() * mGridSpacingY);
1245 } 1250 }
1246 int x,y; 1251 int x,y;
1247 gridToContents(item2->cellX(),item2->cellYTop(),x,y); 1252 gridToContents(item2->cellX(),item2->cellYTop(),x,y);
1248 if (mAllDayMode) { 1253 if (mAllDayMode) {
1249 y += item2->subCell() * newSubCellWidth; 1254 y += item2->subCell() * newSubCellWidth;
1250 } else { 1255 } else {
1251 x += item2->subCell() * newSubCellWidth; 1256 x += item2->subCell() * newSubCellWidth;
1252 } 1257 }
1253 moveChild(item2,x,y); 1258 moveChild(item2,x,y);
1254 //qDebug("setttttt %d %s",maxSubCells, item2->text().latin1() ); 1259 //qDebug("setttttt %d %s",maxSubCells, item2->text().latin1() );
1255 } 1260 }
1256 } 1261 }
1257 } 1262 }
1258 } 1263 }
1259 } else { 1264 } else {
1260 placeItem->setSubCell(0); 1265 placeItem->setSubCell(0);
1261 placeItem->setSubCells(1); 1266 placeItem->setSubCells(1);
1262 if (mAllDayMode) placeItem->resize(placeItem->width(),mGridSpacingY); 1267 if (mAllDayMode) placeItem->resize(placeItem->width(),mGridSpacingY);
1263 else placeItem->resize(mGridSpacingX,placeItem->height()); 1268 else placeItem->resize(mGridSpacingX,placeItem->height());
1264 int x,y; 1269 int x,y;
1265 gridToContents(placeItem->cellX(),placeItem->cellYTop(),x,y); 1270 gridToContents(placeItem->cellX(),placeItem->cellYTop(),x,y);
1266 moveChild(placeItem,x,y); 1271 moveChild(placeItem,x,y);
1267 } 1272 }
1268 placeItem->setConflictItems(conflictItems); 1273 placeItem->setConflictItems(conflictItems);
1269 // for ( item=conflictItems.first(); item != 0; 1274 // for ( item=conflictItems.first(); item != 0;
1270// item=conflictItems.next() ) { 1275// item=conflictItems.next() ) {
1271// //item->updateItem(); 1276// //item->updateItem();
1272// //qDebug("xxx item->updateItem() %s %d %d", item->incidence()->summary().latin1(),item->x(), item->y() ); 1277// //qDebug("xxx item->updateItem() %s %d %d", item->incidence()->summary().latin1(),item->x(), item->y() );
1273// } 1278// }
1274// placeItem->updateItem(); 1279// placeItem->updateItem();
1275} 1280}
1276 1281
1277void KOAgenda::drawContents(QPainter* p, int cx, int cy, int cw, int ch) 1282void KOAgenda::drawContents(QPainter* p, int cx, int cy, int cw, int ch)
1278{ 1283{
1279 if ( globalFlagBlockAgenda ) 1284 if ( globalFlagBlockAgenda )
1280 return; 1285 return;
1281 1286
1282 if ( mInvalidPixmap ) { 1287 if ( mInvalidPixmap ) {
1283 mInvalidPixmap = false; 1288 mInvalidPixmap = false;
1284 qDebug("KO: Upsizing Pixmaps "); 1289 qDebug("KO: dc Upsizing Pixmaps %s", QDateTime::currentDateTime().toString().latin1());
1285 computeSizes(); 1290 computeSizes();
1286 emit updateViewSignal(); 1291 emit updateViewSignal();
1287 return; 1292 return;
1288 } 1293 }
1294 //qDebug("KOAgenda::drawContents %s", QDateTime::currentDateTime().toString().latin1());
1289 if ( ! mAllDayMode ) { 1295 if ( ! mAllDayMode ) {
1290 // currently not working for 1296 // currently not working for
1291 1297
1292 //qDebug("KOAgenda::drawContents "); 1298 //qDebug("KOAgenda::drawContents ");
1293#if 0 1299#if 0
1294 if ( mCurPixWid != contentsWidth() || mCurPixHei != contentsHeight() ) { 1300 if ( mCurPixWid != contentsWidth() || mCurPixHei != contentsHeight() ) {
1295 qDebug("WAU "); 1301 qDebug("WAU ");
1296 drawContentsToPainter(); 1302 drawContentsToPainter();
1297 } 1303 }
1298#endif 1304#endif
1299 QPaintDevice* pd = p->device(); 1305 QPaintDevice* pd = p->device();
1300 p->end(); 1306 p->end();
1301 int vx, vy; 1307 int vx, vy;
1302 int selectionX = KOGlobals::self()->reverseLayout() ? 1308 int selectionX = KOGlobals::self()->reverseLayout() ?
1303 (mColumns - 1 - mSelectionCellX) * mGridSpacingX : 1309 (mColumns - 1 - mSelectionCellX) * mGridSpacingX :
1304 mSelectionCellX * mGridSpacingX; 1310 mSelectionCellX * mGridSpacingX;
1305 contentsToViewport ( cx, cy, vx,vy); 1311 contentsToViewport ( cx, cy, vx,vy);
1306 //qDebug(" %d %d %d %d %d", cx, cy, cw,ch,mGridSpacingX-1) ; 1312 //qDebug(" %d %d %d %d %d", cx, cy, cw,ch,mGridSpacingX-1) ;
1307 1313
1308 if ( !(selectionX == cx && cy == mSelectionYTop && cw ==mGridSpacingX && ch == mSelectionHeight ) ) { 1314 if ( !(selectionX == cx && cy == mSelectionYTop && cw ==mGridSpacingX && ch == mSelectionHeight ) ) {
1309 if ( mGridSpacingX == cw && mSelectionHeight > 0 && ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && 1315 if ( mGridSpacingX == cw && mSelectionHeight > 0 && ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) &&
1310 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) ) { 1316 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) ) {
1311 1317
1312 int vxSel, vySel; 1318 int vxSel, vySel;
1313 contentsToViewport ( selectionX, mSelectionYTop, vxSel,vySel); 1319 contentsToViewport ( selectionX, mSelectionYTop, vxSel,vySel);
1314 int off = mSelectionHeight; 1320 int off = mSelectionHeight;
1315 if ( vySel < 0 ) 1321 if ( vySel < 0 )
1316 off += vySel; 1322 off += vySel;
1317 //qDebug("OFF %d %d %d", off,vySel, vy ); 1323 //qDebug("OFF %d %d %d", off,vySel, vy );
1318 bitBlt ( pd, vx, vy+off, &mPaintPixmap, cx, cy+off, cw , ch-off ,CopyROP); 1324 bitBlt ( pd, vx, vy+off, &mPaintPixmap, cx, cy+off, cw , ch-off ,CopyROP);
1319 } else { 1325 } else {
1320 bitBlt ( pd, vx, vy, &mPaintPixmap, cx, cy, cw, ch ,CopyROP); 1326 bitBlt ( pd, vx, vy, &mPaintPixmap, cx, cy, cw, ch ,CopyROP);
1321 } 1327 }
1322 } 1328 }
1323 if ( mSelectionHeight > 0 ) { 1329 if ( mSelectionHeight > 0 ) {
1324 //qDebug("---- %d %d %d %d ", selectionX, mSelectionYTop, mGridSpacingX, mSelectionHeight ); 1330 //qDebug("---- %d %d %d %d ", selectionX, mSelectionYTop, mGridSpacingX, mSelectionHeight );
1325 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && 1331 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) &&
1326 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { 1332 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) {
1327 contentsToViewport ( selectionX, mSelectionYTop, vx,vy); 1333 contentsToViewport ( selectionX, mSelectionYTop, vx,vy);
1328 // bitBlt ( pd, vx+1, vy, &mHighlightPixmap, 0, mSelectionYTop, mGridSpacingX-1, mSelectionHeight ,CopyROP); 1334 // bitBlt ( pd, vx+1, vy, &mHighlightPixmap, 0, mSelectionYTop, mGridSpacingX-1, mSelectionHeight ,CopyROP);
1329 int hei = mSelectionHeight; 1335 int hei = mSelectionHeight;
1330 int offset = 0; 1336 int offset = 0;
1331 while ( hei > 0 ) { 1337 while ( hei > 0 ) {
1332 int p_hei = 5; 1338 int p_hei = 5;
1333 if ( hei < 5 ) p_hei = hei; 1339 if ( hei < 5 ) p_hei = hei;
1334 hei -= 5; 1340 hei -= 5;
1335 bitBlt ( pd, vx+1, vy+offset, &mHighlightPixmap, 0, 0, mGridSpacingX-1, p_hei ,CopyROP); 1341 bitBlt ( pd, vx+1, vy+offset, &mHighlightPixmap, 0, 0, mGridSpacingX-1, p_hei ,CopyROP);
1336 offset += 5; 1342 offset += 5;
1337 } 1343 }
1338 } 1344 }
1339 } 1345 }
1340 p->begin( pd ); 1346 p->begin( pd );
1341 } else { 1347 } else {
1342#if 0 1348#if 0
1343 qDebug("mCurPixWid %d %d ",mCurPixWid, contentsWidth() ); 1349 qDebug("mCurPixWid %d %d ",mCurPixWid, contentsWidth() );
1344 if ( mCurPixWid != contentsWidth() || mCurPixHei != contentsHeight() ) { 1350 if ( mCurPixWid != contentsWidth() || mCurPixHei != contentsHeight() ) {
1345 qDebug("WAUWAU "); 1351 qDebug("WAUWAU ");
1346 drawContentsToPainter(); 1352 drawContentsToPainter();
1347 } 1353 }
1348#endif 1354#endif
1349 QPaintDevice* pd = p->device(); 1355 QPaintDevice* pd = p->device();
1350 p->end(); 1356 p->end();
1351 int vx, vy; 1357 int vx, vy;
1352 int selectionX = KOGlobals::self()->reverseLayout() ? 1358 int selectionX = KOGlobals::self()->reverseLayout() ?
1353 (mColumns - 1 - mSelectionCellX) * mGridSpacingX : 1359 (mColumns - 1 - mSelectionCellX) * mGridSpacingX :
1354 mSelectionCellX * mGridSpacingX; 1360 mSelectionCellX * mGridSpacingX;
1355 contentsToViewport ( cx, cy, vx,vy); 1361 contentsToViewport ( cx, cy, vx,vy);
1356 // qDebug(" %d %d %d %d ", cx, cy, cw,ch) ; 1362 // qDebug(" %d %d %d %d ", cx, cy, cw,ch) ;
1357 if ( !(selectionX == cx && cy == mSelectionYTop && cw ==mGridSpacingX && ch == mSelectionHeight ) ) 1363 if ( !(selectionX == cx && cy == mSelectionYTop && cw ==mGridSpacingX && ch == mSelectionHeight ) )
1358 bitBlt ( pd, vx, vy, &mPaintPixmap, cx, cy, cw, ch ,CopyROP); 1364 bitBlt ( pd, vx, vy, &mPaintPixmap, cx, cy, cw, ch ,CopyROP);
1359 1365
1360 if ( mSelectionHeight > 0 ) { 1366 if ( mSelectionHeight > 0 ) {
1361 //qDebug("---- %d %d %d %d ", selectionX, mSelectionYTop, mGridSpacingX, mSelectionHeight ); 1367 //qDebug("---- %d %d %d %d ", selectionX, mSelectionYTop, mGridSpacingX, mSelectionHeight );
1362 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && 1368 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) &&
1363 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { 1369 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) {
1364 contentsToViewport ( selectionX, mSelectionYTop, vx,vy); 1370 contentsToViewport ( selectionX, mSelectionYTop, vx,vy);
1365 //bitBlt ( pd, vx+1, vy, &mHighlightPixmap, 0, mSelectionYTop, mGridSpacingX-1, mSelectionHeight ,CopyROP); 1371 //bitBlt ( pd, vx+1, vy, &mHighlightPixmap, 0, mSelectionYTop, mGridSpacingX-1, mSelectionHeight ,CopyROP);
1366 int hei = mSelectionHeight; 1372 int hei = mSelectionHeight;
1367 int offset = 0; 1373 int offset = 0;
1368 while ( hei > 0 ) { 1374 while ( hei > 0 ) {
1369 int p_hei = 5; 1375 int p_hei = 5;
1370 if ( hei < 5 ) p_hei = hei; 1376 if ( hei < 5 ) p_hei = hei;
1371 hei -= 5; 1377 hei -= 5;
1372 bitBlt ( pd, vx+1, vy+offset, &mHighlightPixmap, 0, 0, mGridSpacingX-1, p_hei ,CopyROP); 1378 bitBlt ( pd, vx+1, vy+offset, &mHighlightPixmap, 0, 0, mGridSpacingX-1, p_hei ,CopyROP);
1373 offset += 5; 1379 offset += 5;
1374 } 1380 }
1375 } 1381 }
1376 } 1382 }
1377 p->begin( pd ); 1383 p->begin( pd );
1378 } 1384 }
1379 1385
1380} 1386}
1381 1387
1382void KOAgenda::finishUpdate() 1388void KOAgenda::finishUpdate()
1383{ 1389{
1384 1390
1385 KOAgendaItem *item; 1391 KOAgendaItem *item;
1386 globalFlagBlockAgendaItemPaint = 1; 1392 globalFlagBlockAgendaItemPaint = 1;
1387 // Adjust sub cell geometry of all conflict items of all conflict items of all conflict items ... of the conflict item with the max number of conflictitems 1393 // Adjust sub cell geometry of all conflict items of all conflict items of all conflict items ... of the conflict item with the max number of conflictitems
1388 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1394 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1389 if ( !item->checkLayout() ) { 1395 if ( !item->checkLayout() ) {
1390 //qDebug(" conflictitem found "); 1396 //qDebug(" conflictitem found ");
1391 int newSubCellWidth; 1397 int newSubCellWidth;
1392 if (mAllDayMode) newSubCellWidth = mGridSpacingY / item->subCells(); 1398 if (mAllDayMode) newSubCellWidth = mGridSpacingY / item->subCells();
1393 else newSubCellWidth = mGridSpacingX / item->subCells(); 1399 else newSubCellWidth = mGridSpacingX / item->subCells();
1394 1400
1395 if (mAllDayMode) { 1401 if (mAllDayMode) {
1396 item->resize(item->cellWidth() * mGridSpacingX, newSubCellWidth); 1402 item->resize(item->cellWidth() * mGridSpacingX, newSubCellWidth);
1397 } else { 1403 } else {
1398 item->resize(newSubCellWidth, item->cellHeight() * mGridSpacingY); 1404 item->resize(newSubCellWidth, item->cellHeight() * mGridSpacingY);
1399 } 1405 }
1400 int x,y; 1406 int x,y;
1401 gridToContents(item->cellX(),item->cellYTop(),x,y); 1407 gridToContents(item->cellX(),item->cellYTop(),x,y);
1402 if (mAllDayMode) { 1408 if (mAllDayMode) {
1403 y += item->subCell() * newSubCellWidth; 1409 y += item->subCell() * newSubCellWidth;
1404 } else { 1410 } else {
1405 x += item->subCell() * newSubCellWidth; 1411 x += item->subCell() * newSubCellWidth;
1406 } 1412 }
1407 moveChild(item,x,y); 1413 moveChild(item,x,y);
1408 } 1414 }
1409 } 1415 }
1410 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1416 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1411 if ( !item->isVisible() ) 1417 if ( !item->isVisible() )
1412 item->show(); 1418 item->show();
1413 1419
1414 } 1420 }
1415 globalFlagBlockAgendaItemUpdate = 0; 1421 globalFlagBlockAgendaItemUpdate = 0;
1416 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1422 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1417 item->repaintMe( ); 1423 item->repaintMe( );
1418 } 1424 }
1419 globalFlagBlockAgendaItemUpdate = 1; 1425 globalFlagBlockAgendaItemUpdate = 1;
1420 qApp->processEvents(); 1426 qApp->processEvents();
1421 globalFlagBlockAgendaItemPaint = 0; 1427 globalFlagBlockAgendaItemPaint = 0;
1422 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1428 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1423 item->repaint( false ); 1429 item->repaint( false );
1424 } 1430 }
1425 marcus_bains(); 1431 marcus_bains();
1426} 1432}
1427 1433
1428/* 1434/*
1429 Draw grid in the background of the agenda. 1435 Draw grid in the background of the agenda.
1430*/ 1436*/
1431void KOAgenda::drawContentsToPainter( QPainter* paint, bool backgroundOnly )// int cx, int cy, int cw, int ch) 1437void KOAgenda::drawContentsToPainter( QPainter* paint, bool backgroundOnly )// int cx, int cy, int cw, int ch)
1432{ 1438{
1433 1439
1434 1440
1435 if ( ! mGridSpacingX || ! mGridSpacingY ||! mHolidayMask ) 1441 if ( ! mGridSpacingX || ! mGridSpacingY ||! mHolidayMask )
1436 return; 1442 return;
1437 if ( globalFlagBlockAgenda > 1 && globalFlagBlockAgenda < 4 ) 1443 if ( globalFlagBlockAgenda > 1 && globalFlagBlockAgenda < 4 )
1438 return; 1444 return;
1439 int cx = 0, cy = 0, cw = contentsWidth(), ch = contentsHeight(); 1445 int cx = 0, cy = 0, cw = contentsWidth(), ch = contentsHeight();
1440 if ( ch < 1 ) 1446 if ( ch < 1 )
1441 ch = 1; 1447 ch = 1;
1442 if ( mPaintPixmap.width() < contentsWidth()+42 || mPaintPixmap.height() < ch ) { 1448 if ( mPaintPixmap.width() < contentsWidth()+42 || mPaintPixmap.height() < ch ) {
1443 mPaintPixmap.resize( contentsWidth()+42, ch ); 1449 mPaintPixmap.resize( contentsWidth()+42, ch );
1444 } 1450 }
1445 mCurPixWid = contentsWidth(); 1451 mCurPixWid = contentsWidth();
1446 mCurPixHei = ch; 1452 mCurPixHei = ch;
1447 if ( mHighlightPixmap.width() < mGridSpacingX-1 ) { 1453 if ( mHighlightPixmap.width() < mGridSpacingX-1 ) {
1448 mHighlightPixmap.resize( mGridSpacingX-1, 5 ); 1454 mHighlightPixmap.resize( mGridSpacingX-1, 5 );
1449 mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor ); 1455 mHighlightPixmap.fill ( KOPrefs::instance()->mHighlightColor );
1450 } 1456 }
1451 mPixPainter.begin( &mPaintPixmap) ; 1457 mPixPainter.begin( &mPaintPixmap) ;
1452 //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() ); 1458 //qDebug("wid %d hei %d ",mPaintPixmap.width(),mPaintPixmap.height() );
1453 QPainter * p ; 1459 QPainter * p ;
1454 if (paint == 0) { 1460 if (paint == 0) {
1455 mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor); 1461 mPaintPixmap.fill(KOPrefs::instance()->mAgendaBgColor);
1456 p = &mPixPainter; 1462 p = &mPixPainter;
1457 } 1463 }
1458 else 1464 else
1459 p = paint ; 1465 p = paint ;
1460 // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch); 1466 // qDebug("++++++KOAgenda::drawContentsTo Painter %d %d %d %d ", cx, cy, cw, ch);
1461 1467
1462 //--cx;++cw; 1468 //--cx;++cw;
1463 int lGridSpacingY = mGridSpacingY*2; 1469 int lGridSpacingY = mGridSpacingY*2;
1464 int selDay; 1470 int selDay;
1465 QDate curDate = QDate::currentDate(); 1471 QDate curDate = QDate::currentDate();
1466 if ( !backgroundOnly ) { 1472 if ( !backgroundOnly ) {
1467 for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay) 1473 for ( selDay = 0; selDay < mSelectedDates.count(); ++selDay)
1468 { 1474 {
1469 if ( mSelectedDates[selDay] == curDate && KOPrefs::instance()->mHighlightCurrentDay) { 1475 if ( mSelectedDates[selDay] == curDate && KOPrefs::instance()->mHighlightCurrentDay) {
1470 int x1 = cx; 1476 int x1 = cx;
1471 int y1 = 0; 1477 int y1 = 0;
1472 if (y1 < cy) y1 = cy; 1478 if (y1 < cy) y1 = cy;
1473 int x2 = cx+cw-1; 1479 int x2 = cx+cw-1;
1474 int y2 = contentsHeight(); 1480 int y2 = contentsHeight();
1475 if (y2 > cy+ch-1) y2=cy+ch-1; 1481 if (y2 > cy+ch-1) y2=cy+ch-1;
1476 if (x2 >= x1 && y2 >= y1) { 1482 if (x2 >= x1 && y2 >= y1) {
1477 int gxStart = selDay; 1483 int gxStart = selDay;
1478 int gxEnd = gxStart ; 1484 int gxEnd = gxStart ;
1479 int xStart = KOGlobals::self()->reverseLayout() ? 1485 int xStart = KOGlobals::self()->reverseLayout() ?
1480 (mColumns - 1 - gxStart)*mGridSpacingX : 1486 (mColumns - 1 - gxStart)*mGridSpacingX :
1481 gxStart*mGridSpacingX; 1487 gxStart*mGridSpacingX;
1482 if (xStart < x1) xStart = x1; 1488 if (xStart < x1) xStart = x1;
1483 int xEnd = KOGlobals::self()->reverseLayout() ? 1489 int xEnd = KOGlobals::self()->reverseLayout() ?
1484 (mColumns - gxStart)*mGridSpacingX-1 : 1490 (mColumns - gxStart)*mGridSpacingX-1 :
1485 (gxStart+1)*mGridSpacingX-1; 1491 (gxStart+1)*mGridSpacingX-1;
1486 if (xEnd > x2) xEnd = x2; 1492 if (xEnd > x2) xEnd = x2;
1487 if ( KOPrefs::instance()->mUseHighlightLightColor ) 1493 if ( KOPrefs::instance()->mUseHighlightLightColor )
1488 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1494 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1489 KOPrefs::instance()->mAgendaBgColor.light()); 1495 KOPrefs::instance()->mAgendaBgColor.light());
1490 else 1496 else
1491 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1497 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1492 KOPrefs::instance()->mAgendaBgColor.dark()); 1498 KOPrefs::instance()->mAgendaBgColor.dark());
1493 1499
1494 } 1500 }
1495 } 1501 }
1496 } 1502 }
1497 } 1503 }
1498 // Highlight working hours 1504 // Highlight working hours
1499 1505
1500 if ( !backgroundOnly ) 1506 if ( !backgroundOnly )
1501 if (mWorkingHoursEnable) { 1507 if (mWorkingHoursEnable) {
1502 int x1 = cx; 1508 int x1 = cx;
1503 int y1 = mWorkingHoursYTop; 1509 int y1 = mWorkingHoursYTop;
1504 if (y1 < cy) y1 = cy; 1510 if (y1 < cy) y1 = cy;
1505 int x2 = cx+cw-1; 1511 int x2 = cx+cw-1;
1506 // int x2 = mGridSpacingX * 5 - 1; 1512 // int x2 = mGridSpacingX * 5 - 1;
1507 // if (x2 > cx+cw-1) x2 = cx + cw - 1; 1513 // if (x2 > cx+cw-1) x2 = cx + cw - 1;
1508 int y2 = mWorkingHoursYBottom; 1514 int y2 = mWorkingHoursYBottom;
1509 if (y2 > cy+ch-1) y2=cy+ch-1; 1515 if (y2 > cy+ch-1) y2=cy+ch-1;
1510 1516
1511 if (x2 >= x1 && y2 >= y1) { 1517 if (x2 >= x1 && y2 >= y1) {
1512 // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX ); 1518 // qDebug("x1 %d mGridSpacingX %d ", x1, mGridSpacingX );
1513 int gxStart = x1/mGridSpacingX; 1519 int gxStart = x1/mGridSpacingX;
1514 int gxEnd = x2/mGridSpacingX; 1520 int gxEnd = x2/mGridSpacingX;
1515 while(gxStart <= gxEnd) { 1521 while(gxStart <= gxEnd) {
1516 if (gxStart < int(mHolidayMask->count()) && 1522 if (gxStart < int(mHolidayMask->count()) &&
1517 !mHolidayMask->at(gxStart)) { 1523 !mHolidayMask->at(gxStart)) {
1518 int xStart = KOGlobals::self()->reverseLayout() ? 1524 int xStart = KOGlobals::self()->reverseLayout() ?
1519 (mColumns - 1 - gxStart)*mGridSpacingX : 1525 (mColumns - 1 - gxStart)*mGridSpacingX :
1520 gxStart*mGridSpacingX; 1526 gxStart*mGridSpacingX;
1521 if (xStart < x1) xStart = x1; 1527 if (xStart < x1) xStart = x1;
1522 int xEnd = KOGlobals::self()->reverseLayout() ? 1528 int xEnd = KOGlobals::self()->reverseLayout() ?
1523 (mColumns - gxStart)*mGridSpacingX-1 : 1529 (mColumns - gxStart)*mGridSpacingX-1 :
1524 (gxStart+1)*mGridSpacingX-1; 1530 (gxStart+1)*mGridSpacingX-1;
1525 if (xEnd > x2) xEnd = x2; 1531 if (xEnd > x2) xEnd = x2;
1526 if ( mSelectedDates[gxStart] == curDate && KOPrefs::instance()->mHighlightCurrentDay ) { 1532 if ( mSelectedDates[gxStart] == curDate && KOPrefs::instance()->mHighlightCurrentDay ) {
1527 if ( KOPrefs::instance()->mUseHighlightLightColor ) 1533 if ( KOPrefs::instance()->mUseHighlightLightColor )
1528 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1534 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1529 KOPrefs::instance()->mWorkingHoursColor.light()); 1535 KOPrefs::instance()->mWorkingHoursColor.light());
1530 else 1536 else
1531 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1537 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1532 KOPrefs::instance()->mWorkingHoursColor.dark()); 1538 KOPrefs::instance()->mWorkingHoursColor.dark());
1533 } else { 1539 } else {
1534 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1, 1540 p->fillRect(xStart,y1,xEnd-xStart+1,y2-y1+1,
1535 KOPrefs::instance()->mWorkingHoursColor); 1541 KOPrefs::instance()->mWorkingHoursColor);
1536 } 1542 }
1537 } 1543 }
1538 ++gxStart; 1544 ++gxStart;
1539 } 1545 }
1540 } 1546 }
1541 } 1547 }
1542 /* 1548 /*
1543 int selectionX = KOGlobals::self()->reverseLayout() ? 1549 int selectionX = KOGlobals::self()->reverseLayout() ?
1544 (mColumns - 1 - mSelectionCellX) * mGridSpacingX : 1550 (mColumns - 1 - mSelectionCellX) * mGridSpacingX :
1545 mSelectionCellX * mGridSpacingX; 1551 mSelectionCellX * mGridSpacingX;
1546 1552
1547 // Draw selection 1553 // Draw selection
1548 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) && 1554 if ( ( cx + cw ) >= selectionX && cx <= ( selectionX + mGridSpacingX ) &&
1549 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) { 1555 ( cy + ch ) >= mSelectionYTop && cy <= ( mSelectionYTop + mSelectionHeight ) ) {
1550 // TODO: paint only part within cx,cy,cw,ch 1556 // TODO: paint only part within cx,cy,cw,ch
1551 p->fillRect( selectionX, mSelectionYTop, mGridSpacingX, 1557 p->fillRect( selectionX, mSelectionYTop, mGridSpacingX,
1552 mSelectionHeight, KOPrefs::instance()->mHighlightColor ); 1558 mSelectionHeight, KOPrefs::instance()->mHighlightColor );
1553 } 1559 }
1554 */ 1560 */
1555 // Draw vertical lines of grid 1561 // Draw vertical lines of grid
1556 1562
1557 int x = ((int)(cx/mGridSpacingX))*mGridSpacingX; 1563 int x = ((int)(cx/mGridSpacingX))*mGridSpacingX;
1558 if ( mGridSpacingX > 0 ) { 1564 if ( mGridSpacingX > 0 ) {
1559 while (x < cx + cw) { 1565 while (x < cx + cw) {
1560 p->drawLine(x,cy,x,cy+ch); 1566 p->drawLine(x,cy,x,cy+ch);
1561 x+=mGridSpacingX; 1567 x+=mGridSpacingX;
1562 } 1568 }
1563 } 1569 }
1564 // Draw horizontal lines of grid 1570 // Draw horizontal lines of grid
1565 int y = ((int)(cy/lGridSpacingY))*lGridSpacingY; 1571 int y = ((int)(cy/lGridSpacingY))*lGridSpacingY;
1566 if ( lGridSpacingY > 0 ) { 1572 if ( lGridSpacingY > 0 ) {
1567 while (y < cy + ch) { 1573 while (y < cy + ch) {
1568 p->setPen( SolidLine ); 1574 p->setPen( SolidLine );
1569 p->drawLine(cx,y,cx+cw,y); 1575 p->drawLine(cx,y,cx+cw,y);
1570 y+=lGridSpacingY; 1576 y+=lGridSpacingY;
1571 p->setPen( DotLine ); 1577 p->setPen( DotLine );
1572 p->drawLine(cx,y,cx+cw,y); 1578 p->drawLine(cx,y,cx+cw,y);
1573 y+=lGridSpacingY; 1579 y+=lGridSpacingY;
1574 } 1580 }
1575 p->setPen( SolidLine ); 1581 p->setPen( SolidLine );
1576 } 1582 }
1577 mPixPainter.end() ; 1583 mPixPainter.end() ;
1578} 1584}
1579 1585
1580/* 1586/*
1581 Convert srcollview contents coordinates to agenda grid coordinates. 1587 Convert srcollview contents coordinates to agenda grid coordinates.
1582*/ 1588*/
1583void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy) 1589void KOAgenda::contentsToGrid (int x, int y, int& gx, int& gy)
1584{ 1590{
1585 gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX : 1591 gx = KOGlobals::self()->reverseLayout() ? mColumns - 1 - x/mGridSpacingX :
1586 x/mGridSpacingX; 1592 x/mGridSpacingX;
1587 gy = y/mGridSpacingY; 1593 gy = y/mGridSpacingY;
1588} 1594}
1589 1595
1590/* 1596/*
1591 Convert agenda grid coordinates to scrollview contents coordinates. 1597 Convert agenda grid coordinates to scrollview contents coordinates.
1592*/ 1598*/
1593void KOAgenda::gridToContents (int gx, int gy, int& x, int& y) 1599void KOAgenda::gridToContents (int gx, int gy, int& x, int& y)
1594{ 1600{
1595 x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX: 1601 x = KOGlobals::self()->reverseLayout() ? (mColumns - 1 - gx)*mGridSpacingX:
1596 gx*mGridSpacingX; 1602 gx*mGridSpacingX;
1597 y = gy*mGridSpacingY; 1603 y = gy*mGridSpacingY;
1598} 1604}
1599 1605
1600 1606
1601/* 1607/*
1602 Return Y coordinate corresponding to time. Coordinates are rounded to fit into 1608 Return Y coordinate corresponding to time. Coordinates are rounded to fit into
1603 the grid. 1609 the grid.
1604*/ 1610*/
1605int KOAgenda::timeToY(const QTime &time) 1611int KOAgenda::timeToY(const QTime &time)
1606{ 1612{
1607 int minutesPerCell = 24 * 60 / mRows; 1613 int minutesPerCell = 24 * 60 / mRows;
1608 int timeMinutes = time.hour() * 60 + time.minute(); 1614 int timeMinutes = time.hour() * 60 + time.minute();
1609 int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell; 1615 int Y = (timeMinutes + (minutesPerCell / 2)) / minutesPerCell;
1610 return Y; 1616 return Y;
1611} 1617}
1612 1618
1613 1619
1614/* 1620/*
1615 Return time corresponding to cell y coordinate. Coordinates are rounded to 1621 Return time corresponding to cell y coordinate. Coordinates are rounded to
1616 fit into the grid. 1622 fit into the grid.
1617*/ 1623*/
1618QTime KOAgenda::gyToTime(int gy) 1624QTime KOAgenda::gyToTime(int gy)
1619{ 1625{
1620 1626
1621 int secondsPerCell = 24 * 60 * 60/ mRows; 1627 int secondsPerCell = 24 * 60 * 60/ mRows;
1622 1628
1623 int timeSeconds = secondsPerCell * gy; 1629 int timeSeconds = secondsPerCell * gy;
1624 1630
1625 QTime time( 0, 0, 0 ); 1631 QTime time( 0, 0, 0 );
1626 if ( timeSeconds < 24 * 60 * 60 ) { 1632 if ( timeSeconds < 24 * 60 * 60 ) {
1627 time = time.addSecs(timeSeconds); 1633 time = time.addSecs(timeSeconds);
1628 } else { 1634 } else {
1629 time.setHMS( 23, 59, 59 ); 1635 time.setHMS( 23, 59, 59 );
1630 } 1636 }
1631 1637
1632 return time; 1638 return time;
1633} 1639}
1634 1640
1635void KOAgenda::setStartHour(int startHour) 1641void KOAgenda::setStartHour(int startHour)
1636{ 1642{
1637 int startCell = startHour * mRows / 24; 1643 int startCell = startHour * mRows / 24;
1638 setContentsPos(0,startCell * gridSpacingY()); 1644 setContentsPos(0,startCell * gridSpacingY());
1639} 1645}
1640QTime KOAgenda::getEndTime() 1646QTime KOAgenda::getEndTime()
1641{ 1647{
1642 int tim = (contentsY ()+viewport()->height())*24/contentsHeight (); 1648 int tim = (contentsY ()+viewport()->height())*24/contentsHeight ();
1643 if ( tim > 23 ) 1649 if ( tim > 23 )
1644 return QTime ( 23,59,59); 1650 return QTime ( 23,59,59);
1645 return QTime ( tim,0,0); 1651 return QTime ( tim,0,0);
1646} 1652}
1647void KOAgenda::hideUnused() 1653void KOAgenda::hideUnused()
1648{ 1654{
1649 // experimental only 1655 // experimental only
1650 // return; 1656 // return;
1651 KOAgendaItem *item; 1657 KOAgendaItem *item;
1652 for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) { 1658 for ( item=mUnusedItems.first(); item != 0; item=mUnusedItems.next() ) {
1653 item->hide(); 1659 item->hide();
1654 } 1660 }
1655} 1661}
1656 1662
1657 1663
1658KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view) 1664KOAgendaItem *KOAgenda::getNewItem(Incidence * event,QDate qd, QWidget* view)
1659{ 1665{
1660 1666
1661 KOAgendaItem *fi; 1667 KOAgendaItem *fi;
1662 for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) { 1668 for ( fi=mUnusedItems.first(); fi != 0; fi=mUnusedItems.next() ) {
1663 if ( fi->incidence() == event ) { 1669 if ( fi->incidence() == event ) {
1664 mUnusedItems.remove(); 1670 mUnusedItems.remove();
1665 fi->init( event, qd ); 1671 fi->init( event, qd );
1666 return fi; 1672 return fi;
1667 } 1673 }
1668 } 1674 }
1669 fi=mUnusedItems.first(); 1675 fi=mUnusedItems.first();
1670 if ( fi ) { 1676 if ( fi ) {
1671 mUnusedItems.remove(); 1677 mUnusedItems.remove();
1672 fi->init( event, qd ); 1678 fi->init( event, qd );
1673 return fi; 1679 return fi;
1674 } 1680 }
1675 // qDebug("new KOAgendaItem "); 1681 // qDebug("new KOAgendaItem ");
1676 1682
1677 KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode ); 1683 KOAgendaItem* agendaItem = new KOAgendaItem( event, qd, view, mAllDayMode );
1678 agendaItem->installEventFilter(this); 1684 agendaItem->installEventFilter(this);
1679 addChild(agendaItem,0,0); 1685 addChild(agendaItem,0,0);
1680 return agendaItem; 1686 return agendaItem;
1681} 1687}
1682KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo ) 1688KOAgendaItem * KOAgenda::getItemForTodo ( Todo * todo )
1683{ 1689{
1684 KOAgendaItem *item; 1690 KOAgendaItem *item;
1685 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1691 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1686 if ( item->incidence() == todo ) { 1692 if ( item->incidence() == todo ) {
1687 mItems.remove(); 1693 mItems.remove();
1688 return item; 1694 return item;
1689 } 1695 }
1690 } 1696 }
1691 return 0; 1697 return 0;
1692} 1698}
1693 1699
1694 1700
1695void KOAgenda::updateTodo( Todo * todo, int days, bool remove) 1701void KOAgenda::updateTodo( Todo * todo, int days, bool remove)
1696{ 1702{
1697 // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )|| 1703 // ( todo->hasCompletedDate() && todo->completed().date() == currentDate )||
1698 KOAgendaItem *item; 1704 KOAgendaItem *item;
1699 item = getItemForTodo ( todo ); 1705 item = getItemForTodo ( todo );
1700 //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove); 1706 //qDebug("KOAgenda::updateTodo %d %d %d %d", this, todo, days, remove);
1701 if ( item ) { 1707 if ( item ) {
1702 blockSignals( true ); 1708 blockSignals( true );
1703 //qDebug("item found "); 1709 //qDebug("item found ");
1704 item->hide(); 1710 item->hide();
1705 item->setCellX(-2, -1 ); 1711 item->setCellX(-2, -1 );
1706 item->select(false); 1712 item->select(false);
1707 mUnusedItems.append( item ); 1713 mUnusedItems.append( item );
1708 mItems.remove( item ); 1714 mItems.remove( item );
1709 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); 1715 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems();
1710 KOAgendaItem *itemit; 1716 KOAgendaItem *itemit;
1711 //globalFlagBlockAgendaItemPaint = 1; 1717 //globalFlagBlockAgendaItemPaint = 1;
1712 for ( itemit=oldconflictItems.first(); itemit != 0; 1718 for ( itemit=oldconflictItems.first(); itemit != 0;
1713 itemit=oldconflictItems.next() ) { 1719 itemit=oldconflictItems.next() ) {
1714 if ( itemit != item ) 1720 if ( itemit != item )
1715 placeSubCells(itemit); 1721 placeSubCells(itemit);
1716 } 1722 }
1717 qApp->processEvents(); 1723 qApp->processEvents();
1718 //globalFlagBlockAgendaItemPaint = 0; 1724 //globalFlagBlockAgendaItemPaint = 0;
1719 for ( itemit=oldconflictItems.first(); itemit != 0; 1725 for ( itemit=oldconflictItems.first(); itemit != 0;
1720 itemit=oldconflictItems.next() ) { 1726 itemit=oldconflictItems.next() ) {
1721 globalFlagBlockAgendaItemUpdate = 0; 1727 globalFlagBlockAgendaItemUpdate = 0;
1722 if ( itemit != item ) 1728 if ( itemit != item )
1723 itemit->repaintMe(); 1729 itemit->repaintMe();
1724 globalFlagBlockAgendaItemUpdate = 1; 1730 globalFlagBlockAgendaItemUpdate = 1;
1725 //qDebug("sigleshot "); 1731 //qDebug("sigleshot ");
1726 QTimer::singleShot( 0, itemit, SLOT ( repaintItem() )); 1732 QTimer::singleShot( 0, itemit, SLOT ( repaintItem() ));
1727 //itemit->repaint( false ); repaintItem() 1733 //itemit->repaint( false ); repaintItem()
1728 } 1734 }
1729 blockSignals( false ); 1735 blockSignals( false );
1730 } 1736 }
1731 if ( remove ) { 1737 if ( remove ) {
1732 //qDebug("remove****************************************** "); 1738 //qDebug("remove****************************************** ");
1733 return; 1739 return;
1734 } 1740 }
1735 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda ) 1741 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda )
1736 return; 1742 return;
1737 //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ "); 1743 //qDebug("updateTodo+++++++++++++++++++++++++++++++++++++ ");
1738 QDate currentDate = QDate::currentDate(); 1744 QDate currentDate = QDate::currentDate();
1739 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < currentDate)&& ( KOPrefs::instance()->mShowTodoInAgenda ); 1745 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < currentDate)&& ( KOPrefs::instance()->mShowTodoInAgenda );
1740 QDateTime dt; 1746 QDateTime dt;
1741 if ( todo->hasCompletedDate() ) 1747 if ( todo->hasCompletedDate() )
1742 dt = todo->completed(); 1748 dt = todo->completed();
1743 else 1749 else
1744 dt = todo->dtDue(); 1750 dt = todo->dtDue();
1745 if ( overdue ) { 1751 if ( overdue ) {
1746 days += todo->dtDue().date().daysTo( currentDate ); 1752 days += todo->dtDue().date().daysTo( currentDate );
1747 } 1753 }
1748 else 1754 else
1749 currentDate = dt.date(); 1755 currentDate = dt.date();
1750 1756
1751 if (( todo->doesFloat() || overdue) && !todo->hasCompletedDate() ) { 1757 if (( todo->doesFloat() || overdue) && !todo->hasCompletedDate() ) {
1752 if ( ! mAllDayMode ) return; 1758 if ( ! mAllDayMode ) return;
1753 // aldayagenda 1759 // aldayagenda
1754 globalFlagBlockAgendaItemPaint = 1; 1760 globalFlagBlockAgendaItemPaint = 1;
1755 item = insertAllDayItem(todo, currentDate,days, days); 1761 item = insertAllDayItem(todo, currentDate,days, days);
1756 item->show(); 1762 item->show();
1757 1763
1758 } 1764 }
1759 else { 1765 else {
1760 if ( mAllDayMode ) return; 1766 if ( mAllDayMode ) return;
1761 // mAgenda 1767 // mAgenda
1762 globalFlagBlockAgendaItemPaint = 1; 1768 globalFlagBlockAgendaItemPaint = 1;
1763 int endY = timeToY(dt.time()) - 1; 1769 int endY = timeToY(dt.time()) - 1;
1764 int hi = 12/KOPrefs::instance()->mHourSize; 1770 int hi = 12/KOPrefs::instance()->mHourSize;
1765 int startY = endY - 1-hi; 1771 int startY = endY - 1-hi;
1766 item = insertItem(todo,currentDate,days,startY,endY); 1772 item = insertItem(todo,currentDate,days,startY,endY);
1767 item->show(); 1773 item->show();
1768 } 1774 }
1769 qApp->processEvents(); 1775 qApp->processEvents();
1770 globalFlagBlockAgendaItemPaint = 0; 1776 globalFlagBlockAgendaItemPaint = 0;
1771 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems(); 1777 QPtrList<KOAgendaItem> oldconflictItems = item->conflictItems();
1772 KOAgendaItem *itemit; 1778 KOAgendaItem *itemit;
1773 for ( itemit=oldconflictItems.first(); itemit != 0; 1779 for ( itemit=oldconflictItems.first(); itemit != 0;
1774 itemit=oldconflictItems.next() ) { 1780 itemit=oldconflictItems.next() ) {
1775 globalFlagBlockAgendaItemUpdate = 0; 1781 globalFlagBlockAgendaItemUpdate = 0;
1776 itemit->repaintMe(); 1782 itemit->repaintMe();
1777 globalFlagBlockAgendaItemUpdate = 1; 1783 globalFlagBlockAgendaItemUpdate = 1;
1778 itemit->repaint(); 1784 itemit->repaint();
1779 } 1785 }
1780 globalFlagBlockAgendaItemUpdate = 0; 1786 globalFlagBlockAgendaItemUpdate = 0;
1781 item->repaintMe(); 1787 item->repaintMe();
1782 globalFlagBlockAgendaItemUpdate = 1; 1788 globalFlagBlockAgendaItemUpdate = 1;
1783 item->repaint(); 1789 item->repaint();
1784} 1790}
1785/* 1791/*
1786 Insert KOAgendaItem into agenda. 1792 Insert KOAgendaItem into agenda.
1787*/ 1793*/
1788KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom) 1794KOAgendaItem *KOAgenda::insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom)
1789{ 1795{
1790 if (mAllDayMode) { 1796 if (mAllDayMode) {
1791 qDebug("KOAgenda: calling insertItem in all-day mode is illegal. "); 1797 qDebug("KOAgenda: calling insertItem in all-day mode is illegal. ");
1792 return 0; 1798 return 0;
1793 } 1799 }
1794 1800
1795 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); 1801 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport());
1796 //agendaItem->setFrameStyle(WinPanel|Raised); 1802 //agendaItem->setFrameStyle(WinPanel|Raised);
1797 1803
1798 int YSize = YBottom - YTop + 1; 1804 int YSize = YBottom - YTop + 1;
1799 if (YSize < 0) { 1805 if (YSize < 0) {
1800 YSize = 1; 1806 YSize = 1;
1801 } 1807 }
1802 int iheight = mGridSpacingY * YSize; 1808 int iheight = mGridSpacingY * YSize;
1803 1809
1804 agendaItem->resize(mGridSpacingX,iheight ); 1810 agendaItem->resize(mGridSpacingX,iheight );
1805 agendaItem->setCellXY(X,YTop,YBottom); 1811 agendaItem->setCellXY(X,YTop,YBottom);
1806 agendaItem->setCellXWidth(X); 1812 agendaItem->setCellXWidth(X);
1807 1813
1808 //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY); 1814 //addChild(agendaItem,X*mGridSpacingX,YTop*mGridSpacingY);
1809 mItems.append(agendaItem); 1815 mItems.append(agendaItem);
1810 1816
1811 placeSubCells(agendaItem); 1817 placeSubCells(agendaItem);
1812 1818
1813 //agendaItem->show(); 1819 //agendaItem->show();
1814 1820
1815 1821
1816 return agendaItem; 1822 return agendaItem;
1817} 1823}
1818 1824
1819 1825
1820/* 1826/*
1821 Insert all-day KOAgendaItem into agenda. 1827 Insert all-day KOAgendaItem into agenda.
1822*/ 1828*/
1823KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd) 1829KOAgendaItem *KOAgenda::insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd)
1824{ 1830{
1825 if (!mAllDayMode) { 1831 if (!mAllDayMode) {
1826 return 0; 1832 return 0;
1827 } 1833 }
1828 1834
1829 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport()); 1835 KOAgendaItem *agendaItem = getNewItem(event,qd,viewport());
1830 1836
1831 agendaItem->setCellXY(XBegin,0,0); 1837 agendaItem->setCellXY(XBegin,0,0);
1832 agendaItem->setCellXWidth(XEnd); 1838 agendaItem->setCellXWidth(XEnd);
1833 agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY); 1839 agendaItem->resize(mGridSpacingX * agendaItem->cellWidth(),mGridSpacingY);
1834 1840
1835 //addChild(agendaItem,XBegin*mGridSpacingX,0); 1841 //addChild(agendaItem,XBegin*mGridSpacingX,0);
1836 mItems.append(agendaItem); 1842 mItems.append(agendaItem);
1837 1843
1838 placeSubCells(agendaItem); 1844 placeSubCells(agendaItem);
1839 1845
1840 //agendaItem->show(); 1846 //agendaItem->show();
1841 1847
1842 return agendaItem; 1848 return agendaItem;
1843} 1849}
1844 1850
1845 1851
1846void KOAgenda::insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, 1852void KOAgenda::insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd,
1847 int YTop,int YBottom) 1853 int YTop,int YBottom)
1848{ 1854{
1849 if (mAllDayMode) { 1855 if (mAllDayMode) {
1850 ; 1856 ;
1851 return; 1857 return;
1852 } 1858 }
1853 1859
1854 int cellX,cellYTop,cellYBottom; 1860 int cellX,cellYTop,cellYBottom;
1855 QString newtext; 1861 QString newtext;
1856 int width = XEnd - XBegin + 1; 1862 int width = XEnd - XBegin + 1;
1857 int count = 0; 1863 int count = 0;
1858 KOAgendaItem *current = 0; 1864 KOAgendaItem *current = 0;
1859 QPtrList<KOAgendaItem> multiItems; 1865 QPtrList<KOAgendaItem> multiItems;
1860 for (cellX = XBegin;cellX <= XEnd;++cellX) { 1866 for (cellX = XBegin;cellX <= XEnd;++cellX) {
1861 if (cellX == XBegin) cellYTop = YTop; 1867 if (cellX == XBegin) cellYTop = YTop;
1862 else cellYTop = 0; 1868 else cellYTop = 0;
1863 if (cellX == XEnd) cellYBottom = YBottom; 1869 if (cellX == XEnd) cellYBottom = YBottom;
1864 else cellYBottom = rows() - 1; 1870 else cellYBottom = rows() - 1;
1865 newtext = QString("(%1/%2): ").arg(++count).arg(width); 1871 newtext = QString("(%1/%2): ").arg(++count).arg(width);
1866 newtext.append(event->summary()); 1872 newtext.append(event->summary());
1867 current = insertItem(event,qd,cellX,cellYTop,cellYBottom); 1873 current = insertItem(event,qd,cellX,cellYTop,cellYBottom);
1868 current->setText(newtext); 1874 current->setText(newtext);
1869 multiItems.append(current); 1875 multiItems.append(current);
1870 } 1876 }
1871 1877
1872 KOAgendaItem *next = 0; 1878 KOAgendaItem *next = 0;
1873 KOAgendaItem *last = multiItems.last(); 1879 KOAgendaItem *last = multiItems.last();
1874 KOAgendaItem *first = multiItems.first(); 1880 KOAgendaItem *first = multiItems.first();
1875 KOAgendaItem *setFirst,*setLast; 1881 KOAgendaItem *setFirst,*setLast;
1876 current = first; 1882 current = first;
1877 while (current) { 1883 while (current) {
1878 next = multiItems.next(); 1884 next = multiItems.next();
1879 if (current == first) setFirst = 0; 1885 if (current == first) setFirst = 0;
1880 else setFirst = first; 1886 else setFirst = first;
1881 if (current == last) setLast = 0; 1887 if (current == last) setLast = 0;
1882 else setLast = last; 1888 else setLast = last;
1883 1889
1884 current->setMultiItem(setFirst,next,setLast); 1890 current->setMultiItem(setFirst,next,setLast);
1885 current = next; 1891 current = next;
1886 } 1892 }
1887} 1893}
1888 1894
1889 1895
1890//QSizePolicy KOAgenda::sizePolicy() const 1896//QSizePolicy KOAgenda::sizePolicy() const
1891//{ 1897//{
1892 // Thought this would make the all-day event agenda minimum size and the 1898 // Thought this would make the all-day event agenda minimum size and the
1893 // normal agenda take the remaining space. But it doesn´t work. The QSplitter 1899 // normal agenda take the remaining space. But it doesn´t work. The QSplitter
1894 // don´t seem to think that an Expanding widget needs more space than a 1900 // don´t seem to think that an Expanding widget needs more space than a
1895 // Preferred one. 1901 // Preferred one.
1896 // But it doesn´t hurt, so it stays. 1902 // But it doesn´t hurt, so it stays.
1897// if (mAllDayMode) { 1903// if (mAllDayMode) {
1898// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred); 1904// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
1899// } else { 1905// } else {
1900// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding); 1906// return QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
1901// } 1907// }
1902//} 1908//}
1903void KOAgenda::finishResize ( ) 1909void KOAgenda::finishResize ( )
1904{ 1910{
1905 //qDebug("finishResize+++++++++++++++++++++++++++++++ ( ) "); 1911 //qDebug("finishResize+++++++++++++++++++++++++++++++ ( ) ");
1906 if ( globalFlagBlockAgenda == 0 ) { 1912 if ( globalFlagBlockAgenda == 0 ) {
1907 finishUpdate(); 1913 finishUpdate();
1908 //qDebug("finishUpdate() called "); 1914 //qDebug("finishUpdate() called ");
1909 } 1915 }
1910} 1916}
1911/* 1917/*
1912 Overridden from QScrollView to provide proper resizing of KOAgendaItems. 1918 Overridden from QScrollView to provide proper resizing of KOAgendaItems.
1913*/ 1919*/
1914void KOAgenda::resizeEvent ( QResizeEvent *ev ) 1920void KOAgenda::resizeEvent ( QResizeEvent *ev )
1915{ 1921{
1916 mSelectionHeight = 0; 1922 mSelectionHeight = 0;
1917 mResizeTimer.start( 150 , true ); 1923 mResizeTimer.start( 150 , true );
1918 computeSizes(); 1924 computeSizes();
1919 return; 1925 return;
1920 1926
1921} 1927}
1922void KOAgenda::computeSizes() 1928void KOAgenda::computeSizes()
1923{ 1929{
1924 if ( globalFlagBlockStartup ) 1930 if ( globalFlagBlockStartup )
1925 return; 1931 return;
1926 int frameOffset = frameWidth() * 2 +1; 1932 int frameOffset = frameWidth() * 2 +1;
1927 if (mAllDayMode) { 1933 if (mAllDayMode) {
1928 mGridSpacingX = (width()-frameOffset) / mColumns; 1934 mGridSpacingX = (width()-frameOffset) / mColumns;
1929 mGridSpacingY = height() - 2 * frameWidth() - 1; 1935 mGridSpacingY = height() - 2 * frameWidth() - 1;
1930 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY + 1); 1936 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY + 1);
1931 // mGridSpacingY = height(); 1937 // mGridSpacingY = height();
1932 // resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 1938 // resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
1933 1939
1934 KOAgendaItem *item; 1940 KOAgendaItem *item;
1935 int subCellWidth; 1941 int subCellWidth;
1936 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1942 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1937 subCellWidth = mGridSpacingY / item->subCells(); 1943 subCellWidth = mGridSpacingY / item->subCells();
1938 item->resize(mGridSpacingX * item->cellWidth(),subCellWidth); 1944 item->resize(mGridSpacingX * item->cellWidth(),subCellWidth);
1939 moveChild(item,KOGlobals::self()->reverseLayout() ? 1945 moveChild(item,KOGlobals::self()->reverseLayout() ?
1940 (mColumns - 1 - item->cellX()) * mGridSpacingX : 1946 (mColumns - 1 - item->cellX()) * mGridSpacingX :
1941 item->cellX() * mGridSpacingX, 1947 item->cellX() * mGridSpacingX,
1942 item->subCell() * subCellWidth); 1948 item->subCell() * subCellWidth);
1943 } 1949 }
1944 KOPrefs::instance()->mAllDaySize = mGridSpacingY; 1950 KOPrefs::instance()->mAllDaySize = mGridSpacingY;
1945 } else { 1951 } else {
1946 mGridSpacingX = (width() - verticalScrollBar()->width()-frameOffset)/mColumns; 1952 mGridSpacingX = (width() - verticalScrollBar()->width()-frameOffset)/mColumns;
1947 if (height() > mGridSpacingY * mRows + 1 ) { 1953 if (height() > mGridSpacingY * mRows + 1 ) {
1948 KOPrefs::instance()->mHourSize = ((height())/mRows)+1; 1954 KOPrefs::instance()->mHourSize = ((height())/mRows)+1;
1949 mGridSpacingY = KOPrefs::instance()->mHourSize ; 1955 mGridSpacingY = KOPrefs::instance()->mHourSize ;
1950 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 1956 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
1951 emit resizedSignal(); 1957 emit resizedSignal();
1952 } else 1958 } else
1953 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 1959 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
1954 KOAgendaItem *item; 1960 KOAgendaItem *item;
1955 int subCellWidth; 1961 int subCellWidth;
1956 1962
1957 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 1963 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
1958 subCellWidth = mGridSpacingX / item->subCells(); 1964 subCellWidth = mGridSpacingX / item->subCells();
1959 item->resize(subCellWidth,item->height()); 1965 item->resize(subCellWidth,item->height());
1960 moveChild(item,(KOGlobals::self()->reverseLayout() ? 1966 moveChild(item,(KOGlobals::self()->reverseLayout() ?
1961 (mColumns - 1 - item->cellX()) * mGridSpacingX : 1967 (mColumns - 1 - item->cellX()) * mGridSpacingX :
1962 item->cellX() * mGridSpacingX) + 1968 item->cellX() * mGridSpacingX) +
1963 item->subCell() * subCellWidth,childY(item)); 1969 item->subCell() * subCellWidth,childY(item));
1964 } 1970 }
1965 } 1971 }
1966 int cw = contentsWidth(); 1972 int cw = contentsWidth();
1967 int ch = contentsHeight(); 1973 int ch = contentsHeight();
1968 if ( mAllDayMode ) { 1974 if ( mAllDayMode ) {
1969 QPixmap* paintPixAll = KOAgendaItem::paintPixAllday(); 1975 QPixmap* paintPixAll = KOAgendaItem::paintPixAllday();
1970 if ( (paintPixAll->width() < cw || paintPixAll->height() < ch) && cw > 0 && ch > 0 ) { 1976 if ( (paintPixAll->width() < cw || paintPixAll->height() < ch) && cw > 0 && ch > 0 ) {
1971 //qDebug("paintPixAll->resize "); 1977 //qDebug("paintPixAll->resize ");
1972 paintPixAll->resize( cw, ch ); 1978 paintPixAll->resize( cw, ch );
1973 } 1979 }
1974 } else { 1980 } else {
1975 QPixmap* paintPix = KOAgendaItem::paintPix(); 1981 QPixmap* paintPix = KOAgendaItem::paintPix();
1976 if ( paintPix->width() < cw || paintPix->height() < ch ) { 1982 if ( paintPix->width() < cw || paintPix->height() < ch ) {
1977 //qDebug("paintPix->resize "); 1983 //qDebug("paintPix->resize ");
1978 paintPix->resize( cw , ch ); 1984 paintPix->resize( cw , ch );
1979 } 1985 }
1980 } 1986 }
1981 1987
1982 checkScrollBoundaries(); 1988 checkScrollBoundaries();
1983 drawContentsToPainter(); 1989 drawContentsToPainter();
1984 viewport()->repaint(false); 1990 viewport()->repaint(false);
1985} 1991}
1986 1992
1987void KOAgenda::scrollUp() 1993void KOAgenda::scrollUp()
1988{ 1994{
1989 scrollBy(0,-mScrollOffset); 1995 scrollBy(0,-mScrollOffset);
1990} 1996}
1991 1997
1992 1998
1993void KOAgenda::scrollDown() 1999void KOAgenda::scrollDown()
1994{ 2000{
1995 scrollBy(0,mScrollOffset); 2001 scrollBy(0,mScrollOffset);
1996} 2002}
1997 2003
1998void KOAgenda::popupAlarm() 2004void KOAgenda::popupAlarm()
1999{ 2005{
2000 if (!mClickedItem) { 2006 if (!mClickedItem) {
2001 qDebug("KOAgenda::popupAlarm() called without having a clicked item "); 2007 qDebug("KOAgenda::popupAlarm() called without having a clicked item ");
2002 return; 2008 return;
2003 } 2009 }
2004 // TODO: deal correctly with multiple alarms 2010 // TODO: deal correctly with multiple alarms
2005 Alarm* alarm; 2011 Alarm* alarm;
2006 QPtrList<Alarm> list(mClickedItem->incidence()->alarms()); 2012 QPtrList<Alarm> list(mClickedItem->incidence()->alarms());
2007 for(alarm=list.first();alarm;alarm=list.next()) { 2013 for(alarm=list.first();alarm;alarm=list.next()) {
2008 alarm->toggleAlarm(); 2014 alarm->toggleAlarm();
2009 } 2015 }
2010 emit itemModified( mClickedItem , KOGlobals::EVENTEDITED ); 2016 emit itemModified( mClickedItem , KOGlobals::EVENTEDITED );
2011 mClickedItem->paintMe( true ); 2017 mClickedItem->paintMe( true );
2012 mClickedItem->repaint( false ); 2018 mClickedItem->repaint( false );
2013} 2019}
2014 2020
2015/* 2021/*
2016 Calculates the minimum width 2022 Calculates the minimum width
2017*/ 2023*/
2018int KOAgenda::minimumWidth() const 2024int KOAgenda::minimumWidth() const
2019{ 2025{
2020 // TODO:: develop a way to dynamically determine the minimum width 2026 // TODO:: develop a way to dynamically determine the minimum width
2021 int min = 100; 2027 int min = 100;
2022 2028
2023 return min; 2029 return min;
2024} 2030}
2025 2031
2026void KOAgenda::updateConfig() 2032void KOAgenda::updateConfig()
2027{ 2033{
2028 if ( viewport()->backgroundColor() != KOPrefs::instance()->mAgendaBgColor) 2034 if ( viewport()->backgroundColor() != KOPrefs::instance()->mAgendaBgColor)
2029 viewport()->setBackgroundColor(KOPrefs::instance()->mAgendaBgColor); 2035 viewport()->setBackgroundColor(KOPrefs::instance()->mAgendaBgColor);
2030 if ( mAllDayMode ) { 2036 if ( mAllDayMode ) {
2031 mGridSpacingY = height() - 1 ;// KOPrefs::instance()->mAllDaySize; 2037 mGridSpacingY = height() - 1 ;// KOPrefs::instance()->mAllDaySize;
2032 //mGridSpacingY = KOPrefs::instance()->mAllDaySize; 2038 //mGridSpacingY = KOPrefs::instance()->mAllDaySize;
2033 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY+1 ); 2039 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY+1 );
2034 // setMaximumHeight( mGridSpacingY+1 ); 2040 // setMaximumHeight( mGridSpacingY+1 );
2035 viewport()->repaint( false ); 2041 viewport()->repaint( false );
2036 //setFixedHeight( mGridSpacingY+1 ); 2042 //setFixedHeight( mGridSpacingY+1 );
2037 //qDebug("KOPrefs:aaaaa:instance()->mAllDaySize %d ", KOPrefs::instance()->mAllDaySize); 2043 //qDebug("KOPrefs:aaaaa:instance()->mAllDaySize %d ", KOPrefs::instance()->mAllDaySize);
2038 } 2044 }
2039 else { 2045 else {
2040 mGridSpacingY = KOPrefs::instance()->mHourSize; 2046 mGridSpacingY = KOPrefs::instance()->mHourSize;
2041 calculateWorkingHours(); 2047 calculateWorkingHours();
2042 } 2048 }
2043} 2049}
2044 2050
2045void KOAgenda::checkScrollBoundaries() 2051void KOAgenda::checkScrollBoundaries()
2046{ 2052{
2047 // Invalidate old values to force update 2053 // Invalidate old values to force update
2048 mOldLowerScrollValue = -1; 2054 mOldLowerScrollValue = -1;
2049 mOldUpperScrollValue = -1; 2055 mOldUpperScrollValue = -1;
2050 2056
2051 checkScrollBoundaries(verticalScrollBar()->value()); 2057 checkScrollBoundaries(verticalScrollBar()->value());
2052} 2058}
2053 2059
2054void KOAgenda::checkScrollBoundaries(int v) 2060void KOAgenda::checkScrollBoundaries(int v)
2055{ 2061{
2056 if ( mGridSpacingY == 0 ) 2062 if ( mGridSpacingY == 0 )
diff --git a/korganizer/koagenda.h b/korganizer/koagenda.h
index 59e7472..380ce62 100644
--- a/korganizer/koagenda.h
+++ b/korganizer/koagenda.h
@@ -1,307 +1,308 @@
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#ifndef KOAGENDA_H 23#ifndef KOAGENDA_H
24#define KOAGENDA_H 24#define KOAGENDA_H
25 25
26#include <qscrollview.h> 26#include <qscrollview.h>
27#include <qtimer.h> 27#include <qtimer.h>
28#include <qmemarray.h> 28#include <qmemarray.h>
29#include <qpainter.h> 29#include <qpainter.h>
30#include <qpixmap.h> 30#include <qpixmap.h>
31#include <qguardedptr.h> 31#include <qguardedptr.h>
32 32
33#include "koagendaitem.h" 33#include "koagendaitem.h"
34#include "koeventview.h" 34#include "koeventview.h"
35 35
36class QPopupMenu; 36class QPopupMenu;
37class QTime; 37class QTime;
38class KConfig; 38class KConfig;
39class QFrame; 39class QFrame;
40class KOAgenda; 40class KOAgenda;
41class KCal::Event; 41class KCal::Event;
42class KCal::Todo; 42class KCal::Todo;
43 43
44using namespace KCal; 44using namespace KCal;
45 45
46class MarcusBains : public QFrame { 46class MarcusBains : public QFrame {
47 Q_OBJECT 47 Q_OBJECT
48 public: 48 public:
49 MarcusBains(KOAgenda *agenda=0,const char *name=0); 49 MarcusBains(KOAgenda *agenda=0,const char *name=0);
50 virtual ~MarcusBains(); 50 virtual ~MarcusBains();
51 void hideMe(); 51 void hideMe();
52 public slots: 52 public slots:
53 void updateLocation(bool recalculate=false); 53 void updateLocation(bool recalculate=false);
54 void updateLoc(); 54 void updateLoc();
55 55
56 private: 56 private:
57 int todayColumn(); 57 int todayColumn();
58 QTimer *minutes; 58 QTimer *minutes;
59 QLabel *mTimeBox; 59 QLabel *mTimeBox;
60 KOAgenda *agenda; 60 KOAgenda *agenda;
61 QTime oldTime; 61 QTime oldTime;
62 int oldToday; 62 int oldToday;
63}; 63};
64 64
65 65
66class KOAgenda : public QScrollView 66class KOAgenda : public QScrollView
67{ 67{
68 Q_OBJECT 68 Q_OBJECT
69 public: 69 public:
70 enum MouseActionType { NOP, MOVE, SELECT, 70 enum MouseActionType { NOP, MOVE, SELECT,
71 RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT }; 71 RESIZETOP, RESIZEBOTTOM, RESIZELEFT, RESIZERIGHT };
72 72
73 KOAgenda ( int columns, int rows, int columnSize, QWidget * parent=0, 73 KOAgenda ( int columns, int rows, int columnSize, QWidget * parent=0,
74 const char * name=0, WFlags f=0 ); 74 const char * name=0, WFlags f=0 );
75 KOAgenda ( int columns, QWidget * parent=0, 75 KOAgenda ( int columns, QWidget * parent=0,
76 const char * name=0, WFlags f=0 ); 76 const char * name=0, WFlags f=0 );
77 virtual ~KOAgenda(); 77 virtual ~KOAgenda();
78 bool mInvalidPixmap; 78 bool mInvalidPixmap;
79 79
80 Incidence *selectedIncidence() const; 80 Incidence *selectedIncidence() const;
81 QDate selectedIncidenceDate() const; 81 QDate selectedIncidenceDate() const;
82 82
83 virtual bool eventFilter ( QObject *, QEvent * ); 83 virtual bool eventFilter ( QObject *, QEvent * );
84 84
85 void contentsToGrid (int x, int y, int& gx, int& gy); 85 void contentsToGrid (int x, int y, int& gx, int& gy);
86 void gridToContents (int gx, int gy, int& x, int& y); 86 void gridToContents (int gx, int gy, int& x, int& y);
87 87
88 int timeToY (const QTime &time); 88 int timeToY (const QTime &time);
89 QTime gyToTime (int y); 89 QTime gyToTime (int y);
90 90
91 void setStartHour(int startHour); 91 void setStartHour(int startHour);
92 92
93 KOAgendaItem *insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom); 93 KOAgendaItem *insertItem (Incidence *event,QDate qd,int X,int YTop,int YBottom);
94 KOAgendaItem *insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd); 94 KOAgendaItem *insertAllDayItem (Incidence *event,QDate qd,int XBegin,int XEnd);
95 void insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd, 95 void insertMultiItem (Event *event,QDate qd,int XBegin,int XEnd,
96 int YTop,int YBottom); 96 int YTop,int YBottom);
97 97
98 void changeColumns(int columns); 98 void changeColumns(int columns);
99 99
100 int columns() { return mColumns; } 100 int columns() { return mColumns; }
101 int rows() { return mRows; } 101 int rows() { return mRows; }
102 102
103 int gridSpacingX() const { return mGridSpacingX; } 103 int gridSpacingX() const { return mGridSpacingX; }
104 int gridSpacingY() const { return mGridSpacingY; } 104 int gridSpacingY() const { return mGridSpacingY; }
105 105
106// virtual QSizePolicy sizePolicy() const; 106// virtual QSizePolicy sizePolicy() const;
107 107
108 void clear(); 108 void clear();
109 109
110 void clearSelection(); 110 void clearSelection();
111 void hideUnused(); 111 void hideUnused();
112 112
113 /** Calculates the minimum width */ 113 /** Calculates the minimum width */
114 virtual int minimumWidth() const; 114 virtual int minimumWidth() const;
115 /** Update configuration from preference settings */ 115 /** Update configuration from preference settings */
116 void updateConfig(); 116 void updateConfig();
117 117
118 void checkScrollBoundaries(); 118 void checkScrollBoundaries();
119 119
120 void setHolidayMask(QMemArray<bool> *); 120 void setHolidayMask(QMemArray<bool> *);
121 void setDateList(const DateList &selectedDates); 121 void setDateList(const DateList &selectedDates);
122 DateList dateList() const; 122 DateList dateList() const;
123 void drawContentsToPainter( QPainter* paint = 0, bool backgroundOnly = false); 123 void drawContentsToPainter( QPainter* paint = 0, bool backgroundOnly = false);
124 void finishUpdate(); 124 void finishUpdate();
125 void printSelection(); 125 void printSelection();
126 void storePosition(); 126 void storePosition();
127 void restorePosition(); 127 void restorePosition();
128 void setPopup( KOEventPopupMenu * p ) { mAllAgendaPopup = p; } 128 void setPopup( KOEventPopupMenu * p ) { mAllAgendaPopup = p; }
129 void shrinkPixmap(); 129 void shrinkPixmap();
130 QTime getEndTime(); 130 QTime getEndTime();
131 bool invalidPixmap();
131 132
132 public slots: 133 public slots:
133 void slotContentMove(int,int); 134 void slotContentMove(int,int);
134 void categoryChanged(Incidence * inc); 135 void categoryChanged(Incidence * inc);
135 void slotClearSelection(); 136 void slotClearSelection();
136 void popupMenu(); 137 void popupMenu();
137 void newItem( int ); 138 void newItem( int );
138 void moveChild( QWidget *, int, int ); 139 void moveChild( QWidget *, int, int );
139 void scrollUp(); 140 void scrollUp();
140 void scrollDown(); 141 void scrollDown();
141 void updateTodo( Todo * t, int , bool ); 142 void updateTodo( Todo * t, int , bool );
142 void popupAlarm(); 143 void popupAlarm();
143 144
144 void checkScrollBoundaries(int); 145 void checkScrollBoundaries(int);
145 146
146 /** Deselect selected items. This function does not emit any signals. */ 147 /** Deselect selected items. This function does not emit any signals. */
147 void deselectItem(); 148 void deselectItem();
148 /** Select item. If the argument is 0, the currently selected item gets 149 /** Select item. If the argument is 0, the currently selected item gets
149 deselected. This function emits the itemSelected(bool) signal to inform 150 deselected. This function emits the itemSelected(bool) signal to inform
150 about selection/deseelction of events. */ 151 about selection/deseelction of events. */
151 void selectItem(KOAgendaItem *); 152 void selectItem(KOAgendaItem *);
152 void finishResize(); 153 void finishResize();
153 154
154 signals: 155 signals:
155 void signalClearSelection(); 156 void signalClearSelection();
156 void showDateView( int, int); 157 void showDateView( int, int);
157 void newEventSignal(); 158 void newEventSignal();
158 void newEventSignal(int gx,int gy); 159 void newEventSignal(int gx,int gy);
159 void newTodoSignal(int gx,int gy); 160 void newTodoSignal(int gx,int gy);
160 void newEventSignal(int gxStart, int gyStart, int gxEnd, int gyEnd); 161 void newEventSignal(int gxStart, int gyStart, int gxEnd, int gyEnd);
161 void newTimeSpanSignal(int gxStart, int gyStart, int gxEnd, int gyEnd); 162 void newTimeSpanSignal(int gxStart, int gyStart, int gxEnd, int gyEnd);
162 void newStartSelectSignal(); 163 void newStartSelectSignal();
163 void showIncidenceSignal(Incidence *); 164 void showIncidenceSignal(Incidence *);
164 void editIncidenceSignal(Incidence *); 165 void editIncidenceSignal(Incidence *);
165 void deleteIncidenceSignal(Incidence *); 166 void deleteIncidenceSignal(Incidence *);
166 void showIncidencePopupSignal(Incidence *); 167 void showIncidencePopupSignal(Incidence *);
167 168
168 void itemModified(KOAgendaItem *item, int ); 169 void itemModified(KOAgendaItem *item, int );
169 void incidenceSelected(Incidence *); 170 void incidenceSelected(Incidence *);
170 171
171 void lowerYChanged(int); 172 void lowerYChanged(int);
172 void upperYChanged(int); 173 void upperYChanged(int);
173 174
174 void startDragSignal(Incidence *); 175 void startDragSignal(Incidence *);
175 void addToCalSignal(Incidence *, Incidence *); 176 void addToCalSignal(Incidence *, Incidence *);
176 void resizedSignal(); 177 void resizedSignal();
177 void updateViewSignal(); 178 void updateViewSignal();
178 void sendPing(); 179 void sendPing();
179 180
180 protected: 181 protected:
181 KOEventPopupMenu * mAllAgendaPopup; 182 KOEventPopupMenu * mAllAgendaPopup;
182 QPainter mPixPainter; 183 QPainter mPixPainter;
183 QPixmap mPaintPixmap; 184 QPixmap mPaintPixmap;
184 QPixmap mHighlightPixmap; 185 QPixmap mHighlightPixmap;
185 void drawContents(QPainter *p,int cx, int cy, int cw, int ch); 186 void drawContents(QPainter *p,int cx, int cy, int cw, int ch);
186 virtual void resizeEvent ( QResizeEvent * ); 187 virtual void resizeEvent ( QResizeEvent * );
187 188
188 /** Handles mouse events. Called from eventFilter */ 189 /** Handles mouse events. Called from eventFilter */
189 virtual bool eventFilter_mouse ( QObject *, QMouseEvent * ); 190 virtual bool eventFilter_mouse ( QObject *, QMouseEvent * );
190 191
191 /** Start selecting time span. */ 192 /** Start selecting time span. */
192 void startSelectAction(QPoint viewportPos); 193 void startSelectAction(QPoint viewportPos);
193 194
194 /** Select time span. */ 195 /** Select time span. */
195 void performSelectAction(QPoint viewportPos); 196 void performSelectAction(QPoint viewportPos);
196 197
197 /** Emd selecting time span. */ 198 /** Emd selecting time span. */
198 void endSelectAction( bool emitNewEvent = false ); 199 void endSelectAction( bool emitNewEvent = false );
199 200
200 /** Start moving/resizing agenda item */ 201 /** Start moving/resizing agenda item */
201 void startItemAction(QPoint viewportPos); 202 void startItemAction(QPoint viewportPos);
202 203
203 /** Move/resize agenda item */ 204 /** Move/resize agenda item */
204 void performItemAction(QPoint viewportPos); 205 void performItemAction(QPoint viewportPos);
205 206
206 /** End moving/resizing agenda item */ 207 /** End moving/resizing agenda item */
207 void endItemAction(); 208 void endItemAction();
208 209
209 /** Set cursor, when no item action is in progress */ 210 /** Set cursor, when no item action is in progress */
210 void setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos); 211 void setNoActionCursor(KOAgendaItem *moveItem,QPoint viewportPos);
211 212
212 /** Place agenda item in agenda and adjust other cells if necessary */ 213 /** Place agenda item in agenda and adjust other cells if necessary */
213 void placeSubCells(KOAgendaItem *placeItem); 214 void placeSubCells(KOAgendaItem *placeItem);
214 215
215 /** Process the keyevent, including the ignored keyevents of eventwidgets. 216 /** Process the keyevent, including the ignored keyevents of eventwidgets.
216 * Implements pgup/pgdn and cursor key navigation in the view. 217 * Implements pgup/pgdn and cursor key navigation in the view.
217 */ 218 */
218 void keyPressEvent( QKeyEvent * ); 219 void keyPressEvent( QKeyEvent * );
219 220
220 void calculateWorkingHours(); 221 void calculateWorkingHours();
221 222
222 virtual void contentsMousePressEvent ( QMouseEvent * ); 223 virtual void contentsMousePressEvent ( QMouseEvent * );
223 224
224 private: 225 private:
225 void init(); 226 void init();
226 void marcus_bains(); 227 void marcus_bains();
227 bool mAllDayMode; 228 bool mAllDayMode;
228 bool blockResize; 229 bool blockResize;
229 bool mLeftMouseDown; 230 bool mLeftMouseDown;
230 KOAgendaItem *mPopupItem; 231 KOAgendaItem *mPopupItem;
231 QTimer* mPopupTimer; 232 QTimer* mPopupTimer;
232 int mPopupKind; 233 int mPopupKind;
233 QPoint mPopupPos; 234 QPoint mPopupPos;
234 QTimer mResizeTimer; 235 QTimer mResizeTimer;
235 double mContentPosition; 236 double mContentPosition;
236 237
237 // Width and height of agenda cells 238 // Width and height of agenda cells
238 int mGridSpacingX; 239 int mGridSpacingX;
239 int mGridSpacingY; 240 int mGridSpacingY;
240 241
241 // size of border, where mouse action will resize the KOAgendaItem 242 // size of border, where mouse action will resize the KOAgendaItem
242 int mResizeBorderWidth; 243 int mResizeBorderWidth;
243 244
244 // size of border, where mouse mve will cause a scroll of the agenda 245 // size of border, where mouse mve will cause a scroll of the agenda
245 int mScrollBorderWidth; 246 int mScrollBorderWidth;
246 int mScrollDelay; 247 int mScrollDelay;
247 int mScrollOffset; 248 int mScrollOffset;
248 249
249 QTimer mScrollUpTimer; 250 QTimer mScrollUpTimer;
250 QTimer mScrollDownTimer; 251 QTimer mScrollDownTimer;
251 252
252 // Number of Columns/Rows of agenda grid 253 // Number of Columns/Rows of agenda grid
253 int mColumns; 254 int mColumns;
254 int mRows; 255 int mRows;
255 256
256 // Cells to store Move and Resize coordiantes 257 // Cells to store Move and Resize coordiantes
257 int mStartCellX; 258 int mStartCellX;
258 int mStartCellY; 259 int mStartCellY;
259 int mCurrentCellX; 260 int mCurrentCellX;
260 int mCurrentCellY; 261 int mCurrentCellY;
261 262
262 // Working Hour coordiantes 263 // Working Hour coordiantes
263 bool mWorkingHoursEnable; 264 bool mWorkingHoursEnable;
264 int mWorkingHoursYTop; 265 int mWorkingHoursYTop;
265 int mWorkingHoursYBottom; 266 int mWorkingHoursYBottom;
266 267
267 // Selection 268 // Selection
268 int mSelectionCellX; 269 int mSelectionCellX;
269 int mSelectionYTop; 270 int mSelectionYTop;
270 int mSelectionHeight; 271 int mSelectionHeight;
271 272
272 // List of dates to be displayed 273 // List of dates to be displayed
273 DateList mSelectedDates; 274 DateList mSelectedDates;
274 275
275 // The KOAgendaItem, which has been right-clicked last 276 // The KOAgendaItem, which has been right-clicked last
276 KOAgendaItem *mClickedItem; 277 KOAgendaItem *mClickedItem;
277 278
278 // The KOAgendaItem, which is being moved/resized 279 // The KOAgendaItem, which is being moved/resized
279 QGuardedPtr<KOAgendaItem> mActionItem; 280 QGuardedPtr<KOAgendaItem> mActionItem;
280 281
281 // Currently selected item 282 // Currently selected item
282 QGuardedPtr<KOAgendaItem> mSelectedItem; 283 QGuardedPtr<KOAgendaItem> mSelectedItem;
283 284
284 // The Marcus Bains Line widget. 285 // The Marcus Bains Line widget.
285 MarcusBains *mMarcusBains; 286 MarcusBains *mMarcusBains;
286 void computeSizes(); 287 void computeSizes();
287 288
288 MouseActionType mActionType; 289 MouseActionType mActionType;
289 290
290 bool mItemMoved; 291 bool mItemMoved;
291 292
292 // List of all Items contained in agenda 293 // List of all Items contained in agenda
293 QPtrList<KOAgendaItem> mItems; 294 QPtrList<KOAgendaItem> mItems;
294 QPtrList<KOAgendaItem> mUnusedItems; 295 QPtrList<KOAgendaItem> mUnusedItems;
295 KOAgendaItem* getNewItem(Incidence * event,QDate qd, QWidget* viewport); 296 KOAgendaItem* getNewItem(Incidence * event,QDate qd, QWidget* viewport);
296 QPopupMenu *mItemPopup; // Right mouse button popup menu for KOAgendaItems 297 QPopupMenu *mItemPopup; // Right mouse button popup menu for KOAgendaItems
297 QPopupMenu *mNewItemPopup; 298 QPopupMenu *mNewItemPopup;
298 299
299 int mOldLowerScrollValue; 300 int mOldLowerScrollValue;
300 int mOldUpperScrollValue; 301 int mOldUpperScrollValue;
301 KOAgendaItem * getItemForTodo ( Todo * todo ); 302 KOAgendaItem * getItemForTodo ( Todo * todo );
302 QMemArray<bool> *mHolidayMask; 303 QMemArray<bool> *mHolidayMask;
303 int mCurPixWid; 304 int mCurPixWid;
304 int mCurPixHei; 305 int mCurPixHei;
305}; 306};
306 307
307#endif // KOAGENDA_H 308#endif // KOAGENDA_H
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp
index 04f30bb..f5a3a4b 100644
--- a/korganizer/koagendaview.cpp
+++ b/korganizer/koagendaview.cpp
@@ -1,1374 +1,1374 @@
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#define IDLETIMEOUT 45 79#define IDLETIMEOUT 45
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 cx = contentsX() + frameWidth()*2; 113 cx = contentsX() + frameWidth()*2;
114 cw = contentsWidth() ; 114 cw = contentsWidth() ;
115 // end of workaround 115 // end of workaround
116 116
117 int cell = ((int)(cy/mCellHeight)); 117 int cell = ((int)(cy/mCellHeight));
118 int y = cell * mCellHeight; 118 int y = cell * mCellHeight;
119 QFontMetrics fm = fontMetrics(); 119 QFontMetrics fm = fontMetrics();
120 QString hour; 120 QString hour;
121 QString suffix = "am"; 121 QString suffix = "am";
122 int timeHeight = fm.ascent(); 122 int timeHeight = fm.ascent();
123 QFont nFont = font(); 123 QFont nFont = font();
124 p->setFont( font()); 124 p->setFont( font());
125 125
126 if (!KGlobal::locale()->use12Clock()) { 126 if (!KGlobal::locale()->use12Clock()) {
127 suffix = "00"; 127 suffix = "00";
128 } else 128 } else
129 if (cell > 11) suffix = "pm"; 129 if (cell > 11) suffix = "pm";
130 130
131 if ( timeHeight > mCellHeight ) { 131 if ( timeHeight > mCellHeight ) {
132 timeHeight = mCellHeight-1; 132 timeHeight = mCellHeight-1;
133 int pointS = nFont.pointSize(); 133 int pointS = nFont.pointSize();
134 while ( pointS > 4 ) { 134 while ( pointS > 4 ) {
135 nFont.setPointSize( pointS ); 135 nFont.setPointSize( pointS );
136 fm = QFontMetrics( nFont ); 136 fm = QFontMetrics( nFont );
137 if ( fm.ascent() < mCellHeight ) 137 if ( fm.ascent() < mCellHeight )
138 break; 138 break;
139 -- pointS; 139 -- pointS;
140 } 140 }
141 fm = QFontMetrics( nFont ); 141 fm = QFontMetrics( nFont );
142 timeHeight = fm.ascent(); 142 timeHeight = fm.ascent();
143 } 143 }
144 //timeHeight -= (timeHeight/4-2); 144 //timeHeight -= (timeHeight/4-2);
145 QFont sFont = nFont; 145 QFont sFont = nFont;
146 sFont.setPointSize( sFont.pointSize()/2 ); 146 sFont.setPointSize( sFont.pointSize()/2 );
147 QFontMetrics fmS( sFont ); 147 QFontMetrics fmS( sFont );
148 int sHei = fmS.ascent() ; 148 int sHei = fmS.ascent() ;
149 //sHei -= (sHei/4-2); 149 //sHei -= (sHei/4-2);
150 int startW = mMiniWidth - frameWidth()-2 ; 150 int startW = mMiniWidth - frameWidth()-2 ;
151 int tw2 = fmS.width(suffix); 151 int tw2 = fmS.width(suffix);
152 timeHeight = (timeHeight-1) /2 -1; 152 timeHeight = (timeHeight-1) /2 -1;
153 //testline 153 //testline
154 //p->drawLine(0,0,0,contentsHeight()); 154 //p->drawLine(0,0,0,contentsHeight());
155 while (y < cy + ch+mCellHeight) { 155 while (y < cy + ch+mCellHeight) {
156 p->drawLine(startW-tw2+1 ,y,cw+2,y); 156 p->drawLine(startW-tw2+1 ,y,cw+2,y);
157 hour.setNum(cell); 157 hour.setNum(cell);
158 // handle 24h and am/pm time formats 158 // handle 24h and am/pm time formats
159 if (KGlobal::locale()->use12Clock()) { 159 if (KGlobal::locale()->use12Clock()) {
160 if (cell == 12) suffix = "pm"; 160 if (cell == 12) suffix = "pm";
161 if (cell == 0) hour.setNum(12); 161 if (cell == 0) hour.setNum(12);
162 if (cell > 12) hour.setNum(cell - 12); 162 if (cell > 12) hour.setNum(cell - 12);
163 } 163 }
164 164
165 // center and draw the time label 165 // center and draw the time label
166 int timeWidth = fm.width(hour); 166 int timeWidth = fm.width(hour);
167 int offset = startW - timeWidth - tw2 -1 ; 167 int offset = startW - timeWidth - tw2 -1 ;
168 p->setFont( nFont ); 168 p->setFont( nFont );
169 p->drawText( offset, y+ timeHeight, hour); 169 p->drawText( offset, y+ timeHeight, hour);
170 p->setFont( sFont ); 170 p->setFont( sFont );
171 offset = startW - tw2; 171 offset = startW - tw2;
172 p->drawText( offset, y -1, suffix); 172 p->drawText( offset, y -1, suffix);
173 173
174 // increment indices 174 // increment indices
175 y += mCellHeight; 175 y += mCellHeight;
176 cell++; 176 cell++;
177 } 177 }
178 178
179 179
180 180
181 181
182} 182}
183 183
184/** 184/**
185 Calculates the minimum width. 185 Calculates the minimum width.
186*/ 186*/
187int TimeLabels::minimumWidth() const 187int TimeLabels::minimumWidth() const
188{ 188{
189 return mMiniWidth; 189 return mMiniWidth;
190} 190}
191 191
192/** updates widget's internal state */ 192/** updates widget's internal state */
193void TimeLabels::updateConfig() 193void TimeLabels::updateConfig()
194{ 194{
195 mRedrawNeeded = true; 195 mRedrawNeeded = true;
196 // set the font 196 // set the font
197 // config->setGroup("Fonts"); 197 // config->setGroup("Fonts");
198 // QFont font = config->readFontEntry("TimeBar Font"); 198 // QFont font = config->readFontEntry("TimeBar Font");
199 setFont(KOPrefs::instance()->mTimeBarFont); 199 setFont(KOPrefs::instance()->mTimeBarFont);
200 QString test = "20"; 200 QString test = "20";
201 if (KGlobal::locale()->use12Clock()) 201 if (KGlobal::locale()->use12Clock())
202 test = "12"; 202 test = "12";
203 mMiniWidth = fontMetrics().width(test); 203 mMiniWidth = fontMetrics().width(test);
204 if (KGlobal::locale()->use12Clock()) 204 if (KGlobal::locale()->use12Clock())
205 test = "pm"; 205 test = "pm";
206 else { 206 else {
207 test = "00"; 207 test = "00";
208 } 208 }
209 QFont sFont = font(); 209 QFont sFont = font();
210 sFont.setPointSize( sFont.pointSize()/2 ); 210 sFont.setPointSize( sFont.pointSize()/2 );
211 QFontMetrics fmS( sFont ); 211 QFontMetrics fmS( sFont );
212 mMiniWidth += fmS.width( test ) + frameWidth()*2+4 ; 212 mMiniWidth += fmS.width( test ) + frameWidth()*2+4 ;
213 // update geometry restrictions based on new settings 213 // update geometry restrictions based on new settings
214 setFixedWidth( mMiniWidth ); 214 setFixedWidth( mMiniWidth );
215 215
216 // update HourSize 216 // update HourSize
217 mCellHeight = KOPrefs::instance()->mHourSize*4; 217 mCellHeight = KOPrefs::instance()->mHourSize*4;
218 resizeContents(mMiniWidth,mRows * mCellHeight+1); 218 resizeContents(mMiniWidth,mRows * mCellHeight+1);
219} 219}
220 220
221/** update time label positions */ 221/** update time label positions */
222void TimeLabels::positionChanged() 222void TimeLabels::positionChanged()
223{ 223{
224 int adjustment = mAgenda->contentsY(); 224 int adjustment = mAgenda->contentsY();
225 setContentsPos(0, adjustment); 225 setContentsPos(0, adjustment);
226} 226}
227 227
228/** */ 228/** */
229void TimeLabels::setAgenda(KOAgenda* agenda) 229void TimeLabels::setAgenda(KOAgenda* agenda)
230{ 230{
231 mAgenda = agenda; 231 mAgenda = agenda;
232} 232}
233 233
234void TimeLabels::contentsMousePressEvent ( QMouseEvent * e) 234void TimeLabels::contentsMousePressEvent ( QMouseEvent * e)
235{ 235{
236 mMouseDownY = e->pos().y(); 236 mMouseDownY = e->pos().y();
237 mOrgCap = topLevelWidget()->caption(); 237 mOrgCap = topLevelWidget()->caption();
238} 238}
239 239
240void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e ) 240void TimeLabels::contentsMouseMoveEvent ( QMouseEvent * e )
241{ 241{
242 int diff = mMouseDownY - e->pos().y(); 242 int diff = mMouseDownY - e->pos().y();
243 if ( diff < 10 && diff > -10 ) 243 if ( diff < 10 && diff > -10 )
244 return; 244 return;
245 int tSize = KOPrefs::instance()->mHourSize + (diff/10) ; 245 int tSize = KOPrefs::instance()->mHourSize + (diff/10) ;
246 if ( tSize < 4 ) 246 if ( tSize < 4 )
247 tSize = 4; 247 tSize = 4;
248 if ( tSize > 22 ) 248 if ( tSize > 22 )
249 tSize = 22; 249 tSize = 22;
250 tSize = (tSize-2)/2; 250 tSize = (tSize-2)/2;
251 topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize)); 251 topLevelWidget()->setCaption(i18n("New Agendasize: %1").arg(tSize));
252 252
253} 253}
254void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e ) 254void TimeLabels::contentsMouseReleaseEvent ( QMouseEvent * e )
255{ 255{
256 topLevelWidget()->setCaption( mOrgCap ); 256 topLevelWidget()->setCaption( mOrgCap );
257 int diff = mMouseDownY - e->pos().y(); 257 int diff = mMouseDownY - e->pos().y();
258 if ( diff < 10 && diff > -10 ) 258 if ( diff < 10 && diff > -10 )
259 return; 259 return;
260 int tSize = KOPrefs::instance()->mHourSize + (diff/10); 260 int tSize = KOPrefs::instance()->mHourSize + (diff/10);
261 if ( tSize < 4 ) 261 if ( tSize < 4 )
262 tSize = 4; 262 tSize = 4;
263 if ( tSize > 22 ) 263 if ( tSize > 22 )
264 tSize = 22; 264 tSize = 22;
265 tSize = (tSize/2)*2; 265 tSize = (tSize/2)*2;
266 if ( tSize == KOPrefs::instance()->mHourSize ) 266 if ( tSize == KOPrefs::instance()->mHourSize )
267 return; 267 return;
268 KOPrefs::instance()->mHourSize = tSize; 268 KOPrefs::instance()->mHourSize = tSize;
269 emit scaleChanged(); 269 emit scaleChanged();
270} 270}
271 271
272/** This is called in response to repaint() */ 272/** This is called in response to repaint() */
273void TimeLabels::paintEvent(QPaintEvent*) 273void TimeLabels::paintEvent(QPaintEvent*)
274{ 274{
275 275
276 // kdDebug() << "paintevent..." << endl; 276 // kdDebug() << "paintevent..." << endl;
277 // this is another hack! 277 // this is another hack!
278 // QPainter painter(this); 278 // QPainter painter(this);
279 //QString c 279 //QString c
280 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight()); 280 repaintContents(contentsX(), contentsY(), visibleWidth(), visibleHeight());
281} 281}
282 282
283//////////////////////////////////////////////////////////////////////////// 283////////////////////////////////////////////////////////////////////////////
284 284
285EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name) 285EventIndicator::EventIndicator(Location loc,QWidget *parent,const char *name)
286 : QFrame(parent,name) 286 : QFrame(parent,name)
287{ 287{
288 mColumns = 1; 288 mColumns = 1;
289 mTopBox = 0; 289 mTopBox = 0;
290 mLocation = loc; 290 mLocation = loc;
291 mTopLayout = 0; 291 mTopLayout = 0;
292 mPaintWidget = 0; 292 mPaintWidget = 0;
293 mXOffset = 0; 293 mXOffset = 0;
294 if (mLocation == Top) mPixmap = SmallIcon("1uparrow"); 294 if (mLocation == Top) mPixmap = SmallIcon("1uparrow");
295 else mPixmap = SmallIcon("1downarrow"); 295 else mPixmap = SmallIcon("1downarrow");
296 mEnabled.resize(mColumns); 296 mEnabled.resize(mColumns);
297 mEnabled.fill( false ); 297 mEnabled.fill( false );
298 setMinimumHeight(mPixmap.height()); 298 setMinimumHeight(mPixmap.height());
299} 299}
300 300
301EventIndicator::~EventIndicator() 301EventIndicator::~EventIndicator()
302{ 302{
303} 303}
304 304
305void EventIndicator::drawContents(QPainter *p) 305void EventIndicator::drawContents(QPainter *p)
306{ 306{
307 307
308 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl; 308 // kdDebug() << "======== top: " << contentsRect().top() << " bottom " << // contentsRect().bottom() << " left " << contentsRect().left() << " right " << contentsRect().right() << endl;
309 KDGanttSplitterHandle* han = 0; 309 KDGanttSplitterHandle* han = 0;
310 if ( mPaintWidget ) 310 if ( mPaintWidget )
311 han = mPaintWidget->firstHandle(); 311 han = mPaintWidget->firstHandle();
312 if ( ! han ) { 312 if ( ! han ) {
313 int i; 313 int i;
314 for(i=0;i<mColumns;++i) { 314 for(i=0;i<mColumns;++i) {
315 if (mEnabled[i]) { 315 if (mEnabled[i]) {
316 int cellWidth = contentsRect().right()/mColumns; 316 int cellWidth = contentsRect().right()/mColumns;
317 int xOffset = KOGlobals::self()->reverseLayout() ? 317 int xOffset = KOGlobals::self()->reverseLayout() ?
318 (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 : 318 (mColumns - 1 - i)*cellWidth + (cellWidth -mPixmap.width())/2 :
319 i*cellWidth + (cellWidth -mPixmap.width()) /2; 319 i*cellWidth + (cellWidth -mPixmap.width()) /2;
320 p->drawPixmap(QPoint(1+xOffset,0),mPixmap); 320 p->drawPixmap(QPoint(1+xOffset,0),mPixmap);
321 } 321 }
322 } 322 }
323 } else { 323 } else {
324 han->repaint(); 324 han->repaint();
325 //mPaintWidget->setBackgroundColor( red ); 325 //mPaintWidget->setBackgroundColor( red );
326 326
327 QPainter pa( han ); 327 QPainter pa( han );
328 int i; 328 int i;
329 bool setColor = false; 329 bool setColor = false;
330 for(i=0;i<mColumns;++i) { 330 for(i=0;i<mColumns;++i) {
331 if (mEnabled[i]) { 331 if (mEnabled[i]) {
332 setColor = true; 332 setColor = true;
333 333
334 int cellWidth = contentsRect().right()/mColumns; 334 int cellWidth = contentsRect().right()/mColumns;
335 int xOffset = KOGlobals::self()->reverseLayout() ? 335 int xOffset = KOGlobals::self()->reverseLayout() ?
336 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 : 336 (mColumns - 1 - i)*cellWidth + cellWidth/2 -mPixmap.width()/2 :
337 i*cellWidth + cellWidth/2 -mPixmap.width()/2; 337 i*cellWidth + cellWidth/2 -mPixmap.width()/2;
338 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap); 338 pa.drawPixmap(QPoint(mXOffset + xOffset,0),mPixmap);
339 //qDebug("222draw pix %d ",xOffset ); 339 //qDebug("222draw pix %d ",xOffset );
340 340
341 } 341 }
342 342
343 } 343 }
344 pa.end(); 344 pa.end();
345 345
346 } 346 }
347} 347}
348 348
349void EventIndicator::setXOffset( int x ) 349void EventIndicator::setXOffset( int x )
350{ 350{
351 mXOffset = x; 351 mXOffset = x;
352} 352}
353void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w ) 353void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w )
354{ 354{
355 mPaintWidget = w; 355 mPaintWidget = w;
356 setMaximumHeight(0); 356 setMaximumHeight(0);
357 setMinimumHeight(0); 357 setMinimumHeight(0);
358} 358}
359void EventIndicator::changeColumns(int columns) 359void EventIndicator::changeColumns(int columns)
360{ 360{
361 mColumns = columns; 361 mColumns = columns;
362 mEnabled.resize(mColumns); 362 mEnabled.resize(mColumns);
363 363
364 update(); 364 update();
365} 365}
366 366
367void EventIndicator::enableColumn(int column, bool enable) 367void EventIndicator::enableColumn(int column, bool enable)
368{ 368{
369 mEnabled[column] = enable; 369 mEnabled[column] = enable;
370} 370}
371 371
372 372
373//////////////////////////////////////////////////////////////////////////// 373////////////////////////////////////////////////////////////////////////////
374//////////////////////////////////////////////////////////////////////////// 374////////////////////////////////////////////////////////////////////////////
375//////////////////////////////////////////////////////////////////////////// 375////////////////////////////////////////////////////////////////////////////
376 376
377KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : 377KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
378 KOEventView (cal,parent,name) 378 KOEventView (cal,parent,name)
379{ 379{
380 mBlockUpdating = true; 380 mBlockUpdating = true;
381 mStartHour = 8; 381 mStartHour = 8;
382 mSelectedDates.append(QDate::currentDate()); 382 mSelectedDates.append(QDate::currentDate());
383 383
384 mLayoutDayLabels = 0; 384 mLayoutDayLabels = 0;
385 mDayLabelsFrame = 0; 385 mDayLabelsFrame = 0;
386 mDayLabels = 0; 386 mDayLabels = 0;
387 bool isRTL = KOGlobals::self()->reverseLayout(); 387 bool isRTL = KOGlobals::self()->reverseLayout();
388 QPixmap expandPix; 388 QPixmap expandPix;
389 if ( KOPrefs::instance()->mVerticalScreen ) { 389 if ( KOPrefs::instance()->mVerticalScreen ) {
390 expandPix = SmallIcon( "1updownarrow" ); 390 expandPix = SmallIcon( "1updownarrow" );
391 } else { 391 } else {
392 expandPix = SmallIcon("1leftrightarrow" ); 392 expandPix = SmallIcon("1leftrightarrow" );
393 } 393 }
394 394
395 QBoxLayout *topLayout = new QVBoxLayout(this); 395 QBoxLayout *topLayout = new QVBoxLayout(this);
396 396
397 // Create day name labels for agenda columns 397 // Create day name labels for agenda columns
398 // Create agenda splitter 398 // Create agenda splitter
399 399
400 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); 400 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this);
401 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 401 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
402 topLayout->addWidget( mSplitterAgenda ); 402 topLayout->addWidget( mSplitterAgenda );
403 mAllDayFrame = new QHBox(mSplitterAgenda); 403 mAllDayFrame = new QHBox(mSplitterAgenda);
404 mAllDayFrame->setFocusPolicy(NoFocus); 404 mAllDayFrame->setFocusPolicy(NoFocus);
405 QWidget *agendaFrame = new QWidget(mSplitterAgenda); 405 QWidget *agendaFrame = new QWidget(mSplitterAgenda);
406 agendaFrame->setFocusPolicy(NoFocus); 406 agendaFrame->setFocusPolicy(NoFocus);
407 407
408 // Create all-day agenda widget 408 // Create all-day agenda widget
409 mDummyAllDayLeft = new QVBox( mAllDayFrame ); 409 mDummyAllDayLeft = new QVBox( mAllDayFrame );
410 410
411 mExpandButton = new QPushButton(mDummyAllDayLeft); 411 mExpandButton = new QPushButton(mDummyAllDayLeft);
412 mExpandButton->setPixmap( expandPix ); 412 mExpandButton->setPixmap( expandPix );
413 int widebut = mExpandButton->sizeHint().width()+4; 413 int widebut = mExpandButton->sizeHint().width()+4;
414 int heibut = mExpandButton->sizeHint().height()+4; 414 int heibut = mExpandButton->sizeHint().height()+4;
415 if ( heibut > widebut ) 415 if ( heibut > widebut )
416 widebut = heibut ; 416 widebut = heibut ;
417 417
418 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, 418 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed,
419 // QSizePolicy::Fixed ) ); 419 // QSizePolicy::Fixed ) );
420 mExpandButton->setFixedSize( widebut, widebut); 420 mExpandButton->setFixedSize( widebut, widebut);
421 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); 421 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) );
422 mExpandButton->setFocusPolicy(NoFocus); 422 mExpandButton->setFocusPolicy(NoFocus);
423 mAllDayAgenda = new KOAgenda(1,mAllDayFrame); 423 mAllDayAgenda = new KOAgenda(1,mAllDayFrame);
424 mAllDayAgenda->setFocusPolicy(NoFocus); 424 mAllDayAgenda->setFocusPolicy(NoFocus);
425 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame); 425 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame);
426 426
427 // Create event context menu for all day agenda 427 // Create event context menu for all day agenda
428 //mAllDayAgendaPopup = eventPopup(); 428 //mAllDayAgendaPopup = eventPopup();
429 429
430 // Create agenda frame 430 // Create agenda frame
431 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3); 431 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3);
432 // QHBox *agendaFrame = new QHBox(splitterAgenda); 432 // QHBox *agendaFrame = new QHBox(splitterAgenda);
433 433
434 // create event indicator bars 434 // create event indicator bars
435 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); 435 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame);
436#ifndef DESKTOP_VERSION 436#ifndef DESKTOP_VERSION
437 mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); 437 mEventIndicatorTop->setPaintWidget( mSplitterAgenda );
438#endif 438#endif
439 mDayLabelsFrame = new QHBox(agendaFrame); 439 mDayLabelsFrame = new QHBox(agendaFrame);
440 //topLayout->addWidget(mDayLabelsFrame); 440 //topLayout->addWidget(mDayLabelsFrame);
441 mDayLabels = new QFrame (mDayLabelsFrame); 441 mDayLabels = new QFrame (mDayLabelsFrame);
442 mLayoutDayLabels = new QHBoxLayout(mDayLabels); 442 mLayoutDayLabels = new QHBoxLayout(mDayLabels);
443 agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2); 443 agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2);
444 agendaLayout->addWidget(mEventIndicatorTop,1,1); 444 agendaLayout->addWidget(mEventIndicatorTop,1,1);
445 445
446 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, 446 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom,
447 agendaFrame); 447 agendaFrame);
448 agendaLayout->addWidget(mEventIndicatorBottom,3,1); 448 agendaLayout->addWidget(mEventIndicatorBottom,3,1);
449 QWidget *dummyAgendaRight = new QWidget(agendaFrame); 449 QWidget *dummyAgendaRight = new QWidget(agendaFrame);
450 agendaLayout->addWidget(dummyAgendaRight,1,2); 450 agendaLayout->addWidget(dummyAgendaRight,1,2);
451 451
452 // Create time labels 452 // Create time labels
453 mTimeLabels = new TimeLabels(24,agendaFrame); 453 mTimeLabels = new TimeLabels(24,agendaFrame);
454 agendaLayout->addWidget(mTimeLabels,2,0); 454 agendaLayout->addWidget(mTimeLabels,2,0);
455 connect(mTimeLabels,SIGNAL( scaleChanged()), 455 connect(mTimeLabels,SIGNAL( scaleChanged()),
456 this,SLOT(updateConfig())); 456 this,SLOT(updateConfig()));
457 457
458 // Create agenda 458 // Create agenda
459 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); 459 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame);
460 agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2); 460 agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2);
461 agendaLayout->setColStretch(1,1); 461 agendaLayout->setColStretch(1,1);
462 mAgenda->setFocusPolicy(NoFocus); 462 mAgenda->setFocusPolicy(NoFocus);
463 // Create event context menu for agenda 463 // Create event context menu for agenda
464 mAllAgendaPopup = eventPopup(); 464 mAllAgendaPopup = eventPopup();
465 465
466#if 0 466#if 0
467 mAllAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), 467 mAllAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")),
468 i18n("Toggle Alarm"),mAgenda, 468 i18n("Toggle Alarm"),mAgenda,
469 SLOT(popupAlarm()),true); 469 SLOT(popupAlarm()),true);
470 470
471#endif 471#endif
472 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 472 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
473 mAllAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 473 mAllAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
474 474
475 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 475 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
476 mAllAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 476 mAllAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
477 477
478 connect(mAllAgendaPopup,SIGNAL(categoryChanged(Incidence *)), 478 connect(mAllAgendaPopup,SIGNAL(categoryChanged(Incidence *)),
479 this,SLOT(categoryChanged(Incidence *))); 479 this,SLOT(categoryChanged(Incidence *)));
480 480
481 481
482 mAgenda->setPopup( mAllAgendaPopup ); 482 mAgenda->setPopup( mAllAgendaPopup );
483 mAllDayAgenda->setPopup( mAllAgendaPopup ); 483 mAllDayAgenda->setPopup( mAllAgendaPopup );
484 // make connections between dependent widgets 484 // make connections between dependent widgets
485 mTimeLabels->setAgenda(mAgenda); 485 mTimeLabels->setAgenda(mAgenda);
486 486
487 // Update widgets to reflect user preferences 487 // Update widgets to reflect user preferences
488 // updateConfig(); 488 // updateConfig();
489 489
490 // createDayLabels(); 490 // createDayLabels();
491 491
492 // these blank widgets make the All Day Event box line up with the agenda 492 // these blank widgets make the All Day Event box line up with the agenda
493 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 493 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
494 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 494 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
495 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 495 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
496 496
497 // Scrolling 497 // Scrolling
498 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), 498 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)),
499 mTimeLabels, SLOT(positionChanged())); 499 mTimeLabels, SLOT(positionChanged()));
500 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), 500 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)),
501 SLOT(setContentsPos(int))); 501 SLOT(setContentsPos(int)));
502 502
503 connect(mAgenda,SIGNAL(showDateView( int, int)),SLOT(slotShowDateView( int, int ))); 503 connect(mAgenda,SIGNAL(showDateView( int, int)),SLOT(slotShowDateView( int, int )));
504 connect(mAllDayAgenda,SIGNAL(showDateView( int, int )), SLOT(slotShowDateView( int, int ) )); 504 connect(mAllDayAgenda,SIGNAL(showDateView( int, int )), SLOT(slotShowDateView( int, int ) ));
505 505
506 // Create/Show/Edit/Delete Event 506 // Create/Show/Edit/Delete Event
507 connect(mAgenda,SIGNAL(newEventSignal(int,int)), 507 connect(mAgenda,SIGNAL(newEventSignal(int,int)),
508 SLOT(newEvent(int,int))); 508 SLOT(newEvent(int,int)));
509 connect(mAgenda,SIGNAL(newTodoSignal(int,int)), 509 connect(mAgenda,SIGNAL(newTodoSignal(int,int)),
510 SLOT(newTodo(int,int))); 510 SLOT(newTodo(int,int)));
511 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), 511 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)),
512 SLOT(newEvent(int,int,int,int))); 512 SLOT(newEvent(int,int,int,int)));
513 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), 513 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)),
514 SLOT(newEventAllDay(int,int))); 514 SLOT(newEventAllDay(int,int)));
515 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), 515 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)),
516 SLOT(newTodoAllDay(int,int))); 516 SLOT(newTodoAllDay(int,int)));
517 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), 517 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)),
518 SLOT(newEventAllDay(int,int))); 518 SLOT(newEventAllDay(int,int)));
519 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 519 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
520 SLOT(newTimeSpanSelected(int,int,int,int))); 520 SLOT(newTimeSpanSelected(int,int,int,int)));
521 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 521 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
522 SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); 522 SLOT(newTimeSpanSelectedAllDay(int,int,int,int)));
523 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 523 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
524 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 524 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
525 525
526 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 526 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
527 SIGNAL(editIncidenceSignal(Incidence *))); 527 SIGNAL(editIncidenceSignal(Incidence *)));
528 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 528 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
529 SIGNAL(editIncidenceSignal(Incidence *))); 529 SIGNAL(editIncidenceSignal(Incidence *)));
530 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 530 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
531 SIGNAL(showIncidenceSignal(Incidence *))); 531 SIGNAL(showIncidenceSignal(Incidence *)));
532 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 532 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
533 SIGNAL(showIncidenceSignal(Incidence *))); 533 SIGNAL(showIncidenceSignal(Incidence *)));
534 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 534 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
535 SIGNAL(deleteIncidenceSignal(Incidence *))); 535 SIGNAL(deleteIncidenceSignal(Incidence *)));
536 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 536 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
537 SIGNAL(deleteIncidenceSignal(Incidence *))); 537 SIGNAL(deleteIncidenceSignal(Incidence *)));
538 538
539 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 539 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
540 SLOT(updateEventDates(KOAgendaItem *, int ))); 540 SLOT(updateEventDates(KOAgendaItem *, int )));
541 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 541 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
542 SLOT(updateEventDates(KOAgendaItem *, int))); 542 SLOT(updateEventDates(KOAgendaItem *, int)));
543 543
544 // event indicator update 544 // event indicator update
545 connect(mAgenda,SIGNAL(lowerYChanged(int)), 545 connect(mAgenda,SIGNAL(lowerYChanged(int)),
546 SLOT(updateEventIndicatorTop(int))); 546 SLOT(updateEventIndicatorTop(int)));
547 connect(mAgenda,SIGNAL(upperYChanged(int)), 547 connect(mAgenda,SIGNAL(upperYChanged(int)),
548 SLOT(updateEventIndicatorBottom(int))); 548 SLOT(updateEventIndicatorBottom(int)));
549 // drag signals 549 // drag signals
550 /* 550 /*
551 connect(mAgenda,SIGNAL(startDragSignal(Event *)), 551 connect(mAgenda,SIGNAL(startDragSignal(Event *)),
552 SLOT(startDrag(Event *))); 552 SLOT(startDrag(Event *)));
553 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), 553 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)),
554 SLOT(startDrag(Event *))); 554 SLOT(startDrag(Event *)));
555 */ 555 */
556 // synchronize selections 556 // synchronize selections
557 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 557 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
558 mAllDayAgenda, SLOT( deselectItem() ) ); 558 mAllDayAgenda, SLOT( deselectItem() ) );
559 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 559 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
560 mAgenda, SLOT( deselectItem() ) ); 560 mAgenda, SLOT( deselectItem() ) );
561 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 561 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
562 SIGNAL( incidenceSelected( Incidence * ) ) ); 562 SIGNAL( incidenceSelected( Incidence * ) ) );
563 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 563 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
564 SIGNAL( incidenceSelected( Incidence * ) ) ); 564 SIGNAL( incidenceSelected( Incidence * ) ) );
565 connect( mAgenda, SIGNAL( resizedSignal() ), 565 connect( mAgenda, SIGNAL( resizedSignal() ),
566 SLOT( updateConfig( ) ) ); 566 SLOT( updateConfig( ) ) );
567 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), 567 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ),
568 SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); 568 SLOT( addToCalSlot(Incidence *, Incidence * ) ) );
569 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), 569 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ),
570 SLOT( addToCalSlot(Incidence * , Incidence *) ) ); 570 SLOT( addToCalSlot(Incidence * , Incidence *) ) );
571 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 571 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
572 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 572 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
573 573
574 connect( mAllDayAgenda, SIGNAL( signalClearSelection() ),mAgenda, SLOT( slotClearSelection()) ); 574 connect( mAllDayAgenda, SIGNAL( signalClearSelection() ),mAgenda, SLOT( slotClearSelection()) );
575 connect( mAgenda, SIGNAL( signalClearSelection() ),mAllDayAgenda, SLOT( slotClearSelection()) ); 575 connect( mAgenda, SIGNAL( signalClearSelection() ),mAllDayAgenda, SLOT( slotClearSelection()) );
576#ifndef DESKTOP_VERSION 576#ifndef DESKTOP_VERSION
577 connect( mAllDayAgenda, SIGNAL( updateViewSignal() ),this, SLOT( fillAgenda()) ); 577 connect( mAllDayAgenda, SIGNAL( updateViewSignal() ),this, SLOT( fillAgenda()) );
578 connect( mAgenda, SIGNAL( updateViewSignal() ), this, SLOT( fillAgenda()) ); 578 connect( mAgenda, SIGNAL( updateViewSignal() ), this, SLOT( fillAgenda()) );
579 connect( mAllDayAgenda, SIGNAL( sendPing() ),this, SLOT( startIdleTimeout()) ); 579 connect( mAllDayAgenda, SIGNAL( sendPing() ),this, SLOT( startIdleTimeout()) );
580 connect( mAgenda, SIGNAL( sendPing() ), this, SLOT( startIdleTimeout()) ); 580 connect( mAgenda, SIGNAL( sendPing() ), this, SLOT( startIdleTimeout()) );
581 mIdleTimer = new QTimer ( this );; 581 mIdleTimer = new QTimer ( this );;
582 connect(mIdleTimer,SIGNAL(timeout()),SLOT(slotIdleTimeout())); 582 connect(mIdleTimer,SIGNAL(timeout()),SLOT(slotIdleTimeout()));
583#endif 583#endif
584} 584}
585void KOAgendaView::startIdleTimeout() 585void KOAgendaView::startIdleTimeout()
586{ 586{
587#ifndef DESKTOP_VERSION 587#ifndef DESKTOP_VERSION
588 mIdleStart = QDateTime::currentDateTime(); 588 mIdleStart = QDateTime::currentDateTime();
589 mIdleTimer->start( IDLETIMEOUT * 1000 ); 589 mIdleTimer->start( IDLETIMEOUT * 1000 );
590#endif 590#endif
591} 591}
592void KOAgendaView::slotIdleTimeout() 592void KOAgendaView::slotIdleTimeout()
593{ 593{
594#ifndef DESKTOP_VERSION 594#ifndef DESKTOP_VERSION
595 //qDebug("SECS TO %d ",mIdleStart.secsTo( QDateTime::currentDateTime() ) ); 595 //qDebug("SECS TO %d ",mIdleStart.secsTo( QDateTime::currentDateTime() ) );
596 int secsfromstart = mIdleStart.secsTo( QDateTime::currentDateTime() ); 596 int secsfromstart = mIdleStart.secsTo( QDateTime::currentDateTime() );
597 mIdleTimer->stop(); 597 mIdleTimer->stop();
598 bool isActice = topLevelWidget()->isActiveWindow(); 598 bool isActice = topLevelWidget()->isActiveWindow();
599 //qDebug("KO: Active Window %d %d", isActice, isVisible()); 599 //qDebug("KO: Active Window %d %d", isActice, isVisible());
600 // we do nothing if we wake up from a suspend 600 // we do nothing if we wake up from a suspend
601 if ( secsfromstart > IDLETIMEOUT + 30 && isActice ) { 601 if ( secsfromstart > IDLETIMEOUT + 30 && isActice ) {
602 qDebug("KO: Wakeup from suspend "); 602 qDebug("KO: Wakeup from suspend ");
603 startIdleTimeout(); 603 startIdleTimeout();
604 return; 604 return;
605 } 605 }
606 qDebug("KO: Downsizing Pixmaps "); 606 qDebug("KO: Downsizing Pixmaps %s",QDateTime::currentDateTime().toString().latin1());
607 mAgenda->shrinkPixmap(); 607 mAgenda->shrinkPixmap();
608 mAllDayAgenda->shrinkPixmap(); 608 mAllDayAgenda->shrinkPixmap();
609 KOAgendaItem::paintPix()->resize( 20,20); 609 KOAgendaItem::paintPix()->resize( 20,20);
610 KOAgendaItem::paintPixAllday()->resize( 20,20); 610 KOAgendaItem::paintPixAllday()->resize( 20,20);
611#endif 611#endif
612 612
613} 613}
614void KOAgendaView::toggleAllDay() 614void KOAgendaView::toggleAllDay()
615{ 615{
616 if ( mSplitterAgenda->firstHandle() ) 616 if ( mSplitterAgenda->firstHandle() )
617 mSplitterAgenda->firstHandle()->toggle(); 617 mSplitterAgenda->firstHandle()->toggle();
618} 618}
619void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) 619void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld )
620{ 620{
621 calendar()->addIncidence( inc ); 621 calendar()->addIncidence( inc );
622 622
623 if ( incOld ) { 623 if ( incOld ) {
624 if ( incOld->typeID() == todoID ) 624 if ( incOld->typeID() == todoID )
625 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); 625 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED );
626 else 626 else
627 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); 627 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED);
628 } 628 }
629 629
630} 630}
631void KOAgendaView::categoryChanged(Incidence * inc) 631void KOAgendaView::categoryChanged(Incidence * inc)
632{ 632{
633 mAgenda->categoryChanged( inc ); 633 mAgenda->categoryChanged( inc );
634 mAllDayAgenda->categoryChanged( inc ); 634 mAllDayAgenda->categoryChanged( inc );
635} 635}
636KOAgendaView::~KOAgendaView() 636KOAgendaView::~KOAgendaView()
637{ 637{
638 delete mAllAgendaPopup; 638 delete mAllAgendaPopup;
639 //delete mAllDayAgendaPopup; 639 //delete mAllDayAgendaPopup;
640 delete KOAgendaItem::paintPix(); 640 delete KOAgendaItem::paintPix();
641 delete KOAgendaItem::paintPixAllday(); 641 delete KOAgendaItem::paintPixAllday();
642} 642}
643void KOAgendaView::resizeEvent( QResizeEvent* e ) 643void KOAgendaView::resizeEvent( QResizeEvent* e )
644{ 644{
645 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); 645 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width());
646 bool uc = false; 646 bool uc = false;
647 int ow = e->oldSize().width(); 647 int ow = e->oldSize().width();
648 int oh = e->oldSize().height(); 648 int oh = e->oldSize().height();
649 int w = e->size().width(); 649 int w = e->size().width();
650 int h = e->size().height(); 650 int h = e->size().height();
651 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { 651 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) {
652 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) 652 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda )
653 uc = true; 653 uc = true;
654 //qDebug("view changed %d %d %d %d ", ow, oh , w , h); 654 //qDebug("view changed %d %d %d %d ", ow, oh , w , h);
655 } 655 }
656 mUpcomingWidth = e->size().width() ; 656 mUpcomingWidth = e->size().width() ;
657 if ( mBlockUpdating || uc ) { 657 if ( mBlockUpdating || uc ) {
658 mBlockUpdating = false; 658 mBlockUpdating = false;
659 //mAgenda->setMinimumSize(800 , 600 ); 659 //mAgenda->setMinimumSize(800 , 600 );
660 //qDebug("mAgenda->resize+++++++++++++++ "); 660 //qDebug("mAgenda->resize+++++++++++++++ ");
661 updateConfig(); 661 updateConfig();
662 //qDebug("KOAgendaView::Updating now possible "); 662 //qDebug("KOAgendaView::Updating now possible ");
663 } else 663 } else
664 createDayLabels(); 664 createDayLabels();
665 //qDebug("resizeEvent end "); 665 //qDebug("resizeEvent end ");
666 666
667} 667}
668void KOAgendaView::slotDaylabelClicked( int num ) 668void KOAgendaView::slotDaylabelClicked( int num )
669{ 669{
670 670
671 QDate firstDate = mSelectedDates.first(); 671 QDate firstDate = mSelectedDates.first();
672 if ( num == -1 ) 672 if ( num == -1 )
673 emit showDateView( 6, firstDate ); 673 emit showDateView( 6, firstDate );
674 else if (num >= 0 ) { 674 else if (num >= 0 ) {
675 if ( mSelectedDates.count() == 1) 675 if ( mSelectedDates.count() == 1)
676 emit showDateView( 9, firstDate.addDays( num ) ); 676 emit showDateView( 9, firstDate.addDays( num ) );
677 else 677 else
678 emit showDateView( 3, firstDate.addDays( num ) ); 678 emit showDateView( 3, firstDate.addDays( num ) );
679 } 679 }
680 else 680 else
681 showDateView( 10, firstDate.addDays(1) ); 681 showDateView( 10, firstDate.addDays(1) );
682} 682}
683 683
684KOAgendaButton* KOAgendaView::getNewDaylabel() 684KOAgendaButton* KOAgendaView::getNewDaylabel()
685{ 685{
686 686
687 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels); 687 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels);
688 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) ); 688 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) );
689 mDayLabelsList.append( dayLabel ); 689 mDayLabelsList.append( dayLabel );
690 mLayoutDayLabels->addWidget(dayLabel); 690 mLayoutDayLabels->addWidget(dayLabel);
691 return dayLabel ; 691 return dayLabel ;
692} 692}
693 693
694void KOAgendaView::createDayLabels() 694void KOAgendaView::createDayLabels()
695{ 695{
696 696
697 if ( mBlockUpdating || globalFlagBlockLabel == 1) { 697 if ( mBlockUpdating || globalFlagBlockLabel == 1) {
698 // qDebug(" KOAgendaView::createDayLabels() blocked "); 698 // qDebug(" KOAgendaView::createDayLabels() blocked ");
699 return; 699 return;
700 700
701 } 701 }
702 int newHight; 702 int newHight;
703 if ( !mSelectedDates.count()) 703 if ( !mSelectedDates.count())
704 return; 704 return;
705 705
706 // ### Before deleting and recreating we could check if mSelectedDates changed... 706 // ### Before deleting and recreating we could check if mSelectedDates changed...
707 // It would remove some flickering and gain speed (since this is called by 707 // It would remove some flickering and gain speed (since this is called by
708 // each updateView() call) 708 // each updateView() call)
709 709
710 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - mAgenda->frameWidth()*2; 710 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - mAgenda->frameWidth()*2;
711 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); 711 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth );
712 if ( maxWid < 20 ) 712 if ( maxWid < 20 )
713 maxWid = 20; 713 maxWid = 20;
714 714
715 QFont dlf = KOPrefs::instance()->mTimeLabelsFont; 715 QFont dlf = KOPrefs::instance()->mTimeLabelsFont;
716 QFontMetrics fm ( dlf ); 716 QFontMetrics fm ( dlf );
717 dlf.setBold( true ); 717 dlf.setBold( true );
718 int selCount = mSelectedDates.count(); 718 int selCount = mSelectedDates.count();
719 int widModulo = maxWid - (mAgenda->gridSpacingX() * selCount)+1; 719 int widModulo = maxWid - (mAgenda->gridSpacingX() * selCount)+1;
720 QString dayTest = "Mon 20"; 720 QString dayTest = "Mon 20";
721 //QString dayTest = "Mon 20"; 721 //QString dayTest = "Mon 20";
722 int wid = fm.width( dayTest ); 722 int wid = fm.width( dayTest );
723 //maxWid -= ( selCount * 3 ); //working for QLabels 723 //maxWid -= ( selCount * 3 ); //working for QLabels
724 if ( QApplication::desktop()->width() <= 320 ) 724 if ( QApplication::desktop()->width() <= 320 )
725 maxWid -= ( selCount * 3 ); //working for QPushButton 725 maxWid -= ( selCount * 3 ); //working for QPushButton
726 else 726 else
727 maxWid -= ( selCount * 4 ); //working for QPushButton 727 maxWid -= ( selCount * 4 ); //working for QPushButton
728 if ( maxWid < 0 ) 728 if ( maxWid < 0 )
729 maxWid = 20; 729 maxWid = 20;
730 int needWid = wid * selCount; 730 int needWid = wid * selCount;
731 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); 731 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid );
732 //if ( needWid > maxWid ) 732 //if ( needWid > maxWid )
733 // qDebug("DAYLABELS TOOOOOOO BIG "); 733 // qDebug("DAYLABELS TOOOOOOO BIG ");
734 while ( needWid > maxWid ) { 734 while ( needWid > maxWid ) {
735 dayTest = dayTest.left( dayTest.length() - 1 ); 735 dayTest = dayTest.left( dayTest.length() - 1 );
736 wid = fm.width( dayTest ); 736 wid = fm.width( dayTest );
737 needWid = wid * selCount; 737 needWid = wid * selCount;
738 } 738 }
739 int maxLen = dayTest.length(); 739 int maxLen = dayTest.length();
740 int fontPoint = dlf.pointSize(); 740 int fontPoint = dlf.pointSize();
741 if ( maxLen < 2 ) { 741 if ( maxLen < 2 ) {
742 int fontPoint = dlf.pointSize(); 742 int fontPoint = dlf.pointSize();
743 while ( fontPoint > 4 ) { 743 while ( fontPoint > 4 ) {
744 --fontPoint; 744 --fontPoint;
745 dlf.setPointSize( fontPoint ); 745 dlf.setPointSize( fontPoint );
746 QFontMetrics f( dlf ); 746 QFontMetrics f( dlf );
747 wid = f.width( "30" ); 747 wid = f.width( "30" );
748 needWid = wid * selCount; 748 needWid = wid * selCount;
749 if ( needWid < maxWid ) 749 if ( needWid < maxWid )
750 break; 750 break;
751 } 751 }
752 maxLen = 2; 752 maxLen = 2;
753 } 753 }
754 //qDebug("Max len %d ", dayTest.length() ); 754 //qDebug("Max len %d ", dayTest.length() );
755 if ( !KOPrefs::instance()->mTimeLabelsFont.bold() ) 755 if ( !KOPrefs::instance()->mTimeLabelsFont.bold() )
756 dlf.setBold( false ); 756 dlf.setBold( false );
757 QFontMetrics tempF( dlf ); 757 QFontMetrics tempF( dlf );
758 newHight = tempF.height(); 758 newHight = tempF.height();
759 mDayLabels->setFont( dlf ); 759 mDayLabels->setFont( dlf );
760 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; 760 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);;
761 // mLayoutDayLabels->addSpacing(mTimeLabels->width()); 761 // mLayoutDayLabels->addSpacing(mTimeLabels->width());
762 //mLayoutDayLabels->addSpacing( 2 ); 762 //mLayoutDayLabels->addSpacing( 2 );
763 // QFont lFont = dlf; 763 // QFont lFont = dlf;
764 bool appendLabels = false; 764 bool appendLabels = false;
765 KOAgendaButton *dayLabel; 765 KOAgendaButton *dayLabel;
766 dayLabel = mDayLabelsList.first(); 766 dayLabel = mDayLabelsList.first();
767 if ( !dayLabel ) { 767 if ( !dayLabel ) {
768 appendLabels = true; 768 appendLabels = true;
769 dayLabel = getNewDaylabel(); 769 dayLabel = getNewDaylabel();
770 } 770 }
771 dayLabel->setFixedWidth( mTimeLabels->width()+mAgenda->frameWidth() ); 771 dayLabel->setFixedWidth( mTimeLabels->width()+mAgenda->frameWidth() );
772 dayLabel->setFont( dlf ); 772 dayLabel->setFont( dlf );
773 dayLabel->setNum( -1 ); 773 dayLabel->setNum( -1 );
774 //dayLabel->setAlignment(QLabel::AlignHCenter); 774 //dayLabel->setAlignment(QLabel::AlignHCenter);
775 775
776 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); 776 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) );
777 dayLabel->show(); 777 dayLabel->show();
778 DateList::ConstIterator dit; 778 DateList::ConstIterator dit;
779 bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); 779 bool oneday = (mSelectedDates.first() == mSelectedDates.last() );
780 int counter = -1; 780 int counter = -1;
781 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 781 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
782 ++counter; 782 ++counter;
783 QDate date = *dit; 783 QDate date = *dit;
784 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); 784 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels);
785 if ( ! appendLabels ) { 785 if ( ! appendLabels ) {
786 dayLabel = mDayLabelsList.next(); 786 dayLabel = mDayLabelsList.next();
787 if ( !dayLabel ) 787 if ( !dayLabel )
788 appendLabels = true; 788 appendLabels = true;
789 } 789 }
790 if ( appendLabels ) { 790 if ( appendLabels ) {
791 dayLabel = getNewDaylabel(); 791 dayLabel = getNewDaylabel();
792 } 792 }
793 dayLabel->setMinimumWidth( 1 ); 793 dayLabel->setMinimumWidth( 1 );
794 dayLabel->setMaximumWidth( 10240 ); 794 dayLabel->setMaximumWidth( 10240 );
795 dayLabel->setFont( dlf ); 795 dayLabel->setFont( dlf );
796 dayLabel->show(); 796 dayLabel->show();
797 dayLabel->setAutoRepeat( false ); 797 dayLabel->setAutoRepeat( false );
798 dayLabel->setNum( counter ); 798 dayLabel->setNum( counter );
799 QString str; 799 QString str;
800 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); 800 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date);
801 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); 801 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true );
802 switch ( maxLen ) { 802 switch ( maxLen ) {
803 case 2: 803 case 2:
804 str = QString::number( date.day() ); 804 str = QString::number( date.day() );
805 break; 805 break;
806 806
807 case 3: 807 case 3:
808 str = dayName.left( 1 ) +QString::number( date.day()); 808 str = dayName.left( 1 ) +QString::number( date.day());
809 809
810 break; 810 break;
811 case 4: 811 case 4:
812 str = dayName.left( 1 ) + " " +QString::number( date.day()); 812 str = dayName.left( 1 ) + " " +QString::number( date.day());
813 813
814 break; 814 break;
815 case 5: 815 case 5:
816 str = dayName.left( 2 ) + " " +QString::number( date.day()); 816 str = dayName.left( 2 ) + " " +QString::number( date.day());
817 817
818 break; 818 break;
819 case 6: 819 case 6:
820 str = dayName.left( 3 ) + " " +QString::number( date.day()); 820 str = dayName.left( 3 ) + " " +QString::number( date.day());
821 break; 821 break;
822 822
823 default: 823 default:
824 break; 824 break;
825 } 825 }
826 if ( oneday ) { 826 if ( oneday ) {
827 QString addString; 827 QString addString;
828 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) 828 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() )
829 addString = i18n("Today"); 829 addString = i18n("Today");
830 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) 830 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
831 addString = i18n("Tomorrow"); 831 addString = i18n("Tomorrow");
832 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) 832 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
833 addString = i18n("Yesterday"); 833 addString = i18n("Yesterday");
834 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) 834 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
835 addString = i18n("Day before yesterday"); 835 addString = i18n("Day before yesterday");
836 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) 836 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
837 addString = i18n("Day after tomorrow"); 837 addString = i18n("Day after tomorrow");
838 if ( !addString.isEmpty() ) { 838 if ( !addString.isEmpty() ) {
839 if ( QApplication::desktop()->width() < 640 ) 839 if ( QApplication::desktop()->width() < 640 )
840 str = addString+", " + str; 840 str = addString+", " + str;
841 else 841 else
842 str = addString+", "+ KGlobal::locale()->formatDate( date, false); 842 str = addString+", "+ KGlobal::locale()->formatDate( date, false);
843 } else { 843 } else {
844 str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer); 844 str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer);
845 } 845 }
846 } 846 }
847 dayLabel->setText(str); 847 dayLabel->setText(str);
848 //dayLabel->setAlignment(QLabel::AlignHCenter); 848 //dayLabel->setAlignment(QLabel::AlignHCenter);
849 if (date == QDate::currentDate()) { 849 if (date == QDate::currentDate()) {
850 QFont bFont = dlf; 850 QFont bFont = dlf;
851 bFont.setBold( true ); 851 bFont.setBold( true );
852 dayLabel->setFont(bFont); 852 dayLabel->setFont(bFont);
853 } 853 }
854 //dayLayout->addWidget(dayLabel); 854 //dayLayout->addWidget(dayLabel);
855 855
856#ifndef KORG_NOPLUGINS 856#ifndef KORG_NOPLUGINS
857 CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); 857 CalendarDecoration::List cds = KOCore::self()->calendarDecorations();
858 CalendarDecoration *it; 858 CalendarDecoration *it;
859 for(it = cds.first(); it; it = cds.next()) { 859 for(it = cds.first(); it; it = cds.next()) {
860 QString text = it->shortText( date ); 860 QString text = it->shortText( date );
861 if ( !text.isEmpty() ) { 861 if ( !text.isEmpty() ) {
862 QLabel *label = new QLabel(text,mDayLabels); 862 QLabel *label = new QLabel(text,mDayLabels);
863 label->setAlignment(AlignCenter); 863 label->setAlignment(AlignCenter);
864 dayLayout->addWidget(label); 864 dayLayout->addWidget(label);
865 } 865 }
866 } 866 }
867 867
868 for(it = cds.first(); it; it = cds.next()) { 868 for(it = cds.first(); it; it = cds.next()) {
869 QWidget *wid = it->smallWidget(mDayLabels,date); 869 QWidget *wid = it->smallWidget(mDayLabels,date);
870 if ( wid ) { 870 if ( wid ) {
871 // wid->setHeight(20); 871 // wid->setHeight(20);
872 dayLayout->addWidget(wid); 872 dayLayout->addWidget(wid);
873 } 873 }
874 } 874 }
875#endif 875#endif
876 } 876 }
877 if ( ! appendLabels ) { 877 if ( ! appendLabels ) {
878 dayLabel = mDayLabelsList.next(); 878 dayLabel = mDayLabelsList.next();
879 if ( !dayLabel ) 879 if ( !dayLabel )
880 appendLabels = true; 880 appendLabels = true;
881 } 881 }
882 if ( appendLabels ) { 882 if ( appendLabels ) {
883 dayLabel = getNewDaylabel(); 883 dayLabel = getNewDaylabel();
884 } 884 }
885 //dayLabel->hide();//test only 885 //dayLabel->hide();//test only
886 886
887 dayLabel->setText(">"); 887 dayLabel->setText(">");
888 dayLabel->setFont( dlf ); 888 dayLabel->setFont( dlf );
889 dayLabel->setAutoRepeat( true ); 889 dayLabel->setAutoRepeat( true );
890 dayLabel->show(); 890 dayLabel->show();
891 dayLabel->setNum( -2 ); 891 dayLabel->setNum( -2 );
892 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ widModulo ); 892 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ widModulo );
893 893
894 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); 894 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2);
895 if ( !appendLabels ) { 895 if ( !appendLabels ) {
896 dayLabel = mDayLabelsList.next(); 896 dayLabel = mDayLabelsList.next();
897 while ( dayLabel ) { 897 while ( dayLabel ) {
898 //qDebug("!dayLabel %d",dayLabel ); 898 //qDebug("!dayLabel %d",dayLabel );
899 dayLabel->hide(); 899 dayLabel->hide();
900 dayLabel = mDayLabelsList.next(); 900 dayLabel = mDayLabelsList.next();
901 } 901 }
902 } 902 }
903 903
904 mDayLabelsFrame->setFixedHeight( newHight + 4 ); 904 mDayLabelsFrame->setFixedHeight( newHight + 4 );
905} 905}
906 906
907int KOAgendaView::maxDatesHint() 907int KOAgendaView::maxDatesHint()
908{ 908{
909 // Not sure about the max number of events, so return 0 for now. 909 // Not sure about the max number of events, so return 0 for now.
910 return 0; 910 return 0;
911} 911}
912 912
913int KOAgendaView::currentDateCount() 913int KOAgendaView::currentDateCount()
914{ 914{
915 return mSelectedDates.count(); 915 return mSelectedDates.count();
916} 916}
917 917
918QPtrList<Incidence> KOAgendaView::selectedIncidences() 918QPtrList<Incidence> KOAgendaView::selectedIncidences()
919{ 919{
920 QPtrList<Incidence> selected; 920 QPtrList<Incidence> selected;
921 Incidence *incidence; 921 Incidence *incidence;
922 922
923 incidence = mAgenda->selectedIncidence(); 923 incidence = mAgenda->selectedIncidence();
924 if (incidence) selected.append(incidence); 924 if (incidence) selected.append(incidence);
925 925
926 incidence = mAllDayAgenda->selectedIncidence(); 926 incidence = mAllDayAgenda->selectedIncidence();
927 if (incidence) selected.append(incidence); 927 if (incidence) selected.append(incidence);
928 928
929 return selected; 929 return selected;
930} 930}
931 931
932DateList KOAgendaView::selectedDates() 932DateList KOAgendaView::selectedDates()
933{ 933{
934 DateList selected; 934 DateList selected;
935 QDate qd; 935 QDate qd;
936 936
937 qd = mAgenda->selectedIncidenceDate(); 937 qd = mAgenda->selectedIncidenceDate();
938 if (qd.isValid()) selected.append(qd); 938 if (qd.isValid()) selected.append(qd);
939 939
940 qd = mAllDayAgenda->selectedIncidenceDate(); 940 qd = mAllDayAgenda->selectedIncidenceDate();
941 if (qd.isValid()) selected.append(qd); 941 if (qd.isValid()) selected.append(qd);
942 942
943 return selected; 943 return selected;
944} 944}
945 945
946 946
947void KOAgendaView::updateView() 947void KOAgendaView::updateView()
948{ 948{
949 if ( mBlockUpdating ) 949 if ( mBlockUpdating )
950 return; 950 return;
951 // kdDebug() << "KOAgendaView::updateView()" << endl; 951 // kdDebug() << "KOAgendaView::updateView()" << endl;
952 fillAgenda(); 952 fillAgenda();
953 953
954} 954}
955 955
956 956
957/* 957/*
958 Update configuration settings for the agenda view. This method is not 958 Update configuration settings for the agenda view. This method is not
959 complete. 959 complete.
960*/ 960*/
961void KOAgendaView::updateConfig() 961void KOAgendaView::updateConfig()
962{ 962{
963 if ( mBlockUpdating ) 963 if ( mBlockUpdating )
964 return; 964 return;
965 if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) { 965 if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) {
966 int old = KOPrefs::instance()->mHourSize; 966 int old = KOPrefs::instance()->mHourSize;
967 KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1; 967 KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1;
968 //qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize ); 968 //qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize );
969 } 969 }
970 970
971 971
972 // update config for children 972 // update config for children
973 mTimeLabels->updateConfig(); 973 mTimeLabels->updateConfig();
974 mAgenda->storePosition(); 974 mAgenda->storePosition();
975 mAgenda->updateConfig(); 975 mAgenda->updateConfig();
976 mAllDayAgenda->updateConfig(); 976 mAllDayAgenda->updateConfig();
977 // widget synchronization 977 // widget synchronization
978 //TODO: find a better way, maybe signal/slot 978 //TODO: find a better way, maybe signal/slot
979 mTimeLabels->positionChanged(); 979 mTimeLabels->positionChanged();
980 980
981 // for some reason, this needs to be called explicitly 981 // for some reason, this needs to be called explicitly
982 mTimeLabels->repaint(); 982 mTimeLabels->repaint();
983 983
984 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 984 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
985 985
986 // ToolTips displaying summary of events 986 // ToolTips displaying summary of events
987 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() 987 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance()
988 ->mEnableToolTips); 988 ->mEnableToolTips);
989 989
990 //setHolidayMasks(); 990 //setHolidayMasks();
991 991
992 //createDayLabels(); called by via updateView(); 992 //createDayLabels(); called by via updateView();
993 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); 993 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth());
994 updateView(); 994 updateView();
995 mAgenda->restorePosition(); 995 mAgenda->restorePosition();
996} 996}
997 997
998 998
999void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) 999void KOAgendaView::updateEventDates(KOAgendaItem *item, int type)
1000{ 1000{
1001 1001
1002 1002
1003 int xxx = item->cellX(); 1003 int xxx = item->cellX();
1004 //qDebug("KOAgendaView::updateEventDates %d %d %d %d %d", xxx, mMinY.at(xxx),mMaxY.at(xxx),item->cellYTop(),item->cellYBottom() ); 1004 //qDebug("KOAgendaView::updateEventDates %d %d %d %d %d", xxx, mMinY.at(xxx),mMaxY.at(xxx),item->cellYTop(),item->cellYBottom() );
1005 if ( mMinY.at(xxx) > item->cellYTop() ) 1005 if ( mMinY.at(xxx) > item->cellYTop() )
1006 mMinY.at(xxx) = item->cellYTop(); 1006 mMinY.at(xxx) = item->cellYTop();
1007 if ( mMaxY.at(xxx) < item->cellYBottom() ) 1007 if ( mMaxY.at(xxx) < item->cellYBottom() )
1008 mMaxY.at(xxx) = item->cellYBottom(); 1008 mMaxY.at(xxx) = item->cellYBottom();
1009 1009
1010 QDateTime startDt,endDt; 1010 QDateTime startDt,endDt;
1011 QDate startDate; 1011 QDate startDate;
1012 int lenInSecs; 1012 int lenInSecs;
1013 // if ( type == KOAgenda::RESIZETOP ) 1013 // if ( type == KOAgenda::RESIZETOP )
1014 // qDebug("RESIZETOP "); 1014 // qDebug("RESIZETOP ");
1015 // if ( type == KOAgenda::RESIZEBOTTOM ) 1015 // if ( type == KOAgenda::RESIZEBOTTOM )
1016 // qDebug("RESIZEBOTTOM "); 1016 // qDebug("RESIZEBOTTOM ");
1017 // if ( type == KOAgenda::MOVE ) 1017 // if ( type == KOAgenda::MOVE )
1018 // qDebug("MOVE "); 1018 // qDebug("MOVE ");
1019 if ( item->incidence()->typeID() == eventID ) { 1019 if ( item->incidence()->typeID() == eventID ) {
1020 startDt =item->incidence()->dtStart(); 1020 startDt =item->incidence()->dtStart();
1021 endDt = item->incidence()->dtEnd(); 1021 endDt = item->incidence()->dtEnd();
1022 lenInSecs = startDt.secsTo( endDt ); 1022 lenInSecs = startDt.secsTo( endDt );
1023 } 1023 }
1024 1024
1025 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); 1025 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED );
1026 1026
1027 if ( item->incidence()->typeID()== todoID && item->mLastMoveXPos > 0 ) { 1027 if ( item->incidence()->typeID()== todoID && item->mLastMoveXPos > 0 ) {
1028 startDate = mSelectedDates[item->mLastMoveXPos]; 1028 startDate = mSelectedDates[item->mLastMoveXPos];
1029 } else { 1029 } else {
1030 if (item->cellX() < 0) { 1030 if (item->cellX() < 0) {
1031 startDate = (mSelectedDates.first()).addDays(item->cellX()); 1031 startDate = (mSelectedDates.first()).addDays(item->cellX());
1032 } else { 1032 } else {
1033 startDate = mSelectedDates[item->cellX()]; 1033 startDate = mSelectedDates[item->cellX()];
1034 } 1034 }
1035 } 1035 }
1036 startDt.setDate(startDate); 1036 startDt.setDate(startDate);
1037 1037
1038 if (item->incidence()->doesFloat()) { 1038 if (item->incidence()->doesFloat()) {
1039 endDt.setDate(startDate.addDays(item->cellWidth() - 1)); 1039 endDt.setDate(startDate.addDays(item->cellWidth() - 1));
1040 } else { 1040 } else {
1041 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) 1041 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE )
1042 startDt.setTime(mAgenda->gyToTime(item->cellYTop())); 1042 startDt.setTime(mAgenda->gyToTime(item->cellYTop()));
1043 if ( item->incidence()->typeID() == eventID ) { 1043 if ( item->incidence()->typeID() == eventID ) {
1044 if ( type == KOAgenda::MOVE ) { 1044 if ( type == KOAgenda::MOVE ) {
1045 endDt = startDt.addSecs(lenInSecs); 1045 endDt = startDt.addSecs(lenInSecs);
1046 1046
1047 } else if ( type == KOAgenda::RESIZEBOTTOM ) { 1047 } else if ( type == KOAgenda::RESIZEBOTTOM ) {
1048 if (item->lastMultiItem()) { 1048 if (item->lastMultiItem()) {
1049 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 1049 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
1050 endDt.setDate(startDate. 1050 endDt.setDate(startDate.
1051 addDays(item->lastMultiItem()->cellX() - item->cellX())); 1051 addDays(item->lastMultiItem()->cellX() - item->cellX()));
1052 } else { 1052 } else {
1053 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 1053 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
1054 endDt.setDate(startDate); 1054 endDt.setDate(startDate);
1055 } 1055 }
1056 } 1056 }
1057 } else { 1057 } else {
1058 // todo 1058 // todo
1059 if (item->lastMultiItem()) { 1059 if (item->lastMultiItem()) {
1060 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 1060 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
1061 endDt.setDate(startDate. 1061 endDt.setDate(startDate.
1062 addDays(item->lastMultiItem()->cellX() - item->cellX())); 1062 addDays(item->lastMultiItem()->cellX() - item->cellX()));
1063 } else { 1063 } else {
1064 //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); 1064 //qDebug("tem->cellYBottom() %d",item->cellYBottom() );
1065 if ( item->cellYBottom() > 0 ) 1065 if ( item->cellYBottom() > 0 )
1066 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 1066 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
1067 else 1067 else
1068 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); 1068 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time());
1069 endDt.setDate(startDate); 1069 endDt.setDate(startDate);
1070 } 1070 }
1071 } 1071 }
1072 } 1072 }
1073 if ( item->incidence()->typeID() == eventID ) { 1073 if ( item->incidence()->typeID() == eventID ) {
1074 item->incidence()->setDtStart(startDt); 1074 item->incidence()->setDtStart(startDt);
1075 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); 1075 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt);
1076 } else if ( item->incidence()->typeID() == todoID ) { 1076 } else if ( item->incidence()->typeID() == todoID ) {
1077 Todo* to = static_cast<Todo*>(item->incidence()); 1077 Todo* to = static_cast<Todo*>(item->incidence());
1078 1078
1079 to->setDtDue(endDt); 1079 to->setDtDue(endDt);
1080 if ( to->hasStartDate() ) { 1080 if ( to->hasStartDate() ) {
1081 if (to->dtStart() >= to->dtDue() ) 1081 if (to->dtStart() >= to->dtDue() )
1082 to->setDtStart(to->dtDue().addDays( -2 )); 1082 to->setDtStart(to->dtDue().addDays( -2 ));
1083 } 1083 }
1084 1084
1085 } 1085 }
1086 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); 1086 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() );
1087 item->incidence()->setRevision(item->incidence()->revision()+1); 1087 item->incidence()->setRevision(item->incidence()->revision()+1);
1088 item->setItemDate(startDt.date()); 1088 item->setItemDate(startDt.date());
1089 //item->updateItem(); 1089 //item->updateItem();
1090 if ( item->incidence()->typeID() == todoID ) { 1090 if ( item->incidence()->typeID() == todoID ) {
1091 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); 1091 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED );
1092 1092
1093 } 1093 }
1094 else 1094 else
1095 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); 1095 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED);
1096 item->updateItem(); 1096 item->updateItem();
1097} 1097}
1098 1098
1099void KOAgendaView::showDates( const QDate &start, const QDate &end ) 1099void KOAgendaView::showDates( const QDate &start, const QDate &end )
1100{ 1100{
1101 // kdDebug() << "KOAgendaView::selectDates" << endl; 1101 // kdDebug() << "KOAgendaView::selectDates" << endl;
1102 1102
1103 mSelectedDates.clear(); 1103 mSelectedDates.clear();
1104 // qDebug("KOAgendaView::showDates "); 1104 // qDebug("KOAgendaView::showDates ");
1105 QDate d = start; 1105 QDate d = start;
1106 while (d <= end) { 1106 while (d <= end) {
1107 mSelectedDates.append(d); 1107 mSelectedDates.append(d);
1108 d = d.addDays( 1 ); 1108 d = d.addDays( 1 );
1109 } 1109 }
1110 1110
1111 // and update the view 1111 // and update the view
1112 fillAgenda(); 1112 fillAgenda();
1113} 1113}
1114 1114
1115 1115
1116void KOAgendaView::showEvents(QPtrList<Event>) 1116void KOAgendaView::showEvents(QPtrList<Event>)
1117{ 1117{
1118 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; 1118 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl;
1119} 1119}
1120 1120
1121void KOAgendaView::changeEventDisplay(Event *, int) 1121void KOAgendaView::changeEventDisplay(Event *, int)
1122{ 1122{
1123 // qDebug("KOAgendaView::changeEventDisplay "); 1123 // qDebug("KOAgendaView::changeEventDisplay ");
1124 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; 1124 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl;
1125 // this should be re-written to be MUCH smarter. Right now we 1125 // this should be re-written to be MUCH smarter. Right now we
1126 // are just playing dumb. 1126 // are just playing dumb.
1127 fillAgenda(); 1127 fillAgenda();
1128} 1128}
1129 1129
1130void KOAgendaView::fillAgenda(const QDate &) 1130void KOAgendaView::fillAgenda(const QDate &)
1131{ 1131{
1132 // qDebug("KOAgendaView::fillAgenda "); 1132 // qDebug("KOAgendaView::fillAgenda ");
1133 fillAgenda(); 1133 fillAgenda();
1134} 1134}
1135 1135
1136void KOAgendaView::fillAgenda() 1136void KOAgendaView::fillAgenda()
1137{ 1137{
1138 if ( globalFlagBlockStartup ) 1138 if ( globalFlagBlockStartup )
1139 return; 1139 return;
1140 if ( globalFlagBlockAgenda == 1 ) 1140 if ( globalFlagBlockAgenda == 1 )
1141 return; 1141 return;
1142 static bool onlyOne = false; 1142 static bool onlyOne = false;
1143 if ( onlyOne ) 1143 if ( onlyOne )
1144 return; 1144 return;
1145 onlyOne = true; 1145 onlyOne = true;
1146 //if ( globalFlagBlockAgenda == 2 ) 1146 //if ( globalFlagBlockAgenda == 2 )
1147 //globalFlagBlockAgenda = 0; 1147 //globalFlagBlockAgenda = 0;
1148 // globalFlagBlockPainting = false; 1148 // globalFlagBlockPainting = false;
1149 if ( globalFlagBlockAgenda == 0 ) 1149 if ( globalFlagBlockAgenda == 0 )
1150 globalFlagBlockAgenda = 1; 1150 globalFlagBlockAgenda = 1;
1151 // clearView(); 1151 // clearView();
1152 //qDebug("fillAgenda()++++ "); 1152 //qDebug("fillAgenda()++++ ");
1153 globalFlagBlockAgendaItemPaint = 1; 1153 globalFlagBlockAgendaItemPaint = 1;
1154 1154
1155 mAllDayAgenda->changeColumns(mSelectedDates.count()); 1155 mAllDayAgenda->changeColumns(mSelectedDates.count());
1156 mAgenda->changeColumns(mSelectedDates.count()); 1156 mAgenda->changeColumns(mSelectedDates.count());
1157 qApp->processEvents(); 1157 qApp->processEvents();
1158 mEventIndicatorTop->changeColumns(mSelectedDates.count()); 1158 mEventIndicatorTop->changeColumns(mSelectedDates.count());
1159 mEventIndicatorBottom->changeColumns(mSelectedDates.count()); 1159 mEventIndicatorBottom->changeColumns(mSelectedDates.count());
1160 setHolidayMasks(); 1160 setHolidayMasks();
1161 1161
1162 mMinY.resize(mSelectedDates.count()); 1162 mMinY.resize(mSelectedDates.count());
1163 mMaxY.resize(mSelectedDates.count()); 1163 mMaxY.resize(mSelectedDates.count());
1164 1164
1165 QPtrList<Event> dayEvents; 1165 QPtrList<Event> dayEvents;
1166 1166
1167 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1167 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1168 // Therefore, gtodoset all of them. 1168 // Therefore, gtodoset all of them.
1169 QPtrList<Todo> todos = calendar()->todos(); 1169 QPtrList<Todo> todos = calendar()->todos();
1170 1170
1171 mAgenda->setDateList(mSelectedDates); 1171 mAgenda->setDateList(mSelectedDates);
1172 1172
1173 QDate today = QDate::currentDate(); 1173 QDate today = QDate::currentDate();
1174 1174
1175 DateList::ConstIterator dit; 1175 DateList::ConstIterator dit;
1176 int curCol = 0; 1176 int curCol = 0;
1177 int maxCol = mSelectedDates.count()-1; 1177 int maxCol = mSelectedDates.count()-1;
1178 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 1178 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
1179 QDate currentDate = *dit; 1179 QDate currentDate = *dit;
1180 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() 1180 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString()
1181 // << endl; 1181 // << endl;
1182 1182
1183 dayEvents = calendar()->events(currentDate,false); 1183 dayEvents = calendar()->events(currentDate,false);
1184 1184
1185 // Default values, which can never be reached 1185 // Default values, which can never be reached
1186 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; 1186 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1;
1187 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; 1187 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1;
1188 1188
1189 unsigned int numEvent; 1189 unsigned int numEvent;
1190 //qDebug("+++++NUMEVENT %d", dayEvents.count()); 1190 //qDebug("+++++NUMEVENT %d", dayEvents.count());
1191 for(numEvent=0;numEvent<dayEvents.count();++numEvent) { 1191 for(numEvent=0;numEvent<dayEvents.count();++numEvent) {
1192 Event *event = dayEvents.at(numEvent); 1192 Event *event = dayEvents.at(numEvent);
1193 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) 1193 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") )
1194 if ( event->uid().left(15) == QString("last-syncEvent-") ) 1194 if ( event->uid().left(15) == QString("last-syncEvent-") )
1195 continue; 1195 continue;
1196 // kdDebug() << " Event: " << event->summary() << endl; 1196 // kdDebug() << " Event: " << event->summary() << endl;
1197 1197
1198 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; 1198 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol;
1199 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; 1199 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol;
1200 1200
1201 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; 1201 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl;
1202 1202
1203 if (event->doesFloat()) { 1203 if (event->doesFloat()) {
1204 if (event->doesRecur()) { 1204 if (event->doesRecur()) {
1205 if (event->isMultiDay() ) { 1205 if (event->isMultiDay() ) {
1206 endX = endX - beginX;// endX is now number of days 1206 endX = endX - beginX;// endX is now number of days
1207 if ( event->recursOn( currentDate ) ) { 1207 if ( event->recursOn( currentDate ) ) {
1208 endX += curCol; 1208 endX += curCol;
1209 beginX = curCol; 1209 beginX = curCol;
1210 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1210 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1211 } else { 1211 } else {
1212 //qDebug("days endX %d curCol %d max Col %d %s",endX ,curCol, maxCol, currentDate.toString().latin1()); 1212 //qDebug("days endX %d curCol %d max Col %d %s",endX ,curCol, maxCol, currentDate.toString().latin1());
1213 if ( curCol == maxCol && maxCol+1 < endX ) { 1213 if ( curCol == maxCol && maxCol+1 < endX ) {
1214 int i; 1214 int i;
1215 for ( i = 1; i< endX; ++i ) { 1215 for ( i = 1; i< endX; ++i ) {
1216 if ( event->recursOn( currentDate.addDays( -i ) ) ) 1216 if ( event->recursOn( currentDate.addDays( -i ) ) )
1217 break; 1217 break;
1218 } 1218 }
1219 if ( i > maxCol ) { 1219 if ( i > maxCol ) {
1220 mAllDayAgenda->insertAllDayItem(event,currentDate,0,curCol); 1220 mAllDayAgenda->insertAllDayItem(event,currentDate,0,curCol);
1221 //qDebug("BINGO "); 1221 //qDebug("BINGO ");
1222 } 1222 }
1223 1223
1224 } else { 1224 } else {
1225 QDate dateit = currentDate.addDays( -endX ); 1225 QDate dateit = currentDate.addDays( -endX );
1226 if ( event->recursOn( dateit ) ) { 1226 if ( event->recursOn( dateit ) ) {
1227 //qDebug("found %d %d %d %s", endX,curCol, curCol-endX ,dateit.toString().latin1() ); 1227 //qDebug("found %d %d %d %s", endX,curCol, curCol-endX ,dateit.toString().latin1() );
1228 if ( curCol-endX < 0 ) { 1228 if ( curCol-endX < 0 ) {
1229 mAllDayAgenda->insertAllDayItem(event,currentDate,0,curCol); 1229 mAllDayAgenda->insertAllDayItem(event,currentDate,0,curCol);
1230 } 1230 }
1231 } 1231 }
1232 } 1232 }
1233 } 1233 }
1234 } else { 1234 } else {
1235 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); 1235 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol);
1236 } 1236 }
1237 1237
1238 } else { 1238 } else {
1239 if (beginX <= 0 && curCol == 0) { 1239 if (beginX <= 0 && curCol == 0) {
1240 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1240 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1241 } else if (beginX == curCol) { 1241 } else if (beginX == curCol) {
1242 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1242 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1243 } 1243 }
1244 } 1244 }
1245 } else if (event->isMultiDay()) { 1245 } else if (event->isMultiDay()) {
1246 if ( event->doesRecur () ) { 1246 if ( event->doesRecur () ) {
1247 QDate dateit = currentDate; 1247 QDate dateit = currentDate;
1248 int count = 0; 1248 int count = 0;
1249 int max = event->dtStart().daysTo( event->dtEnd() ) +2; 1249 int max = event->dtStart().daysTo( event->dtEnd() ) +2;
1250 while (! event->recursOn( dateit ) && count <= max ) { 1250 while (! event->recursOn( dateit ) && count <= max ) {
1251 ++count; 1251 ++count;
1252 dateit = dateit.addDays( -1 ); 1252 dateit = dateit.addDays( -1 );
1253 } 1253 }
1254 bool ok; 1254 bool ok;
1255 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); 1255 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok );
1256 if ( ok ) 1256 if ( ok )
1257 { 1257 {
1258 int secs = event->dtStart().secsTo( event->dtEnd() ); 1258 int secs = event->dtStart().secsTo( event->dtEnd() );
1259 QDateTime nextOcend =nextOcstart.addSecs( secs ); ; 1259 QDateTime nextOcend =nextOcstart.addSecs( secs ); ;
1260 beginX = currentDate.daysTo(nextOcstart.date()) + curCol; 1260 beginX = currentDate.daysTo(nextOcstart.date()) + curCol;
1261 endX = currentDate.daysTo(nextOcend.date()) + curCol; 1261 endX = currentDate.daysTo(nextOcend.date()) + curCol;
1262 1262
1263 } 1263 }
1264 } 1264 }
1265 int startY = mAgenda->timeToY(event->dtStart().time()); 1265 int startY = mAgenda->timeToY(event->dtStart().time());
1266 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1266 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1267 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); 1267 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol );
1268 if ((beginX <= 0 && curCol == 0) || beginX == curCol) { 1268 if ((beginX <= 0 && curCol == 0) || beginX == curCol) {
1269 //qDebug("insert!!! "); 1269 //qDebug("insert!!! ");
1270 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); 1270 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY);
1271 } 1271 }
1272 if (beginX == curCol) { 1272 if (beginX == curCol) {
1273 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1273 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1274 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1274 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1275 } else if (endX == curCol) { 1275 } else if (endX == curCol) {
1276 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1276 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1277 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1277 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1278 } else { 1278 } else {
1279 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1279 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1280 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1280 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1281 } 1281 }
1282 } else { 1282 } else {
1283 int startY = mAgenda->timeToY(event->dtStart().time()); 1283 int startY = mAgenda->timeToY(event->dtStart().time());
1284 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1284 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1285 if (endY < startY) endY = startY; 1285 if (endY < startY) endY = startY;
1286 mAgenda->insertItem(event,currentDate,curCol,startY,endY); 1286 mAgenda->insertItem(event,currentDate,curCol,startY,endY);
1287 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1287 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1288 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1288 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1289 } 1289 }
1290 } 1290 }
1291 // ---------- [display Todos -------------- 1291 // ---------- [display Todos --------------
1292 unsigned int numTodo; 1292 unsigned int numTodo;
1293 for (numTodo = 0; numTodo < todos.count(); ++numTodo) { 1293 for (numTodo = 0; numTodo < todos.count(); ++numTodo) {
1294 Todo *todo = todos.at(numTodo); 1294 Todo *todo = todos.at(numTodo);
1295 1295
1296 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date 1296 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date
1297 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda ) continue; 1297 if ( todo->hasCompletedDate() && !KOPrefs::instance()->mShowCompletedTodoInAgenda ) continue;
1298 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1298 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1299 // Already completed items can be displayed on their original due date 1299 // Already completed items can be displayed on their original due date
1300 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda 1300 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda
1301 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; 1301 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda;
1302 bool fillIn = false; 1302 bool fillIn = false;
1303 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) 1303 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate )
1304 fillIn = true; 1304 fillIn = true;
1305 if ( ! fillIn && !todo->hasCompletedDate() ) 1305 if ( ! fillIn && !todo->hasCompletedDate() )
1306 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); 1306 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue);
1307 if ( fillIn ) { 1307 if ( fillIn ) {
1308 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue 1308 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue
1309 if ( KOPrefs::instance()->mShowTodoInAgenda ) 1309 if ( KOPrefs::instance()->mShowTodoInAgenda )
1310 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); 1310 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol);
1311 } 1311 }
1312 else { 1312 else {
1313 QDateTime dt; 1313 QDateTime dt;
1314 if ( todo->hasCompletedDate() ) 1314 if ( todo->hasCompletedDate() )
1315 dt = todo->completed(); 1315 dt = todo->completed();
1316 else 1316 else
1317 dt = todo->dtDue();; 1317 dt = todo->dtDue();;
1318 1318
1319 1319
1320 int endY = mAgenda->timeToY(dt.time()) - 1; 1320 int endY = mAgenda->timeToY(dt.time()) - 1;
1321 int hi = (18/KOPrefs::instance()->mHourSize); 1321 int hi = (18/KOPrefs::instance()->mHourSize);
1322 //qDebug("hei %d ",KOPrefs::instance()->mHourSize); 1322 //qDebug("hei %d ",KOPrefs::instance()->mHourSize);
1323 int startY = endY -hi; 1323 int startY = endY -hi;
1324 1324
1325 mAgenda->insertItem(todo,currentDate,curCol,startY,endY); 1325 mAgenda->insertItem(todo,currentDate,curCol,startY,endY);
1326 1326
1327 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1327 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1328 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1328 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1329 } 1329 }
1330 } 1330 }
1331 } 1331 }
1332 // ---------- display Todos] -------------- 1332 // ---------- display Todos] --------------
1333 1333
1334 ++curCol; 1334 ++curCol;
1335 } 1335 }
1336 mAgenda->hideUnused(); 1336 mAgenda->hideUnused();
1337 mAllDayAgenda->hideUnused(); 1337 mAllDayAgenda->hideUnused();
1338 mAgenda->checkScrollBoundaries(); 1338 mAgenda->checkScrollBoundaries();
1339 deleteSelectedDateTime(); 1339 deleteSelectedDateTime();
1340 createDayLabels(); 1340 createDayLabels();
1341 emit incidenceSelected( 0 ); 1341 emit incidenceSelected( 0 );
1342 1342
1343 if ( globalFlagBlockAgenda == 2 ) { 1343 if ( globalFlagBlockAgenda == 2 ) {
1344 if ( KOPrefs::instance()->mSetTimeToDayStartAt ) 1344 if ( KOPrefs::instance()->mSetTimeToDayStartAt )
1345 setStartHour( KOPrefs::instance()->mDayBegins ); 1345 setStartHour( KOPrefs::instance()->mDayBegins );
1346 else if ( KOPrefs::instance()->mCenterOnCurrentTime ) 1346 else if ( KOPrefs::instance()->mCenterOnCurrentTime )
1347 setStartHour( QTime::currentTime ().hour() ); 1347 setStartHour( QTime::currentTime ().hour() );
1348 } 1348 }
1349 qApp->processEvents(); 1349 qApp->processEvents();
1350 globalFlagBlockAgenda = 0; 1350 globalFlagBlockAgenda = 0;
1351 mAllDayAgenda->drawContentsToPainter(); 1351 mAllDayAgenda->drawContentsToPainter();
1352 mAgenda->drawContentsToPainter(); 1352 mAgenda->drawContentsToPainter();
1353 repaintAgenda(); 1353 repaintAgenda();
1354 startIdleTimeout(); 1354 startIdleTimeout();
1355 onlyOne = false; 1355 onlyOne = false;
1356} 1356}
1357void KOAgendaView::repaintAgenda() 1357void KOAgendaView::repaintAgenda()
1358{ 1358{
1359 mAgenda->viewport()->repaint( false ); 1359 mAgenda->viewport()->repaint( false );
1360 mAllDayAgenda->viewport()->repaint( false ); 1360 mAllDayAgenda->viewport()->repaint( false );
1361 mAgenda->finishUpdate(); 1361 mAgenda->finishUpdate();
1362 mAllDayAgenda->finishUpdate(); 1362 mAllDayAgenda->finishUpdate();
1363} 1363}
1364 1364
1365 1365
1366void KOAgendaView::clearView() 1366void KOAgendaView::clearView()
1367{ 1367{
1368 mAllDayAgenda->clear(); 1368 mAllDayAgenda->clear();
1369 mAgenda->clear(); 1369 mAgenda->clear();
1370} 1370}
1371void KOAgendaView::clearList() 1371void KOAgendaView::clearList()
1372{ 1372{
1373 clearView(); 1373 clearView();
1374 mAllDayAgenda->hideUnused(); 1374 mAllDayAgenda->hideUnused();