summaryrefslogtreecommitdiff
authorumopapisdn <umopapisdn>2003-03-22 00:35:37 (UTC)
committer umopapisdn <umopapisdn>2003-03-22 00:35:37 (UTC)
commit5d488108161a2dfe1377ac38226b5d8a3a438d11 (patch) (unidiff)
tree1c1931f4e0a03e95ba1d1324135d6bf703c8c4fa
parentebf65f250904e0619c10b69a0428fcc538ffc167 (diff)
downloadopie-5d488108161a2dfe1377ac38226b5d8a3a438d11.zip
opie-5d488108161a2dfe1377ac38226b5d8a3a438d11.tar.gz
opie-5d488108161a2dfe1377ac38226b5d8a3a438d11.tar.bz2
More informative dayview text:
An event that begins and ends on the same day is only mentioned by start and end time. An event that spans across multiple days, is also mentioned with start and end date.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebookday.cpp23
1 files changed, 9 insertions, 14 deletions
diff --git a/core/pim/datebook/datebookday.cpp b/core/pim/datebook/datebookday.cpp
index aaf3e16..a6a1be3 100644
--- a/core/pim/datebook/datebookday.cpp
+++ b/core/pim/datebook/datebookday.cpp
@@ -250,551 +250,546 @@ void DateBookDay::selectedDates( QDateTime &start, QDateTime &end )
250 sh=8; 250 sh=8;
251 eh=9; 251 eh=9;
252 } 252 }
253 253
254 start.setTime( QTime( sh, 0, 0 ) ); 254 start.setTime( QTime( sh, 0, 0 ) );
255 end.setTime( QTime( eh, 0, 0 ) ); 255 end.setTime( QTime( eh, 0, 0 ) );
256} 256}
257 257
258void DateBookDay::setDate( int y, int m, int d ) 258void DateBookDay::setDate( int y, int m, int d )
259{ 259{
260 header->setDate( y, m, d ); 260 header->setDate( y, m, d );
261 261
262 selectedWidget = 0; 262 selectedWidget = 0;
263} 263}
264 264
265void DateBookDay::setDate( QDate d) 265void DateBookDay::setDate( QDate d)
266{ 266{
267 header->setDate( d.year(), d.month(), d.day() ); 267 header->setDate( d.year(), d.month(), d.day() );
268 268
269 selectedWidget = 0; 269 selectedWidget = 0;
270} 270}
271 271
272void DateBookDay::dateChanged( int y, int m, int d ) 272void DateBookDay::dateChanged( int y, int m, int d )
273{ 273{
274 QDate date( y, m, d ); 274 QDate date( y, m, d );
275 if ( currDate == date ) 275 if ( currDate == date )
276 return; 276 return;
277 currDate.setYMD( y, m, d ); 277 currDate.setYMD( y, m, d );
278 relayoutPage(); 278 relayoutPage();
279 dayView()->clearSelection(); 279 dayView()->clearSelection();
280 QTableSelection ts; 280 QTableSelection ts;
281 281
282 if (jumpToCurTime && this->date() == QDate::currentDate()) 282 if (jumpToCurTime && this->date() == QDate::currentDate())
283 { 283 {
284 ts.init( QTime::currentTime().hour(), 0); 284 ts.init( QTime::currentTime().hour(), 0);
285 ts.expandTo( QTime::currentTime().hour(), 0); 285 ts.expandTo( QTime::currentTime().hour(), 0);
286 } else 286 } else
287 { 287 {
288 ts.init( startTime, 0 ); 288 ts.init( startTime, 0 );
289 ts.expandTo( startTime, 0 ); 289 ts.expandTo( startTime, 0 );
290 } 290 }
291 291
292 dayView()->addSelection( ts ); 292 dayView()->addSelection( ts );
293 293
294 selectedWidget = 0; 294 selectedWidget = 0;
295 295
296} 296}
297 297
298void DateBookDay::redraw() 298void DateBookDay::redraw()
299{ 299{
300 if ( isUpdatesEnabled() ) 300 if ( isUpdatesEnabled() )
301 relayoutPage(); 301 relayoutPage();
302} 302}
303 303
304void DateBookDay::getEvents() 304void DateBookDay::getEvents()
305{ 305{
306 widgetList.clear(); 306 widgetList.clear();
307 307
308 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate, 308 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents( currDate,
309 currDate ); 309 currDate );
310 QValueListIterator<EffectiveEvent> it; 310 QValueListIterator<EffectiveEvent> it;
311 for ( it = eventList.begin(); it != eventList.end(); ++it ) { 311 for ( it = eventList.begin(); it != eventList.end(); ++it ) {
312 DateBookDayWidget* w = new DateBookDayWidget( *it, this ); 312 DateBookDayWidget* w = new DateBookDayWidget( *it, this );
313 connect( w, SIGNAL( deleteMe( const Event & ) ), 313 connect( w, SIGNAL( deleteMe( const Event & ) ),
314 this, SIGNAL( removeEvent( const Event & ) ) ); 314 this, SIGNAL( removeEvent( const Event & ) ) );
315 connect( w, SIGNAL( editMe( const Event & ) ), 315 connect( w, SIGNAL( editMe( const Event & ) ),
316 this, SIGNAL( editEvent( const Event & ) ) ); 316 this, SIGNAL( editEvent( const Event & ) ) );
317 connect( w, SIGNAL( beamMe( const Event & ) ), 317 connect( w, SIGNAL( beamMe( const Event & ) ),
318 this, SIGNAL( beamEvent( const Event & ) ) ); 318 this, SIGNAL( beamEvent( const Event & ) ) );
319 widgetList.append( w ); 319 widgetList.append( w );
320 } 320 }
321 321
322} 322}
323 323
324static int place( const DateBookDayWidget *item, bool *used, int maxn ) 324static int place( const DateBookDayWidget *item, bool *used, int maxn )
325{ 325{
326 int place = 0; 326 int place = 0;
327 int start = item->event().start().hour(); 327 int start = item->event().start().hour();
328 QTime e = item->event().end(); 328 QTime e = item->event().end();
329 int end = e.hour(); 329 int end = e.hour();
330 if ( e.minute() < 5 ) 330 if ( e.minute() < 5 )
331 end--; 331 end--;
332 if ( end < start ) 332 if ( end < start )
333 end = start; 333 end = start;
334 while ( place < maxn ) { 334 while ( place < maxn ) {
335 bool free = TRUE; 335 bool free = TRUE;
336 int s = start; 336 int s = start;
337 while( s <= end ) { 337 while( s <= end ) {
338 if ( used[10*s+place] ) { 338 if ( used[10*s+place] ) {
339 free = FALSE; 339 free = FALSE;
340 break; 340 break;
341 } 341 }
342 s++; 342 s++;
343 } 343 }
344 if ( free ) break; 344 if ( free ) break;
345 place++; 345 place++;
346 } 346 }
347 if ( place == maxn ) { 347 if ( place == maxn ) {
348 return -1; 348 return -1;
349 } 349 }
350 while( start <= end ) { 350 while( start <= end ) {
351 used[10*start+place] = TRUE; 351 used[10*start+place] = TRUE;
352 start++; 352 start++;
353 } 353 }
354 return place; 354 return place;
355} 355}
356 356
357 357
358void DateBookDay::relayoutPage( bool fromResize ) 358void DateBookDay::relayoutPage( bool fromResize )
359{ 359{
360 setUpdatesEnabled( FALSE ); 360 setUpdatesEnabled( FALSE );
361 if ( !fromResize ) 361 if ( !fromResize )
362 getEvents(); // no need we already have them! 362 getEvents(); // no need we already have them!
363 363
364 widgetList.sort(); 364 widgetList.sort();
365 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning 365 //sorts the widgetList by the heights of the widget so that the tallest widgets are at the beginning
366 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view 366 //this is needed for the simple algo below to work correctly, otherwise some widgets would be drawn outside the view
367 367
368 int wCount = widgetList.count(); 368 int wCount = widgetList.count();
369 int wid = view->columnWidth(0)-1; 369 int wid = view->columnWidth(0)-1;
370 int wd; 370 int wd;
371 int n = 1; 371 int n = 1;
372 372
373 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget 373 QArray<int> anzIntersect(wCount); //this stores the number of maximal intersections of each widget
374 374
375 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++); 375 for (int i = 0; i<wCount; anzIntersect[i] = 1, i++);
376 376
377 if ( wCount < 20 ) { 377 if ( wCount < 20 ) {
378 378
379 QArray<QRect> geometries(wCount); 379 QArray<QRect> geometries(wCount);
380 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector 380 for (int i = 0; i < wCount; geometries[i] = widgetList.at(i)->geometry(), i++);//stores geometry for each widget in vector
381 381
382 for ( int i = 0; i < wCount; i++) 382 for ( int i = 0; i < wCount; i++)
383 { 383 {
384 QValueList<int> intersectedWidgets; 384 QValueList<int> intersectedWidgets;
385 385
386 //find all widgets intersecting with widgetList.at(i) 386 //find all widgets intersecting with widgetList.at(i)
387 for ( int j = 0; j < wCount; j++) 387 for ( int j = 0; j < wCount; j++)
388 if (i != j) 388 if (i != j)
389 if (geometries[j].intersects(geometries[i])) 389 if (geometries[j].intersects(geometries[i]))
390 intersectedWidgets.append(j); 390 intersectedWidgets.append(j);
391 391
392 //for each of these intersecting widgets find out how many widgets are they intersecting with 392 //for each of these intersecting widgets find out how many widgets are they intersecting with
393 for ( uint j = 0; j < intersectedWidgets.count(); j++) 393 for ( uint j = 0; j < intersectedWidgets.count(); j++)
394 { 394 {
395 QArray<int> inter(wCount); 395 QArray<int> inter(wCount);
396 inter[j]=1; 396 inter[j]=1;
397 397
398 if (intersectedWidgets[j] != -1) 398 if (intersectedWidgets[j] != -1)
399 for ( uint k = j; k < intersectedWidgets.count(); k++) 399 for ( uint k = j; k < intersectedWidgets.count(); k++)
400 if (j != k && intersectedWidgets[k] != -1) 400 if (j != k && intersectedWidgets[k] != -1)
401 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]])) 401 if (geometries[intersectedWidgets[k]].intersects(geometries[intersectedWidgets[j]]))
402 { 402 {
403 inter[j]++; 403 inter[j]++;
404 intersectedWidgets[k] = -1; 404 intersectedWidgets[k] = -1;
405 } 405 }
406 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1; 406 if (inter[j] > anzIntersect[i]) anzIntersect[i] = inter[j] + 1;
407 } 407 }
408 408
409 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++; 409 if (anzIntersect[i] == 1 && intersectedWidgets.count()) anzIntersect[i]++;
410 } 410 }
411 411
412 412
413 for ( int i = 0; i < wCount; i++) { 413 for ( int i = 0; i < wCount; i++) {
414 DateBookDayWidget *w = widgetList.at(i); 414 DateBookDayWidget *w = widgetList.at(i);
415 QRect geom = w->geometry(); 415 QRect geom = w->geometry();
416 416
417 geom.setX( 0 ); 417 geom.setX( 0 );
418 418
419 wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0); 419 wd = (view->columnWidth(0)-1) / anzIntersect[i] - (anzIntersect[i]>1?2:0);
420 420
421 geom.setWidth( wd ); 421 geom.setWidth( wd );
422 422
423 while ( intersects( w, geom ) ) { 423 while ( intersects( w, geom ) ) {
424 geom.moveBy( wd + 2 + 1, 0 ); 424 geom.moveBy( wd + 2 + 1, 0 );
425 } 425 }
426 w->setGeometry( geom ); 426 w->setGeometry( geom );
427 } 427 }
428 428
429 if (jumpToCurTime && this->date() == QDate::currentDate()) 429 if (jumpToCurTime && this->date() == QDate::currentDate())
430 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour 430 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
431 else 431 else
432 view->setContentsPos( 0, startTime * view->rowHeight(0) ); 432 view->setContentsPos( 0, startTime * view->rowHeight(0) );
433 433
434 434
435 } else { 435 } else {
436 436
437 437
438 int hours[24]; 438 int hours[24];
439 memset( hours, 0, 24*sizeof( int ) ); 439 memset( hours, 0, 24*sizeof( int ) );
440 bool overFlow = FALSE; 440 bool overFlow = FALSE;
441 for ( int i = 0; i < wCount; i++ ) { 441 for ( int i = 0; i < wCount; i++ ) {
442 DateBookDayWidget *w = widgetList.at(i); 442 DateBookDayWidget *w = widgetList.at(i);
443 int start = w->event().start().hour(); 443 int start = w->event().start().hour();
444 QTime e = w->event().end(); 444 QTime e = w->event().end();
445 int end = e.hour(); 445 int end = e.hour();
446 if ( e.minute() < 5 ) 446 if ( e.minute() < 5 )
447 end--; 447 end--;
448 if ( end < start ) 448 if ( end < start )
449 end = start; 449 end = start;
450 while( start <= end ) { 450 while( start <= end ) {
451 hours[start]++; 451 hours[start]++;
452 if ( hours[start] >= 10 ) 452 if ( hours[start] >= 10 )
453 overFlow = TRUE; 453 overFlow = TRUE;
454 ++start; 454 ++start;
455 } 455 }
456 if ( overFlow ) 456 if ( overFlow )
457 break; 457 break;
458 } 458 }
459 for ( int i = 0; i < 24; i++ ) { 459 for ( int i = 0; i < 24; i++ ) {
460 n = QMAX( n, hours[i] ); 460 n = QMAX( n, hours[i] );
461 } 461 }
462 wid = ( view->columnWidth(0)-1 ) / n; 462 wid = ( view->columnWidth(0)-1 ) / n;
463 463
464 bool used[24*10]; 464 bool used[24*10];
465 memset( used, FALSE, 24*10*sizeof( bool ) ); 465 memset( used, FALSE, 24*10*sizeof( bool ) );
466 466
467 for ( int i = 0; i < wCount; i++ ) { 467 for ( int i = 0; i < wCount; i++ ) {
468 DateBookDayWidget *w = widgetList.at(i); 468 DateBookDayWidget *w = widgetList.at(i);
469 int xp = place( w, used, n ); 469 int xp = place( w, used, n );
470 if ( xp != -1 ) { 470 if ( xp != -1 ) {
471 QRect geom = w->geometry(); 471 QRect geom = w->geometry();
472 geom.setX( xp*(wid+2) ); 472 geom.setX( xp*(wid+2) );
473 geom.setWidth( wid ); 473 geom.setWidth( wid );
474 w->setGeometry( geom ); 474 w->setGeometry( geom );
475 } 475 }
476 } 476 }
477 477
478 if (jumpToCurTime && this->date() == QDate::currentDate()) 478 if (jumpToCurTime && this->date() == QDate::currentDate())
479 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour 479 view->setContentsPos( 0, QTime::currentTime().hour() * view->rowHeight(0) ); //set listview to current hour
480 else 480 else
481 view->setContentsPos( 0, startTime * view->rowHeight(0) ); 481 view->setContentsPos( 0, startTime * view->rowHeight(0) );
482 } 482 }
483 483
484 timeMarker->setTime( QTime::currentTime() );//display timeMarker 484 timeMarker->setTime( QTime::currentTime() );//display timeMarker
485 timeMarker->raise(); //on top of all widgets 485 timeMarker->raise(); //on top of all widgets
486 if (this->date() == QDate::currentDate()) //only show timeMarker on current day 486 if (this->date() == QDate::currentDate()) //only show timeMarker on current day
487 timeMarker->show(); else timeMarker->hide(); 487 timeMarker->show(); else timeMarker->hide();
488 488
489 setUpdatesEnabled( TRUE ); 489 setUpdatesEnabled( TRUE );
490 return; 490 return;
491} 491}
492 492
493DateBookDayWidget *DateBookDay::intersects( const DateBookDayWidget *item, const QRect &geom ) 493DateBookDayWidget *DateBookDay::intersects( const DateBookDayWidget *item, const QRect &geom )
494{ 494{
495 int i = 0; 495 int i = 0;
496 DateBookDayWidget *w = widgetList.at(i); 496 DateBookDayWidget *w = widgetList.at(i);
497 int wCount = widgetList.count(); 497 int wCount = widgetList.count();
498 while ( i < wCount && w != item ) { 498 while ( i < wCount && w != item ) {
499 if ( w->geometry().intersects( geom ) ) { 499 if ( w->geometry().intersects( geom ) ) {
500 return w; 500 return w;
501 } 501 }
502 w = widgetList.at(++i); 502 w = widgetList.at(++i);
503 } 503 }
504 504
505 return 0; 505 return 0;
506} 506}
507 507
508 508
509QDate DateBookDay::date() const 509QDate DateBookDay::date() const
510{ 510{
511 return currDate; 511 return currDate;
512} 512}
513 513
514void DateBookDay::setStartViewTime( int startHere ) 514void DateBookDay::setStartViewTime( int startHere )
515{ 515{
516 startTime = startHere; 516 startTime = startHere;
517 dayView()->clearSelection(); 517 dayView()->clearSelection();
518 QTableSelection ts; 518 QTableSelection ts;
519 519
520 if (jumpToCurTime && this->date() == QDate::currentDate())//this should probably be in datebook.cpp where it's called? 520 if (jumpToCurTime && this->date() == QDate::currentDate())//this should probably be in datebook.cpp where it's called?
521 { 521 {
522 ts.init( QTime::currentTime().hour(), 0); 522 ts.init( QTime::currentTime().hour(), 0);
523 ts.expandTo( QTime::currentTime().hour(), 0); 523 ts.expandTo( QTime::currentTime().hour(), 0);
524 } else 524 } else
525 { 525 {
526 ts.init( startTime, 0 ); 526 ts.init( startTime, 0 );
527 ts.expandTo( startTime, 0 ); 527 ts.expandTo( startTime, 0 );
528 } 528 }
529 529
530 dayView()->addSelection( ts ); 530 dayView()->addSelection( ts );
531} 531}
532 532
533int DateBookDay::startViewTime() const 533int DateBookDay::startViewTime() const
534{ 534{
535 return startTime; 535 return startTime;
536} 536}
537 537
538void DateBookDay::slotWeekChanged( bool bStartOnMonday ) 538void DateBookDay::slotWeekChanged( bool bStartOnMonday )
539{ 539{
540 header->setStartOfWeek( bStartOnMonday ); 540 header->setStartOfWeek( bStartOnMonday );
541 // redraw(); 541 // redraw();
542} 542}
543 543
544void DateBookDay::keyPressEvent(QKeyEvent *e) 544void DateBookDay::keyPressEvent(QKeyEvent *e)
545{ 545{
546 switch(e->key()) { 546 switch(e->key()) {
547 case Key_Up: 547 case Key_Up:
548 view->moveUp(); 548 view->moveUp();
549 break; 549 break;
550 case Key_Down: 550 case Key_Down:
551 view->moveDown(); 551 view->moveDown();
552 break; 552 break;
553 case Key_Left: 553 case Key_Left:
554 setDate(QDate(currDate).addDays(-1)); 554 setDate(QDate(currDate).addDays(-1));
555 break; 555 break;
556 case Key_Right: 556 case Key_Right:
557 setDate(QDate(currDate).addDays(1)); 557 setDate(QDate(currDate).addDays(1));
558 break; 558 break;
559 default: 559 default:
560 e->ignore(); 560 e->ignore();
561 } 561 }
562} 562}
563 563
564//=========================================================================== 564//===========================================================================
565 565
566DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e, 566DateBookDayWidget::DateBookDayWidget( const EffectiveEvent &e,
567 DateBookDay *db ) 567 DateBookDay *db )
568 : QWidget( db->dayView()->viewport() ), ev( e ), dateBook( db ) 568 : QWidget( db->dayView()->viewport() ), ev( e ), dateBook( db )
569{ 569{
570 570
571 571
572 // why would someone use "<"? Oh well, fix it up... 572 // why would someone use "<"? Oh well, fix it up...
573 // I wonder what other things may be messed up... 573 // I wonder what other things may be messed up...
574 QString strDesc = ev.description(); 574 QString strDesc = ev.description();
575 int where = strDesc.find( "<" ); 575 int where = strDesc.find( "<" );
576 while ( where != -1 ) { 576 while ( where != -1 ) {
577 strDesc.remove( where, 1 ); 577 strDesc.remove( where, 1 );
578 strDesc.insert( where, "&#60;" ); 578 strDesc.insert( where, "&#60;" );
579 where = strDesc.find( "<", where ); 579 where = strDesc.find( "<", where );
580 } 580 }
581 581
582 QString strCat; 582 QString strCat;
583 // ### Fix later... 583 // ### Fix later...
584// QString strCat = ev.category(); 584// QString strCat = ev.category();
585// where = strCat.find( "<" ); 585// where = strCat.find( "<" );
586// while ( where != -1 ) { 586// while ( where != -1 ) {
587 // strCat.remove( where, 1 ); 587 // strCat.remove( where, 1 );
588 // strCat.insert( where, "&#60;" ); 588 // strCat.insert( where, "&#60;" );
589 // where = strCat.find( "<", where ); 589 // where = strCat.find( "<", where );
590// } 590// }
591 591
592 QString strNote = ev.notes(); 592 QString strNote = ev.notes();
593 where = strNote.find( "<" ); 593 where = strNote.find( "<" );
594 while ( where != -1 ) { 594 while ( where != -1 ) {
595 strNote.remove( where, 1 ); 595 strNote.remove( where, 1 );
596 strNote.insert( where, "&#60;" ); 596 strNote.insert( where, "&#60;" );
597 where = strNote.find( "<", where ); 597 where = strNote.find( "<", where );
598 } 598 }
599 599
600 text = "<b>" + strDesc + "</b><br>" + "<i>"; 600 text = "<b>" + strDesc + "</b><br>" + "<i>";
601 if ( !strCat.isEmpty() ) { 601 if ( !strCat.isEmpty() ) {
602 text += strCat + "</i><br>"; 602 text += strCat + "</i><br>";
603 } 603 }
604 if (ev.event().type() == Event::Normal ) 604 if (ev.event().type() == Event::Normal )
605 setEventText( text ); 605 setEventText( text );
606 else 606 else
607 setAllDayText( text ); 607 setAllDayText( text );
608 608
609 text += "<br><br>" + strNote; 609 text += "<br><br>" + strNote;
610 610
611 setBackgroundMode( PaletteBase ); 611 setBackgroundMode( PaletteBase );
612 612
613 QTime start = ev.start(); 613 QTime start = ev.start();
614 QTime end = ev.end(); 614 QTime end = ev.end();
615 int y = start.hour()*60+start.minute(); 615 int y = start.hour()*60+start.minute();
616 int h = end.hour()*60+end.minute()-y; 616 int h = end.hour()*60+end.minute()-y;
617 int rh = dateBook->dayView()->rowHeight(0); 617 int rh = dateBook->dayView()->rowHeight(0);
618 y = y*rh/60; 618 y = y*rh/60;
619 h = h*rh/60; 619 h = h*rh/60;
620 if ( h < 3 ) { 620 if ( h < 3 ) {
621 h = 3; 621 h = 3;
622 } 622 }
623 geom.setY( y ); 623 geom.setY( y );
624 geom.setHeight( h ); 624 geom.setHeight( h );
625 geom.setX( 0 ); 625 geom.setX( 0 );
626 geom.setWidth(dateBook->dayView()->columnWidth(0)-1); 626 geom.setWidth(dateBook->dayView()->columnWidth(0)-1);
627 627
628} 628}
629void DateBookDayWidget::setAllDayText( QString &text ) { 629void DateBookDayWidget::setAllDayText( QString &text ) {
630 text += "<b>" + tr("This is an all day event.") + "</b><br>"; 630 text += "<b>" + tr("This is an all day event.") + "</b><br>";
631} 631}
632void DateBookDayWidget::setEventText( QString& text ) { 632void DateBookDayWidget::setEventText( QString& text ) {
633 bool whichClock = dateBook->dayView()->whichClock(); 633 bool whichClock = dateBook->dayView()->whichClock();
634 text += "<b>" + tr("Time") + "</b>: "; 634 if ( ev.startDate() != ev.endDate() ) {
635 if ( ev.startDate() != ev.date() ) { 635 text += "<b>" + tr("Start") + "</b>: ";
636 // multi-day event. Show start date 636 text += TimeString::timeString( ev.event().start().time(), whichClock, FALSE );
637 text += TimeString::longDateString( ev.startDate() ); 637 text += " - " + TimeString::longDateString( ev.startDate() ) + "<br>";
638 text += "<b>" + tr("End") + "</b>: ";
639 text += TimeString::timeString( ev.event().end().time(), whichClock, FALSE );
640 text += " - " + TimeString::longDateString( ev.endDate() ) + "<br>";
638 } else { 641 } else {
639 // Show start time. 642 text += "<b>" + tr("Time") + "</b>: ";
640 text += TimeString::timeString( ev.start(), whichClock, FALSE ); 643 text += TimeString::timeString( ev.start(), whichClock, FALSE );
641 } 644 text += "<b>" + tr(" - ") + "</b>";
642
643 text += "<b>" + tr(" - ") + "</b>";
644 if ( ev.endDate() != ev.date() ) {
645 // multi-day event. Show end date
646 text += TimeString::longDateString( ev.endDate() );
647 } else {
648 // Show end time.
649 text += TimeString::timeString( ev.end(), whichClock, FALSE ); 645 text += TimeString::timeString( ev.end(), whichClock, FALSE );
650 } 646 }
651
652} 647}
653 648
654DateBookDayWidget::~DateBookDayWidget() 649DateBookDayWidget::~DateBookDayWidget()
655{ 650{
656} 651}
657 652
658void DateBookDayWidget::paintEvent( QPaintEvent *e ) 653void DateBookDayWidget::paintEvent( QPaintEvent *e )
659{ 654{
660 QPainter p( this ); 655 QPainter p( this );
661 656
662 if (dateBook->getSelectedWidget() == this) 657 if (dateBook->getSelectedWidget() == this)
663 { 658 {
664 p.setBrush( QColor( 155, 240, 230 ) ); // selected item 659 p.setBrush( QColor( 155, 240, 230 ) ); // selected item
665 } else 660 } else
666 { 661 {
667 if (dateBook->date() == QDate::currentDate()) 662 if (dateBook->date() == QDate::currentDate())
668 { 663 {
669 QTime curTime = QTime::currentTime(); 664 QTime curTime = QTime::currentTime();
670 665
671 if (ev.end() < curTime) 666 if (ev.end() < curTime)
672 { 667 {
673 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive 668 p.setBrush( QColor( 180, 180, 180 ) ); // grey, inactive
674 } else 669 } else
675 { 670 {
676 //change color in dependence of the time till the event starts 671 //change color in dependence of the time till the event starts
677 int duration = curTime.secsTo(ev.start()); 672 int duration = curTime.secsTo(ev.start());
678 if (duration < 0) duration = 0; 673 if (duration < 0) duration = 0;
679 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift 674 int colChange = duration*160/86400; //86400: secs per day, 160: max color shift
680 675
681 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue 676 p.setBrush( QColor( 200-colChange, 200-colChange, 255 ) ); //blue
682 } 677 }
683 } else 678 } else
684 { 679 {
685 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date) 680 p.setBrush( QColor( 220, 220, 220 ) ); //light grey, inactive (not current date)
686 //perhaps make a distinction between future/past dates 681 //perhaps make a distinction between future/past dates
687 } 682 }
688 } 683 }
689 684
690 p.setPen( QColor(100, 100, 100) ); 685 p.setPen( QColor(100, 100, 100) );
691 p.drawRect(rect()); 686 p.drawRect(rect());
692 687
693 // p.drawRect(0,0, 5, height()); 688 // p.drawRect(0,0, 5, height());
694 689
695 int y = 0; 690 int y = 0;
696 int d = 0; 691 int d = 0;
697 692
698 if ( ev.event().hasAlarm() ) { 693 if ( ev.event().hasAlarm() ) {
699 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) ); 694 p.drawPixmap( width() - 16, 0, Resource::loadPixmap( "bell" ) );
700 y = 20; 695 y = 20;
701 d = 20; 696 d = 20;
702 } 697 }
703 698
704 if ( ev.event().hasRepeat() ) { 699 if ( ev.event().hasRepeat() ) {
705 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) ); 700 p.drawPixmap( width() - 16, y, Resource::loadPixmap( "repeat" ) );
706 d = 20; 701 d = 20;
707 y += 20; 702 y += 20;
708 } 703 }
709 704
710 QSimpleRichText rt( text, font() ); 705 QSimpleRichText rt( text, font() );
711 rt.setWidth( geom.width() - d - 6 ); 706 rt.setWidth( geom.width() - d - 6 );
712 rt.draw( &p, 7, 0, e->region(), colorGroup() ); 707 rt.draw( &p, 7, 0, e->region(), colorGroup() );
713} 708}
714 709
715void DateBookDayWidget::mousePressEvent( QMouseEvent *e ) 710void DateBookDayWidget::mousePressEvent( QMouseEvent *e )
716{ 711{
717 DateBookDayWidget *item; 712 DateBookDayWidget *item;
718 713
719 item = dateBook->getSelectedWidget(); 714 item = dateBook->getSelectedWidget();
720 if (item) item->update(); 715 if (item) item->update();
721 716
722 dateBook->setSelectedWidget(this); 717 dateBook->setSelectedWidget(this);
723 update(); 718 update();
724 dateBook->repaint(); 719 dateBook->repaint();
725 720
726 QPopupMenu m; 721 QPopupMenu m;
727 m.insertItem( tr( "Edit" ), 1 ); 722 m.insertItem( tr( "Edit" ), 1 );
728 m.insertItem( tr( "Delete" ), 2 ); 723 m.insertItem( tr( "Delete" ), 2 );
729 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 ); 724 if(Ir::supported()) m.insertItem( tr( "Beam" ), 3 );
730 int r = m.exec( e->globalPos() ); 725 int r = m.exec( e->globalPos() );
731 if ( r == 1 ) { 726 if ( r == 1 ) {
732 emit editMe( ev.event() ); 727 emit editMe( ev.event() );
733 } else if ( r == 2 ) { 728 } else if ( r == 2 ) {
734 emit deleteMe( ev.event() ); 729 emit deleteMe( ev.event() );
735 } else if ( r == 3 ) { 730 } else if ( r == 3 ) {
736 emit beamMe( ev.event() ); 731 emit beamMe( ev.event() );
737 } 732 }
738} 733}
739 734
740void DateBookDayWidget::setGeometry( const QRect &r ) 735void DateBookDayWidget::setGeometry( const QRect &r )
741{ 736{
742 geom = r; 737 geom = r;
743 setFixedSize( r.width()+1, r.height()+1 ); 738 setFixedSize( r.width()+1, r.height()+1 );
744 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 739 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
745 show(); 740 show();
746} 741}
747 742
748 743
749//--------------------------------------------------------------------------------------------- 744//---------------------------------------------------------------------------------------------
750//--------------------------------------------------------------------------------------------- 745//---------------------------------------------------------------------------------------------
751 746
752 747
753DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db ) 748DateBookDayTimeMarker::DateBookDayTimeMarker( DateBookDay *db )
754 : QWidget( db->dayView()->viewport() ), dateBook( db ) 749 : QWidget( db->dayView()->viewport() ), dateBook( db )
755{ 750{
756 setBackgroundMode( PaletteBase ); 751 setBackgroundMode( PaletteBase );
757} 752}
758 753
759DateBookDayTimeMarker::~DateBookDayTimeMarker() 754DateBookDayTimeMarker::~DateBookDayTimeMarker()
760{ 755{
761} 756}
762 757
763void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ ) 758void DateBookDayTimeMarker::paintEvent( QPaintEvent */*e*/ )
764{ 759{
765 QPainter p( this ); 760 QPainter p( this );
766 p.setBrush( QColor( 255, 0, 0 ) ); 761 p.setBrush( QColor( 255, 0, 0 ) );
767 762
768 QPen pen; 763 QPen pen;
769 pen.setStyle(NoPen); 764 pen.setStyle(NoPen);
770 765
771 p.setPen( pen ); 766 p.setPen( pen );
772 p.drawRect(rect()); 767 p.drawRect(rect());
773} 768}
774 769
775void DateBookDayTimeMarker::setTime( const QTime &t ) 770void DateBookDayTimeMarker::setTime( const QTime &t )
776{ 771{
777 int y = t.hour()*60+t.minute(); 772 int y = t.hour()*60+t.minute();
778 int rh = dateBook->dayView()->rowHeight(0); 773 int rh = dateBook->dayView()->rowHeight(0);
779 y = y*rh/60; 774 y = y*rh/60;
780 775
781 geom.setX( 0 ); 776 geom.setX( 0 );
782 777
783 int x = dateBook->dayView()->columnWidth(0)-1; 778 int x = dateBook->dayView()->columnWidth(0)-1;
784 geom.setWidth( x ); 779 geom.setWidth( x );
785 780
786 geom.setY( y ); 781 geom.setY( y );
787 geom.setHeight( 1 ); 782 geom.setHeight( 1 );
788 783
789 setGeometry( geom ); 784 setGeometry( geom );
790 785
791 time = t; 786 time = t;
792} 787}
793 788
794void DateBookDayTimeMarker::setGeometry( const QRect &r ) 789void DateBookDayTimeMarker::setGeometry( const QRect &r )
795{ 790{
796 geom = r; 791 geom = r;
797 setFixedSize( r.width()+1, r.height()+1 ); 792 setFixedSize( r.width()+1, r.height()+1 );
798 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 ); 793 dateBook->dayView()->moveChild( this, r.x(), r.y()-1 );
799 show(); 794 show();
800} 795}