summaryrefslogtreecommitdiffabout
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--korganizer/koagenda.cpp8
-rw-r--r--korganizer/koagendaview.cpp2
-rw-r--r--korganizer/koeditorgeneraltodo.cpp3
-rw-r--r--korganizer/navigatorbar.cpp6
4 files changed, 18 insertions, 1 deletions
diff --git a/korganizer/koagenda.cpp b/korganizer/koagenda.cpp
index ed7a443..1a24887 100644
--- a/korganizer/koagenda.cpp
+++ b/korganizer/koagenda.cpp
@@ -76,768 +76,776 @@ MarcusBains::MarcusBains(KOAgenda *_agenda,const char *name)
76 pal.setColor(QColorGroup::Foreground, Qt::red); 76 pal.setColor(QColorGroup::Foreground, Qt::red);
77 mTimeBox->setPalette(pal); 77 mTimeBox->setPalette(pal);
78 //mTimeBox->setAutoMask(true); 78 //mTimeBox->setAutoMask(true);
79 79
80 agenda->addChild(mTimeBox); 80 agenda->addChild(mTimeBox);
81 81
82 oldToday = -1; 82 oldToday = -1;
83} 83}
84 84
85MarcusBains::~MarcusBains() 85MarcusBains::~MarcusBains()
86{ 86{
87 delete minutes; 87 delete minutes;
88} 88}
89 89
90int MarcusBains::todayColumn() 90int MarcusBains::todayColumn()
91{ 91{
92 QDate currentDate = QDate::currentDate(); 92 QDate currentDate = QDate::currentDate();
93 93
94 DateList dateList = agenda->dateList(); 94 DateList dateList = agenda->dateList();
95 DateList::ConstIterator it; 95 DateList::ConstIterator it;
96 int col = 0; 96 int col = 0;
97 for(it = dateList.begin(); it != dateList.end(); ++it) { 97 for(it = dateList.begin(); it != dateList.end(); ++it) {
98 if((*it) == currentDate) 98 if((*it) == currentDate)
99 return KOGlobals::self()->reverseLayout() ? 99 return KOGlobals::self()->reverseLayout() ?
100 agenda->columns() - 1 - col : col; 100 agenda->columns() - 1 - col : col;
101 ++col; 101 ++col;
102 } 102 }
103 103
104 return -1; 104 return -1;
105} 105}
106void MarcusBains::updateLoc() 106void MarcusBains::updateLoc()
107{ 107{
108 updateLocation(); 108 updateLocation();
109} 109}
110void MarcusBains::updateLocation(bool recalculate) 110void MarcusBains::updateLocation(bool recalculate)
111{ 111{
112 112
113 QTime tim = QTime::currentTime(); 113 QTime tim = QTime::currentTime();
114 //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1()); 114 //qDebug(" MarcusBains::updateLocation %s ", tim.toString().latin1());
115 if((tim.hour() == 0) && (oldTime.hour()==23)) 115 if((tim.hour() == 0) && (oldTime.hour()==23))
116 recalculate = true; 116 recalculate = true;
117 117
118 int mins = tim.hour()*60 + tim.minute(); 118 int mins = tim.hour()*60 + tim.minute();
119 int minutesPerCell = 24 * 60 / agenda->rows(); 119 int minutesPerCell = 24 * 60 / agenda->rows();
120 int y = mins*agenda->gridSpacingY()/minutesPerCell; 120 int y = mins*agenda->gridSpacingY()/minutesPerCell;
121 int today = recalculate ? todayColumn() : oldToday; 121 int today = recalculate ? todayColumn() : oldToday;
122 int x = agenda->gridSpacingX()*today; 122 int x = agenda->gridSpacingX()*today;
123 bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled); 123 bool disabled = !(KOPrefs::instance()->mMarcusBainsEnabled);
124 124
125 oldTime = tim; 125 oldTime = tim;
126 oldToday = today; 126 oldToday = today;
127 127
128 if(disabled || (today<0)) { 128 if(disabled || (today<0)) {
129 hide(); mTimeBox->hide(); 129 hide(); mTimeBox->hide();
130 return; 130 return;
131 } else { 131 } else {
132 show(); mTimeBox->show(); 132 show(); mTimeBox->show();
133 } 133 }
134 134
135 if(recalculate) 135 if(recalculate)
136 setFixedSize(agenda->gridSpacingX(),1); 136 setFixedSize(agenda->gridSpacingX(),1);
137 agenda->moveChild(this, x, y); 137 agenda->moveChild(this, x, y);
138 raise(); 138 raise();
139 139
140 if(recalculate) 140 if(recalculate)
141 //mTimeBox->setFont(QFont("helvetica",10)); 141 //mTimeBox->setFont(QFont("helvetica",10));
142 mTimeBox->setFont(KOPrefs::instance()->mMarcusBainsFont); 142 mTimeBox->setFont(KOPrefs::instance()->mMarcusBainsFont);
143 143
144 mTimeBox->setText(KGlobal::locale()->formatTime(tim, KOPrefs::instance()->mMarcusBainsShowSeconds)); 144 mTimeBox->setText(KGlobal::locale()->formatTime(tim, KOPrefs::instance()->mMarcusBainsShowSeconds));
145 mTimeBox->adjustSize(); 145 mTimeBox->adjustSize();
146 // the -2 below is there because there is a bug in this program 146 // the -2 below is there because there is a bug in this program
147 // somewhere, where the last column of this widget is a few pixels 147 // somewhere, where the last column of this widget is a few pixels
148 // narrower than the other columns. 148 // narrower than the other columns.
149 int offs = (today==agenda->columns()-1) ? -4 : 0; 149 int offs = (today==agenda->columns()-1) ? -4 : 0;
150 agenda->moveChild(mTimeBox, 150 agenda->moveChild(mTimeBox,
151 x+agenda->gridSpacingX()-mTimeBox->width()+offs-1, 151 x+agenda->gridSpacingX()-mTimeBox->width()+offs-1,
152 y-mTimeBox->height()); 152 y-mTimeBox->height());
153 153
154 mTimeBox->raise(); 154 mTimeBox->raise();
155 //mTimeBox->setAutoMask(true); 155 //mTimeBox->setAutoMask(true);
156 minutes->start(5000,true); 156 minutes->start(5000,true);
157} 157}
158 158
159 159
160//////////////////////////////////////////////////////////////////////////// 160////////////////////////////////////////////////////////////////////////////
161 161
162 162
163/* 163/*
164 Create an agenda widget with rows rows and columns columns. 164 Create an agenda widget with rows rows and columns columns.
165*/ 165*/
166KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent, 166KOAgenda::KOAgenda(int columns,int rows,int rowSize,QWidget *parent,
167 const char *name,WFlags f) : 167 const char *name,WFlags f) :
168 QScrollView(parent,name,f) 168 QScrollView(parent,name,f)
169{ 169{
170 170
171 171
172 mColumns = columns; 172 mColumns = columns;
173 mRows = rows; 173 mRows = rows;
174 mGridSpacingY = rowSize; 174 mGridSpacingY = rowSize;
175 mAllDayMode = false; 175 mAllDayMode = false;
176#ifndef DESKTOP_VERSION 176#ifndef DESKTOP_VERSION
177 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 177 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
178#endif 178#endif
179 mHolidayMask = 0; 179 mHolidayMask = 0;
180 init(); 180 init();
181} 181}
182 182
183/* 183/*
184 Create an agenda widget with columns columns and one row. This is used for 184 Create an agenda widget with columns columns and one row. This is used for
185 all-day events. 185 all-day events.
186*/ 186*/
187KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) : 187KOAgenda::KOAgenda(int columns,QWidget *parent,const char *name,WFlags f) :
188 QScrollView(parent,name,f) 188 QScrollView(parent,name,f)
189{ 189{
190 blockResize = false; 190 blockResize = false;
191 mColumns = columns; 191 mColumns = columns;
192 mRows = 1; 192 mRows = 1;
193 //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize); 193 //qDebug("aaaaaaaaaaaaaaaaaaldays %d ", KOPrefs::instance()->mAllDaySize);
194 mGridSpacingY = KOPrefs::instance()->mAllDaySize; 194 mGridSpacingY = KOPrefs::instance()->mAllDaySize;
195 mAllDayMode = true; 195 mAllDayMode = true;
196#ifndef DESKTOP_VERSION 196#ifndef DESKTOP_VERSION
197 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold ); 197 //QPEApplication::setStylusOperation( viewport(), QPEApplication::RightOnHold );
198#endif 198#endif
199 mHolidayMask = 0; 199 mHolidayMask = 0;
200 init(); 200 init();
201} 201}
202 202
203 203
204KOAgenda::~KOAgenda() 204KOAgenda::~KOAgenda()
205{ 205{
206 if(mMarcusBains) delete mMarcusBains; 206 if(mMarcusBains) delete mMarcusBains;
207 207
208} 208}
209 209
210Incidence *KOAgenda::selectedIncidence() const 210Incidence *KOAgenda::selectedIncidence() const
211{ 211{
212 return (mSelectedItem ? mSelectedItem->incidence() : 0); 212 return (mSelectedItem ? mSelectedItem->incidence() : 0);
213} 213}
214 214
215 215
216QDate KOAgenda::selectedIncidenceDate() const 216QDate KOAgenda::selectedIncidenceDate() const
217{ 217{
218 return (mSelectedItem ? mSelectedItem->itemDate() : QDate()); 218 return (mSelectedItem ? mSelectedItem->itemDate() : QDate());
219} 219}
220 220
221 221
222void KOAgenda::init() 222void KOAgenda::init()
223{ 223{
224 mPopupTimer = new QTimer(this); 224 mPopupTimer = new QTimer(this);
225 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu())); 225 connect(mPopupTimer , SIGNAL(timeout()), this, SLOT(popupMenu()));
226 226
227 mNewItemPopup = new QPopupMenu( this ); 227 mNewItemPopup = new QPopupMenu( this );
228 connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) ); 228 connect ( mNewItemPopup, SIGNAL (activated ( int ) ), this, SLOT ( newItem(int)) );
229 QString pathString = ""; 229 QString pathString = "";
230 if ( !KOPrefs::instance()->mToolBarMiniIcons ) { 230 if ( !KOPrefs::instance()->mToolBarMiniIcons ) {
231 if ( QApplication::desktop()->width() < 480 ) 231 if ( QApplication::desktop()->width() < 480 )
232 pathString += "icons16/"; 232 pathString += "icons16/";
233 } else 233 } else
234 pathString += "iconsmini/"; 234 pathString += "iconsmini/";
235 235
236 mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."), 1 ); 236 mNewItemPopup->insertItem ( SmallIcon( pathString +"newevent" ), i18n("New Event..."), 1 );
237 mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 ); 237 mNewItemPopup->insertItem ( SmallIcon( pathString +"newtodo" ), i18n("New Todo..."),2 );
238 mNewItemPopup->insertSeparator ( ); 238 mNewItemPopup->insertSeparator ( );
239 mNewItemPopup->insertItem ( SmallIcon( pathString +"day" ), i18n("Day view"),3 ); 239 mNewItemPopup->insertItem ( SmallIcon( pathString +"day" ), i18n("Day view"),3 );
240 mNewItemPopup->insertItem ( SmallIcon( pathString +"xdays" ), i18n("Next days"),8 ); 240 mNewItemPopup->insertItem ( SmallIcon( pathString +"xdays" ), i18n("Next days"),8 );
241 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next week"),4 ); 241 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next week"),4 );
242 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next two weeks"),5 ); 242 mNewItemPopup->insertItem ( SmallIcon( pathString +"week" ), i18n("Next two weeks"),5 );
243 mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("Next month"),6 ); 243 mNewItemPopup->insertItem ( SmallIcon( pathString +"month" ), i18n("Next month"),6 );
244 mNewItemPopup->insertItem ( SmallIcon( pathString +"journal" ), i18n("Journal view"),7 ); 244 mNewItemPopup->insertItem ( SmallIcon( pathString +"journal" ), i18n("Journal view"),7 );
245#ifndef _WIN32_ 245#ifndef _WIN32_
246 int wflags = viewport()-> getWFlags() |WRepaintNoErase;//WResizeNoErase 246 int wflags = viewport()-> getWFlags() |WRepaintNoErase;//WResizeNoErase
247 viewport()->setWFlags ( wflags); 247 viewport()->setWFlags ( wflags);
248#endif 248#endif
249 mGridSpacingX = 80; 249 mGridSpacingX = 80;
250 mResizeBorderWidth = 8; 250 mResizeBorderWidth = 8;
251 mScrollBorderWidth = 8; 251 mScrollBorderWidth = 8;
252 mScrollDelay = 30; 252 mScrollDelay = 30;
253 mScrollOffset = 10; 253 mScrollOffset = 10;
254 mPaintPixmap.resize( 20,20); 254 mPaintPixmap.resize( 20,20);
255 //enableClipper(true); 255 //enableClipper(true);
256 256
257 // Grab key strokes for keyboard navigation of agenda. Seems to have no 257 // Grab key strokes for keyboard navigation of agenda. Seems to have no
258 // effect. Has to be fixed. 258 // effect. Has to be fixed.
259 setFocusPolicy(WheelFocus); 259 setFocusPolicy(WheelFocus);
260 260
261 connect(&mScrollUpTimer,SIGNAL(timeout()),SLOT(scrollUp())); 261 connect(&mScrollUpTimer,SIGNAL(timeout()),SLOT(scrollUp()));
262 connect(&mScrollDownTimer,SIGNAL(timeout()),SLOT(scrollDown())); 262 connect(&mScrollDownTimer,SIGNAL(timeout()),SLOT(scrollDown()));
263 connect(&mResizeTimer,SIGNAL(timeout()),SLOT(finishResize())); 263 connect(&mResizeTimer,SIGNAL(timeout()),SLOT(finishResize()));
264 264
265 mStartCellX = 0; 265 mStartCellX = 0;
266 mStartCellY = 0; 266 mStartCellY = 0;
267 mCurrentCellX = 0; 267 mCurrentCellX = 0;
268 mCurrentCellY = 0; 268 mCurrentCellY = 0;
269 269
270 mSelectionCellX = 0; 270 mSelectionCellX = 0;
271 mSelectionYTop = 0; 271 mSelectionYTop = 0;
272 mSelectionHeight = 0; 272 mSelectionHeight = 0;
273 273
274 mOldLowerScrollValue = -1; 274 mOldLowerScrollValue = -1;
275 mOldUpperScrollValue = -1; 275 mOldUpperScrollValue = -1;
276 276
277 mClickedItem = 0; 277 mClickedItem = 0;
278 278
279 mActionItem = 0; 279 mActionItem = 0;
280 mActionType = NOP; 280 mActionType = NOP;
281 mItemMoved = false; 281 mItemMoved = false;
282 282
283 mSelectedItem = 0; 283 mSelectedItem = 0;
284 284
285 // mItems.setAutoDelete(true); 285 // mItems.setAutoDelete(true);
286 286
287 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 ); 287 resizeContents( mGridSpacingX * mColumns + 1 , mGridSpacingY * mRows + 1 );
288 288
289 viewport()->update(); 289 viewport()->update();
290 290
291 setMinimumSize(30, 1); 291 setMinimumSize(30, 1);
292// setMaximumHeight(mGridSpacingY * mRows + 5); 292// setMaximumHeight(mGridSpacingY * mRows + 5);
293 293
294 // Disable horizontal scrollbar. This is a hack. The geometry should be 294 // Disable horizontal scrollbar. This is a hack. The geometry should be
295 // controlled in a way that the contents horizontally always fits. Then it is 295 // controlled in a way that the contents horizontally always fits. Then it is
296 // not necessary to turn off the scrollbar. 296 // not necessary to turn off the scrollbar.
297 setHScrollBarMode(AlwaysOff); 297 setHScrollBarMode(AlwaysOff);
298 if ( ! mAllDayMode ) 298 if ( ! mAllDayMode )
299 setVScrollBarMode(AlwaysOn); 299 setVScrollBarMode(AlwaysOn);
300 else 300 else
301 setVScrollBarMode(AlwaysOff); 301 setVScrollBarMode(AlwaysOff);
302 302
303 setStartHour(KOPrefs::instance()->mDayBegins); 303 setStartHour(KOPrefs::instance()->mDayBegins);
304 304
305 calculateWorkingHours(); 305 calculateWorkingHours();
306 306
307 connect(verticalScrollBar(),SIGNAL(valueChanged(int)), 307 connect(verticalScrollBar(),SIGNAL(valueChanged(int)),
308 SLOT(checkScrollBoundaries(int))); 308 SLOT(checkScrollBoundaries(int)));
309 309
310 // Create the Marcus Bains line. 310 // Create the Marcus Bains line.
311 if(mAllDayMode) 311 if(mAllDayMode)
312 mMarcusBains = 0; 312 mMarcusBains = 0;
313 else { 313 else {
314 mMarcusBains = new MarcusBains(this); 314 mMarcusBains = new MarcusBains(this);
315 addChild(mMarcusBains); 315 addChild(mMarcusBains);
316 } 316 }
317 mPopupKind = 0; 317 mPopupKind = 0;
318 mPopupItem = 0; 318 mPopupItem = 0;
319} 319}
320 320
321void KOAgenda::clear() 321void KOAgenda::clear()
322{ 322{
323 KOAgendaItem *item; 323 KOAgendaItem *item;
324 for ( item=mItems.first(); item != 0; item=mItems.next() ) { 324 for ( item=mItems.first(); item != 0; item=mItems.next() ) {
325 mUnusedItems.append( item ); 325 mUnusedItems.append( item );
326 //item->hide(); 326 //item->hide();
327 } 327 }
328 mItems.clear(); 328 mItems.clear();
329 mSelectedItem = 0; 329 mSelectedItem = 0;
330 clearSelection(); 330 clearSelection();
331} 331}
332 332
333void KOAgenda::clearSelection() 333void KOAgenda::clearSelection()
334{ 334{
335 mSelectionCellX = 0; 335 mSelectionCellX = 0;
336 mSelectionYTop = 0; 336 mSelectionYTop = 0;
337 mSelectionHeight = 0; 337 mSelectionHeight = 0;
338} 338}
339 339
340void KOAgenda::marcus_bains() 340void KOAgenda::marcus_bains()
341{ 341{
342 if(mMarcusBains) mMarcusBains->updateLocation(true); 342 if(mMarcusBains) mMarcusBains->updateLocation(true);
343} 343}
344 344
345 345
346void KOAgenda::changeColumns(int columns) 346void KOAgenda::changeColumns(int columns)
347{ 347{
348 if (columns == 0) { 348 if (columns == 0) {
349 qDebug("KOAgenda::changeColumns() called with argument 0 "); 349 qDebug("KOAgenda::changeColumns() called with argument 0 ");
350 return; 350 return;
351 } 351 }
352 clear(); 352 clear();
353 mColumns = columns; 353 mColumns = columns;
354 computeSizes(); 354 computeSizes();
355} 355}
356 356
357/* 357/*
358 This is the eventFilter function, which gets all events from the KOAgendaItems 358 This is the eventFilter function, which gets all events from the KOAgendaItems
359 contained in the agenda. It has to handle moving and resizing for all items. 359 contained in the agenda. It has to handle moving and resizing for all items.
360*/ 360*/
361bool KOAgenda::eventFilter ( QObject *object, QEvent *event ) 361bool KOAgenda::eventFilter ( QObject *object, QEvent *event )
362{ 362{
363 // kdDebug() << "KOAgenda::eventFilter" << endl; 363 // kdDebug() << "KOAgenda::eventFilter" << endl;
364 switch(event->type()) { 364 switch(event->type()) {
365 case QEvent::MouseButtonPress: 365 case QEvent::MouseButtonPress:
366 case QEvent::MouseButtonDblClick: 366 case QEvent::MouseButtonDblClick:
367 case QEvent::MouseButtonRelease: 367 case QEvent::MouseButtonRelease:
368 case QEvent::MouseMove: 368 case QEvent::MouseMove:
369 return eventFilter_mouse(object, static_cast<QMouseEvent *>(event)); 369 return eventFilter_mouse(object, static_cast<QMouseEvent *>(event));
370 370
371 case (QEvent::Leave): 371 case (QEvent::Leave):
372 if (!mActionItem) 372 if (!mActionItem)
373 setCursor(arrowCursor); 373 setCursor(arrowCursor);
374 return true; 374 return true;
375 375
376 default: 376 default:
377 return QScrollView::eventFilter(object,event); 377 return QScrollView::eventFilter(object,event);
378 } 378 }
379} 379}
380void KOAgenda::popupMenu() 380void KOAgenda::popupMenu()
381{ 381{
382 mPopupTimer->stop(); 382 mPopupTimer->stop();
383 if ( mPopupKind == 1 ) { 383 if ( mPopupKind == 1 ) {
384 if (mActionItem ) { 384 if (mActionItem ) {
385 endItemAction(); 385 endItemAction();
386 } 386 }
387 mLeftMouseDown = false; // no more leftMouse computation 387 mLeftMouseDown = false; // no more leftMouse computation
388 if (mPopupItem) { 388 if (mPopupItem) {
389 selectItem(mPopupItem); 389 selectItem(mPopupItem);
390 emit showIncidencePopupSignal(mPopupItem->incidence()); 390 emit showIncidencePopupSignal(mPopupItem->incidence());
391 391
392 } 392 }
393 } else if ( mPopupKind == 2 ) { 393 } else if ( mPopupKind == 2 ) {
394 if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action 394 if ( mLeftMouseDown ) { // we have a simulated right click - clear left mouse action
395 endSelectAction( false ); // do not emit new event signal 395 endSelectAction( false ); // do not emit new event signal
396 mLeftMouseDown = false; // no more leftMouse computation 396 mLeftMouseDown = false; // no more leftMouse computation
397 } 397 }
398 mNewItemPopup->popup( mPopupPos); 398 mNewItemPopup->popup( mPopupPos);
399 } 399 }
400 mLeftMouseDown = false; 400 mLeftMouseDown = false;
401 mPopupItem = 0; 401 mPopupItem = 0;
402 mPopupKind = 0; 402 mPopupKind = 0;
403} 403}
404 404
405bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me) 405bool KOAgenda::eventFilter_mouse(QObject *object, QMouseEvent *me)
406{ 406{
407 //qDebug("KOAgenda::eventFilter_mous "); 407 //qDebug("KOAgenda::eventFilter_mous ");
408 QPoint viewportPos; 408 QPoint viewportPos;
409 if (object != viewport()) { 409 if (object != viewport()) {
410 viewportPos = ((QWidget *)object)->mapToParent(me->pos()); 410 viewportPos = ((QWidget *)object)->mapToParent(me->pos());
411 } else { 411 } else {
412 viewportPos = me->pos(); 412 viewportPos = me->pos();
413 } 413 }
414 static int startX = 0; 414 static int startX = 0;
415 static int startY = 0; 415 static int startY = 0;
416 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 ); 416 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 );
417 static bool blockMoving = true; 417 static bool blockMoving = true;
418 switch (me->type()) { 418 switch (me->type()) {
419 case QEvent::MouseButtonPress: 419 case QEvent::MouseButtonPress:
420 if (me->button() == LeftButton) { 420 if (me->button() == LeftButton) {
421 mPopupTimer->start( 600 ); 421 mPopupTimer->start( 600 );
422 mLeftMouseDown = true; 422 mLeftMouseDown = true;
423 } 423 }
424 blockMoving = true; 424 blockMoving = true;
425 startX = viewportPos.x(); 425 startX = viewportPos.x();
426 startY = viewportPos.y(); 426 startY = viewportPos.y();
427 if (object != viewport()) { 427 if (object != viewport()) {
428 mPopupItem = (KOAgendaItem *)object; 428 mPopupItem = (KOAgendaItem *)object;
429 mPopupKind = 1; 429 mPopupKind = 1;
430 if (me->button() == RightButton) { 430 if (me->button() == RightButton) {
431 popupMenu(); 431 popupMenu();
432 } else if (me->button() == LeftButton) { 432 } else if (me->button() == LeftButton) {
433 mActionItem = (KOAgendaItem *)object; 433 mActionItem = (KOAgendaItem *)object;
434 if (mActionItem) { 434 if (mActionItem) {
435 if ( mSelectionHeight > 0 ) { 435 if ( mSelectionHeight > 0 ) {
436 int selectionCellX = mSelectionCellX * mGridSpacingX; 436 int selectionCellX = mSelectionCellX * mGridSpacingX;
437 int selectionYTop = mSelectionYTop; 437 int selectionYTop = mSelectionYTop;
438 int gridSpacingX = mGridSpacingX; 438 int gridSpacingX = mGridSpacingX;
439 int selectionHeight = mSelectionHeight; 439 int selectionHeight = mSelectionHeight;
440 clearSelection(); 440 clearSelection();
441 repaintContents( selectionCellX, selectionYTop, 441 repaintContents( selectionCellX, selectionYTop,
442 gridSpacingX, selectionHeight,false ); 442 gridSpacingX, selectionHeight,false );
443 } 443 }
444 selectItem(mActionItem); 444 selectItem(mActionItem);
445 Incidence *incidence = mActionItem->incidence(); 445 Incidence *incidence = mActionItem->incidence();
446 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) { 446 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) {
447 mActionItem = 0; 447 mActionItem = 0;
448 } else { 448 } else {
449 startItemAction(viewportPos); 449 startItemAction(viewportPos);
450 } 450 }
451 } 451 }
452 } 452 }
453 } else { // ---------- viewport() 453 } else { // ---------- viewport()
454 mPopupItem = 0; 454 mPopupItem = 0;
455 mPopupKind = 2; 455 mPopupKind = 2;
456 selectItem(0); 456 selectItem(0);
457 mActionItem = 0; 457 mActionItem = 0;
458 mPopupPos = viewport()->mapToGlobal( me->pos() ); 458 mPopupPos = viewport()->mapToGlobal( me->pos() );
459 if (me->button() == RightButton) { 459 if (me->button() == RightButton) {
460 int x,y;
461 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
462 int gx,gy;
463 contentsToGrid(x,y,gx,gy);
464 mCurrentCellX = gx;
465 mCurrentCellY = gy;
466 mStartCellX = gx;
467 mStartCellY = gy;
460 popupMenu(); 468 popupMenu();
461 } else if (me->button() == LeftButton) { 469 } else if (me->button() == LeftButton) {
462 setCursor(arrowCursor); 470 setCursor(arrowCursor);
463 startSelectAction(viewportPos); 471 startSelectAction(viewportPos);
464 } 472 }
465 } 473 }
466 break; 474 break;
467 475
468 case QEvent::MouseButtonRelease: 476 case QEvent::MouseButtonRelease:
469 if (me->button() == LeftButton ) { 477 if (me->button() == LeftButton ) {
470 mPopupTimer->stop(); 478 mPopupTimer->stop();
471 } 479 }
472 if (object != viewport()) { 480 if (object != viewport()) {
473 if (me->button() == LeftButton && mLeftMouseDown) { 481 if (me->button() == LeftButton && mLeftMouseDown) {
474 if (mActionItem) { 482 if (mActionItem) {
475 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 483 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos));
476 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 ); 484 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 );
477 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) { 485 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) {
478 mScrollUpTimer.stop(); 486 mScrollUpTimer.stop();
479 mScrollDownTimer.stop(); 487 mScrollDownTimer.stop();
480 mActionItem->resetMove(); 488 mActionItem->resetMove();
481 placeSubCells( mActionItem ); 489 placeSubCells( mActionItem );
482 // emit startDragSignal( mActionItem->incidence() ); 490 // emit startDragSignal( mActionItem->incidence() );
483 setCursor( arrowCursor ); 491 setCursor( arrowCursor );
484 mActionItem = 0; 492 mActionItem = 0;
485 mActionType = NOP; 493 mActionType = NOP;
486 mItemMoved = 0; 494 mItemMoved = 0;
487 mLeftMouseDown = false; 495 mLeftMouseDown = false;
488 return true; 496 return true;
489 } 497 }
490 endItemAction(); 498 endItemAction();
491 } 499 }
492 } 500 }
493 501
494 } else { // ---------- viewport() 502 } else { // ---------- viewport()
495 if (me->button() == LeftButton && mLeftMouseDown ) { //left click 503 if (me->button() == LeftButton && mLeftMouseDown ) { //left click
496 endSelectAction( true ); // emit new event signal 504 endSelectAction( true ); // emit new event signal
497 } 505 }
498 } 506 }
499 if (me->button() == LeftButton) 507 if (me->button() == LeftButton)
500 mLeftMouseDown = false; 508 mLeftMouseDown = false;
501 509
502 break; 510 break;
503 511
504 case QEvent::MouseMove: 512 case QEvent::MouseMove:
505 if ( !mLeftMouseDown ) 513 if ( !mLeftMouseDown )
506 return true; 514 return true;
507 if ( blockMoving ) { 515 if ( blockMoving ) {
508 int dX, dY; 516 int dX, dY;
509 dX = startX - viewportPos.x(); 517 dX = startX - viewportPos.x();
510 if ( dX < 0 ) 518 if ( dX < 0 )
511 dX = -dX; 519 dX = -dX;
512 dY = viewportPos.y() - startY; 520 dY = viewportPos.y() - startY;
513 if ( dY < 0 ) 521 if ( dY < 0 )
514 dY = -dY; 522 dY = -dY;
515 //qDebug("%d %d %d ", dX, dY , blockmoveDist ); 523 //qDebug("%d %d %d ", dX, dY , blockmoveDist );
516 if ( dX > blockmoveDist || dY > blockmoveDist ) { 524 if ( dX > blockmoveDist || dY > blockmoveDist ) {
517 blockMoving = false; 525 blockMoving = false;
518 } 526 }
519 } 527 }
520 if ( ! blockMoving ) 528 if ( ! blockMoving )
521 mPopupTimer->stop(); 529 mPopupTimer->stop();
522 if (object != viewport()) { 530 if (object != viewport()) {
523 KOAgendaItem *moveItem = (KOAgendaItem *)object; 531 KOAgendaItem *moveItem = (KOAgendaItem *)object;
524 if (!moveItem->incidence()->isReadOnly() ) { 532 if (!moveItem->incidence()->isReadOnly() ) {
525 if (!mActionItem) 533 if (!mActionItem)
526 setNoActionCursor(moveItem,viewportPos); 534 setNoActionCursor(moveItem,viewportPos);
527 else { 535 else {
528 if ( !blockMoving ) 536 if ( !blockMoving )
529 performItemAction(viewportPos); 537 performItemAction(viewportPos);
530 } 538 }
531 } 539 }
532 } else { // ---------- viewport() 540 } else { // ---------- viewport()
533 mPopupPos = viewport()->mapToGlobal( me->pos() ); 541 mPopupPos = viewport()->mapToGlobal( me->pos() );
534 if ( mActionType == SELECT ) { 542 if ( mActionType == SELECT ) {
535 performSelectAction( viewportPos ); 543 performSelectAction( viewportPos );
536 } 544 }
537 } 545 }
538 break; 546 break;
539 547
540 case QEvent::MouseButtonDblClick: 548 case QEvent::MouseButtonDblClick:
541 mPopupTimer->stop(); 549 mPopupTimer->stop();
542 if (object == viewport()) { 550 if (object == viewport()) {
543 selectItem(0); 551 selectItem(0);
544 int x,y; 552 int x,y;
545 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 553 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
546 int gx,gy; 554 int gx,gy;
547 contentsToGrid(x,y,gx,gy); 555 contentsToGrid(x,y,gx,gy);
548 emit newEventSignal(gx,gy); 556 emit newEventSignal(gx,gy);
549 } else { 557 } else {
550 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object; 558 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object;
551 selectItem(doubleClickedItem); 559 selectItem(doubleClickedItem);
552 if ( KOPrefs::instance()->mEditOnDoubleClick ) 560 if ( KOPrefs::instance()->mEditOnDoubleClick )
553 emit editIncidenceSignal(doubleClickedItem->incidence()); 561 emit editIncidenceSignal(doubleClickedItem->incidence());
554 else 562 else
555 emit showIncidenceSignal(doubleClickedItem->incidence()); 563 emit showIncidenceSignal(doubleClickedItem->incidence());
556 } 564 }
557 break; 565 break;
558 566
559 default: 567 default:
560 break; 568 break;
561 } 569 }
562 return true; 570 return true;
563#if 0 571#if 0
564 //qDebug("KOAgenda::eventFilter_mous "); 572 //qDebug("KOAgenda::eventFilter_mous ");
565 QPoint viewportPos; 573 QPoint viewportPos;
566 if (object != viewport()) { 574 if (object != viewport()) {
567 viewportPos = ((QWidget *)object)->mapToParent(me->pos()); 575 viewportPos = ((QWidget *)object)->mapToParent(me->pos());
568 } else { 576 } else {
569 viewportPos = me->pos(); 577 viewportPos = me->pos();
570 } 578 }
571 static int startX = 0; 579 static int startX = 0;
572 static int startY = 0; 580 static int startY = 0;
573 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 ); 581 static int blockmoveDist = ( QApplication::desktop()->width() < 480 ? 15 : 20 );
574 static bool blockMoving = true; 582 static bool blockMoving = true;
575 static bool leftMouseDown = false; 583 static bool leftMouseDown = false;
576 bool rightButtonPressed = false; 584 bool rightButtonPressed = false;
577 switch (me->type()) { 585 switch (me->type()) {
578 case QEvent::MouseButtonPress: 586 case QEvent::MouseButtonPress:
579 if (me->button() == LeftButton) { 587 if (me->button() == LeftButton) {
580 leftMouseDown = true; 588 leftMouseDown = true;
581 } 589 }
582 else if (me->button() == RightButton) { 590 else if (me->button() == RightButton) {
583 leftMouseDown = false; 591 leftMouseDown = false;
584 } 592 }
585 blockMoving = true; 593 blockMoving = true;
586 startX = viewportPos.x(); 594 startX = viewportPos.x();
587 startY = viewportPos.y(); 595 startY = viewportPos.y();
588 if (object != viewport()) { // item clicked ************** 596 if (object != viewport()) { // item clicked **************
589 if (me->button() == RightButton) { 597 if (me->button() == RightButton) {
590 leftMouseDown = false; 598 leftMouseDown = false;
591 mClickedItem = (KOAgendaItem *)object; 599 mClickedItem = (KOAgendaItem *)object;
592 if (mActionItem ) { 600 if (mActionItem ) {
593 endItemAction(); 601 endItemAction();
594 } 602 }
595 if (mClickedItem) { 603 if (mClickedItem) {
596 selectItem(mClickedItem); 604 selectItem(mClickedItem);
597 emit showIncidencePopupSignal(mClickedItem->incidence()); 605 emit showIncidencePopupSignal(mClickedItem->incidence());
598 } 606 }
599 return true; 607 return true;
600 } else if (me->button() == LeftButton) { 608 } else if (me->button() == LeftButton) {
601 mActionItem = (KOAgendaItem *)object; 609 mActionItem = (KOAgendaItem *)object;
602 if (mActionItem) { 610 if (mActionItem) {
603 if ( mSelectionHeight > 0 ) { 611 if ( mSelectionHeight > 0 ) {
604 int selectionCellX = mSelectionCellX * mGridSpacingX; 612 int selectionCellX = mSelectionCellX * mGridSpacingX;
605 int selectionYTop = mSelectionYTop; 613 int selectionYTop = mSelectionYTop;
606 int gridSpacingX = mGridSpacingX; 614 int gridSpacingX = mGridSpacingX;
607 int selectionHeight = mSelectionHeight; 615 int selectionHeight = mSelectionHeight;
608 clearSelection(); 616 clearSelection();
609 repaintContents( selectionCellX, selectionYTop, 617 repaintContents( selectionCellX, selectionYTop,
610 gridSpacingX, selectionHeight,false ); 618 gridSpacingX, selectionHeight,false );
611 } 619 }
612 selectItem(mActionItem); 620 selectItem(mActionItem);
613 Incidence *incidence = mActionItem->incidence(); 621 Incidence *incidence = mActionItem->incidence();
614 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) { 622 if ( incidence->isReadOnly() /*|| incidence->recurrence()->doesRecur() */) {
615 mActionItem = 0; 623 mActionItem = 0;
616 } else { 624 } else {
617 startItemAction(viewportPos); 625 startItemAction(viewportPos);
618 } 626 }
619 } 627 }
620 } 628 }
621 } else { // ---------- viewport() 629 } else { // ---------- viewport()
622 selectItem(0); 630 selectItem(0);
623 mActionItem = 0; 631 mActionItem = 0;
624 if (me->button() == LeftButton ) { 632 if (me->button() == LeftButton ) {
625 setCursor(arrowCursor); 633 setCursor(arrowCursor);
626 startSelectAction(viewportPos); 634 startSelectAction(viewportPos);
627 } else if (me->button() == RightButton ) { 635 } else if (me->button() == RightButton ) {
628 setCursor(arrowCursor); 636 setCursor(arrowCursor);
629 if ( leftMouseDown ) { // we have a simulated right click - clear left mouse action 637 if ( leftMouseDown ) { // we have a simulated right click - clear left mouse action
630 endSelectAction( false ); // do not emit new event signal 638 endSelectAction( false ); // do not emit new event signal
631 leftMouseDown = false; // no more leftMouse computation 639 leftMouseDown = false; // no more leftMouse computation
632 } 640 }
633 int x,y; 641 int x,y;
634 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 642 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
635 int gx,gy; 643 int gx,gy;
636 contentsToGrid(x,y,gx,gy); 644 contentsToGrid(x,y,gx,gy);
637 mCurrentCellX = gx; 645 mCurrentCellX = gx;
638 mCurrentCellY = gy; 646 mCurrentCellY = gy;
639 mStartCellX = gx; 647 mStartCellX = gx;
640 mStartCellY = gy; 648 mStartCellY = gy;
641 mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) ); 649 mNewItemPopup->popup( viewport()->mapToGlobal( me->pos() ) );
642 } 650 }
643 } 651 }
644 break; 652 break;
645 653
646 case QEvent::MouseButtonRelease: 654 case QEvent::MouseButtonRelease:
647 655
648 if (object != viewport()) { 656 if (object != viewport()) {
649 if (me->button() == LeftButton && leftMouseDown) { 657 if (me->button() == LeftButton && leftMouseDown) {
650 if (mActionItem) { 658 if (mActionItem) {
651 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 659 QPoint clipperPos = clipper()->mapFromGlobal(viewport()->mapToGlobal(viewportPos));
652 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 ); 660 //qDebug(" %d %d %d ",clipperPos.y(),visibleHeight() , 9 );
653 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) { 661 if ( mActionType == MOVE && (clipperPos.y() > visibleHeight()-2 ||clipperPos.y() < 0 ) ) {
654 mScrollUpTimer.stop(); 662 mScrollUpTimer.stop();
655 mScrollDownTimer.stop(); 663 mScrollDownTimer.stop();
656 mActionItem->resetMove(); 664 mActionItem->resetMove();
657 placeSubCells( mActionItem ); 665 placeSubCells( mActionItem );
658 // emit startDragSignal( mActionItem->incidence() ); 666 // emit startDragSignal( mActionItem->incidence() );
659 setCursor( arrowCursor ); 667 setCursor( arrowCursor );
660 mActionItem = 0; 668 mActionItem = 0;
661 mActionType = NOP; 669 mActionType = NOP;
662 mItemMoved = 0; 670 mItemMoved = 0;
663 leftMouseDown = false; 671 leftMouseDown = false;
664 return true; 672 return true;
665 } 673 }
666 endItemAction(); 674 endItemAction();
667 } 675 }
668 } 676 }
669 677
670 } else { // ---------- viewport() 678 } else { // ---------- viewport()
671 if (me->button() == LeftButton && leftMouseDown ) { //left click 679 if (me->button() == LeftButton && leftMouseDown ) { //left click
672 endSelectAction( true ); // emit new event signal 680 endSelectAction( true ); // emit new event signal
673 } 681 }
674 } 682 }
675 if (me->button() == LeftButton) 683 if (me->button() == LeftButton)
676 leftMouseDown = false; 684 leftMouseDown = false;
677 685
678 break; 686 break;
679 687
680 case QEvent::MouseMove: 688 case QEvent::MouseMove:
681 if ( !leftMouseDown ) 689 if ( !leftMouseDown )
682 return true; 690 return true;
683 if ( blockMoving ) { 691 if ( blockMoving ) {
684 int dX, dY; 692 int dX, dY;
685 dX = startX - viewportPos.x(); 693 dX = startX - viewportPos.x();
686 if ( dX < 0 ) 694 if ( dX < 0 )
687 dX = -dX; 695 dX = -dX;
688 dY = viewportPos.y() - startY; 696 dY = viewportPos.y() - startY;
689 if ( dY < 0 ) 697 if ( dY < 0 )
690 dY = -dY; 698 dY = -dY;
691 //qDebug("%d %d %d ", dX, dY , blockmoveDist ); 699 //qDebug("%d %d %d ", dX, dY , blockmoveDist );
692 if ( dX > blockmoveDist || dY > blockmoveDist ) { 700 if ( dX > blockmoveDist || dY > blockmoveDist ) {
693 blockMoving = false; 701 blockMoving = false;
694 } 702 }
695 } 703 }
696 if (object != viewport()) { 704 if (object != viewport()) {
697 KOAgendaItem *moveItem = (KOAgendaItem *)object; 705 KOAgendaItem *moveItem = (KOAgendaItem *)object;
698 if (!moveItem->incidence()->isReadOnly() ) { 706 if (!moveItem->incidence()->isReadOnly() ) {
699 if (!mActionItem) 707 if (!mActionItem)
700 setNoActionCursor(moveItem,viewportPos); 708 setNoActionCursor(moveItem,viewportPos);
701 else { 709 else {
702 if ( !blockMoving ) 710 if ( !blockMoving )
703 performItemAction(viewportPos); 711 performItemAction(viewportPos);
704 } 712 }
705 } 713 }
706 } else { // ---------- viewport() 714 } else { // ---------- viewport()
707 if ( mActionType == SELECT ) { 715 if ( mActionType == SELECT ) {
708 performSelectAction( viewportPos ); 716 performSelectAction( viewportPos );
709 } 717 }
710 } 718 }
711 break; 719 break;
712 720
713 case QEvent::MouseButtonDblClick: 721 case QEvent::MouseButtonDblClick:
714 blockMoving = false; 722 blockMoving = false;
715 leftMouseDown = false; 723 leftMouseDown = false;
716 if (object == viewport()) { 724 if (object == viewport()) {
717 selectItem(0); 725 selectItem(0);
718 int x,y; 726 int x,y;
719 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 727 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
720 int gx,gy; 728 int gx,gy;
721 contentsToGrid(x,y,gx,gy); 729 contentsToGrid(x,y,gx,gy);
722 emit newEventSignal(gx,gy); 730 emit newEventSignal(gx,gy);
723 } else { 731 } else {
724 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object; 732 KOAgendaItem *doubleClickedItem = (KOAgendaItem *)object;
725 selectItem(doubleClickedItem); 733 selectItem(doubleClickedItem);
726 if ( KOPrefs::instance()->mEditOnDoubleClick ) 734 if ( KOPrefs::instance()->mEditOnDoubleClick )
727 emit editIncidenceSignal(doubleClickedItem->incidence()); 735 emit editIncidenceSignal(doubleClickedItem->incidence());
728 else 736 else
729 emit showIncidenceSignal(doubleClickedItem->incidence()); 737 emit showIncidenceSignal(doubleClickedItem->incidence());
730 } 738 }
731 break; 739 break;
732 740
733 default: 741 default:
734 break; 742 break;
735 } 743 }
736 return true; 744 return true;
737#endif 745#endif
738} 746}
739 747
740void KOAgenda::newItem( int item ) 748void KOAgenda::newItem( int item )
741{ 749{
742 if ( item == 1 ) { //new event 750 if ( item == 1 ) { //new event
743 newEventSignal(mStartCellX ,mStartCellY ); 751 newEventSignal(mStartCellX ,mStartCellY );
744 } else 752 } else
745 if ( item == 2 ) { //new event 753 if ( item == 2 ) { //new event
746 newTodoSignal(mStartCellX ,mStartCellY ); 754 newTodoSignal(mStartCellX ,mStartCellY );
747 } else 755 } else
748 { 756 {
749 QDate day = mSelectedDates[mStartCellX]; 757 QDate day = mSelectedDates[mStartCellX];
750 emit showDateView( item, day ); 758 emit showDateView( item, day );
751 // 3Day view 759 // 3Day view
752 // 4Week view 760 // 4Week view
753 // 5Month view 761 // 5Month view
754 // 6Journal view 762 // 6Journal view
755 } 763 }
756} 764}
757void KOAgenda::startSelectAction(QPoint viewportPos) 765void KOAgenda::startSelectAction(QPoint viewportPos)
758{ 766{
759 //emit newStartSelectSignal(); 767 //emit newStartSelectSignal();
760 768
761 mActionType = SELECT; 769 mActionType = SELECT;
762 770
763 int x,y; 771 int x,y;
764 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 772 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
765 int gx,gy; 773 int gx,gy;
766 contentsToGrid(x,y,gx,gy); 774 contentsToGrid(x,y,gx,gy);
767 775
768 mStartCellX = gx; 776 mStartCellX = gx;
769 mStartCellY = gy; 777 mStartCellY = gy;
770 mCurrentCellX = gx; 778 mCurrentCellX = gx;
771 mCurrentCellY = gy; 779 mCurrentCellY = gy;
772 780
773 // Store coordinates of old selection 781 // Store coordinates of old selection
774 int selectionX = mSelectionCellX * mGridSpacingX; 782 int selectionX = mSelectionCellX * mGridSpacingX;
775 int selectionYTop = mSelectionYTop; 783 int selectionYTop = mSelectionYTop;
776 int selectionHeight = mSelectionHeight; 784 int selectionHeight = mSelectionHeight;
777 785
778 // Store new selection 786 // Store new selection
779 mSelectionCellX = gx; 787 mSelectionCellX = gx;
780 mSelectionYTop = gy * mGridSpacingY; 788 mSelectionYTop = gy * mGridSpacingY;
781 mSelectionHeight = mGridSpacingY; 789 mSelectionHeight = mGridSpacingY;
782 790
783 // Clear old selection 791 // Clear old selection
784 repaintContents( selectionX, selectionYTop, 792 repaintContents( selectionX, selectionYTop,
785 mGridSpacingX, selectionHeight,false ); 793 mGridSpacingX, selectionHeight,false );
786 794
787 // Paint new selection 795 // Paint new selection
788 // repaintContents( mSelectionCellX * mGridSpacingX, mSelectionYTop, 796 // repaintContents( mSelectionCellX * mGridSpacingX, mSelectionYTop,
789 // mGridSpacingX, mSelectionHeight ); 797 // mGridSpacingX, mSelectionHeight );
790} 798}
791 799
792void KOAgenda::performSelectAction(QPoint viewportPos) 800void KOAgenda::performSelectAction(QPoint viewportPos)
793{ 801{
794 int x,y; 802 int x,y;
795 viewportToContents(viewportPos.x(),viewportPos.y(),x,y); 803 viewportToContents(viewportPos.x(),viewportPos.y(),x,y);
796 int gx,gy; 804 int gx,gy;
797 contentsToGrid(x,y,gx,gy); 805 contentsToGrid(x,y,gx,gy);
798 806
799 QPoint clipperPos = clipper()-> 807 QPoint clipperPos = clipper()->
800 mapFromGlobal(viewport()->mapToGlobal(viewportPos)); 808 mapFromGlobal(viewport()->mapToGlobal(viewportPos));
801 809
802 // Scroll if cursor was moved to upper or lower end of agenda. 810 // Scroll if cursor was moved to upper or lower end of agenda.
803 if (clipperPos.y() < mScrollBorderWidth) { 811 if (clipperPos.y() < mScrollBorderWidth) {
804 mScrollUpTimer.start(mScrollDelay); 812 mScrollUpTimer.start(mScrollDelay);
805 } else if (visibleHeight() - clipperPos.y() < 813 } else if (visibleHeight() - clipperPos.y() <
806 mScrollBorderWidth) { 814 mScrollBorderWidth) {
807 mScrollDownTimer.start(mScrollDelay); 815 mScrollDownTimer.start(mScrollDelay);
808 } else { 816 } else {
809 mScrollUpTimer.stop(); 817 mScrollUpTimer.stop();
810 mScrollDownTimer.stop(); 818 mScrollDownTimer.stop();
811 } 819 }
812 820
813 if ( gy > mCurrentCellY ) { 821 if ( gy > mCurrentCellY ) {
814 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; 822 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop;
815 823
816#if 0 824#if 0
817 // FIXME: Repaint only the newly selected region 825 // FIXME: Repaint only the newly selected region
818 repaintContents( mSelectionCellX * mGridSpacingX, 826 repaintContents( mSelectionCellX * mGridSpacingX,
819 mCurrentCellY + mGridSpacingY, 827 mCurrentCellY + mGridSpacingY,
820 mGridSpacingX, 828 mGridSpacingX,
821 mSelectionHeight - ( gy - mCurrentCellY - 1 ) * mGridSpacingY ); 829 mSelectionHeight - ( gy - mCurrentCellY - 1 ) * mGridSpacingY );
822#else 830#else
823 repaintContents( (KOGlobals::self()->reverseLayout() ? 831 repaintContents( (KOGlobals::self()->reverseLayout() ?
824 mColumns - 1 - mSelectionCellX : mSelectionCellX) * 832 mColumns - 1 - mSelectionCellX : mSelectionCellX) *
825 mGridSpacingX, mSelectionYTop, 833 mGridSpacingX, mSelectionYTop,
826 mGridSpacingX, mSelectionHeight , false); 834 mGridSpacingX, mSelectionHeight , false);
827#endif 835#endif
828 836
829 mCurrentCellY = gy; 837 mCurrentCellY = gy;
830 } else if ( gy < mCurrentCellY ) { 838 } else if ( gy < mCurrentCellY ) {
831 if ( gy >= mStartCellY ) { 839 if ( gy >= mStartCellY ) {
832 int selectionHeight = mSelectionHeight; 840 int selectionHeight = mSelectionHeight;
833 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop; 841 mSelectionHeight = ( gy + 1 ) * mGridSpacingY - mSelectionYTop;
834 842
835 repaintContents( (KOGlobals::self()->reverseLayout() ? 843 repaintContents( (KOGlobals::self()->reverseLayout() ?
836 mColumns - 1 - mSelectionCellX : mSelectionCellX) * 844 mColumns - 1 - mSelectionCellX : mSelectionCellX) *
837 mGridSpacingX, mSelectionYTop, 845 mGridSpacingX, mSelectionYTop,
838 mGridSpacingX, selectionHeight,false ); 846 mGridSpacingX, selectionHeight,false );
839 847
840 mCurrentCellY = gy; 848 mCurrentCellY = gy;
841 } else { 849 } else {
842 } 850 }
843 } 851 }
diff --git a/korganizer/koagendaview.cpp b/korganizer/koagendaview.cpp
index f6f390b..f452db0 100644
--- a/korganizer/koagendaview.cpp
+++ b/korganizer/koagendaview.cpp
@@ -351,859 +351,861 @@ void EventIndicator::setPaintWidget( KDGanttMinimizeSplitter * w )
351 setMinimumHeight(0); 351 setMinimumHeight(0);
352} 352}
353void EventIndicator::changeColumns(int columns) 353void EventIndicator::changeColumns(int columns)
354{ 354{
355 mColumns = columns; 355 mColumns = columns;
356 mEnabled.resize(mColumns); 356 mEnabled.resize(mColumns);
357 357
358 update(); 358 update();
359} 359}
360 360
361void EventIndicator::enableColumn(int column, bool enable) 361void EventIndicator::enableColumn(int column, bool enable)
362{ 362{
363 mEnabled[column] = enable; 363 mEnabled[column] = enable;
364} 364}
365 365
366 366
367//////////////////////////////////////////////////////////////////////////// 367////////////////////////////////////////////////////////////////////////////
368//////////////////////////////////////////////////////////////////////////// 368////////////////////////////////////////////////////////////////////////////
369//////////////////////////////////////////////////////////////////////////// 369////////////////////////////////////////////////////////////////////////////
370 370
371KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) : 371KOAgendaView::KOAgendaView(Calendar *cal,QWidget *parent,const char *name) :
372 KOEventView (cal,parent,name) 372 KOEventView (cal,parent,name)
373{ 373{
374 mBlockUpdating = true; 374 mBlockUpdating = true;
375 mStartHour = 8; 375 mStartHour = 8;
376 mSelectedDates.append(QDate::currentDate()); 376 mSelectedDates.append(QDate::currentDate());
377 377
378 mLayoutDayLabels = 0; 378 mLayoutDayLabels = 0;
379 mDayLabelsFrame = 0; 379 mDayLabelsFrame = 0;
380 mDayLabels = 0; 380 mDayLabels = 0;
381 bool isRTL = KOGlobals::self()->reverseLayout(); 381 bool isRTL = KOGlobals::self()->reverseLayout();
382 QPixmap expandPix; 382 QPixmap expandPix;
383 if ( KOPrefs::instance()->mVerticalScreen ) { 383 if ( KOPrefs::instance()->mVerticalScreen ) {
384 expandPix = SmallIcon( "1updownarrow" ); 384 expandPix = SmallIcon( "1updownarrow" );
385 } else { 385 } else {
386 expandPix = SmallIcon("1leftrightarrow" ); 386 expandPix = SmallIcon("1leftrightarrow" );
387 } 387 }
388 388
389 QBoxLayout *topLayout = new QVBoxLayout(this); 389 QBoxLayout *topLayout = new QVBoxLayout(this);
390 390
391 // Create day name labels for agenda columns 391 // Create day name labels for agenda columns
392 // Create agenda splitter 392 // Create agenda splitter
393 393
394 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this); 394 mSplitterAgenda = new KDGanttMinimizeSplitter( Qt::Vertical, this);
395 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up ); 395 mSplitterAgenda->setMinimizeDirection ( KDGanttMinimizeSplitter::Up );
396 topLayout->addWidget( mSplitterAgenda ); 396 topLayout->addWidget( mSplitterAgenda );
397 mAllDayFrame = new QHBox(mSplitterAgenda); 397 mAllDayFrame = new QHBox(mSplitterAgenda);
398 mAllDayFrame->setFocusPolicy(NoFocus); 398 mAllDayFrame->setFocusPolicy(NoFocus);
399 QWidget *agendaFrame = new QWidget(mSplitterAgenda); 399 QWidget *agendaFrame = new QWidget(mSplitterAgenda);
400 agendaFrame->setFocusPolicy(NoFocus); 400 agendaFrame->setFocusPolicy(NoFocus);
401 401
402 // Create all-day agenda widget 402 // Create all-day agenda widget
403 mDummyAllDayLeft = new QVBox( mAllDayFrame ); 403 mDummyAllDayLeft = new QVBox( mAllDayFrame );
404 404
405 mExpandButton = new QPushButton(mDummyAllDayLeft); 405 mExpandButton = new QPushButton(mDummyAllDayLeft);
406 mExpandButton->setPixmap( expandPix ); 406 mExpandButton->setPixmap( expandPix );
407 int widebut = mExpandButton->sizeHint().width()+4; 407 int widebut = mExpandButton->sizeHint().width()+4;
408 int heibut = mExpandButton->sizeHint().height()+4; 408 int heibut = mExpandButton->sizeHint().height()+4;
409 if ( heibut > widebut ) 409 if ( heibut > widebut )
410 widebut = heibut ; 410 widebut = heibut ;
411 if ( QApplication::desktop()->width() < 480 ) 411 if ( QApplication::desktop()->width() < 480 )
412 widebut = widebut*3/2; 412 widebut = widebut*3/2;
413 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed, 413 //mExpandButton->setSizePolicy( QSizePolicy( QSizePolicy::Fixed,
414 // QSizePolicy::Fixed ) ); 414 // QSizePolicy::Fixed ) );
415 mExpandButton->setFixedSize( widebut, widebut); 415 mExpandButton->setFixedSize( widebut, widebut);
416 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) ); 416 connect( mExpandButton, SIGNAL( clicked() ), SIGNAL( toggleExpand() ) );
417 mExpandButton->setFocusPolicy(NoFocus); 417 mExpandButton->setFocusPolicy(NoFocus);
418 mAllDayAgenda = new KOAgenda(1,mAllDayFrame); 418 mAllDayAgenda = new KOAgenda(1,mAllDayFrame);
419 mAllDayAgenda->setFocusPolicy(NoFocus); 419 mAllDayAgenda->setFocusPolicy(NoFocus);
420 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame); 420 QLabel *dummyAllDayRight = new QLabel (mAllDayFrame);
421 421
422 // Create event context menu for all day agenda 422 // Create event context menu for all day agenda
423 mAllDayAgendaPopup = eventPopup(); 423 mAllDayAgendaPopup = eventPopup();
424 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 424 connect(mAllDayAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
425 mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 425 mAllDayAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
426 426
427 // Create agenda frame 427 // Create agenda frame
428 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3); 428 QGridLayout *agendaLayout = new QGridLayout(agendaFrame,4,3);
429 // QHBox *agendaFrame = new QHBox(splitterAgenda); 429 // QHBox *agendaFrame = new QHBox(splitterAgenda);
430 430
431 // create event indicator bars 431 // create event indicator bars
432 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame); 432 mEventIndicatorTop = new EventIndicator(EventIndicator::Top,agendaFrame);
433#ifndef DESKTOP_VERSION 433#ifndef DESKTOP_VERSION
434 // FIX 434 // FIX
435 mEventIndicatorTop->setPaintWidget( mSplitterAgenda ); 435 mEventIndicatorTop->setPaintWidget( mSplitterAgenda );
436#endif 436#endif
437 mDayLabelsFrame = new QHBox(agendaFrame); 437 mDayLabelsFrame = new QHBox(agendaFrame);
438 //topLayout->addWidget(mDayLabelsFrame); 438 //topLayout->addWidget(mDayLabelsFrame);
439 mDayLabels = new QFrame (mDayLabelsFrame); 439 mDayLabels = new QFrame (mDayLabelsFrame);
440 mLayoutDayLabels = new QHBoxLayout(mDayLabels); 440 mLayoutDayLabels = new QHBoxLayout(mDayLabels);
441 agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2); 441 agendaLayout->addMultiCellWidget(mDayLabelsFrame ,0,0,0,2);
442 agendaLayout->addWidget(mEventIndicatorTop,1,1); 442 agendaLayout->addWidget(mEventIndicatorTop,1,1);
443 443
444 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom, 444 mEventIndicatorBottom = new EventIndicator(EventIndicator::Bottom,
445 agendaFrame); 445 agendaFrame);
446 agendaLayout->addWidget(mEventIndicatorBottom,3,1); 446 agendaLayout->addWidget(mEventIndicatorBottom,3,1);
447 QWidget *dummyAgendaRight = new QWidget(agendaFrame); 447 QWidget *dummyAgendaRight = new QWidget(agendaFrame);
448 agendaLayout->addWidget(dummyAgendaRight,1,2); 448 agendaLayout->addWidget(dummyAgendaRight,1,2);
449 449
450 // Create time labels 450 // Create time labels
451 mTimeLabels = new TimeLabels(24,agendaFrame); 451 mTimeLabels = new TimeLabels(24,agendaFrame);
452 agendaLayout->addWidget(mTimeLabels,2,0); 452 agendaLayout->addWidget(mTimeLabels,2,0);
453 connect(mTimeLabels,SIGNAL( scaleChanged()), 453 connect(mTimeLabels,SIGNAL( scaleChanged()),
454 this,SLOT(updateConfig())); 454 this,SLOT(updateConfig()));
455 455
456 // Create agenda 456 // Create agenda
457 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame); 457 mAgenda = new KOAgenda(1,96,KOPrefs::instance()->mHourSize,agendaFrame);
458 agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2); 458 agendaLayout->addMultiCellWidget(mAgenda,2,2,1,2);
459 agendaLayout->setColStretch(1,1); 459 agendaLayout->setColStretch(1,1);
460 mAgenda->setFocusPolicy(NoFocus); 460 mAgenda->setFocusPolicy(NoFocus);
461 // Create event context menu for agenda 461 // Create event context menu for agenda
462 mAgendaPopup = eventPopup(); 462 mAgendaPopup = eventPopup();
463 463
464 mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")), 464 mAgendaPopup->addAdditionalItem(QIconSet(SmallIcon("bell")),
465 i18n("Toggle Alarm"),mAgenda, 465 i18n("Toggle Alarm"),mAgenda,
466 SLOT(popupAlarm()),true); 466 SLOT(popupAlarm()),true);
467 467
468 468
469 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)), 469 connect(mAgenda,SIGNAL(showIncidencePopupSignal(Incidence *)),
470 mAgendaPopup,SLOT(showIncidencePopup(Incidence *))); 470 mAgendaPopup,SLOT(showIncidencePopup(Incidence *)));
471 471
472 // make connections between dependent widgets 472 // make connections between dependent widgets
473 mTimeLabels->setAgenda(mAgenda); 473 mTimeLabels->setAgenda(mAgenda);
474 474
475 // Update widgets to reflect user preferences 475 // Update widgets to reflect user preferences
476 // updateConfig(); 476 // updateConfig();
477 477
478 // createDayLabels(); 478 // createDayLabels();
479 479
480 // these blank widgets make the All Day Event box line up with the agenda 480 // these blank widgets make the All Day Event box line up with the agenda
481 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 481 dummyAllDayRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
482 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width()); 482 dummyAgendaRight->setFixedWidth(mAgenda->verticalScrollBar()->width());
483 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 483 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
484 484
485 // Scrolling 485 // Scrolling
486 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)), 486 connect(mAgenda->verticalScrollBar(),SIGNAL(valueChanged(int)),
487 mTimeLabels, SLOT(positionChanged())); 487 mTimeLabels, SLOT(positionChanged()));
488 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)), 488 connect(mTimeLabels->verticalScrollBar(),SIGNAL(valueChanged(int)),
489 SLOT(setContentsPos(int))); 489 SLOT(setContentsPos(int)));
490 490
491 connect(mAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); 491 connect(mAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate )));
492 connect(mAllDayAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate ))); 492 connect(mAllDayAgenda,SIGNAL(showDateView( int, QDate )),SIGNAL(showDateView( int, QDate )));
493 493
494 // Create/Show/Edit/Delete Event 494 // Create/Show/Edit/Delete Event
495 connect(mAgenda,SIGNAL(newEventSignal(int,int)), 495 connect(mAgenda,SIGNAL(newEventSignal(int,int)),
496 SLOT(newEvent(int,int))); 496 SLOT(newEvent(int,int)));
497 connect(mAgenda,SIGNAL(newTodoSignal(int,int)), 497 connect(mAgenda,SIGNAL(newTodoSignal(int,int)),
498 SLOT(newTodo(int,int))); 498 SLOT(newTodo(int,int)));
499 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)), 499 connect(mAgenda,SIGNAL(newEventSignal(int,int,int,int)),
500 SLOT(newEvent(int,int,int,int))); 500 SLOT(newEvent(int,int,int,int)));
501 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)), 501 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int)),
502 SLOT(newEventAllDay(int,int))); 502 SLOT(newEventAllDay(int,int)));
503 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)), 503 connect(mAllDayAgenda,SIGNAL(newTodoSignal(int,int)),
504 SLOT(newTodoAllDay(int,int))); 504 SLOT(newTodoAllDay(int,int)));
505 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)), 505 connect(mAllDayAgenda,SIGNAL(newEventSignal(int,int,int,int)),
506 SLOT(newEventAllDay(int,int))); 506 SLOT(newEventAllDay(int,int)));
507 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 507 connect(mAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
508 SLOT(newTimeSpanSelected(int,int,int,int))); 508 SLOT(newTimeSpanSelected(int,int,int,int)));
509 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)), 509 connect(mAllDayAgenda,SIGNAL(newTimeSpanSignal(int,int,int,int)),
510 SLOT(newTimeSpanSelectedAllDay(int,int,int,int))); 510 SLOT(newTimeSpanSelectedAllDay(int,int,int,int)));
511 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 511 connect(mAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
512 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView())); 512 connect(mAllDayAgenda,SIGNAL(newStartSelectSignal()),SLOT(updateView()));
513 513
514 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 514 connect(mAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
515 SIGNAL(editIncidenceSignal(Incidence *))); 515 SIGNAL(editIncidenceSignal(Incidence *)));
516 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)), 516 connect(mAllDayAgenda,SIGNAL(editIncidenceSignal(Incidence *)),
517 SIGNAL(editIncidenceSignal(Incidence *))); 517 SIGNAL(editIncidenceSignal(Incidence *)));
518 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 518 connect(mAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
519 SIGNAL(showIncidenceSignal(Incidence *))); 519 SIGNAL(showIncidenceSignal(Incidence *)));
520 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)), 520 connect(mAllDayAgenda,SIGNAL(showIncidenceSignal(Incidence *)),
521 SIGNAL(showIncidenceSignal(Incidence *))); 521 SIGNAL(showIncidenceSignal(Incidence *)));
522 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 522 connect(mAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
523 SIGNAL(deleteIncidenceSignal(Incidence *))); 523 SIGNAL(deleteIncidenceSignal(Incidence *)));
524 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)), 524 connect(mAllDayAgenda,SIGNAL(deleteIncidenceSignal(Incidence *)),
525 SIGNAL(deleteIncidenceSignal(Incidence *))); 525 SIGNAL(deleteIncidenceSignal(Incidence *)));
526 526
527 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 527 connect(mAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
528 SLOT(updateEventDates(KOAgendaItem *, int ))); 528 SLOT(updateEventDates(KOAgendaItem *, int )));
529 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )), 529 connect(mAllDayAgenda,SIGNAL(itemModified(KOAgendaItem *, int )),
530 SLOT(updateEventDates(KOAgendaItem *, int))); 530 SLOT(updateEventDates(KOAgendaItem *, int)));
531 531
532 // event indicator update 532 // event indicator update
533 connect(mAgenda,SIGNAL(lowerYChanged(int)), 533 connect(mAgenda,SIGNAL(lowerYChanged(int)),
534 SLOT(updateEventIndicatorTop(int))); 534 SLOT(updateEventIndicatorTop(int)));
535 connect(mAgenda,SIGNAL(upperYChanged(int)), 535 connect(mAgenda,SIGNAL(upperYChanged(int)),
536 SLOT(updateEventIndicatorBottom(int))); 536 SLOT(updateEventIndicatorBottom(int)));
537 // drag signals 537 // drag signals
538 /* 538 /*
539 connect(mAgenda,SIGNAL(startDragSignal(Event *)), 539 connect(mAgenda,SIGNAL(startDragSignal(Event *)),
540 SLOT(startDrag(Event *))); 540 SLOT(startDrag(Event *)));
541 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)), 541 connect(mAllDayAgenda,SIGNAL(startDragSignal(Event *)),
542 SLOT(startDrag(Event *))); 542 SLOT(startDrag(Event *)));
543 */ 543 */
544 // synchronize selections 544 // synchronize selections
545 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 545 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
546 mAllDayAgenda, SLOT( deselectItem() ) ); 546 mAllDayAgenda, SLOT( deselectItem() ) );
547 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 547 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
548 mAgenda, SLOT( deselectItem() ) ); 548 mAgenda, SLOT( deselectItem() ) );
549 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 549 connect( mAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
550 SIGNAL( incidenceSelected( Incidence * ) ) ); 550 SIGNAL( incidenceSelected( Incidence * ) ) );
551 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ), 551 connect( mAllDayAgenda, SIGNAL( incidenceSelected( Incidence * ) ),
552 SIGNAL( incidenceSelected( Incidence * ) ) ); 552 SIGNAL( incidenceSelected( Incidence * ) ) );
553 connect( mAgenda, SIGNAL( resizedSignal() ), 553 connect( mAgenda, SIGNAL( resizedSignal() ),
554 SLOT( updateConfig( ) ) ); 554 SLOT( updateConfig( ) ) );
555 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ), 555 connect( mAgenda, SIGNAL( addToCalSignal(Incidence *, Incidence *) ),
556 SLOT( addToCalSlot(Incidence *, Incidence * ) ) ); 556 SLOT( addToCalSlot(Incidence *, Incidence * ) ) );
557 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ), 557 connect( mAllDayAgenda, SIGNAL( addToCalSignal(Incidence * ,Incidence *) ),
558 SLOT( addToCalSlot(Incidence * , Incidence *) ) ); 558 SLOT( addToCalSlot(Incidence * , Incidence *) ) );
559 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 559 // connect( mAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
560 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) ); 560 //connect( mAllDayAgenda, SIGNAL( cloneIncidenceSignal(Incidence *) ), SIGNAL( cloneIncidenceSignal(Incidence *) ) );
561 561
562 562
563} 563}
564 564
565void KOAgendaView::toggleAllDay() 565void KOAgendaView::toggleAllDay()
566{ 566{
567 if ( mSplitterAgenda->firstHandle() ) 567 if ( mSplitterAgenda->firstHandle() )
568 mSplitterAgenda->firstHandle()->toggle(); 568 mSplitterAgenda->firstHandle()->toggle();
569} 569}
570void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld ) 570void KOAgendaView::addToCalSlot(Incidence * inc, Incidence * incOld )
571{ 571{
572 calendar()->addIncidence( inc ); 572 calendar()->addIncidence( inc );
573 573
574 if ( incOld ) { 574 if ( incOld ) {
575 if ( incOld->type() == "Todo" ) 575 if ( incOld->type() == "Todo" )
576 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED ); 576 emit todoMoved((Todo*)incOld, KOGlobals::EVENTEDITED );
577 else 577 else
578 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED); 578 emit incidenceChanged(incOld, KOGlobals::EVENTEDITED);
579 } 579 }
580 580
581} 581}
582 582
583KOAgendaView::~KOAgendaView() 583KOAgendaView::~KOAgendaView()
584{ 584{
585 delete mAgendaPopup; 585 delete mAgendaPopup;
586 delete mAllDayAgendaPopup; 586 delete mAllDayAgendaPopup;
587 delete KOAgendaItem::paintPix(); 587 delete KOAgendaItem::paintPix();
588 delete KOAgendaItem::paintPixSel(); 588 delete KOAgendaItem::paintPixSel();
589} 589}
590void KOAgendaView::resizeEvent( QResizeEvent* e ) 590void KOAgendaView::resizeEvent( QResizeEvent* e )
591{ 591{
592 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width()); 592 //qDebug("KOAgendaView::resizeEvent( QResizeEvent* e ) %d ", e->size().width());
593 bool uc = false; 593 bool uc = false;
594 int ow = e->oldSize().width(); 594 int ow = e->oldSize().width();
595 int oh = e->oldSize().height(); 595 int oh = e->oldSize().height();
596 int w = e->size().width(); 596 int w = e->size().width();
597 int h = e->size().height(); 597 int h = e->size().height();
598 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) { 598 if ( (ow > oh && w< h ) || (ow < oh && w > h ) ) {
599 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda ) 599 if ( ! mBlockUpdating && !globalFlagBlockStartup && !globalFlagBlockAgenda )
600 uc = true; 600 uc = true;
601 //qDebug("view changed %d %d %d %d ", ow, oh , w , h); 601 //qDebug("view changed %d %d %d %d ", ow, oh , w , h);
602 } 602 }
603 mUpcomingWidth = e->size().width() ; 603 mUpcomingWidth = e->size().width() ;
604 if ( mBlockUpdating || uc ) { 604 if ( mBlockUpdating || uc ) {
605 mBlockUpdating = false; 605 mBlockUpdating = false;
606 //mAgenda->setMinimumSize(800 , 600 ); 606 //mAgenda->setMinimumSize(800 , 600 );
607 //qDebug("mAgenda->resize+++++++++++++++ "); 607 //qDebug("mAgenda->resize+++++++++++++++ ");
608 updateConfig(); 608 updateConfig();
609 //qDebug("KOAgendaView::Updating now possible "); 609 //qDebug("KOAgendaView::Updating now possible ");
610 } else 610 } else
611 createDayLabels(); 611 createDayLabels();
612 //qDebug("resizeEvent end "); 612 //qDebug("resizeEvent end ");
613 613
614} 614}
615void KOAgendaView::slotDaylabelClicked( int num ) 615void KOAgendaView::slotDaylabelClicked( int num )
616{ 616{
617 617
618 QDate firstDate = mSelectedDates.first(); 618 QDate firstDate = mSelectedDates.first();
619 if ( num == -1 ) 619 if ( num == -1 )
620 emit showDateView( 6, firstDate ); 620 emit showDateView( 6, firstDate );
621 else if (num >= 0 ) { 621 else if (num >= 0 ) {
622 if ( mSelectedDates.count() == 1) 622 if ( mSelectedDates.count() == 1)
623 emit showDateView( 9, firstDate.addDays( num ) ); 623 emit showDateView( 9, firstDate.addDays( num ) );
624 else 624 else
625 emit showDateView( 3, firstDate.addDays( num ) ); 625 emit showDateView( 3, firstDate.addDays( num ) );
626 } 626 }
627 else 627 else
628 showDateView( 10, firstDate.addDays(1) ); 628 showDateView( 10, firstDate.addDays(1) );
629} 629}
630 630
631KOAgendaButton* KOAgendaView::getNewDaylabel() 631KOAgendaButton* KOAgendaView::getNewDaylabel()
632{ 632{
633 633
634 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels); 634 KOAgendaButton * dayLabel = new KOAgendaButton(mDayLabels);
635 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) ); 635 connect( dayLabel, SIGNAL( numClicked(int) ), this, SLOT ( slotDaylabelClicked(int) ) );
636 mDayLabelsList.append( dayLabel ); 636 mDayLabelsList.append( dayLabel );
637 mLayoutDayLabels->addWidget(dayLabel); 637 mLayoutDayLabels->addWidget(dayLabel);
638 return dayLabel ; 638 return dayLabel ;
639} 639}
640 640
641void KOAgendaView::createDayLabels() 641void KOAgendaView::createDayLabels()
642{ 642{
643 643
644 if ( mBlockUpdating || globalFlagBlockLabel == 1) { 644 if ( mBlockUpdating || globalFlagBlockLabel == 1) {
645 // qDebug(" KOAgendaView::createDayLabels() blocked "); 645 // qDebug(" KOAgendaView::createDayLabels() blocked ");
646 return; 646 return;
647 647
648 } 648 }
649 int newHight; 649 int newHight;
650 650
651 // ### Before deleting and recreating we could check if mSelectedDates changed... 651 // ### Before deleting and recreating we could check if mSelectedDates changed...
652 // It would remove some flickering and gain speed (since this is called by 652 // It would remove some flickering and gain speed (since this is called by
653 // each updateView() call) 653 // each updateView() call)
654 654
655 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - 2; 655 int maxWid = mUpcomingWidth - mTimeLabels->width()- mAgenda->verticalScrollBar()->width() - 2;
656 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth ); 656 mDayLabelsFrame->setMaximumWidth( mUpcomingWidth );
657 if ( maxWid < 0 ) 657 if ( maxWid < 0 )
658 maxWid = 20; 658 maxWid = 20;
659 659
660 QFont dlf = KOPrefs::instance()->mTimeLabelsFont; 660 QFont dlf = KOPrefs::instance()->mTimeLabelsFont;
661 QFontMetrics fm ( dlf ); 661 QFontMetrics fm ( dlf );
662 int selCount = mSelectedDates.count(); 662 int selCount = mSelectedDates.count();
663 QString dayTest = "Mon 20"; 663 QString dayTest = "Mon 20";
664 //QString dayTest = "Mon 20"; 664 //QString dayTest = "Mon 20";
665 int wid = fm.width( dayTest ); 665 int wid = fm.width( dayTest );
666 //maxWid -= ( selCount * 3 ); //working for QLabels 666 //maxWid -= ( selCount * 3 ); //working for QLabels
667 maxWid -= ( selCount * 3 ); //working for QPushButton 667 maxWid -= ( selCount * 3 ); //working for QPushButton
668 if ( maxWid < 0 ) 668 if ( maxWid < 0 )
669 maxWid = 20; 669 maxWid = 20;
670 int needWid = wid * selCount; 670 int needWid = wid * selCount;
671 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid ); 671 //qDebug("++++++++Needed : %d MaxWidth: %d", needWid, maxWid );
672 //if ( needWid > maxWid ) 672 //if ( needWid > maxWid )
673 // qDebug("DAYLABELS TOOOOOOO BIG "); 673 // qDebug("DAYLABELS TOOOOOOO BIG ");
674 while ( needWid > maxWid ) { 674 while ( needWid > maxWid ) {
675 dayTest = dayTest.left( dayTest.length() - 1 ); 675 dayTest = dayTest.left( dayTest.length() - 1 );
676 wid = fm.width( dayTest ); 676 wid = fm.width( dayTest );
677 needWid = wid * selCount; 677 needWid = wid * selCount;
678 } 678 }
679 int maxLen = dayTest.length(); 679 int maxLen = dayTest.length();
680 int fontPoint = dlf.pointSize(); 680 int fontPoint = dlf.pointSize();
681 if ( maxLen < 2 ) { 681 if ( maxLen < 2 ) {
682 int fontPoint = dlf.pointSize(); 682 int fontPoint = dlf.pointSize();
683 while ( fontPoint > 4 ) { 683 while ( fontPoint > 4 ) {
684 --fontPoint; 684 --fontPoint;
685 dlf.setPointSize( fontPoint ); 685 dlf.setPointSize( fontPoint );
686 QFontMetrics f( dlf ); 686 QFontMetrics f( dlf );
687 wid = f.width( "30" ); 687 wid = f.width( "30" );
688 needWid = wid * selCount; 688 needWid = wid * selCount;
689 if ( needWid < maxWid ) 689 if ( needWid < maxWid )
690 break; 690 break;
691 } 691 }
692 maxLen = 2; 692 maxLen = 2;
693 } 693 }
694 //qDebug("Max len %d ", dayTest.length() ); 694 //qDebug("Max len %d ", dayTest.length() );
695 695
696 QFontMetrics tempF( dlf ); 696 QFontMetrics tempF( dlf );
697 newHight = tempF.height(); 697 newHight = tempF.height();
698 mDayLabels->setFont( dlf ); 698 mDayLabels->setFont( dlf );
699 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);; 699 // mLayoutDayLabels = new QHBoxLayout(mDayLabels);;
700 // mLayoutDayLabels->addSpacing(mTimeLabels->width()); 700 // mLayoutDayLabels->addSpacing(mTimeLabels->width());
701 //mLayoutDayLabels->addSpacing( 2 ); 701 //mLayoutDayLabels->addSpacing( 2 );
702 // QFont lFont = dlf; 702 // QFont lFont = dlf;
703 bool appendLabels = false; 703 bool appendLabels = false;
704 KOAgendaButton *dayLabel; 704 KOAgendaButton *dayLabel;
705 dayLabel = mDayLabelsList.first(); 705 dayLabel = mDayLabelsList.first();
706 if ( !dayLabel ) { 706 if ( !dayLabel ) {
707 appendLabels = true; 707 appendLabels = true;
708 dayLabel = getNewDaylabel(); 708 dayLabel = getNewDaylabel();
709 } 709 }
710 dayLabel->setFixedWidth( mTimeLabels->width()+2 ); 710 dayLabel->setFixedWidth( mTimeLabels->width()+2 );
711 dayLabel->setFont( dlf ); 711 dayLabel->setFont( dlf );
712 dayLabel->setNum( -1 ); 712 dayLabel->setNum( -1 );
713 //dayLabel->setAlignment(QLabel::AlignHCenter); 713 //dayLabel->setAlignment(QLabel::AlignHCenter);
714 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) ); 714 dayLabel->setText( KOGlobals::self()->calendarSystem()->monthName( mSelectedDates.first(), true ) );
715 dayLabel->show(); 715 dayLabel->show();
716 DateList::ConstIterator dit; 716 DateList::ConstIterator dit;
717 bool oneday = (mSelectedDates.first() == mSelectedDates.last() ); 717 bool oneday = (mSelectedDates.first() == mSelectedDates.last() );
718 int counter = -1; 718 int counter = -1;
719 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 719 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
720 ++counter; 720 ++counter;
721 QDate date = *dit; 721 QDate date = *dit;
722 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels); 722 // QBoxLayout *dayLayout = new QVBoxLayout(mLayoutDayLabels);
723 if ( ! appendLabels ) { 723 if ( ! appendLabels ) {
724 dayLabel = mDayLabelsList.next(); 724 dayLabel = mDayLabelsList.next();
725 if ( !dayLabel ) 725 if ( !dayLabel )
726 appendLabels = true; 726 appendLabels = true;
727 } 727 }
728 if ( appendLabels ) { 728 if ( appendLabels ) {
729 dayLabel = getNewDaylabel(); 729 dayLabel = getNewDaylabel();
730 } 730 }
731 dayLabel->setMinimumWidth( 1 ); 731 dayLabel->setMinimumWidth( 1 );
732 dayLabel->setMaximumWidth( 10240 ); 732 dayLabel->setMaximumWidth( 10240 );
733 dayLabel->setFont( dlf ); 733 dayLabel->setFont( dlf );
734 dayLabel->show(); 734 dayLabel->show();
735 dayLabel->setAutoRepeat( false );
735 dayLabel->setNum( counter ); 736 dayLabel->setNum( counter );
736 QString str; 737 QString str;
737 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date); 738 int dW = KOGlobals::self()->calendarSystem()->dayOfWeek(date);
738 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true ); 739 QString dayName = KOGlobals::self()->calendarSystem()->weekDayName( dW, true );
739 switch ( maxLen ) { 740 switch ( maxLen ) {
740 case 2: 741 case 2:
741 str = QString::number( date.day() ); 742 str = QString::number( date.day() );
742 break; 743 break;
743 744
744 case 3: 745 case 3:
745 str = dayName.left( 1 ) +QString::number( date.day()); 746 str = dayName.left( 1 ) +QString::number( date.day());
746 747
747 break; 748 break;
748 case 4: 749 case 4:
749 str = dayName.left( 1 ) + " " +QString::number( date.day()); 750 str = dayName.left( 1 ) + " " +QString::number( date.day());
750 751
751 break; 752 break;
752 case 5: 753 case 5:
753 str = dayName.left( 2 ) + " " +QString::number( date.day()); 754 str = dayName.left( 2 ) + " " +QString::number( date.day());
754 755
755 break; 756 break;
756 case 6: 757 case 6:
757 str = dayName.left( 3 ) + " " +QString::number( date.day()); 758 str = dayName.left( 3 ) + " " +QString::number( date.day());
758 break; 759 break;
759 760
760 default: 761 default:
761 break; 762 break;
762 } 763 }
763 if ( oneday ) { 764 if ( oneday ) {
764 QString addString; 765 QString addString;
765 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() ) 766 if ( mSelectedDates.first() == QDateTime::currentDateTime().date() )
766 addString = i18n("Today"); 767 addString = i18n("Today");
767 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) ) 768 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(1) )
768 addString = i18n("Tomorrow"); 769 addString = i18n("Tomorrow");
769 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) ) 770 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-1) )
770 addString = i18n("Yesterday"); 771 addString = i18n("Yesterday");
771 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) ) 772 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(-2) )
772 addString = i18n("Day before yesterday"); 773 addString = i18n("Day before yesterday");
773 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) ) 774 else if ( mSelectedDates.first() == QDateTime::currentDateTime().date().addDays(2) )
774 addString = i18n("Day after tomorrow"); 775 addString = i18n("Day after tomorrow");
775 if ( !addString.isEmpty() ) { 776 if ( !addString.isEmpty() ) {
776 str = addString+", " + str; 777 str = addString+", " + str;
777 } else { 778 } else {
778 str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer); 779 str = KGlobal::locale()->formatDate( date, KOPrefs::instance()->mShortDateInViewer);
779 } 780 }
780 } 781 }
781 dayLabel->setText(str); 782 dayLabel->setText(str);
782 //dayLabel->setAlignment(QLabel::AlignHCenter); 783 //dayLabel->setAlignment(QLabel::AlignHCenter);
783 if (date == QDate::currentDate()) { 784 if (date == QDate::currentDate()) {
784 QFont bFont = dlf; 785 QFont bFont = dlf;
785 bFont.setBold( true ); 786 bFont.setBold( true );
786 dayLabel->setFont(bFont); 787 dayLabel->setFont(bFont);
787 } 788 }
788 //dayLayout->addWidget(dayLabel); 789 //dayLayout->addWidget(dayLabel);
789 790
790#ifndef KORG_NOPLUGINS 791#ifndef KORG_NOPLUGINS
791 CalendarDecoration::List cds = KOCore::self()->calendarDecorations(); 792 CalendarDecoration::List cds = KOCore::self()->calendarDecorations();
792 CalendarDecoration *it; 793 CalendarDecoration *it;
793 for(it = cds.first(); it; it = cds.next()) { 794 for(it = cds.first(); it; it = cds.next()) {
794 QString text = it->shortText( date ); 795 QString text = it->shortText( date );
795 if ( !text.isEmpty() ) { 796 if ( !text.isEmpty() ) {
796 QLabel *label = new QLabel(text,mDayLabels); 797 QLabel *label = new QLabel(text,mDayLabels);
797 label->setAlignment(AlignCenter); 798 label->setAlignment(AlignCenter);
798 dayLayout->addWidget(label); 799 dayLayout->addWidget(label);
799 } 800 }
800 } 801 }
801 802
802 for(it = cds.first(); it; it = cds.next()) { 803 for(it = cds.first(); it; it = cds.next()) {
803 QWidget *wid = it->smallWidget(mDayLabels,date); 804 QWidget *wid = it->smallWidget(mDayLabels,date);
804 if ( wid ) { 805 if ( wid ) {
805 // wid->setHeight(20); 806 // wid->setHeight(20);
806 dayLayout->addWidget(wid); 807 dayLayout->addWidget(wid);
807 } 808 }
808 } 809 }
809#endif 810#endif
810 } 811 }
811 if ( ! appendLabels ) { 812 if ( ! appendLabels ) {
812 dayLabel = mDayLabelsList.next(); 813 dayLabel = mDayLabelsList.next();
813 if ( !dayLabel ) 814 if ( !dayLabel )
814 appendLabels = true; 815 appendLabels = true;
815 } 816 }
816 if ( appendLabels ) { 817 if ( appendLabels ) {
817 dayLabel = getNewDaylabel(); 818 dayLabel = getNewDaylabel();
818 } 819 }
819 //dayLabel->hide();//test only 820 //dayLabel->hide();//test only
820 821
821 int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ; 822 int offset = (mAgenda->width() - mAgenda->verticalScrollBar()->width()-3 ) % mSelectedDates.count() ;
822 if ( offset < 0 ) offset = 0; 823 if ( offset < 0 ) offset = 0;
823 //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 ); 824 //qDebug("mLayoutDayLabels->addSpacing %d ", mAgenda->verticalScrollBar()->width()+offset+2 );
824 dayLabel->setText(">");//QString::number ( mSelectedDates.first().month() ) ); 825 dayLabel->setText(">");//QString::number ( mSelectedDates.first().month() ) );
825 dayLabel->setFont( dlf ); 826 dayLabel->setFont( dlf );
827 dayLabel->setAutoRepeat( true );
826 dayLabel->show(); 828 dayLabel->show();
827 dayLabel->setNum( -2 ); 829 dayLabel->setNum( -2 );
828 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset ); 830 dayLabel->setFixedWidth( mAgenda->verticalScrollBar()->width()+ offset );
829 //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2); 831 //qDebug("setToFixed %d ", mAgenda->verticalScrollBar()->width()+ offset+2);
830 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2); 832 //mLayoutDayLabels->addSpacing(mAgenda->verticalScrollBar()->width()+ offset+2);
831 if ( !appendLabels ) { 833 if ( !appendLabels ) {
832 dayLabel = mDayLabelsList.next(); 834 dayLabel = mDayLabelsList.next();
833 while ( dayLabel ) { 835 while ( dayLabel ) {
834 //qDebug("!dayLabel %d",dayLabel ); 836 //qDebug("!dayLabel %d",dayLabel );
835 dayLabel->hide(); 837 dayLabel->hide();
836 dayLabel = mDayLabelsList.next(); 838 dayLabel = mDayLabelsList.next();
837 } 839 }
838 } 840 }
839 841
840 mDayLabelsFrame->setFixedHeight( newHight + 4 ); 842 mDayLabelsFrame->setFixedHeight( newHight + 4 );
841} 843}
842 844
843int KOAgendaView::maxDatesHint() 845int KOAgendaView::maxDatesHint()
844{ 846{
845 // Not sure about the max number of events, so return 0 for now. 847 // Not sure about the max number of events, so return 0 for now.
846 return 0; 848 return 0;
847} 849}
848 850
849int KOAgendaView::currentDateCount() 851int KOAgendaView::currentDateCount()
850{ 852{
851 return mSelectedDates.count(); 853 return mSelectedDates.count();
852} 854}
853 855
854QPtrList<Incidence> KOAgendaView::selectedIncidences() 856QPtrList<Incidence> KOAgendaView::selectedIncidences()
855{ 857{
856 QPtrList<Incidence> selected; 858 QPtrList<Incidence> selected;
857 Incidence *incidence; 859 Incidence *incidence;
858 860
859 incidence = mAgenda->selectedIncidence(); 861 incidence = mAgenda->selectedIncidence();
860 if (incidence) selected.append(incidence); 862 if (incidence) selected.append(incidence);
861 863
862 incidence = mAllDayAgenda->selectedIncidence(); 864 incidence = mAllDayAgenda->selectedIncidence();
863 if (incidence) selected.append(incidence); 865 if (incidence) selected.append(incidence);
864 866
865 return selected; 867 return selected;
866} 868}
867 869
868DateList KOAgendaView::selectedDates() 870DateList KOAgendaView::selectedDates()
869{ 871{
870 DateList selected; 872 DateList selected;
871 QDate qd; 873 QDate qd;
872 874
873 qd = mAgenda->selectedIncidenceDate(); 875 qd = mAgenda->selectedIncidenceDate();
874 if (qd.isValid()) selected.append(qd); 876 if (qd.isValid()) selected.append(qd);
875 877
876 qd = mAllDayAgenda->selectedIncidenceDate(); 878 qd = mAllDayAgenda->selectedIncidenceDate();
877 if (qd.isValid()) selected.append(qd); 879 if (qd.isValid()) selected.append(qd);
878 880
879 return selected; 881 return selected;
880} 882}
881 883
882 884
883void KOAgendaView::updateView() 885void KOAgendaView::updateView()
884{ 886{
885 if ( mBlockUpdating ) 887 if ( mBlockUpdating )
886 return; 888 return;
887 // kdDebug() << "KOAgendaView::updateView()" << endl; 889 // kdDebug() << "KOAgendaView::updateView()" << endl;
888 fillAgenda(); 890 fillAgenda();
889 891
890} 892}
891 893
892 894
893/* 895/*
894 Update configuration settings for the agenda view. This method is not 896 Update configuration settings for the agenda view. This method is not
895 complete. 897 complete.
896*/ 898*/
897void KOAgendaView::updateConfig() 899void KOAgendaView::updateConfig()
898{ 900{
899 if ( mBlockUpdating ) 901 if ( mBlockUpdating )
900 return; 902 return;
901 if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) { 903 if ( mAgenda->height() > 96 * KOPrefs::instance()->mHourSize ) {
902 int old = KOPrefs::instance()->mHourSize; 904 int old = KOPrefs::instance()->mHourSize;
903 KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1; 905 KOPrefs::instance()->mHourSize = mAgenda->height()/96 +1;
904 qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize ); 906 qDebug("KOPrefs::instance()->mHourSize adjusted %d to %d ", old,KOPrefs::instance()->mHourSize );
905 } 907 }
906 908
907 909
908 // update config for children 910 // update config for children
909 mTimeLabels->updateConfig(); 911 mTimeLabels->updateConfig();
910 mAgenda->storePosition(); 912 mAgenda->storePosition();
911 mAgenda->updateConfig(); 913 mAgenda->updateConfig();
912 mAllDayAgenda->updateConfig(); 914 mAllDayAgenda->updateConfig();
913 // widget synchronization 915 // widget synchronization
914 //TODO: find a better way, maybe signal/slot 916 //TODO: find a better way, maybe signal/slot
915 mTimeLabels->positionChanged(); 917 mTimeLabels->positionChanged();
916 918
917 // for some reason, this needs to be called explicitly 919 // for some reason, this needs to be called explicitly
918 mTimeLabels->repaint(); 920 mTimeLabels->repaint();
919 921
920 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width()); 922 mDummyAllDayLeft->setFixedWidth(mTimeLabels->width());
921 923
922 // ToolTips displaying summary of events 924 // ToolTips displaying summary of events
923 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance() 925 KOAgendaItem::toolTipGroup()->setEnabled(KOPrefs::instance()
924 ->mEnableToolTips); 926 ->mEnableToolTips);
925 927
926 //setHolidayMasks(); 928 //setHolidayMasks();
927 929
928 //createDayLabels(); called by via updateView(); 930 //createDayLabels(); called by via updateView();
929 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth()); 931 mEventIndicatorTop->setXOffset(mTimeLabels->width() + mAgenda->frameWidth());
930 updateView(); 932 updateView();
931 mAgenda->restorePosition(); 933 mAgenda->restorePosition();
932} 934}
933 935
934 936
935void KOAgendaView::updateEventDates(KOAgendaItem *item, int type) 937void KOAgendaView::updateEventDates(KOAgendaItem *item, int type)
936{ 938{
937 // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl; 939 // kdDebug() << "KOAgendaView::updateEventDates(): " << item->text() << endl;
938 //qDebug("KOAgendaView::updateEventDates "); 940 //qDebug("KOAgendaView::updateEventDates ");
939 QDateTime startDt,endDt; 941 QDateTime startDt,endDt;
940 QDate startDate; 942 QDate startDate;
941 int lenInSecs; 943 int lenInSecs;
942 // if ( type == KOAgenda::RESIZETOP ) 944 // if ( type == KOAgenda::RESIZETOP )
943 // qDebug("RESIZETOP "); 945 // qDebug("RESIZETOP ");
944 // if ( type == KOAgenda::RESIZEBOTTOM ) 946 // if ( type == KOAgenda::RESIZEBOTTOM )
945 // qDebug("RESIZEBOTTOM "); 947 // qDebug("RESIZEBOTTOM ");
946 // if ( type == KOAgenda::MOVE ) 948 // if ( type == KOAgenda::MOVE )
947 // qDebug("MOVE "); 949 // qDebug("MOVE ");
948 if ( item->incidence()->type() == "Event" ) { 950 if ( item->incidence()->type() == "Event" ) {
949 startDt =item->incidence()->dtStart(); 951 startDt =item->incidence()->dtStart();
950 endDt = item->incidence()->dtEnd(); 952 endDt = item->incidence()->dtEnd();
951 lenInSecs = startDt.secsTo( endDt ); 953 lenInSecs = startDt.secsTo( endDt );
952 } 954 }
953 955
954 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED ); 956 // emit incidenceItemChanged( item->incidence(), KOGlobals::EVENTEDITED );
955 957
956 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) { 958 if ( item->incidence()->type()=="Todo" && item->mLastMoveXPos > 0 ) {
957 startDate = mSelectedDates[item->mLastMoveXPos]; 959 startDate = mSelectedDates[item->mLastMoveXPos];
958 } else { 960 } else {
959 if (item->cellX() < 0) { 961 if (item->cellX() < 0) {
960 startDate = (mSelectedDates.first()).addDays(item->cellX()); 962 startDate = (mSelectedDates.first()).addDays(item->cellX());
961 } else { 963 } else {
962 startDate = mSelectedDates[item->cellX()]; 964 startDate = mSelectedDates[item->cellX()];
963 } 965 }
964 } 966 }
965 startDt.setDate(startDate); 967 startDt.setDate(startDate);
966 968
967 if (item->incidence()->doesFloat()) { 969 if (item->incidence()->doesFloat()) {
968 endDt.setDate(startDate.addDays(item->cellWidth() - 1)); 970 endDt.setDate(startDate.addDays(item->cellWidth() - 1));
969 } else { 971 } else {
970 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE ) 972 if ( type == KOAgenda::RESIZETOP || type == KOAgenda::MOVE )
971 startDt.setTime(mAgenda->gyToTime(item->cellYTop())); 973 startDt.setTime(mAgenda->gyToTime(item->cellYTop()));
972 if ( item->incidence()->type() == "Event" ) { 974 if ( item->incidence()->type() == "Event" ) {
973 if ( type == KOAgenda::MOVE ) { 975 if ( type == KOAgenda::MOVE ) {
974 endDt = startDt.addSecs(lenInSecs); 976 endDt = startDt.addSecs(lenInSecs);
975 977
976 } else if ( type == KOAgenda::RESIZEBOTTOM ) { 978 } else if ( type == KOAgenda::RESIZEBOTTOM ) {
977 if (item->lastMultiItem()) { 979 if (item->lastMultiItem()) {
978 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 980 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
979 endDt.setDate(startDate. 981 endDt.setDate(startDate.
980 addDays(item->lastMultiItem()->cellX() - item->cellX())); 982 addDays(item->lastMultiItem()->cellX() - item->cellX()));
981 } else { 983 } else {
982 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 984 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
983 endDt.setDate(startDate); 985 endDt.setDate(startDate);
984 } 986 }
985 } 987 }
986 } else { 988 } else {
987 // todo 989 // todo
988 if (item->lastMultiItem()) { 990 if (item->lastMultiItem()) {
989 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1)); 991 endDt.setTime(mAgenda->gyToTime(item->lastMultiItem()->cellYBottom()+1));
990 endDt.setDate(startDate. 992 endDt.setDate(startDate.
991 addDays(item->lastMultiItem()->cellX() - item->cellX())); 993 addDays(item->lastMultiItem()->cellX() - item->cellX()));
992 } else { 994 } else {
993 //qDebug("tem->cellYBottom() %d",item->cellYBottom() ); 995 //qDebug("tem->cellYBottom() %d",item->cellYBottom() );
994 if ( item->cellYBottom() > 0 ) 996 if ( item->cellYBottom() > 0 )
995 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1)); 997 endDt.setTime(mAgenda->gyToTime(item->cellYBottom()+1));
996 else 998 else
997 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time()); 999 endDt.setTime((static_cast<Todo*>(item->incidence()))->dtDue().time());
998 endDt.setDate(startDate); 1000 endDt.setDate(startDate);
999 } 1001 }
1000 } 1002 }
1001 } 1003 }
1002 if ( item->incidence()->type() == "Event" ) { 1004 if ( item->incidence()->type() == "Event" ) {
1003 item->incidence()->setDtStart(startDt); 1005 item->incidence()->setDtStart(startDt);
1004 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt); 1006 (static_cast<Event*>(item->incidence()))->setDtEnd(endDt);
1005 } else if ( item->incidence()->type() == "Todo" ) { 1007 } else if ( item->incidence()->type() == "Todo" ) {
1006 Todo* to = static_cast<Todo*>(item->incidence()); 1008 Todo* to = static_cast<Todo*>(item->incidence());
1007 1009
1008 to->setDtDue(endDt); 1010 to->setDtDue(endDt);
1009 if ( to->hasStartDate() ) { 1011 if ( to->hasStartDate() ) {
1010 if (to->dtStart() >= to->dtDue() ) 1012 if (to->dtStart() >= to->dtDue() )
1011 to->setDtStart(to->dtDue().addDays( -2 )); 1013 to->setDtStart(to->dtDue().addDays( -2 ));
1012 } 1014 }
1013 1015
1014 } 1016 }
1015 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() ); 1017 //qDebug("KOAgendaView::updateEventDates stsart %s end %s ", startDt.toString().latin1(), endDt.toString().latin1() );
1016 item->incidence()->setRevision(item->incidence()->revision()+1); 1018 item->incidence()->setRevision(item->incidence()->revision()+1);
1017 item->setItemDate(startDt.date()); 1019 item->setItemDate(startDt.date());
1018 //item->updateItem(); 1020 //item->updateItem();
1019 if ( item->incidence()->type() == "Todo" ) { 1021 if ( item->incidence()->type() == "Todo" ) {
1020 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED ); 1022 emit todoMoved((Todo*)item->incidence(), KOGlobals::EVENTEDITED );
1021 1023
1022 } 1024 }
1023 else 1025 else
1024 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED); 1026 emit incidenceChanged(item->incidence(), KOGlobals::EVENTEDITED);
1025 item->updateItem(); 1027 item->updateItem();
1026} 1028}
1027 1029
1028void KOAgendaView::showDates( const QDate &start, const QDate &end ) 1030void KOAgendaView::showDates( const QDate &start, const QDate &end )
1029{ 1031{
1030 // kdDebug() << "KOAgendaView::selectDates" << endl; 1032 // kdDebug() << "KOAgendaView::selectDates" << endl;
1031 1033
1032 mSelectedDates.clear(); 1034 mSelectedDates.clear();
1033 // qDebug("KOAgendaView::showDates "); 1035 // qDebug("KOAgendaView::showDates ");
1034 QDate d = start; 1036 QDate d = start;
1035 while (d <= end) { 1037 while (d <= end) {
1036 mSelectedDates.append(d); 1038 mSelectedDates.append(d);
1037 d = d.addDays( 1 ); 1039 d = d.addDays( 1 );
1038 } 1040 }
1039 1041
1040 // and update the view 1042 // and update the view
1041 fillAgenda(); 1043 fillAgenda();
1042} 1044}
1043 1045
1044 1046
1045void KOAgendaView::showEvents(QPtrList<Event>) 1047void KOAgendaView::showEvents(QPtrList<Event>)
1046{ 1048{
1047 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl; 1049 kdDebug() << "KOAgendaView::showEvents() is not yet implemented" << endl;
1048} 1050}
1049 1051
1050void KOAgendaView::changeEventDisplay(Event *, int) 1052void KOAgendaView::changeEventDisplay(Event *, int)
1051{ 1053{
1052 // qDebug("KOAgendaView::changeEventDisplay "); 1054 // qDebug("KOAgendaView::changeEventDisplay ");
1053 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl; 1055 // kdDebug() << "KOAgendaView::changeEventDisplay" << endl;
1054 // this should be re-written to be MUCH smarter. Right now we 1056 // this should be re-written to be MUCH smarter. Right now we
1055 // are just playing dumb. 1057 // are just playing dumb.
1056 fillAgenda(); 1058 fillAgenda();
1057} 1059}
1058 1060
1059void KOAgendaView::fillAgenda(const QDate &) 1061void KOAgendaView::fillAgenda(const QDate &)
1060{ 1062{
1061 // qDebug("KOAgendaView::fillAgenda "); 1063 // qDebug("KOAgendaView::fillAgenda ");
1062 fillAgenda(); 1064 fillAgenda();
1063} 1065}
1064 1066
1065void KOAgendaView::fillAgenda() 1067void KOAgendaView::fillAgenda()
1066{ 1068{
1067 if ( globalFlagBlockStartup ) 1069 if ( globalFlagBlockStartup )
1068 return; 1070 return;
1069 if ( globalFlagBlockAgenda == 1 ) 1071 if ( globalFlagBlockAgenda == 1 )
1070 return; 1072 return;
1071 //if ( globalFlagBlockAgenda == 2 ) 1073 //if ( globalFlagBlockAgenda == 2 )
1072 //globalFlagBlockAgenda = 0; 1074 //globalFlagBlockAgenda = 0;
1073 // globalFlagBlockPainting = false; 1075 // globalFlagBlockPainting = false;
1074 if ( globalFlagBlockAgenda == 0 ) 1076 if ( globalFlagBlockAgenda == 0 )
1075 globalFlagBlockAgenda = 1; 1077 globalFlagBlockAgenda = 1;
1076 // clearView(); 1078 // clearView();
1077 //qDebug("fillAgenda()++++ "); 1079 //qDebug("fillAgenda()++++ ");
1078 globalFlagBlockAgendaItemPaint = 1; 1080 globalFlagBlockAgendaItemPaint = 1;
1079 1081
1080 mAllDayAgenda->changeColumns(mSelectedDates.count()); 1082 mAllDayAgenda->changeColumns(mSelectedDates.count());
1081 mAgenda->changeColumns(mSelectedDates.count()); 1083 mAgenda->changeColumns(mSelectedDates.count());
1082 qApp->processEvents(); 1084 qApp->processEvents();
1083 mEventIndicatorTop->changeColumns(mSelectedDates.count()); 1085 mEventIndicatorTop->changeColumns(mSelectedDates.count());
1084 mEventIndicatorBottom->changeColumns(mSelectedDates.count()); 1086 mEventIndicatorBottom->changeColumns(mSelectedDates.count());
1085 setHolidayMasks(); 1087 setHolidayMasks();
1086 1088
1087 //mAgenda->hideUnused(); 1089 //mAgenda->hideUnused();
1088 //mAllDayAgenda->hideUnused(); 1090 //mAllDayAgenda->hideUnused();
1089 1091
1090 // mAgenda->blockNextRepaint( false ); 1092 // mAgenda->blockNextRepaint( false );
1091 // mAgenda->viewport()->repaint(); 1093 // mAgenda->viewport()->repaint();
1092 // mAgenda->blockNextRepaint( true ); 1094 // mAgenda->blockNextRepaint( true );
1093 mMinY.resize(mSelectedDates.count()); 1095 mMinY.resize(mSelectedDates.count());
1094 mMaxY.resize(mSelectedDates.count()); 1096 mMaxY.resize(mSelectedDates.count());
1095 1097
1096 QPtrList<Event> dayEvents; 1098 QPtrList<Event> dayEvents;
1097 1099
1098 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1100 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1099 // Therefore, gtodoset all of them. 1101 // Therefore, gtodoset all of them.
1100 QPtrList<Todo> todos = calendar()->todos(); 1102 QPtrList<Todo> todos = calendar()->todos();
1101 1103
1102 mAgenda->setDateList(mSelectedDates); 1104 mAgenda->setDateList(mSelectedDates);
1103 1105
1104 QDate today = QDate::currentDate(); 1106 QDate today = QDate::currentDate();
1105 1107
1106 DateList::ConstIterator dit; 1108 DateList::ConstIterator dit;
1107 int curCol = 0; 1109 int curCol = 0;
1108 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) { 1110 for( dit = mSelectedDates.begin(); dit != mSelectedDates.end(); ++dit ) {
1109 QDate currentDate = *dit; 1111 QDate currentDate = *dit;
1110 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString() 1112 // kdDebug() << "KOAgendaView::fillAgenda(): " << currentDate.toString()
1111 // << endl; 1113 // << endl;
1112 1114
1113 dayEvents = calendar()->events(currentDate,true); 1115 dayEvents = calendar()->events(currentDate,true);
1114 1116
1115 // Default values, which can never be reached 1117 // Default values, which can never be reached
1116 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1; 1118 mMinY[curCol] = mAgenda->timeToY(QTime(23,59)) + 1;
1117 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1; 1119 mMaxY[curCol] = mAgenda->timeToY(QTime(0,0)) - 1;
1118 1120
1119 unsigned int numEvent; 1121 unsigned int numEvent;
1120 for(numEvent=0;numEvent<dayEvents.count();++numEvent) { 1122 for(numEvent=0;numEvent<dayEvents.count();++numEvent) {
1121 Event *event = dayEvents.at(numEvent); 1123 Event *event = dayEvents.at(numEvent);
1122 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") ) 1124 if ( !KOPrefs::instance()->mShowSyncEvents && event->uid().left(2) == QString("la") )
1123 if ( event->uid().left(15) == QString("last-syncEvent-") ) 1125 if ( event->uid().left(15) == QString("last-syncEvent-") )
1124 continue; 1126 continue;
1125 // kdDebug() << " Event: " << event->summary() << endl; 1127 // kdDebug() << " Event: " << event->summary() << endl;
1126 1128
1127 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol; 1129 int beginX = currentDate.daysTo(event->dtStart().date()) + curCol;
1128 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol; 1130 int endX = currentDate.daysTo(event->dtEnd().date()) + curCol;
1129 1131
1130 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl; 1132 // kdDebug() << " beginX: " << beginX << " endX: " << endX << endl;
1131 1133
1132 if (event->doesFloat()) { 1134 if (event->doesFloat()) {
1133 if (event->recurrence()->doesRecur()) { 1135 if (event->recurrence()->doesRecur()) {
1134 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol); 1136 mAllDayAgenda->insertAllDayItem(event,currentDate,curCol,curCol);
1135 } else { 1137 } else {
1136 if (beginX <= 0 && curCol == 0) { 1138 if (beginX <= 0 && curCol == 0) {
1137 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1139 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1138 } else if (beginX == curCol) { 1140 } else if (beginX == curCol) {
1139 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX); 1141 mAllDayAgenda->insertAllDayItem(event,currentDate,beginX,endX);
1140 } 1142 }
1141 } 1143 }
1142 } else if (event->isMultiDay()) { 1144 } else if (event->isMultiDay()) {
1143 if ( event->doesRecur () ) { 1145 if ( event->doesRecur () ) {
1144 QDate dateit = currentDate; 1146 QDate dateit = currentDate;
1145 int count = 0; 1147 int count = 0;
1146 int max = event->dtStart().daysTo( event->dtEnd() ) +2; 1148 int max = event->dtStart().daysTo( event->dtEnd() ) +2;
1147 while (! event->recursOn( dateit ) && count <= max ) { 1149 while (! event->recursOn( dateit ) && count <= max ) {
1148 ++count; 1150 ++count;
1149 dateit = dateit.addDays( -1 ); 1151 dateit = dateit.addDays( -1 );
1150 } 1152 }
1151 bool ok; 1153 bool ok;
1152 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok ); 1154 QDateTime nextOcstart = event->getNextOccurence( QDateTime(dateit) ,&ok );
1153 if ( ok ) 1155 if ( ok )
1154 { 1156 {
1155 int secs = event->dtStart().secsTo( event->dtEnd() ); 1157 int secs = event->dtStart().secsTo( event->dtEnd() );
1156 QDateTime nextOcend =nextOcstart.addSecs( secs ); ; 1158 QDateTime nextOcend =nextOcstart.addSecs( secs ); ;
1157 beginX = currentDate.daysTo(nextOcstart.date()) + curCol; 1159 beginX = currentDate.daysTo(nextOcstart.date()) + curCol;
1158 endX = currentDate.daysTo(nextOcend.date()) + curCol; 1160 endX = currentDate.daysTo(nextOcend.date()) + curCol;
1159 1161
1160 } 1162 }
1161 } 1163 }
1162 int startY = mAgenda->timeToY(event->dtStart().time()); 1164 int startY = mAgenda->timeToY(event->dtStart().time());
1163 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1165 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1164 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol ); 1166 //qDebug("insert %d %d %d %d %d ",beginX,endX,startY,endY , curCol );
1165 if ((beginX <= 0 && curCol == 0) || beginX == curCol) { 1167 if ((beginX <= 0 && curCol == 0) || beginX == curCol) {
1166 //qDebug("insert!!! "); 1168 //qDebug("insert!!! ");
1167 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY); 1169 mAgenda->insertMultiItem(event,currentDate,beginX,endX,startY,endY);
1168 } 1170 }
1169 if (beginX == curCol) { 1171 if (beginX == curCol) {
1170 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1172 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1171 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1173 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1172 } else if (endX == curCol) { 1174 } else if (endX == curCol) {
1173 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1175 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1174 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1176 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1175 } else { 1177 } else {
1176 mMinY[curCol] = mAgenda->timeToY(QTime(0,0)); 1178 mMinY[curCol] = mAgenda->timeToY(QTime(0,0));
1177 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59)); 1179 mMaxY[curCol] = mAgenda->timeToY(QTime(23,59));
1178 } 1180 }
1179 } else { 1181 } else {
1180 int startY = mAgenda->timeToY(event->dtStart().time()); 1182 int startY = mAgenda->timeToY(event->dtStart().time());
1181 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1; 1183 int endY = mAgenda->timeToY(event->dtEnd().time()) - 1;
1182 if (endY < startY) endY = startY; 1184 if (endY < startY) endY = startY;
1183 mAgenda->insertItem(event,currentDate,curCol,startY,endY); 1185 mAgenda->insertItem(event,currentDate,curCol,startY,endY);
1184 if (startY < mMinY[curCol]) mMinY[curCol] = startY; 1186 if (startY < mMinY[curCol]) mMinY[curCol] = startY;
1185 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY; 1187 if (endY > mMaxY[curCol]) mMaxY[curCol] = endY;
1186 } 1188 }
1187 } 1189 }
1188 // ---------- [display Todos -------------- 1190 // ---------- [display Todos --------------
1189 unsigned int numTodo; 1191 unsigned int numTodo;
1190 for (numTodo = 0; numTodo < todos.count(); ++numTodo) { 1192 for (numTodo = 0; numTodo < todos.count(); ++numTodo) {
1191 Todo *todo = todos.at(numTodo); 1193 Todo *todo = todos.at(numTodo);
1192 1194
1193 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date 1195 if ( ! todo->hasDueDate() && !todo->hasCompletedDate()) continue; // todo shall not be displayed if it has no date
1194 1196
1195 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue. 1197 // ToDo items shall be displayed for the day they are due, but only showed today if they are already overdue.
1196 // Already completed items can be displayed on their original due date 1198 // Already completed items can be displayed on their original due date
1197 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda 1199 //if not KOPrefs::instance()->mShowTodoInAgenda, show overdue in agenda
1198 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda; 1200 bool overdue = (!todo->isCompleted()) && (todo->dtDue() < today) && KOPrefs::instance()->mShowTodoInAgenda;
1199 bool fillIn = false; 1201 bool fillIn = false;
1200 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate ) 1202 if ( todo->hasCompletedDate() && todo->completed().date() == currentDate )
1201 fillIn = true; 1203 fillIn = true;
1202 if ( ! fillIn && !todo->hasCompletedDate() ) 1204 if ( ! fillIn && !todo->hasCompletedDate() )
1203 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue); 1205 fillIn = ((todo->dtDue().date() == currentDate) && !overdue) || ((currentDate == today) && overdue);
1204 if ( fillIn ) { 1206 if ( fillIn ) {
1205 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue 1207 if ( (todo->doesFloat() || overdue ) && !todo->hasCompletedDate() ) { // Todo has no due-time set or is already overdue
1206 if ( KOPrefs::instance()->mShowTodoInAgenda ) 1208 if ( KOPrefs::instance()->mShowTodoInAgenda )
1207 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol); 1209 mAllDayAgenda->insertAllDayItem(todo, currentDate, curCol, curCol);
1208 } 1210 }
1209 else { 1211 else {
diff --git a/korganizer/koeditorgeneraltodo.cpp b/korganizer/koeditorgeneraltodo.cpp
index a9d1ed3..a03ec52 100644
--- a/korganizer/koeditorgeneraltodo.cpp
+++ b/korganizer/koeditorgeneraltodo.cpp
@@ -1,499 +1,500 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 Copyright (c) 2000,2001 Cornelius Schumacher <schumacher@kde.org> 3 Copyright (c) 2000,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 <qtooltip.h> 24#include <qtooltip.h>
25#include <qfiledialog.h> 25#include <qfiledialog.h>
26#include <qlayout.h> 26#include <qlayout.h>
27#include <qvbox.h> 27#include <qvbox.h>
28#include <qbuttongroup.h> 28#include <qbuttongroup.h>
29#include <qvgroupbox.h> 29#include <qvgroupbox.h>
30#include <qwidgetstack.h> 30#include <qwidgetstack.h>
31#include <qdatetime.h> 31#include <qdatetime.h>
32#include <qapplication.h> 32#include <qapplication.h>
33 33
34#include <kglobal.h> 34#include <kglobal.h>
35#include <klocale.h> 35#include <klocale.h>
36#include <kiconloader.h> 36#include <kiconloader.h>
37#include <kmessagebox.h> 37#include <kmessagebox.h>
38#include <kdebug.h> 38#include <kdebug.h>
39#include <krestrictedline.h> 39#include <krestrictedline.h>
40#include <kstandarddirs.h> 40#include <kstandarddirs.h>
41#include <kfiledialog.h> 41#include <kfiledialog.h>
42 42
43#include <libkcal/todo.h> 43#include <libkcal/todo.h>
44 44
45#include <libkdepim/kdateedit.h> 45#include <libkdepim/kdateedit.h>
46 46
47#include "koprefs.h" 47#include "koprefs.h"
48#include "ktimeedit.h" 48#include "ktimeedit.h"
49 49
50#include "koeditorgeneraltodo.h" 50#include "koeditorgeneraltodo.h"
51#include "kolocationbox.h" 51#include "kolocationbox.h"
52 52
53KOEditorGeneralTodo::KOEditorGeneralTodo(QObject* parent, 53KOEditorGeneralTodo::KOEditorGeneralTodo(QObject* parent,
54 const char* name) 54 const char* name)
55 : KOEditorGeneral( parent, name) 55 : KOEditorGeneral( parent, name)
56{ 56{
57} 57}
58 58
59KOEditorGeneralTodo::~KOEditorGeneralTodo() 59KOEditorGeneralTodo::~KOEditorGeneralTodo()
60{ 60{
61} 61}
62 62
63void KOEditorGeneralTodo::finishSetup() 63void KOEditorGeneralTodo::finishSetup()
64{ 64{
65 65
66// QWidget::setTabOrder(mSummaryEdit, mLocationEdit); 66// QWidget::setTabOrder(mSummaryEdit, mLocationEdit);
67// QWidget::setTabOrder(mLocationEdit, mDueCheck); 67// QWidget::setTabOrder(mLocationEdit, mDueCheck);
68// QWidget::setTabOrder(mDueCheck, mDueDateEdit); 68// QWidget::setTabOrder(mDueCheck, mDueDateEdit);
69// QWidget::setTabOrder(mDueDateEdit, mDueTimeEdit); 69// QWidget::setTabOrder(mDueDateEdit, mDueTimeEdit);
70// QWidget::setTabOrder(mDueTimeEdit, mStartCheck); 70// QWidget::setTabOrder(mDueTimeEdit, mStartCheck);
71// QWidget::setTabOrder(mStartCheck, mStartDateEdit); 71// QWidget::setTabOrder(mStartCheck, mStartDateEdit);
72// QWidget::setTabOrder(mStartDateEdit, mStartTimeEdit); 72// QWidget::setTabOrder(mStartDateEdit, mStartTimeEdit);
73// QWidget::setTabOrder(mStartTimeEdit, mTimeButton); 73// QWidget::setTabOrder(mStartTimeEdit, mTimeButton);
74// QWidget::setTabOrder(mTimeButton, mCompletedCombo); 74// QWidget::setTabOrder(mTimeButton, mCompletedCombo);
75// QWidget::setTabOrder(mCompletedCombo, mPriorityCombo); 75// QWidget::setTabOrder(mCompletedCombo, mPriorityCombo);
76// QWidget::setTabOrder(mPriorityCombo, mAlarmButton); 76// QWidget::setTabOrder(mPriorityCombo, mAlarmButton);
77// QWidget::setTabOrder(mAlarmButton, mCategoriesButton); 77// QWidget::setTabOrder(mAlarmButton, mCategoriesButton);
78// QWidget::setTabOrder(mCategoriesButton, mSecrecyCombo); 78// QWidget::setTabOrder(mCategoriesButton, mSecrecyCombo);
79// QWidget::setTabOrder(mSecrecyCombo, mDescriptionEdit); 79// QWidget::setTabOrder(mSecrecyCombo, mDescriptionEdit);
80 mSummaryEdit->load(KOLocationBox::SUMMARYTODO); 80 mSummaryEdit->load(KOLocationBox::SUMMARYTODO);
81 mSummaryEdit->setFocus(); 81 mSummaryEdit->setFocus();
82} 82}
83 83
84void KOEditorGeneralTodo::initTime(QWidget *parent,QBoxLayout *topLayout) 84void KOEditorGeneralTodo::initTime(QWidget *parent,QBoxLayout *topLayout)
85{ 85{
86 QBoxLayout *timeLayout = new QVBoxLayout(topLayout); 86 QBoxLayout *timeLayout = new QVBoxLayout(topLayout);
87 87
88 QGroupBox *timeGroupBox = new QGroupBox(1,QGroupBox::Horizontal, 88 QGroupBox *timeGroupBox = new QGroupBox(1,QGroupBox::Horizontal,
89 i18n("Date && Time"),parent); 89 i18n("Date && Time"),parent);
90 timeLayout->addWidget(timeGroupBox); 90 timeLayout->addWidget(timeGroupBox);
91 timeGroupBox->layout()->setSpacing( 0 ); 91 timeGroupBox->layout()->setSpacing( 0 );
92 timeGroupBox->layout()->setMargin( 5 ); 92 timeGroupBox->layout()->setMargin( 5 );
93 QFrame *timeBoxFrame = new QFrame(timeGroupBox); 93 QFrame *timeBoxFrame = new QFrame(timeGroupBox);
94 94
95 QGridLayout *layoutTimeBox = new QGridLayout(timeBoxFrame,3,3); 95 QGridLayout *layoutTimeBox = new QGridLayout(timeBoxFrame,3,3);
96 layoutTimeBox->setSpacing(topLayout->spacing()); 96 layoutTimeBox->setSpacing(topLayout->spacing());
97 layoutTimeBox->setColStretch( 1, 1 ); 97 layoutTimeBox->setColStretch( 1, 1 );
98 98
99 mDueCheck = new QCheckBox(i18n("Due:"),timeBoxFrame); 99 mDueCheck = new QCheckBox(i18n("Due:"),timeBoxFrame);
100 layoutTimeBox->addWidget(mDueCheck,0,0); 100 layoutTimeBox->addWidget(mDueCheck,0,0);
101 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(enableDueEdit(bool))); 101 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(enableDueEdit(bool)));
102 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(showAlarm())); 102 connect(mDueCheck,SIGNAL(toggled(bool)),SLOT(showAlarm()));
103 103
104 104
105 mDueDateEdit = new KDateEdit(timeBoxFrame); 105 mDueDateEdit = new KDateEdit(timeBoxFrame);
106 layoutTimeBox->addWidget(mDueDateEdit,0,1); 106 layoutTimeBox->addWidget(mDueDateEdit,0,1);
107 107
108 mDueTimeEdit = new KOTimeEdit(timeBoxFrame); 108 mDueTimeEdit = new KOTimeEdit(timeBoxFrame);
109 layoutTimeBox->addWidget(mDueTimeEdit,0,2); 109 layoutTimeBox->addWidget(mDueTimeEdit,0,2);
110 110
111 111
112 mStartCheck = new QCheckBox(i18n("Start:"),timeBoxFrame); 112 mStartCheck = new QCheckBox(i18n("Start:"),timeBoxFrame);
113 layoutTimeBox->addWidget(mStartCheck,1,0); 113 layoutTimeBox->addWidget(mStartCheck,1,0);
114 connect(mStartCheck,SIGNAL(toggled(bool)),SLOT(enableStartEdit(bool))); 114 connect(mStartCheck,SIGNAL(toggled(bool)),SLOT(enableStartEdit(bool)));
115 115
116 mStartDateEdit = new KDateEdit(timeBoxFrame); 116 mStartDateEdit = new KDateEdit(timeBoxFrame);
117 layoutTimeBox->addWidget(mStartDateEdit,1,1); 117 layoutTimeBox->addWidget(mStartDateEdit,1,1);
118 118
119 mStartTimeEdit = new KOTimeEdit(timeBoxFrame); 119 mStartTimeEdit = new KOTimeEdit(timeBoxFrame);
120 layoutTimeBox->addWidget(mStartTimeEdit,1,2); 120 layoutTimeBox->addWidget(mStartTimeEdit,1,2);
121 121
122 122
123 mTimeButton = new QCheckBox(i18n("Time associated"),timeBoxFrame); 123 mTimeButton = new QCheckBox(i18n("Time associated"),timeBoxFrame);
124 layoutTimeBox->addMultiCellWidget(mTimeButton,2,2,0,1); 124 layoutTimeBox->addMultiCellWidget(mTimeButton,2,2,0,1);
125 125
126 connect(mTimeButton,SIGNAL(toggled(bool)),SLOT(enableTimeEdits(bool))); 126 connect(mTimeButton,SIGNAL(toggled(bool)),SLOT(enableTimeEdits(bool)));
127 127
128 // some more layouting 128 // some more layouting
129 //layoutTimeBox->setColStretch(3,1); 129 //layoutTimeBox->setColStretch(3,1);
130} 130}
131 131
132 132
133void KOEditorGeneralTodo::initCompletion(QWidget *parent, QBoxLayout *topLayout) 133void KOEditorGeneralTodo::initCompletion(QWidget *parent, QBoxLayout *topLayout)
134{ 134{
135 mCompletedCombo = new QComboBox(parent); 135 mCompletedCombo = new QComboBox(parent);
136 // xgettext:no-c-format 136 // xgettext:no-c-format
137 mCompletedCombo->insertItem(i18n(" 0 %")); 137 mCompletedCombo->insertItem(i18n(" 0 %"));
138 // xgettext:no-c-format 138 // xgettext:no-c-format
139 mCompletedCombo->insertItem(i18n(" 20 %")); 139 mCompletedCombo->insertItem(i18n(" 20 %"));
140 // xgettext:no-c-format 140 // xgettext:no-c-format
141 mCompletedCombo->insertItem(i18n(" 40 %")); 141 mCompletedCombo->insertItem(i18n(" 40 %"));
142 // xgettext:no-c-format 142 // xgettext:no-c-format
143 mCompletedCombo->insertItem(i18n(" 60 %")); 143 mCompletedCombo->insertItem(i18n(" 60 %"));
144 // xgettext:no-c-format 144 // xgettext:no-c-format
145 mCompletedCombo->insertItem(i18n(" 80 %")); 145 mCompletedCombo->insertItem(i18n(" 80 %"));
146 // xgettext:no-c-format 146 // xgettext:no-c-format
147 mCompletedCombo->insertItem(i18n("100 %")); 147 mCompletedCombo->insertItem(i18n("100 %"));
148 connect(mCompletedCombo,SIGNAL(activated(int)),SLOT(completedChanged(int))); 148 connect(mCompletedCombo,SIGNAL(activated(int)),SLOT(completedChanged(int)));
149 topLayout->addWidget(mCompletedCombo); 149 topLayout->addWidget(mCompletedCombo);
150 150
151 mCompletedLabel = new QLabel(i18n("completed"),parent); 151 mCompletedLabel = new QLabel(i18n("completed"),parent);
152 topLayout->addWidget(mCompletedLabel); 152 topLayout->addWidget(mCompletedLabel);
153 153
154 mCompleteDateEdit = new KDateEdit(parent); 154 mCompleteDateEdit = new KDateEdit(parent);
155 topLayout->addWidget(mCompleteDateEdit ); 155 topLayout->addWidget(mCompleteDateEdit );
156 156
157 mCompleteTimeEdit = new KOTimeEdit(parent); 157 mCompleteTimeEdit = new KOTimeEdit(parent);
158 topLayout->addWidget( mCompleteTimeEdit); 158 topLayout->addWidget( mCompleteTimeEdit);
159 159
160 mCompletedCombo->setSizePolicy( QSizePolicy( QSizePolicy::Preferred,QSizePolicy::Preferred) ); 160 mCompletedCombo->setSizePolicy( QSizePolicy( QSizePolicy::Preferred,QSizePolicy::Preferred) );
161 mCompletedLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding,QSizePolicy::Preferred) ); 161 mCompletedLabel->setSizePolicy( QSizePolicy( QSizePolicy::Expanding,QSizePolicy::Preferred) );
162 162
163 if ( QApplication::desktop()->width() <= 480 ) { 163 if ( QApplication::desktop()->width() <= 480 ) {
164 if ( QApplication::desktop()->width() < 320 ) 164 if ( QApplication::desktop()->width() < 320 )
165 mCompleteDateEdit->setMaximumWidth( 85 ); 165 mCompleteDateEdit->setMaximumWidth( 85 );
166 else 166 else
167 mCompleteDateEdit->setMaximumWidth( 140 ); 167 mCompleteDateEdit->setMaximumWidth( 140 );
168 topLayout->setSpacing( 0 ); 168 topLayout->setSpacing( 0 );
169 } 169 }
170} 170}
171 171
172void KOEditorGeneralTodo::initPriority(QWidget *parent, QBoxLayout *topLayout) 172void KOEditorGeneralTodo::initPriority(QWidget *parent, QBoxLayout *topLayout)
173{ 173{
174 174
175 QHBox* h = new QHBox ( parent ); 175 QHBox* h = new QHBox ( parent );
176 topLayout->addWidget( h ); 176 topLayout->addWidget( h );
177 QLabel *priorityLabel = new QLabel(i18n("Priority:"), h); 177 QLabel *priorityLabel = new QLabel(i18n("Priority:"), h);
178 // topLayout->addWidget(priorityLabel); 178 // topLayout->addWidget(priorityLabel);
179 mPriorityCombo = new QComboBox( h ); 179 mPriorityCombo = new QComboBox( h );
180 mPriorityCombo->insertItem(i18n("1 (high)")); 180 mPriorityCombo->insertItem(i18n("1 (high)"));
181 mPriorityCombo->insertItem(i18n("2")); 181 mPriorityCombo->insertItem(i18n("2"));
182 mPriorityCombo->insertItem(i18n("3")); 182 mPriorityCombo->insertItem(i18n("3"));
183 mPriorityCombo->insertItem(i18n("4")); 183 mPriorityCombo->insertItem(i18n("4"));
184 mPriorityCombo->insertItem(i18n("5 (low)")); 184 mPriorityCombo->insertItem(i18n("5 (low)"));
185 //topLayout->addWidget(mPriorityCombo); 185 //topLayout->addWidget(mPriorityCombo);
186} 186}
187 187
188void KOEditorGeneralTodo::initStatus(QWidget *parent,QBoxLayout *topLayout) 188void KOEditorGeneralTodo::initStatus(QWidget *parent,QBoxLayout *topLayout)
189{ 189{
190 QBoxLayout *statusLayout = new QHBoxLayout(topLayout); 190 QBoxLayout *statusLayout = new QHBoxLayout(topLayout);
191 191
192 initCompletion( parent, statusLayout ); 192 initCompletion( parent, statusLayout );
193 193
194 statusLayout->addStretch( 1 ); 194 statusLayout->addStretch( 1 );
195 195
196 initPriority( parent, statusLayout ); 196 initPriority( parent, statusLayout );
197} 197}
198 198
199void KOEditorGeneralTodo::setDefaults(QDateTime due,bool allDay) 199void KOEditorGeneralTodo::setDefaults(QDateTime due,bool allDay)
200{ 200{
201 201
202 mSummaryEdit->load(KOLocationBox::SUMMARYTODO); 202 mSummaryEdit->load(KOLocationBox::SUMMARYTODO);
203 mLocationEdit->load(KOLocationBox::LOCATION); 203 mLocationEdit->load(KOLocationBox::LOCATION);
204 KOEditorGeneral::setDefaults(allDay); 204 KOEditorGeneral::setDefaults(allDay);
205 205
206 mTimeButton->setChecked( !allDay ); 206 mTimeButton->setChecked( !allDay );
207 if(mTimeButton->isChecked()) { 207 if(mTimeButton->isChecked()) {
208 mTimeButton->setEnabled(true); 208 mTimeButton->setEnabled(true);
209 } 209 }
210 else { 210 else {
211 mTimeButton->setEnabled(false); 211 mTimeButton->setEnabled(false);
212 } 212 }
213 213
214 enableTimeEdits( !allDay ); 214 enableTimeEdits( !allDay );
215 if ( due.isValid() ) { 215 if ( due.isValid() ) {
216 mDueCheck->setChecked(true); 216 mDueCheck->setChecked(true);
217 enableDueEdit(true); 217 enableDueEdit(true);
218 alarmDisable(false);
218 } else { 219 } else {
219 mDueCheck->setChecked(false); 220 mDueCheck->setChecked(false);
220 enableDueEdit(false); 221 enableDueEdit(false);
221 due = QDateTime::currentDateTime().addDays(7); 222 due = QDateTime::currentDateTime().addDays(7);
223 alarmDisable(true);
222 } 224 }
223 225
224 alarmDisable(true);
225 226
226 mStartCheck->setChecked(false); 227 mStartCheck->setChecked(false);
227 enableStartEdit(false); 228 enableStartEdit(false);
228 229
229 mDueDateEdit->setDate(due.date()); 230 mDueDateEdit->setDate(due.date());
230 mDueTimeEdit->setTime(due.time()); 231 mDueTimeEdit->setTime(due.time());
231 due = due.addDays(-7); 232 due = due.addDays(-7);
232 mStartDateEdit->setDate(due.date()); 233 mStartDateEdit->setDate(due.date());
233 mStartTimeEdit->setTime(due.time()); 234 mStartTimeEdit->setTime(due.time());
234 235
235 mPriorityCombo->setCurrentItem(2); 236 mPriorityCombo->setCurrentItem(2);
236 mCompletedLabel->setText(i18n(" completed"));; 237 mCompletedLabel->setText(i18n(" completed"));;
237 mCompletedCombo->setCurrentItem(0); 238 mCompletedCombo->setCurrentItem(0);
238 mCompleteDateEdit->hide(); 239 mCompleteDateEdit->hide();
239 mCompleteTimeEdit->hide(); 240 mCompleteTimeEdit->hide();
240} 241}
241 242
242void KOEditorGeneralTodo::readTodo(Todo *todo) 243void KOEditorGeneralTodo::readTodo(Todo *todo)
243{ 244{
244 245
245 mSummaryEdit->load(KOLocationBox::SUMMARYTODO); 246 mSummaryEdit->load(KOLocationBox::SUMMARYTODO);
246 mLocationEdit->load(KOLocationBox::LOCATION); 247 mLocationEdit->load(KOLocationBox::LOCATION);
247 KOEditorGeneral::readIncidence(todo); 248 KOEditorGeneral::readIncidence(todo);
248 249
249 QDateTime dueDT; 250 QDateTime dueDT;
250 251
251 if (todo->hasDueDate()) { 252 if (todo->hasDueDate()) {
252 enableAlarmEdit(true); 253 enableAlarmEdit(true);
253 dueDT = todo->dtDue(); 254 dueDT = todo->dtDue();
254 mDueDateEdit->setDate(todo->dtDue().date()); 255 mDueDateEdit->setDate(todo->dtDue().date());
255 mDueTimeEdit->setTime(todo->dtDue().time()); 256 mDueTimeEdit->setTime(todo->dtDue().time());
256 mDueCheck->setChecked(true); 257 mDueCheck->setChecked(true);
257 } else { 258 } else {
258 alarmDisable(true); 259 alarmDisable(true);
259 mDueDateEdit->setEnabled(false); 260 mDueDateEdit->setEnabled(false);
260 mDueTimeEdit->setEnabled(false); 261 mDueTimeEdit->setEnabled(false);
261 mDueDateEdit->setDate(QDate::currentDate()); 262 mDueDateEdit->setDate(QDate::currentDate());
262 mDueTimeEdit->setTime(QTime::currentTime()); 263 mDueTimeEdit->setTime(QTime::currentTime());
263 mDueCheck->setChecked(false); 264 mDueCheck->setChecked(false);
264 } 265 }
265 266
266 if (todo->hasStartDate()) { 267 if (todo->hasStartDate()) {
267 mStartDateEdit->setDate(todo->dtStart().date()); 268 mStartDateEdit->setDate(todo->dtStart().date());
268 mStartTimeEdit->setTime(todo->dtStart().time()); 269 mStartTimeEdit->setTime(todo->dtStart().time());
269 mStartCheck->setChecked(true); 270 mStartCheck->setChecked(true);
270 } else { 271 } else {
271 mStartDateEdit->setEnabled(false); 272 mStartDateEdit->setEnabled(false);
272 mStartTimeEdit->setEnabled(false); 273 mStartTimeEdit->setEnabled(false);
273 mStartDateEdit->setDate(QDate::currentDate()); 274 mStartDateEdit->setDate(QDate::currentDate());
274 mStartTimeEdit->setTime(QTime::currentTime()); 275 mStartTimeEdit->setTime(QTime::currentTime());
275 mStartCheck->setChecked(false); 276 mStartCheck->setChecked(false);
276 } 277 }
277 278
278 mTimeButton->setChecked( !todo->doesFloat() ); 279 mTimeButton->setChecked( !todo->doesFloat() );
279 280
280 mCompletedCombo->setCurrentItem(todo->percentComplete() / 20); 281 mCompletedCombo->setCurrentItem(todo->percentComplete() / 20);
281 if (todo->isCompleted() && todo->hasCompletedDate()) { 282 if (todo->isCompleted() && todo->hasCompletedDate()) {
282 mCompleted = todo->completed(); 283 mCompleted = todo->completed();
283 } 284 }
284 setCompletedDate(); 285 setCompletedDate();
285 286
286 mPriorityCombo->setCurrentItem(todo->priority()-1); 287 mPriorityCombo->setCurrentItem(todo->priority()-1);
287} 288}
288 289
289void KOEditorGeneralTodo::writeTodo(Todo *todo) 290void KOEditorGeneralTodo::writeTodo(Todo *todo)
290{ 291{
291 KOEditorGeneral::writeIncidence(todo); 292 KOEditorGeneral::writeIncidence(todo);
292 293
293 // temp. until something better happens. 294 // temp. until something better happens.
294 QString tmpStr; 295 QString tmpStr;
295 296
296 todo->setHasDueDate(mDueCheck->isChecked()); 297 todo->setHasDueDate(mDueCheck->isChecked());
297 todo->setHasStartDate(mStartCheck->isChecked()); 298 todo->setHasStartDate(mStartCheck->isChecked());
298 299
299 QDate tmpDate; 300 QDate tmpDate;
300 QTime tmpTime; 301 QTime tmpTime;
301 QDateTime tmpDT; 302 QDateTime tmpDT;
302 if ( mTimeButton->isChecked() ) { 303 if ( mTimeButton->isChecked() ) {
303 todo->setFloats(false); 304 todo->setFloats(false);
304 305
305 // set due date/time 306 // set due date/time
306 tmpDate = mDueDateEdit->date(); 307 tmpDate = mDueDateEdit->date();
307 tmpTime = mDueTimeEdit->getTime(); 308 tmpTime = mDueTimeEdit->getTime();
308 tmpDT.setDate(tmpDate); 309 tmpDT.setDate(tmpDate);
309 tmpDT.setTime(tmpTime); 310 tmpDT.setTime(tmpTime);
310 todo->setDtDue(tmpDT); 311 todo->setDtDue(tmpDT);
311 312
312 // set start date/time 313 // set start date/time
313 tmpDate = mStartDateEdit->date(); 314 tmpDate = mStartDateEdit->date();
314 tmpTime = mStartTimeEdit->getTime(); 315 tmpTime = mStartTimeEdit->getTime();
315 tmpDT.setDate(tmpDate); 316 tmpDT.setDate(tmpDate);
316 tmpDT.setTime(tmpTime); 317 tmpDT.setTime(tmpTime);
317 todo->setDtStart(tmpDT); 318 todo->setDtStart(tmpDT);
318 } else { 319 } else {
319 todo->setFloats(true); 320 todo->setFloats(true);
320 321
321 // need to change this. 322 // need to change this.
322 tmpDate = mDueDateEdit->date(); 323 tmpDate = mDueDateEdit->date();
323 tmpTime.setHMS(0,0,0); 324 tmpTime.setHMS(0,0,0);
324 tmpDT.setDate(tmpDate); 325 tmpDT.setDate(tmpDate);
325 tmpDT.setTime(tmpTime); 326 tmpDT.setTime(tmpTime);
326 todo->setDtDue(tmpDT); 327 todo->setDtDue(tmpDT);
327 328
328 tmpDate = mStartDateEdit->date(); 329 tmpDate = mStartDateEdit->date();
329 tmpTime.setHMS(0,0,0); 330 tmpTime.setHMS(0,0,0);
330 tmpDT.setDate(tmpDate); 331 tmpDT.setDate(tmpDate);
331 tmpDT.setTime(tmpTime); 332 tmpDT.setTime(tmpTime);
332 todo->setDtStart(tmpDT); 333 todo->setDtStart(tmpDT);
333 } 334 }
334 todo->setPriority(mPriorityCombo->currentItem()+1); 335 todo->setPriority(mPriorityCombo->currentItem()+1);
335 336
336 // set completion state 337 // set completion state
337 if ( mCompletedCombo->currentItem() == 5 ) { 338 if ( mCompletedCombo->currentItem() == 5 ) {
338 QDateTime comp ( mCompleteDateEdit->date(), mCompleteTimeEdit->getTime() ); 339 QDateTime comp ( mCompleteDateEdit->date(), mCompleteTimeEdit->getTime() );
339 if ( comp.isValid () ) { 340 if ( comp.isValid () ) {
340 todo->setPercentComplete(0); 341 todo->setPercentComplete(0);
341 todo->setPercentComplete(100); 342 todo->setPercentComplete(100);
342 todo->setCompleted(comp); 343 todo->setCompleted(comp);
343 } else { 344 } else {
344 todo->setPercentComplete( 100 ); 345 todo->setPercentComplete( 100 );
345 if ( mCompleted.isValid() ) 346 if ( mCompleted.isValid() )
346 todo->setCompleted(mCompleted); 347 todo->setCompleted(mCompleted);
347 } 348 }
348 } else { 349 } else {
349 todo->setPercentComplete(mCompletedCombo->currentItem() * 20); 350 todo->setPercentComplete(mCompletedCombo->currentItem() * 20);
350 } 351 }
351 352
352 mSummaryEdit->save(KOLocationBox::SUMMARYTODO); 353 mSummaryEdit->save(KOLocationBox::SUMMARYTODO);
353} 354}
354 355
355void KOEditorGeneralTodo::enableDueEdit(bool enable) 356void KOEditorGeneralTodo::enableDueEdit(bool enable)
356{ 357{
357 mDueDateEdit->setEnabled( enable ); 358 mDueDateEdit->setEnabled( enable );
358 359
359 if(mDueCheck->isChecked() || mStartCheck->isChecked()) { 360 if(mDueCheck->isChecked() || mStartCheck->isChecked()) {
360 mTimeButton->setEnabled(true); 361 mTimeButton->setEnabled(true);
361 } 362 }
362 else { 363 else {
363 mTimeButton->setEnabled(false); 364 mTimeButton->setEnabled(false);
364 mTimeButton->setChecked(false); 365 mTimeButton->setChecked(false);
365 } 366 }
366 367
367 if (enable) { 368 if (enable) {
368 mDueTimeEdit->setEnabled( mTimeButton->isChecked() ); 369 mDueTimeEdit->setEnabled( mTimeButton->isChecked() );
369 } else { 370 } else {
370 mDueTimeEdit->setEnabled( false ); 371 mDueTimeEdit->setEnabled( false );
371 } 372 }
372 emit datesChecked(); 373 emit datesChecked();
373} 374}
374 375
375void KOEditorGeneralTodo::enableStartEdit( bool enable ) 376void KOEditorGeneralTodo::enableStartEdit( bool enable )
376{ 377{
377 mStartDateEdit->setEnabled( enable ); 378 mStartDateEdit->setEnabled( enable );
378 379
379 if(mDueCheck->isChecked() || mStartCheck->isChecked()) { 380 if(mDueCheck->isChecked() || mStartCheck->isChecked()) {
380 mTimeButton->setEnabled(true); 381 mTimeButton->setEnabled(true);
381 } 382 }
382 else { 383 else {
383 mTimeButton->setEnabled(false); 384 mTimeButton->setEnabled(false);
384 mTimeButton->setChecked(false); 385 mTimeButton->setChecked(false);
385 } 386 }
386 387
387 if (enable) { 388 if (enable) {
388 mStartTimeEdit->setEnabled( mTimeButton->isChecked() ); 389 mStartTimeEdit->setEnabled( mTimeButton->isChecked() );
389 } else { 390 } else {
390 mStartTimeEdit->setEnabled( false ); 391 mStartTimeEdit->setEnabled( false );
391 } 392 }
392 emit datesChecked(); 393 emit datesChecked();
393} 394}
394 395
395void KOEditorGeneralTodo::enableTimeEdits(bool enable) 396void KOEditorGeneralTodo::enableTimeEdits(bool enable)
396{ 397{
397 if(mStartCheck->isChecked()) { 398 if(mStartCheck->isChecked()) {
398 mStartTimeEdit->setEnabled( enable ); 399 mStartTimeEdit->setEnabled( enable );
399 } 400 }
400 if(mDueCheck->isChecked()) { 401 if(mDueCheck->isChecked()) {
401 mDueTimeEdit->setEnabled( enable ); 402 mDueTimeEdit->setEnabled( enable );
402 } 403 }
403} 404}
404 405
405void KOEditorGeneralTodo::showAlarm() 406void KOEditorGeneralTodo::showAlarm()
406{ 407{
407 if ( mDueCheck->isChecked() ) { 408 if ( mDueCheck->isChecked() ) {
408 alarmDisable(false); 409 alarmDisable(false);
409 } 410 }
410 else { 411 else {
411 alarmDisable(true); 412 alarmDisable(true);
412 } 413 }
413} 414}
414 415
415bool KOEditorGeneralTodo::validateInput() 416bool KOEditorGeneralTodo::validateInput()
416{ 417{
417 if (mDueCheck->isChecked()) { 418 if (mDueCheck->isChecked()) {
418 if (!mDueDateEdit->inputIsValid()) { 419 if (!mDueDateEdit->inputIsValid()) {
419 KMessageBox::sorry(0,i18n("Please specify a valid due date.")); 420 KMessageBox::sorry(0,i18n("Please specify a valid due date."));
420 return false; 421 return false;
421 } 422 }
422 } 423 }
423 424
424 if (mStartCheck->isChecked()) { 425 if (mStartCheck->isChecked()) {
425 if (!mStartDateEdit->inputIsValid()) { 426 if (!mStartDateEdit->inputIsValid()) {
426 KMessageBox::sorry(0,i18n("Please specify a valid start date.")); 427 KMessageBox::sorry(0,i18n("Please specify a valid start date."));
427 return false; 428 return false;
428 } 429 }
429 } 430 }
430 431
431 if (mStartCheck->isChecked() && mDueCheck->isChecked()) { 432 if (mStartCheck->isChecked() && mDueCheck->isChecked()) {
432 QDateTime startDate; 433 QDateTime startDate;
433 QDateTime dueDate; 434 QDateTime dueDate;
434 startDate.setDate(mStartDateEdit->date()); 435 startDate.setDate(mStartDateEdit->date());
435 dueDate.setDate(mDueDateEdit->date()); 436 dueDate.setDate(mDueDateEdit->date());
436 if (mTimeButton->isChecked()) { 437 if (mTimeButton->isChecked()) {
437 startDate.setTime(mStartTimeEdit->getTime()); 438 startDate.setTime(mStartTimeEdit->getTime());
438 dueDate.setTime(mDueTimeEdit->getTime()); 439 dueDate.setTime(mDueTimeEdit->getTime());
439 } 440 }
440 if (startDate > dueDate) { 441 if (startDate > dueDate) {
441 KMessageBox::sorry(0, 442 KMessageBox::sorry(0,
442 i18n("The start date cannot be after the due date.")); 443 i18n("The start date cannot be after the due date."));
443 return false; 444 return false;
444 } 445 }
445 } 446 }
446 447
447 return KOEditorGeneral::validateInput(); 448 return KOEditorGeneral::validateInput();
448} 449}
449 450
450void KOEditorGeneralTodo::completedChanged(int index) 451void KOEditorGeneralTodo::completedChanged(int index)
451{ 452{
452 if (index == 5) { 453 if (index == 5) {
453 //get rid of milli sec 454 //get rid of milli sec
454 mCompleted = QDateTime::currentDateTime(); 455 mCompleted = QDateTime::currentDateTime();
455 } 456 }
456 setCompletedDate(); 457 setCompletedDate();
457} 458}
458 459
459void KOEditorGeneralTodo::setCompletedDate() 460void KOEditorGeneralTodo::setCompletedDate()
460{ 461{
461 if (mCompletedCombo->currentItem() == 5 && mCompleted.isValid()) { 462 if (mCompletedCombo->currentItem() == 5 && mCompleted.isValid()) {
462 if ( QApplication::desktop()->width() < 480 ) { 463 if ( QApplication::desktop()->width() < 480 ) {
463 mCompletedLabel->setText(i18n(" on")); 464 mCompletedLabel->setText(i18n(" on"));
464 } 465 }
465 else 466 else
466 mCompletedLabel->setText(i18n(" completed on ")); 467 mCompletedLabel->setText(i18n(" completed on "));
467 mCompleteDateEdit->show(); 468 mCompleteDateEdit->show();
468 mCompleteTimeEdit->show(); 469 mCompleteTimeEdit->show();
469 mCompleteTimeEdit->setTime( mCompleted.time() ); 470 mCompleteTimeEdit->setTime( mCompleted.time() );
470 mCompleteDateEdit->setDate( mCompleted.date() ); 471 mCompleteDateEdit->setDate( mCompleted.date() );
471 } else { 472 } else {
472 mCompletedLabel->setText(i18n(" completed")); 473 mCompletedLabel->setText(i18n(" completed"));
473 mCompleteDateEdit->hide(); 474 mCompleteDateEdit->hide();
474 mCompleteTimeEdit->hide(); 475 mCompleteTimeEdit->hide();
475 } 476 }
476} 477}
477 478
478void KOEditorGeneralTodo::modified (Todo* todo, int modification) 479void KOEditorGeneralTodo::modified (Todo* todo, int modification)
479{ 480{
480 switch (modification) { 481 switch (modification) {
481 case KOGlobals::PRIORITY_MODIFIED: 482 case KOGlobals::PRIORITY_MODIFIED:
482 mPriorityCombo->setCurrentItem(todo->priority()-1); 483 mPriorityCombo->setCurrentItem(todo->priority()-1);
483 break; 484 break;
484 case KOGlobals::COMPLETION_MODIFIED: 485 case KOGlobals::COMPLETION_MODIFIED:
485 mCompletedCombo->setCurrentItem(todo->percentComplete() / 20); 486 mCompletedCombo->setCurrentItem(todo->percentComplete() / 20);
486 if (todo->isCompleted() && todo->hasCompletedDate()) { 487 if (todo->isCompleted() && todo->hasCompletedDate()) {
487 mCompleted = todo->completed(); 488 mCompleted = todo->completed();
488 } 489 }
489 setCompletedDate(); 490 setCompletedDate();
490 break; 491 break;
491 case KOGlobals::CATEGORY_MODIFIED: 492 case KOGlobals::CATEGORY_MODIFIED:
492 setCategories (todo->categoriesStr ()); 493 setCategories (todo->categoriesStr ());
493 break; 494 break;
494 case KOGlobals::UNKNOWN_MODIFIED: // fall through 495 case KOGlobals::UNKNOWN_MODIFIED: // fall through
495 default: 496 default:
496 readTodo( todo ); 497 readTodo( todo );
497 break; 498 break;
498 } 499 }
499} 500}
diff --git a/korganizer/navigatorbar.cpp b/korganizer/navigatorbar.cpp
index eca7c14..49149f2 100644
--- a/korganizer/navigatorbar.cpp
+++ b/korganizer/navigatorbar.cpp
@@ -1,272 +1,278 @@
1/* 1/*
2 This file is part of KOrganizer. 2 This file is part of KOrganizer.
3 3
4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org> 4 Copyright (c) 2003 Cornelius Schumacher <schumacher@kde.org>
5 5
6 This program is free software; you can redistribute it and/or modify 6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by 7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or 8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version. 9 (at your option) any later version.
10 10
11 This program is distributed in the hope that it will be useful, 11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details. 14 GNU General Public License for more details.
15 15
16 You should have received a copy of the GNU General Public License 16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software 17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 19
20 As a special exception, permission is given to link this program 20 As a special exception, permission is given to link this program
21 with any edition of Qt, and distribute the resulting executable, 21 with any edition of Qt, and distribute the resulting executable,
22 without including the source code for Qt in the source distribution. 22 without including the source code for Qt in the source distribution.
23*/ 23*/
24 24
25#include <qstring.h> 25#include <qstring.h>
26#include <qtooltip.h> 26#include <qtooltip.h>
27#include <qpushbutton.h> 27#include <qpushbutton.h>
28#include <qlayout.h> 28#include <qlayout.h>
29#include <qframe.h> 29#include <qframe.h>
30#include <qlabel.h> 30#include <qlabel.h>
31#include <qpopupmenu.h> 31#include <qpopupmenu.h>
32#include <qapplication.h> 32#include <qapplication.h>
33 33
34#include <kdebug.h> 34#include <kdebug.h>
35#include <klocale.h> 35#include <klocale.h>
36#include <kglobal.h> 36#include <kglobal.h>
37#include <kiconloader.h> 37#include <kiconloader.h>
38#include "libkdepim/kdatepicker.h" 38#include "libkdepim/kdatepicker.h"
39#include <knotifyclient.h> 39#include <knotifyclient.h>
40#include "kdatetbl.h" 40#include "kdatetbl.h"
41 41
42#include "koglobals.h" 42#include "koglobals.h"
43#include <kglobalsettings.h> 43#include <kglobalsettings.h>
44#include "koprefs.h" 44#include "koprefs.h"
45#ifndef KORG_NOPLUGINS 45#ifndef KORG_NOPLUGINS
46#include "kocore.h" 46#include "kocore.h"
47#endif 47#endif
48 48
49#include <kcalendarsystem.h> 49#include <kcalendarsystem.h>
50 50
51#include "navigatorbar.h" 51#include "navigatorbar.h"
52 52
53NavigatorBar::NavigatorBar( const QDate & date, QWidget *parent, const char *name ) 53NavigatorBar::NavigatorBar( const QDate & date, QWidget *parent, const char *name )
54 : QWidget( parent, name ) 54 : QWidget( parent, name )
55{ 55{
56 QBoxLayout *topLayout = new QHBoxLayout( this ); 56 QBoxLayout *topLayout = new QHBoxLayout( this );
57 57
58 // Set up the control buttons and date label 58 // Set up the control buttons and date label
59 mCtrlFrame = new QFrame( this ); 59 mCtrlFrame = new QFrame( this );
60 mCtrlFrame->setFrameStyle(QFrame::Panel|QFrame::Raised); 60 mCtrlFrame->setFrameStyle(QFrame::Panel|QFrame::Raised);
61 mCtrlFrame->setLineWidth(1); 61 mCtrlFrame->setLineWidth(1);
62 62
63 topLayout->addWidget( mCtrlFrame ); 63 topLayout->addWidget( mCtrlFrame );
64 64
65 65
66 66
67 bool isRTL = KOGlobals::self()->reverseLayout(); 67 bool isRTL = KOGlobals::self()->reverseLayout();
68#ifndef DESKTOP_VERSION 68#ifndef DESKTOP_VERSION
69 bool isDesktop = false; 69 bool isDesktop = false;
70#else 70#else
71 bool isDesktop = true; 71 bool isDesktop = true;
72#endif 72#endif
73 if ( QString ( name ) == QString("useBigPixmaps") && QApplication::desktop()->width() > 320 ) 73 if ( QString ( name ) == QString("useBigPixmaps") && QApplication::desktop()->width() > 320 )
74 isDesktop = true; 74 isDesktop = true;
75 // Create backward navigation buttons 75 // Create backward navigation buttons
76 mPrevYear = new QPushButton( mCtrlFrame ); 76 mPrevYear = new QPushButton( mCtrlFrame );
77 mPrevYear->setPixmap( SmallIcon( isDesktop ? "3leftarrowB" : "3leftarrow" ) ); 77 mPrevYear->setPixmap( SmallIcon( isDesktop ? "3leftarrowB" : "3leftarrow" ) );
78 QToolTip::add( mPrevYear, i18n("Previous Year") ); 78 QToolTip::add( mPrevYear, i18n("Previous Year") );
79 79
80 mPrevMonth = new QPushButton( mCtrlFrame ); 80 mPrevMonth = new QPushButton( mCtrlFrame );
81 mPrevMonth->setPixmap( SmallIcon( isDesktop ? "2leftarrowB" : "2leftarrow") ); 81 mPrevMonth->setPixmap( SmallIcon( isDesktop ? "2leftarrowB" : "2leftarrow") );
82 QToolTip::add( mPrevMonth, i18n("Previous Month") ); 82 QToolTip::add( mPrevMonth, i18n("Previous Month") );
83 83
84 // Create forward navigation buttons 84 // Create forward navigation buttons
85 mNextMonth = new QPushButton( mCtrlFrame ); 85 mNextMonth = new QPushButton( mCtrlFrame );
86 mNextMonth->setPixmap( SmallIcon( isDesktop ? "2rightarrowB" : "2rightarrow") ); 86 mNextMonth->setPixmap( SmallIcon( isDesktop ? "2rightarrowB" : "2rightarrow") );
87 QToolTip::add( mNextMonth, i18n("Next Month") ); 87 QToolTip::add( mNextMonth, i18n("Next Month") );
88 88
89 mPrevWeek = new QPushButton( mCtrlFrame ); 89 mPrevWeek = new QPushButton( mCtrlFrame );
90 mPrevWeek->setPixmap( SmallIcon( isDesktop ? "1leftarrowB" : "1leftarrow") ); 90 mPrevWeek->setPixmap( SmallIcon( isDesktop ? "1leftarrowB" : "1leftarrow") );
91 QToolTip::add( mPrevWeek, i18n("Previous Week") ); 91 QToolTip::add( mPrevWeek, i18n("Previous Week") );
92 92
93 // Create forward navigation buttons 93 // Create forward navigation buttons
94 mNextWeek = new QPushButton( mCtrlFrame ); 94 mNextWeek = new QPushButton( mCtrlFrame );
95 mNextWeek->setPixmap( SmallIcon( isDesktop ? "1rightarrowB" : "1rightarrow") ); 95 mNextWeek->setPixmap( SmallIcon( isDesktop ? "1rightarrowB" : "1rightarrow") );
96 QToolTip::add( mNextWeek, i18n("Next Week") ); 96 QToolTip::add( mNextWeek, i18n("Next Week") );
97 97
98 mNextYear = new QPushButton( mCtrlFrame ); 98 mNextYear = new QPushButton( mCtrlFrame );
99 mNextYear->setPixmap( SmallIcon( isDesktop ? "3rightarrowB": "3rightarrow") ); 99 mNextYear->setPixmap( SmallIcon( isDesktop ? "3rightarrowB": "3rightarrow") );
100 QToolTip::add( mNextYear, i18n("Next Year") ); 100 QToolTip::add( mNextYear, i18n("Next Year") );
101 mSelectMonth = new QPushButton( mCtrlFrame ); 101 mSelectMonth = new QPushButton( mCtrlFrame );
102 // Create month name label 102 // Create month name label
103 //selectMonth->setFont( tfont ); 103 //selectMonth->setFont( tfont );
104 // selectMonth->setAlignment( AlignCenter ); 104 // selectMonth->setAlignment( AlignCenter );
105 //mDateLabel = new QLabel( selectMonth ); 105 //mDateLabel = new QLabel( selectMonth );
106 //mDateLabel->setFont( tfont ); 106 //mDateLabel->setFont( tfont );
107 //mDateLabel->setAlignment( AlignCenter ); 107 //mDateLabel->setAlignment( AlignCenter );
108 if ( QString ( name ) == QString("useBigPixmaps") ) { 108 if ( QString ( name ) == QString("useBigPixmaps") ) {
109 mNextMonth->setFlat( true); 109 mNextMonth->setFlat( true);
110 mNextWeek->setFlat( true); 110 mNextWeek->setFlat( true);
111 mNextYear->setFlat( true); 111 mNextYear->setFlat( true);
112 mSelectMonth->setFlat( true); 112 mSelectMonth->setFlat( true);
113 mPrevYear->setFlat( true); 113 mPrevYear->setFlat( true);
114 mPrevMonth->setFlat( true); 114 mPrevMonth->setFlat( true);
115 mPrevWeek->setFlat( true); 115 mPrevWeek->setFlat( true);
116 } else { 116 } else {
117 mPrevWeek->hide(); 117 mPrevWeek->hide();
118 mNextWeek->hide(); 118 mNextWeek->hide();
119 } 119 }
120 120
121 resetFont( font() ); 121 resetFont( font() );
122 122
123 123
124 // set up control frame layout 124 // set up control frame layout
125 QBoxLayout *ctrlLayout = new QHBoxLayout( mCtrlFrame, 1 ); 125 QBoxLayout *ctrlLayout = new QHBoxLayout( mCtrlFrame, 1 );
126 ctrlLayout->addWidget( mPrevYear, 3 ); 126 ctrlLayout->addWidget( mPrevYear, 3 );
127 ctrlLayout->addWidget( mPrevMonth, 3 ); 127 ctrlLayout->addWidget( mPrevMonth, 3 );
128 ctrlLayout->addWidget( mPrevWeek, 3 ); 128 ctrlLayout->addWidget( mPrevWeek, 3 );
129 //ctrlLayout->addStretch( 1 ); 129 //ctrlLayout->addStretch( 1 );
130 // ctrlLayout->addSpacing( 1 ); 130 // ctrlLayout->addSpacing( 1 );
131 // ctrlLayout->addWidget( mDateLabel ); 131 // ctrlLayout->addWidget( mDateLabel );
132 ctrlLayout->addWidget( mSelectMonth ); 132 ctrlLayout->addWidget( mSelectMonth );
133 // ctrlLayout->addSpacing( 1 ); 133 // ctrlLayout->addSpacing( 1 );
134 // ctrlLayout->addStretch( 1 ); 134 // ctrlLayout->addStretch( 1 );
135 ctrlLayout->addWidget( mNextWeek, 3 ); 135 ctrlLayout->addWidget( mNextWeek, 3 );
136 ctrlLayout->addWidget( mNextMonth, 3 ); 136 ctrlLayout->addWidget( mNextMonth, 3 );
137 ctrlLayout->addWidget( mNextYear, 3 ); 137 ctrlLayout->addWidget( mNextYear, 3 );
138 138
139 connect( mPrevYear, SIGNAL( clicked() ), SIGNAL( goPrevYear() ) ); 139 connect( mPrevYear, SIGNAL( clicked() ), SIGNAL( goPrevYear() ) );
140 connect( mPrevMonth, SIGNAL( clicked() ), SIGNAL( goPrevMonth() ) ); 140 connect( mPrevMonth, SIGNAL( clicked() ), SIGNAL( goPrevMonth() ) );
141 connect( mNextMonth, SIGNAL( clicked() ), SIGNAL( goNextMonth() ) ); 141 connect( mNextMonth, SIGNAL( clicked() ), SIGNAL( goNextMonth() ) );
142 connect( mPrevWeek, SIGNAL( clicked() ), SIGNAL( goPrevWeek() ) ); 142 connect( mPrevWeek, SIGNAL( clicked() ), SIGNAL( goPrevWeek() ) );
143 connect( mNextWeek, SIGNAL( clicked() ), SIGNAL( goNextWeek() ) ); 143 connect( mNextWeek, SIGNAL( clicked() ), SIGNAL( goNextWeek() ) );
144 connect( mNextYear, SIGNAL( clicked() ), SIGNAL( goNextYear() ) ); 144 connect( mNextYear, SIGNAL( clicked() ), SIGNAL( goNextYear() ) );
145 connect( mSelectMonth, SIGNAL( clicked() ),SLOT( selectMonth() ) ); 145 connect( mSelectMonth, SIGNAL( clicked() ),SLOT( selectMonth() ) );
146 mPrevYear->setFocusPolicy(NoFocus); 146 mPrevYear->setFocusPolicy(NoFocus);
147 mPrevMonth->setFocusPolicy(NoFocus); 147 mPrevMonth->setFocusPolicy(NoFocus);
148 mNextMonth->setFocusPolicy(NoFocus); 148 mNextMonth->setFocusPolicy(NoFocus);
149 mPrevWeek->setFocusPolicy(NoFocus); 149 mPrevWeek->setFocusPolicy(NoFocus);
150 mNextWeek->setFocusPolicy(NoFocus); 150 mNextWeek->setFocusPolicy(NoFocus);
151 mNextYear->setFocusPolicy(NoFocus); 151 mNextYear->setFocusPolicy(NoFocus);
152 mSelectMonth->setFocusPolicy(NoFocus); 152 mSelectMonth->setFocusPolicy(NoFocus);
153 setSizePolicy( QSizePolicy ( QSizePolicy::Expanding ,QSizePolicy::Fixed ) ); 153 setSizePolicy( QSizePolicy ( QSizePolicy::Expanding ,QSizePolicy::Fixed ) );
154 mPrevYear->setAutoRepeat( true );
155 mPrevMonth->setAutoRepeat( true );
156 mNextMonth->setAutoRepeat( true );
157 mPrevWeek->setAutoRepeat( true );
158 mNextWeek->setAutoRepeat( true );
159 mNextYear->setAutoRepeat( true );
154 160
155} 161}
156 162
157NavigatorBar::~NavigatorBar() 163NavigatorBar::~NavigatorBar()
158{ 164{
159} 165}
160QSize NavigatorBar::sizeHint() const 166QSize NavigatorBar::sizeHint() const
161{ 167{
162 int wid = mCurrentMinWid ; 168 int wid = mCurrentMinWid ;
163 if ( mPrevYear->isVisible() ) 169 if ( mPrevYear->isVisible() )
164 wid += mCurrentButtonMinWid; 170 wid += mCurrentButtonMinWid;
165 if ( mPrevMonth->isVisible() ) 171 if ( mPrevMonth->isVisible() )
166 wid += mCurrentButtonMinWid; 172 wid += mCurrentButtonMinWid;
167 if ( mPrevWeek->isVisible() ) 173 if ( mPrevWeek->isVisible() )
168 wid += mCurrentButtonMinWid; 174 wid += mCurrentButtonMinWid;
169 if ( mNextMonth->isVisible() ) 175 if ( mNextMonth->isVisible() )
170 wid += mCurrentButtonMinWid; 176 wid += mCurrentButtonMinWid;
171 if ( mNextWeek->isVisible() ) 177 if ( mNextWeek->isVisible() )
172 wid += mCurrentButtonMinWid; 178 wid += mCurrentButtonMinWid;
173 if ( mNextYear->isVisible() ) 179 if ( mNextYear->isVisible() )
174 wid += mCurrentButtonMinWid; 180 wid += mCurrentButtonMinWid;
175 //qDebug("ret %d %d ", wid, mCurrentHei); 181 //qDebug("ret %d %d ", wid, mCurrentHei);
176 return QSize ( wid, mCurrentHei ); 182 return QSize ( wid, mCurrentHei );
177} 183}
178QSize NavigatorBar::sizeHintTwoButtons( int butNum ) const 184QSize NavigatorBar::sizeHintTwoButtons( int butNum ) const
179{ 185{
180 return QSize ( mCurrentMinWid + butNum * mCurrentButtonMinWid , mCurrentHei ); 186 return QSize ( mCurrentMinWid + butNum * mCurrentButtonMinWid , mCurrentHei );
181} 187}
182void NavigatorBar::resetFont ( QFont fo ) 188void NavigatorBar::resetFont ( QFont fo )
183{ 189{
184 190
185 QFont tfont = fo; 191 QFont tfont = fo;
186 if ( QApplication::desktop()->width() >= 480 ) 192 if ( QApplication::desktop()->width() >= 480 )
187 tfont.setPointSize(tfont.pointSize()+2); 193 tfont.setPointSize(tfont.pointSize()+2);
188 tfont.setBold(true); 194 tfont.setBold(true);
189 195
190 mSelectMonth->setFont( tfont ); 196 mSelectMonth->setFont( tfont );
191 // Set minimum width to width of widest month name label 197 // Set minimum width to width of widest month name label
192 int i; 198 int i;
193 int maxwidth = 0; 199 int maxwidth = 0;
194 QFontMetrics fm ( mSelectMonth->font() ); 200 QFontMetrics fm ( mSelectMonth->font() );
195 int width = fm.width("September '00" ); 201 int width = fm.width("September '00" );
196 maxwidth = width+2; 202 maxwidth = width+2;
197 int size = fm.height()+2; 203 int size = fm.height()+2;
198 if ( QApplication::desktop()->width() >= 480 ) { 204 if ( QApplication::desktop()->width() >= 480 ) {
199 size += 6; 205 size += 6;
200 maxwidth+= 6; 206 maxwidth+= 6;
201 } 207 }
202 mSelectMonth->setMinimumWidth( maxwidth ); 208 mSelectMonth->setMinimumWidth( maxwidth );
203 mSelectMonth->setFixedHeight( size ); 209 mSelectMonth->setFixedHeight( size );
204 mPrevYear->setFixedHeight( size ); 210 mPrevYear->setFixedHeight( size );
205 mPrevMonth->setFixedHeight( size ); 211 mPrevMonth->setFixedHeight( size );
206 mPrevWeek->setFixedHeight( size ); 212 mPrevWeek->setFixedHeight( size );
207 mNextMonth->setFixedHeight( size ); 213 mNextMonth->setFixedHeight( size );
208 mNextWeek->setFixedHeight( size ); 214 mNextWeek->setFixedHeight( size );
209 mNextYear->setFixedHeight ( size ); 215 mNextYear->setFixedHeight ( size );
210 mCurrentHei = size +2; 216 mCurrentHei = size +2;
211 mCurrentMinWid = maxwidth+2; 217 mCurrentMinWid = maxwidth+2;
212 mCurrentButtonMinWid = mPrevYear->sizeHint().width()+2; 218 mCurrentButtonMinWid = mPrevYear->sizeHint().width()+2;
213} 219}
214 220
215void NavigatorBar::showButtons( bool left, bool right ) 221void NavigatorBar::showButtons( bool left, bool right )
216{ 222{
217 if ( left ) { 223 if ( left ) {
218 mPrevYear->show(); 224 mPrevYear->show();
219 mPrevMonth->show(); 225 mPrevMonth->show();
220 } else { 226 } else {
221 mPrevYear->hide(); 227 mPrevYear->hide();
222 mPrevMonth->hide(); 228 mPrevMonth->hide();
223 } 229 }
224 230
225 if ( right ) { 231 if ( right ) {
226 mNextYear->show(); 232 mNextYear->show();
227 mNextMonth->show(); 233 mNextMonth->show();
228 } else { 234 } else {
229 mNextYear->hide(); 235 mNextYear->hide();
230 mNextMonth->hide(); 236 mNextMonth->hide();
231 } 237 }
232 if ( !left && !right ) { 238 if ( !left && !right ) {
233 //mSelectMonth->setMaximumWidth( 1024 ); 239 //mSelectMonth->setMaximumWidth( 1024 );
234 mSelectMonth->setSizePolicy( QSizePolicy ( QSizePolicy::Expanding ,QSizePolicy::Fixed ) ); 240 mSelectMonth->setSizePolicy( QSizePolicy ( QSizePolicy::Expanding ,QSizePolicy::Fixed ) );
235 } 241 }
236} 242}
237 243
238void NavigatorBar::selectMonth() 244void NavigatorBar::selectMonth()
239{ 245{
240 246
241 int month; 247 int month;
242 KPopupFrame* popup = new KPopupFrame(this); 248 KPopupFrame* popup = new KPopupFrame(this);
243 KDateInternalMonthPicker* picker = new KDateInternalMonthPicker(popup); 249 KDateInternalMonthPicker* picker = new KDateInternalMonthPicker(popup);
244 // ----- 250 // -----
245 picker->resize(picker->sizeHint()); 251 picker->resize(picker->sizeHint());
246 popup->setMainWidget(picker); 252 popup->setMainWidget(picker);
247 picker->setFocus(); 253 picker->setFocus();
248 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int))); 254 connect(picker, SIGNAL(closeMe(int)), popup, SLOT(close(int)));
249 if(popup->exec(mSelectMonth->mapToGlobal(QPoint(0, mSelectMonth->height())))) 255 if(popup->exec(mSelectMonth->mapToGlobal(QPoint(0, mSelectMonth->height()))))
250 { 256 {
251 month = picker->getResult(); 257 month = picker->getResult();
252 emit monthSelected ( month ); 258 emit monthSelected ( month );
253 } else { 259 } else {
254 KNotifyClient::beep(); 260 KNotifyClient::beep();
255 } 261 }
256 delete popup; 262 delete popup;
257} 263}
258void NavigatorBar::selectDates( const KCal::DateList &dateList ) 264void NavigatorBar::selectDates( const KCal::DateList &dateList )
259{ 265{
260 if (dateList.count() > 0) { 266 if (dateList.count() > 0) {
261 QDate date = dateList.first(); 267 QDate date = dateList.first();
262 268
263 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem(); 269 const KCalendarSystem *calSys = KOGlobals::self()->calendarSystem();
264 270
265 // compute the label at the top of the navigator 271 // compute the label at the top of the navigator
266 QString dtstr = i18n(calSys->monthName( date )) + " '" + 272 QString dtstr = i18n(calSys->monthName( date )) + " '" +
267 QString::number( calSys->year( date ) ).right(2); 273 QString::number( calSys->year( date ) ).right(2);
268 274
269 mSelectMonth->setText( dtstr ); 275 mSelectMonth->setText( dtstr );
270 } 276 }
271} 277}
272 278