summaryrefslogtreecommitdiff
authorerik <erik>2007-01-29 21:39:43 (UTC)
committer erik <erik>2007-01-29 21:39:43 (UTC)
commitb2c306a99b8dc82c981390f02db859149fac8cf0 (patch) (unidiff)
tree5d3b06d7534611b8a6ea56f592d95b59b18a218c
parent597643805ce89c1237035e7f38ec953cfc0d080f (diff)
downloadopie-b2c306a99b8dc82c981390f02db859149fac8cf0.zip
opie-b2c306a99b8dc82c981390f02db859149fac8cf0.tar.gz
opie-b2c306a99b8dc82c981390f02db859149fac8cf0.tar.bz2
Reformat according to current Opie coding style.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebookweek.cpp162
1 files changed, 92 insertions, 70 deletions
diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp
index ce0b10b..8caa827 100644
--- a/core/pim/datebook/datebookweek.cpp
+++ b/core/pim/datebook/datebookweek.cpp
@@ -336,352 +336,374 @@ void DateBookWeekView::resizeEvent( QResizeEvent *e )
336 header->setGeometry( 0, 0, avail, header->sizeHint().height() ); 336 header->setGeometry( 0, 0, avail, header->sizeHint().height() );
337 setMargins( 0, header->height(), 0, 0 ); 337 setMargins( 0, header->height(), 0, 0 );
338 338
339 339
340 header->resizeSection( 0, hourWidth ); 340 header->resizeSection( 0, hourWidth );
341 int sw = (avail - hourWidth) / 7; 341 int sw = (avail - hourWidth) / 7;
342 for ( int i = 1; i < 7; i++ ) 342 for ( int i = 1; i < 7; i++ )
343 header->resizeSection( i, sw ); 343 header->resizeSection( i, sw );
344 header->resizeSection( 7, avail - hourWidth - sw*6 ); 344 header->resizeSection( 7, avail - hourWidth - sw*6 );
345} 345}
346 346
347void DateBookWeekView::setStartOfWeek( bool bStartOnMonday ) 347void DateBookWeekView::setStartOfWeek( bool bStartOnMonday )
348{ 348{
349 bOnMonday = bStartOnMonday; 349 bOnMonday = bStartOnMonday;
350 initNames(); 350 initNames();
351} 351}
352 352
353//------------------------------------------------------------------- 353//-------------------------------------------------------------------
354 354
355DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDBHoliday *newDB, 355DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDBHoliday *newDB,
356 QWidget *parent, const char *name ) 356 QWidget *parent, const char *name )
357 : QWidget( parent, name ), 357 : QWidget( parent, name ),
358 db( newDB ), 358 db( newDB ),
359 startTime( 0 ), 359 startTime( 0 ),
360 ampm( ap ), 360 ampm( ap ),
361 bStartOnMonday( startOnMonday ) 361 bStartOnMonday( startOnMonday )
362{ 362{
363 setFocusPolicy(StrongFocus); 363 setFocusPolicy(StrongFocus);
364 QVBoxLayout *vb = new QVBoxLayout( this ); 364 QVBoxLayout *vb = new QVBoxLayout( this );
365 header = new DateBookWeekHeader( bStartOnMonday, this ); 365 header = new DateBookWeekHeader( bStartOnMonday, this );
366 view = new DateBookWeekView( ampm, startOnMonday, this ); 366 view = new DateBookWeekView( ampm, startOnMonday, this );
367 vb->addWidget( header ); 367 vb->addWidget( header );
368 vb->addWidget( view ); 368 vb->addWidget( view );
369 369
370 lblDesc = new QLabel( this, "event label" ); 370 lblDesc = new QLabel( this, "event label" );
371 lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box ); 371 lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box );
372 lblDesc->setBackgroundColor( yellow ); 372 lblDesc->setBackgroundColor( yellow );
373 lblDesc->hide(); 373 lblDesc->hide();
374 374
375 tHide = new QTimer( this ); 375 tHide = new QTimer( this );
376 376
377 connect( view, SIGNAL( showDay(int) ), this, SLOT( showDay(int) ) ); 377 connect( view, SIGNAL( showDay(int) ), this, SLOT( showDay(int) ) );
378 connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)), this, SLOT(slotShowEvent(const EffectiveEvent&)) ); 378 connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)), this, SLOT(slotShowEvent(const EffectiveEvent&)) );
379 connect( view, SIGNAL(signalHideEvent()), this, SLOT(slotHideEvent()) ); 379 connect( view, SIGNAL(signalHideEvent()), this, SLOT(slotHideEvent()) );
380 connect( header, SIGNAL( dateChanged(QDate&) ), this, SLOT( dateChanged(QDate&) ) ); 380 connect( header, SIGNAL( dateChanged(QDate&) ), this, SLOT( dateChanged(QDate&) ) );
381 connect( tHide, SIGNAL( timeout() ), lblDesc, SLOT( hide() ) ); 381 connect( tHide, SIGNAL( timeout() ), lblDesc, SLOT( hide() ) );
382 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) ); 382 connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
383 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotClockChanged(bool))); 383 connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotClockChanged(bool)));
384 setDate(QDate::currentDate()); 384 setDate(QDate::currentDate());
385} 385}
386 386
387void DateBookWeek::keyPressEvent(QKeyEvent *e) 387void DateBookWeek::keyPressEvent(QKeyEvent *e)
388{ 388{
389 switch(e->key()) { 389 switch(e->key()) {
390 case Key_Up: 390 case Key_Up:
391 view->scrollBy(0, -20); 391 view->scrollBy(0, -20);
392 break; 392 break;
393 case Key_Down: 393 case Key_Down:
394 view->scrollBy(0, 20); 394 view->scrollBy(0, 20);
395 break; 395 break;
396 case Key_Left: 396 case Key_Left:
397 setDate(date().addDays(-7)); 397 setDate(date().addDays(-7));
398 break; 398 break;
399 case Key_Right: 399 case Key_Right:
400 setDate(date().addDays(7)); 400 setDate(date().addDays(7));
401 break; 401 break;
402 default: 402 default:
403 e->ignore(); 403 e->ignore();
404 } 404 }
405} 405}
406 406
407void DateBookWeek::showDay( int day ) 407void DateBookWeek::showDay( int day )
408{ 408{
409 QDate d=bdate; 409 QDate d=bdate;
410 410
411 // Calculate offset to first day of week. 411 // Calculate offset to first day of week.
412 int dayoffset=d.dayOfWeek() % 7; 412 int dayoffset=d.dayOfWeek() % 7;
413 413
414 if(bStartOnMonday) dayoffset--; 414 if(bStartOnMonday) dayoffset--;
415 415
416 day--; 416 day--;
417 d=d.addDays(day-dayoffset); 417 d=d.addDays(day-dayoffset);
418 emit showDate( d.year(), d.month(), d.day() ); 418 emit showDate( d.year(), d.month(), d.day() );
419} 419}
420 420
421void DateBookWeek::setDate( int y, int m, int d ) 421void DateBookWeek::setDate( int y, int m, int d )
422{ 422{
423 setDate(QDate(y, m, d)); 423 setDate(QDate(y, m, d));
424} 424}
425 425
426void DateBookWeek::setDate(QDate newdate) 426void DateBookWeek::setDate(QDate newdate)
427{ 427{
428 bdate=newdate; 428 bdate=newdate;
429 dow = newdate.dayOfWeek(); 429 dow = newdate.dayOfWeek();
430 header->setDate( newdate ); 430 header->setDate( newdate );
431} 431}
432 432
433void DateBookWeek::dateChanged( QDate &newdate ) 433void DateBookWeek::dateChanged( QDate &newdate )
434{ 434{
435 bdate=newdate; 435 bdate=newdate;
436 getEvents(); 436 getEvents();
437} 437}
438 438
439QDate DateBookWeek::date() const 439QDate DateBookWeek::date() const
440{ 440{
441 return bdate; 441 return bdate;
442} 442}
443 443
444void DateBookWeek::getEvents() 444void DateBookWeek::getEvents()
445{ 445{
446 QDate startWeek = weekDate(); 446 QDate startWeek = weekDate();
447 447
448 QDate endWeek = startWeek.addDays( 6 ); 448 QDate endWeek = startWeek.addDays( 6 );
449 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek, endWeek); 449 QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek, endWeek);
450 view->showEvents( eventList ); 450 view->showEvents( eventList );
451 view->moveToHour( startTime ); 451 view->moveToHour( startTime );
452} 452}
453 453
454void DateBookWeek::generateAllDayTooltext( QString& text ) { 454void DateBookWeek::generateAllDayTooltext( QString& text ) {
455 text += "<b>" + tr("This is an all day event.") + "</b><br>"; 455 text += "<b>" + tr("This is an all day event.") + "</b><br>";
456} 456}
457 457
458void DateBookWeek::generateNormalTooltext( QString& str, const EffectiveEvent &ev ) { 458void DateBookWeek::generateNormalTooltext( QString& str, const EffectiveEvent &ev ) {
459 str += "<b>" + QObject::tr("Start") + "</b>: "; 459 str += "<b>" + QObject::tr("Start") + "</b>: ";
460 str += TimeString::timeString( ev.event().start().time(), ampm, FALSE ); 460 str += TimeString::timeString( ev.event().start().time(), ampm, FALSE );
461 if( ev.startDate()!=ev.endDate() ) { 461 if( ev.startDate()!=ev.endDate() ) {
462 str += " <i>" + TimeString::longDateString( ev.startDate() )+"</i>"; 462 str += " <i>" + TimeString::longDateString( ev.startDate() )+"</i>";
463 } 463 }
464 str += "<br>"; 464 str += "<br>";
465 str += "<b>" + QObject::tr("End") + "</b>: "; 465 str += "<b>" + QObject::tr("End") + "</b>: ";
466 str += TimeString::timeString( ev.event().end().time(), ampm, FALSE ); 466 str += TimeString::timeString( ev.event().end().time(), ampm, FALSE );
467 if( ev.startDate()!=ev.endDate() ) { 467 if( ev.startDate()!=ev.endDate() ) {
468 str += " <i>" + TimeString::longDateString( ev.endDate() ) + "</i>"; 468 str += " <i>" + TimeString::longDateString( ev.endDate() ) + "</i>";
469 } 469 }
470} 470}
471 471
472void DateBookWeek::slotShowEvent( const EffectiveEvent &ev ) 472void DateBookWeek::slotShowEvent( const EffectiveEvent &ev )
473{ 473{
474 if ( tHide->isActive() ) 474 if ( tHide->isActive() )
475 tHide->stop(); 475 tHide->stop();
476 476
477 // why would someone use "<"? Oh well, fix it up... 477 // why would someone use "<"? Oh well, fix it up...
478 // I wonder what other things may be messed up... 478 // I wonder what other things may be messed up...
479 QString strDesc = ev.description(); 479 QString strDesc = ev.description();
480 int where = strDesc.find( "<" ); 480 int where = strDesc.find( "<" );
481 while ( where != -1 ) { 481 while ( where != -1 ) {
482 strDesc.remove( where, 1 ); 482 strDesc.remove( where, 1 );
483 strDesc.insert( where, "&#60;" ); 483 strDesc.insert( where, "&#60;" );
484 where = strDesc.find( "<", where ); 484 where = strDesc.find( "<", where );
485 } 485 }
486 486
487 QString strCat; 487 QString strCat;
488 // ### FIX later... 488 // ### FIX later...
489// QString strCat = ev.category(); 489// QString strCat = ev.category();
490// where = strCat.find( "<" ); 490// where = strCat.find( "<" );
491// while ( where != -1 ) { 491// while ( where != -1 ) {
492// strCat.remove( where, 1 ); 492// strCat.remove( where, 1 );
493// strCat.insert( where, "&#60;" ); 493// strCat.insert( where, "&#60;" );
494// where = strCat.find( "<", where ); 494// where = strCat.find( "<", where );
495// } 495// }
496 496
497 QString strLocation = ev.location(); 497 QString strLocation = ev.location();
498 while ( where != -1 ) { 498 while ( where != -1 ) {
499 strLocation.remove( where, 1 ); 499 strLocation.remove( where, 1 );
500 strLocation.insert( where, "&#60;" ); 500 strLocation.insert( where, "&#60;" );
501 where = strLocation.find( "<", where ); 501 where = strLocation.find( "<", where );
502 } 502 }
503 503
504 QString strNote = ev.notes(); 504 QString strNote = ev.notes();
505 where = strNote.find( "<" ); 505 where = strNote.find( "<" );
506 while ( where != -1 ) { 506 while ( where != -1 ) {
507 strNote.remove( where, 1 ); 507 strNote.remove( where, 1 );
508 strNote.insert( where, "&#60;" ); 508 strNote.insert( where, "&#60;" );
509 where = strNote.find( "<", where ); 509 where = strNote.find( "<", where );
510 } 510 }
511 511
512 QString str = "<b>" + strDesc + "</b><br>" 512 QString str = "<b>" + strDesc + "</b><br>"
513 + strLocation + "<br>" 513 + strLocation + "<br>"
514 + "<i>" + strCat + "</i>" 514 + "<i>" + strCat + "</i>"
515 + "<br>" + TimeString::longDateString( ev.date() ) 515 + "<br>" + TimeString::longDateString( ev.date() )
516 + "<br>"; 516 + "<br>";
517 517
518 if (ev.event().type() == Event::Normal ) 518 if (ev.event().type() == Event::Normal )
519 generateNormalTooltext( str, ev ); 519 generateNormalTooltext( str, ev );
520 else 520 else
521 generateAllDayTooltext( str ); 521 generateAllDayTooltext( str );
522 522
523 str += "<br><br>" + strNote; 523 str += "<br><br>" + strNote;
524 524
525 lblDesc->setText( str ); 525 lblDesc->setText( str );
526 lblDesc->resize( lblDesc->sizeHint() ); 526 lblDesc->resize( lblDesc->sizeHint() );
527 // move the label so it is "centerd" horizontally... 527 // move the label so it is "centerd" horizontally...
528 lblDesc->move( QMAX(0,(width() - lblDesc->width()) / 2), 0 ); 528 lblDesc->move( QMAX(0,(width() - lblDesc->width()) / 2), 0 );
529 lblDesc->show(); 529 lblDesc->show();
530} 530}
531 531
532void DateBookWeek::slotHideEvent() 532void DateBookWeek::slotHideEvent()
533{ 533{
534 tHide->start( 2000, true ); 534 tHide->start( 2000, true );
535} 535}
536 536
537void DateBookWeek::setStartViewTime( int startHere ) 537void DateBookWeek::setStartViewTime( int startHere )
538{ 538{
539 startTime = startHere; 539 startTime = startHere;
540 view->moveToHour( startTime ); 540 view->moveToHour( startTime );
541} 541}
542 542
543int DateBookWeek::startViewTime() const 543int DateBookWeek::startViewTime() const
544{ 544{
545 return startTime; 545 return startTime;
546} 546}
547 547
548void DateBookWeek::redraw() 548void DateBookWeek::redraw()
549{ 549{
550 getEvents(); 550 getEvents();
551} 551}
552 552
553void DateBookWeek::slotYearChanged( int y ) 553void DateBookWeek::slotYearChanged( int y )
554{ 554{
555 int totWeek; 555 int totWeek;
556 QDate d( y, 12, 31 ); 556 QDate d( y, 12, 31 );
557 int throwAway; 557 int throwAway;
558 calcWeek( d, totWeek, throwAway, bStartOnMonday ); 558 calcWeek( d, totWeek, throwAway, bStartOnMonday );
559 while ( totWeek == 1 ) { 559 while ( totWeek == 1 ) {
560 d = d.addDays( -1 ); 560 d = d.addDays( -1 );
561 calcWeek( d, totWeek, throwAway, bStartOnMonday ); 561 calcWeek( d, totWeek, throwAway, bStartOnMonday );
562 } 562 }
563} 563}
564 564
565void DateBookWeek::slotWeekChanged( bool onMonday ) 565void DateBookWeek::slotWeekChanged( bool onMonday )
566{ 566{
567 bStartOnMonday = onMonday; 567 bStartOnMonday = onMonday;
568 view->setStartOfWeek( bStartOnMonday ); 568 view->setStartOfWeek( bStartOnMonday );
569 header->setStartOfWeek( bStartOnMonday ); 569 header->setStartOfWeek( bStartOnMonday );
570 redraw(); 570 redraw();
571} 571}
572 572
573void DateBookWeek::slotClockChanged( bool ap ) 573void DateBookWeek::slotClockChanged( bool ap )
574{ 574{
575 ampm = ap; 575 ampm = ap;
576} 576}
577 577
578// return the date at the beginning of the week... 578// return the date at the beginning of the week...
579QDate DateBookWeek::weekDate() const 579QDate DateBookWeek::weekDate() const
580{ 580{
581 QDate d=bdate; 581 QDate d=bdate;
582 582
583 // Calculate offset to first day of week. 583 // Calculate offset to first day of week.
584 int dayoffset=d.dayOfWeek(); 584 int dayoffset=d.dayOfWeek();
585 if(bStartOnMonday) dayoffset--; 585 if(bStartOnMonday) dayoffset--;
586 else if( dayoffset == 7 ) 586 else if( dayoffset == 7 )
587 dayoffset = 0; 587 dayoffset = 0;
588 588
589 return d.addDays(-dayoffset); 589 return d.addDays(-dayoffset);
590} 590}
591 591
592// this used to only be needed by datebook.cpp, but now we need it inside 592// This used to only be needed by datebook.cpp, but now we need it
593// week view since 593// inside week view since we need to be able to figure out our total
594// we need to be able to figure out our total number of weeks on the fly... 594// number of weeks on the fly. This is probably the best place to put
595// this is probably the best place to put it.. 595// it.
596 596
597// For Weeks that start on Monday... (EASY!) 597// For Weeks that start on Monday... (EASY!)
598// At the moment we will use ISO 8601 method for computing 598// At the moment we will use the ISO 8601 method for computing the week.
599// the week. Granted, other countries use other methods, 599// Granted, other countries use other methods, but we aren't doing any
600// bet we aren't doing any Locale stuff at the moment. So, 600// Locale stuff at the moment. Without locale info it is too hard to
601// this should pass. This Algorithim is public domain and 601// guess what method should be used. So, this should pass. This
602// available at: 602// algorithim is public domain and available at:
603// http://personal.ecu.edu/mccartyr/ISOwdALG.txt 603// http://personal.ecu.edu/mccartyr/ISOwdALG.txt
604// the week number is return, and the year number is returned in year 604// the week number is returned, and the year number is returned in year
605// for Instance 2001/12/31 is actually the first week in 2002. 605// for Instance 2001/12/31 is actually the first week in 2002.
606// There is a more mathematical definition, but I will implement it when 606// There is a more mathematical definition, it should be implemented.
607// we are pass our deadline.
608 607
609// For Weeks that start on Sunday... (ahh... home rolled) 608// For Weeks that start on Sunday... (ahh... home rolled)
610// okay, if Jan 1 is on Friday or Saturday, 609// okay, if Jan 1 is on Friday or Saturday, it will go to the previous
611// it will go to the pervious 610// week.
612// week... 611
613 612/*!
613 * The week number and year number of a date may actually be different
614 * then the date itself as specified by the ISO 8601 standard. For
615 * example if Jan 1 year falls on a Friday, the week number will
616 * be the last week number for the previous year (52 of year - 1). Another
617 * example is that the date 2001-12-31 falls on a Monday, its week number
618 * is 1 and its year is 2002. This function provides stripped down
619 * version of the alogrithm described in
620 * http://personal.ecu.edu/mccartyr/ISOwdALG.txt to provide the correct
621 * week number and year number for a given date.
622 *
623 * \param d The date that you want to know the week number for.
624 * \param week A reference to the variable you want to store the week
625 * number in.
626 * \param year A reference to the variable you want to store the year
627 * number in.
628 * \param startOnMonday Inform the function whether weeks start on
629 * Sunday or Monday. Set to true if your weeks start on Monday.
630 * \return false if the supplied date is invalid, true otherwise.
631 */
614bool calcWeek( const QDate &d, int &week, int &year, 632bool calcWeek( const QDate &d, int &week, int &year,
615 bool startOnMonday ) 633 bool startOnMonday )
616{ 634{
617 int weekNumber; 635 int weekNumber = -1;
618 int yearNumber; 636 int yearNumber = -1;
619 637
620 // remove a pesky warning, (Optimizations on g++)
621 weekNumber = -1;
622 int jan1WeekDay = QDate(d.year(), 1, 1).dayOfWeek(); 638 int jan1WeekDay = QDate(d.year(), 1, 1).dayOfWeek();
623 int dayOfWeek = d.dayOfWeek(); 639 int dayOfWeek = d.dayOfWeek();
624 640
625 if ( !d.isValid() ) 641 if ( !d.isValid() )
626 return false; 642 return false;
627 643
628 if ( startOnMonday ) { 644 if ( startOnMonday ) {
629 // find the Jan1Weekday; 645 // find the Jan1Weekday;
630 if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) { 646 if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) {
631 yearNumber = d.year() - 1; 647 yearNumber = d.year() - 1;
632 if ( jan1WeekDay == 5 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) ) 648 if ( jan1WeekDay == 5
633 weekNumber = 53; 649 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) )
634 else 650 weekNumber = 53;
635 weekNumber = 52; 651 else
636 } else 652 weekNumber = 52;
637 yearNumber = d.year(); 653 } else
638 if ( yearNumber == d.year() ) { 654 yearNumber = d.year();
639 int totalDays = 365; 655
640 if ( QDate::leapYear(yearNumber) ) 656 if ( yearNumber == d.year() ) {
641 totalDays++; 657 int totalDays = 365;
642 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) ) 658 if ( QDate::leapYear(yearNumber) )
643 || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3) { 659 totalDays++;
644 yearNumber++; 660 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) )
645 weekNumber = 1; 661 || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3)
662 {
663 yearNumber++;
664 weekNumber = 1;
665 }
666 }
667 if ( yearNumber == d.year() ) {
668 int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 );
669 weekNumber = j / 7;
670 if ( jan1WeekDay > 4 )
671 weekNumber--;
646 } 672 }
647 }
648 if ( yearNumber == d.year() ) {
649 int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 );
650 weekNumber = j / 7;
651 if ( jan1WeekDay > 4 )
652 weekNumber--;
653 }
654 } else { 673 } else {
655 // it's better to keep these cases separate... 674 // it's better to keep these cases separate...
656 if ( d.dayOfYear() <= (7 - jan1WeekDay) && jan1WeekDay > 4 675 if ( d.dayOfYear() <= (7 - jan1WeekDay) && jan1WeekDay > 4
657 && jan1WeekDay != 7 ) { 676 && jan1WeekDay != 7 )
658 yearNumber = d.year() - 1; 677 {
659 if ( jan1WeekDay == 6 678 yearNumber = d.year() - 1;
660 || (jan1WeekDay == 7 && QDate::leapYear(yearNumber) ) ) { 679 if ( jan1WeekDay == 6
661 weekNumber = 53; 680 || (jan1WeekDay == 7 && QDate::leapYear(yearNumber) ) )
662 }else 681 {
663 weekNumber = 52; 682 weekNumber = 53;
664 } else 683 } else
665 yearNumber = d.year(); 684 weekNumber = 52;
666 if ( yearNumber == d.year() ) { 685 } else
667 int totalDays = 365; 686 yearNumber = d.year();
668 if ( QDate::leapYear( yearNumber ) ) 687
669 totalDays++; 688 if ( yearNumber == d.year() ) {
670 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek % 7)) ) { 689 int totalDays = 365;
671 yearNumber++; 690 if ( QDate::leapYear( yearNumber ) )
672 weekNumber = 1; 691 totalDays++;
692 if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek % 7)) ) {
693 yearNumber++;
694 weekNumber = 1;
695 }
673 } 696 }
674 } 697 if ( yearNumber == d.year() ) {
675 if ( yearNumber == d.year() ) { 698 int j = d.dayOfYear() + (7 - dayOfWeek % 7) + ( jan1WeekDay - 1 );
676 int j = d.dayOfYear() + (7 - dayOfWeek % 7) + ( jan1WeekDay - 1 ); 699 weekNumber = j / 7;
677 weekNumber = j / 7; 700
678 if ( jan1WeekDay > 4 ) { 701 if ( jan1WeekDay > 4 )
679 weekNumber--; 702 weekNumber--;
680 } 703 }
681 } 704 }
682 }
683 year = yearNumber; 705 year = yearNumber;
684 week = weekNumber; 706 week = weekNumber;
685 return true; 707 return true;
686} 708}
687 709