summaryrefslogtreecommitdiff
path: root/core/pim/datebook/datebookweek.cpp
authoralwin <alwin>2005-03-17 14:01:23 (UTC)
committer alwin <alwin>2005-03-17 14:01:23 (UTC)
commit8752141a5341877369f89a42fa1f0b5d08f56dbd (patch) (side-by-side diff)
tree63dc48ee207a4e9fbb6b9e8abddb239ec724c155 /core/pim/datebook/datebookweek.cpp
parentafee05f4b4c1e8dab8463e3423fcfc8f9d45aa8b (diff)
downloadopie-8752141a5341877369f89a42fa1f0b5d08f56dbd.zip
opie-8752141a5341877369f89a42fa1f0b5d08f56dbd.tar.gz
opie-8752141a5341877369f89a42fa1f0b5d08f56dbd.tar.bz2
1. datebookweeklist - a week has SEVEN days, not SIX. I'm wondering why
events on sunday never showed there ;) 2. extra file datebooktypes contains some special classes used by datebook so other classes must not include the big mainheader file. 3. added support for holiday-plugins to week-views. Month view is a little bit more tricky 'cause TT has never heard about virtual methods and so I have the choice between complete copy the monthview and make the modifications or changing the interface of datebookdb-class to virtual. both isn't nice.
Diffstat (limited to 'core/pim/datebook/datebookweek.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebookweek.cpp489
1 files changed, 245 insertions, 244 deletions
diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp
index 7503751..a509d89 100644
--- a/core/pim/datebook/datebookweek.cpp
+++ b/core/pim/datebook/datebookweek.cpp
@@ -19,6 +19,7 @@
**********************************************************************/
#include "datebookweek.h"
#include "datebookweekheaderimpl.h"
+#include "datebooktypes.h"
#include <qpe/datebookdb.h>
#include <qpe/qpeapplication.h>
@@ -52,7 +53,7 @@ void DateBookWeekItem::setGeometry( int x, int y, int w, int h )
//------------------=---------------------------------------------
DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday,
- QWidget *parent, const char *name )
+ QWidget *parent, const char *name )
: QScrollView( parent, name ), ampm( ap ), bOnMonday( startOnMonday ),
showingEvent( false )
{
@@ -72,7 +73,7 @@ DateBookWeekView::DateBookWeekView( bool ap, bool startOnMonday,
connect( header, SIGNAL(clicked(int)), this, SIGNAL(showDay(int)) );
QObject::connect(qApp, SIGNAL(clockChanged(bool)),
- this, SLOT(slotChangeClock(bool)));
+ this, SLOT(slotChangeClock(bool)));
QFontMetrics fm( font() );
rowHeight = fm.height()+2;
@@ -85,32 +86,32 @@ void DateBookWeekView::initNames()
static bool bFirst = true;
if ( bFirst ) {
- if ( bOnMonday ) {
+ if ( bOnMonday ) {
for ( int i = 1; i<=7; i++ ) {
header->addLabel( Calendar::nameOfDay( i ) );
}
- } else {
+ } else {
header->addLabel( Calendar::nameOfDay( 7 ) );
for ( int i = 1; i<7; i++ ) {
header->addLabel( Calendar::nameOfDay( i ) );
}
}
- bFirst = false;
+ bFirst = false;
} else {
- // we are change things...
- if ( bOnMonday ) {
+ // we are change things...
+ if ( bOnMonday ) {
for ( int i = 1; i<=7; i++ ) {
header->setLabel( i, Calendar::nameOfDay( i ) );
}
- } else {
+ } else {
header->setLabel( 1, Calendar::nameOfDay( 7 ) );
for ( int i = 1; i<7; i++ ) {
header->setLabel( i+1, Calendar::nameOfDay( i ) );
}
- }
+ }
}
}
@@ -118,16 +119,16 @@ void DateBookWeekView::initNames()
void DateBookWeekView::showEvents( QValueList<EffectiveEvent> &ev )
{
- items.clear();
- QValueListIterator<EffectiveEvent> it;
- for ( it = ev.begin(); it != ev.end(); ++it ) {
- DateBookWeekItem *i = new DateBookWeekItem( *it );
- if(!((i->event().end().hour()==0) && (i->event().end().minute()==0) && (i->event().startDate()!=i->event().date()))) { // Skip events ending at 00:00 starting at another day.
- positionItem( i );
- items.append( i );
- }
- }
- viewport()->update();
+ items.clear();
+ QValueListIterator<EffectiveEvent> it;
+ for ( it = ev.begin(); it != ev.end(); ++it ) {
+ DateBookWeekItem *i = new DateBookWeekItem( *it );
+ if(!((i->event().end().hour()==0) && (i->event().end().minute()==0) && (i->event().startDate()!=i->event().date()))) { // Skip events ending at 00:00 starting at another day.
+ positionItem( i );
+ items.append( i );
+ }
+ }
+ viewport()->update();
}
void DateBookWeekView::moveToHour( int h )
@@ -150,11 +151,11 @@ void DateBookWeekView::slotChangeClock( bool c )
static inline int db_round30min( int m )
{
if ( m < 15 )
- m = 0;
+ m = 0;
else if ( m < 45 )
- m = 1;
+ m = 1;
else
- m = 2;
+ m = 2;
return m;
}
@@ -162,7 +163,7 @@ static inline int db_round30min( int m )
void DateBookWeekView::alterDay( int day )
{
if ( !bOnMonday ) {
- day--;
+ day--;
}
emit showDay( day );
}
@@ -184,27 +185,27 @@ void DateBookWeekView::positionItem( DateBookWeekItem *i )
int h;
if ( ev.event().type() == Event::AllDay ) {
- h = (48 * rowHeight) / 2;
- y = 0;
- } else {
- h=y2-y;
- if ( h < (1*rowHeight)/2 ) h = (1*rowHeight)/2;
+ h = (48 * rowHeight) / 2;
+ y = 0;
+ } else {
+ h=y2-y;
+ if ( h < (1*rowHeight)/2 ) h = (1*rowHeight)/2;
}
int dow = ev.date().dayOfWeek();
if ( !bOnMonday ) {
- if ( dow == 7 )
- dow = 1;
- else
- dow++;
+ if ( dow == 7 )
+ dow = 1;
+ else
+ dow++;
}
int x = header->sectionPos( dow ) - 1;
int xlim = header->sectionPos( dow ) + header->sectionSize( dow );
DateBookWeekItem *isect = 0;
do {
- i->setGeometry( x, y, Width, h );
- isect = intersects( i );
- x += Width - 1;
+ i->setGeometry( x, y, Width, h );
+ isect = intersects( i );
+ x += Width - 1;
} while ( isect && x < xlim );
}
@@ -218,12 +219,12 @@ DateBookWeekItem *DateBookWeekView::intersects( const DateBookWeekItem *item )
QListIterator<DateBookWeekItem> it(items);
for ( ; it.current(); ++it ) {
- DateBookWeekItem *i = it.current();
- if ( i != item ) {
- if ( i->geometry().intersects( geom ) ) {
- return i;
- }
- }
+ DateBookWeekItem *i = it.current();
+ if ( i != item ) {
+ if ( i->geometry().intersects( geom ) ) {
+ return i;
+ }
+ }
}
return 0;
@@ -233,27 +234,27 @@ void DateBookWeekView::contentsMousePressEvent( QMouseEvent *e )
{
QListIterator<DateBookWeekItem> it(items);
for ( ; it.current(); ++it ) {
- DateBookWeekItem *i = it.current();
- if ( i->geometry().contains( e->pos() ) ) {
- showingEvent = true;
- emit signalShowEvent( i->event() );
- break;
- }
+ DateBookWeekItem *i = it.current();
+ if ( i->geometry().contains( e->pos() ) ) {
+ showingEvent = true;
+ emit signalShowEvent( i->event() );
+ break;
+ }
}
}
void DateBookWeekView::contentsMouseReleaseEvent( QMouseEvent *e )
{
if ( showingEvent ) {
- showingEvent = false;
- emit signalHideEvent();
+ showingEvent = false;
+ emit signalHideEvent();
} else {
- int d = header->sectionAt( e->pos().x() );
- if ( d > 0 ) {
-// if ( !bOnMonday )
-// d--;
- emit showDay( d );
- }
+ int d = header->sectionAt( e->pos().x() );
+ if ( d > 0 ) {
+// if ( !bOnMonday )
+// d--;
+ emit showDay( d );
+ }
}
}
@@ -262,47 +263,47 @@ void DateBookWeekView::drawContents( QPainter *p, int cx, int cy, int cw, int ch
QRect ur( cx, cy, cw, ch );
p->setPen( lightGray );
for ( int i = 1; i <= 7; i++ )
- p->drawLine( header->sectionPos(i)-2, cy, header->sectionPos(i)-2, cy+ch );
+ p->drawLine( header->sectionPos(i)-2, cy, header->sectionPos(i)-2, cy+ch );
p->setPen( black );
for ( int t = 0; t < 24; t++ ) {
- int y = t*rowHeight;
- if ( QRect( 1, y, 20, rowHeight ).intersects( ur ) ) {
- QString s;
- if ( ampm ) {
- if ( t == 0 )
- s = QString::number( 12 );
- else if ( t == 12 )
- s = QString::number(12) + tr( "p" );
- else if ( t > 12 ) {
- if ( t - 12 < 10 )
- s = " ";
- else
- s = "";
- s += QString::number( t - 12 ) + tr("p");
- } else {
- if ( 12 - t < 3 )
- s = "";
- else
- s = " ";
- s += QString::number( t );
- }
- } else {
- s = QString::number( t );
- if ( s.length() == 1 )
- s.prepend( "0" );
- }
- p->drawText( 1, y+p->fontMetrics().ascent()+1, s );
- }
+ int y = t*rowHeight;
+ if ( QRect( 1, y, 20, rowHeight ).intersects( ur ) ) {
+ QString s;
+ if ( ampm ) {
+ if ( t == 0 )
+ s = QString::number( 12 );
+ else if ( t == 12 )
+ s = QString::number(12) + tr( "p" );
+ else if ( t > 12 ) {
+ if ( t - 12 < 10 )
+ s = " ";
+ else
+ s = "";
+ s += QString::number( t - 12 ) + tr("p");
+ } else {
+ if ( 12 - t < 3 )
+ s = "";
+ else
+ s = " ";
+ s += QString::number( t );
+ }
+ } else {
+ s = QString::number( t );
+ if ( s.length() == 1 )
+ s.prepend( "0" );
+ }
+ p->drawText( 1, y+p->fontMetrics().ascent()+1, s );
+ }
}
QListIterator<DateBookWeekItem> it(items);
for ( ; it.current(); ++it ) {
- DateBookWeekItem *i = it.current();
- if ( i->geometry().intersects( ur ) ) {
- p->setBrush( i->color() );
- p->drawRect( i->geometry() );
- }
+ DateBookWeekItem *i = it.current();
+ if ( i->geometry().intersects( ur ) ) {
+ p->setBrush( i->color() );
+ p->drawRect( i->geometry() );
+ }
}
}
@@ -316,7 +317,7 @@ void DateBookWeekView::resizeEvent( QResizeEvent *e )
/*
int avail = visibleWidth();
header->setGeometry( leftMargin()+frameWidth()+frameRect().left() , frameWidth(),
- visibleWidth(), header->sizeHint().height() );
+ visibleWidth(), header->sizeHint().height() );
setMargins( 0, header->sizeHint().height(), 0, 0 );
*/
//BRANCH_1_0
@@ -328,7 +329,7 @@ void DateBookWeekView::resizeEvent( QResizeEvent *e )
header->resizeSection( 0, hourWidth );
int sw = (avail - hourWidth) / 7;
for ( int i = 1; i < 7; i++ )
- header->resizeSection( i, sw );
+ header->resizeSection( i, sw );
header->resizeSection( 7, avail - hourWidth - sw*6 );
}
@@ -340,121 +341,121 @@ void DateBookWeekView::setStartOfWeek( bool bStartOnMonday )
//-------------------------------------------------------------------
-DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDB *newDB,
- QWidget *parent, const char *name )
+DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDBHoliday *newDB,
+ QWidget *parent, const char *name )
: QWidget( parent, name ),
db( newDB ),
startTime( 0 ),
ampm( ap ),
bStartOnMonday( startOnMonday )
{
- setFocusPolicy(StrongFocus);
- QVBoxLayout *vb = new QVBoxLayout( this );
- header = new DateBookWeekHeader( bStartOnMonday, this );
- view = new DateBookWeekView( ampm, startOnMonday, this );
- vb->addWidget( header );
- vb->addWidget( view );
+ setFocusPolicy(StrongFocus);
+ QVBoxLayout *vb = new QVBoxLayout( this );
+ header = new DateBookWeekHeader( bStartOnMonday, this );
+ view = new DateBookWeekView( ampm, startOnMonday, this );
+ vb->addWidget( header );
+ vb->addWidget( view );
- lblDesc = new QLabel( this, "event label" );
- lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box );
- lblDesc->setBackgroundColor( yellow );
- lblDesc->hide();
+ lblDesc = new QLabel( this, "event label" );
+ lblDesc->setFrameStyle( QFrame::Plain | QFrame::Box );
+ lblDesc->setBackgroundColor( yellow );
+ lblDesc->hide();
- tHide = new QTimer( this );
+ tHide = new QTimer( this );
- connect( view, SIGNAL( showDay(int) ), this, SLOT( showDay(int) ) );
- connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)), this, SLOT(slotShowEvent(const EffectiveEvent&)) );
- connect( view, SIGNAL(signalHideEvent()), this, SLOT(slotHideEvent()) );
- connect( header, SIGNAL( dateChanged(QDate&) ), this, SLOT( dateChanged(QDate&) ) );
- connect( tHide, SIGNAL( timeout() ), lblDesc, SLOT( hide() ) );
- connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
- connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotClockChanged(bool)));
- setDate(QDate::currentDate());
+ connect( view, SIGNAL( showDay(int) ), this, SLOT( showDay(int) ) );
+ connect( view, SIGNAL(signalShowEvent(const EffectiveEvent&)), this, SLOT(slotShowEvent(const EffectiveEvent&)) );
+ connect( view, SIGNAL(signalHideEvent()), this, SLOT(slotHideEvent()) );
+ connect( header, SIGNAL( dateChanged(QDate&) ), this, SLOT( dateChanged(QDate&) ) );
+ connect( tHide, SIGNAL( timeout() ), lblDesc, SLOT( hide() ) );
+ connect( qApp, SIGNAL(weekChanged(bool)), this, SLOT(slotWeekChanged(bool)) );
+ connect( qApp, SIGNAL(clockChanged(bool)), this, SLOT(slotClockChanged(bool)));
+ setDate(QDate::currentDate());
}
void DateBookWeek::keyPressEvent(QKeyEvent *e)
{
switch(e->key()) {
- case Key_Up:
- view->scrollBy(0, -20);
- break;
- case Key_Down:
- view->scrollBy(0, 20);
- break;
- case Key_Left:
- setDate(date().addDays(-7));
- break;
- case Key_Right:
- setDate(date().addDays(7));
- break;
- default:
- e->ignore();
+ case Key_Up:
+ view->scrollBy(0, -20);
+ break;
+ case Key_Down:
+ view->scrollBy(0, 20);
+ break;
+ case Key_Left:
+ setDate(date().addDays(-7));
+ break;
+ case Key_Right:
+ setDate(date().addDays(7));
+ break;
+ default:
+ e->ignore();
}
}
void DateBookWeek::showDay( int day )
{
- QDate d=bdate;
+ QDate d=bdate;
- // Calculate offset to first day of week.
- int dayoffset=d.dayOfWeek() % 7;
+ // Calculate offset to first day of week.
+ int dayoffset=d.dayOfWeek() % 7;
- if(bStartOnMonday) dayoffset--;
+ if(bStartOnMonday) dayoffset--;
- day--;
- d=d.addDays(day-dayoffset);
- emit showDate( d.year(), d.month(), d.day() );
+ day--;
+ d=d.addDays(day-dayoffset);
+ emit showDate( d.year(), d.month(), d.day() );
}
void DateBookWeek::setDate( int y, int m, int d )
{
- setDate(QDate(y, m, d));
+ setDate(QDate(y, m, d));
}
void DateBookWeek::setDate(QDate newdate)
{
- bdate=newdate;
- dow = newdate.dayOfWeek();
- header->setDate( newdate );
+ bdate=newdate;
+ dow = newdate.dayOfWeek();
+ header->setDate( newdate );
}
void DateBookWeek::dateChanged( QDate &newdate )
{
- bdate=newdate;
- getEvents();
+ bdate=newdate;
+ getEvents();
}
QDate DateBookWeek::date() const
{
- return bdate;
+ return bdate;
}
void DateBookWeek::getEvents()
{
- QDate startWeek = weekDate();
+ QDate startWeek = weekDate();
- QDate endWeek = startWeek.addDays( 6 );
- QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek, endWeek);
- view->showEvents( eventList );
- view->moveToHour( startTime );
+ QDate endWeek = startWeek.addDays( 6 );
+ QValueList<EffectiveEvent> eventList = db->getEffectiveEvents(startWeek, endWeek);
+ view->showEvents( eventList );
+ view->moveToHour( startTime );
}
void DateBookWeek::generateAllDayTooltext( QString& text ) {
- text += "<b>" + tr("This is an all day event.") + "</b><br>";
+ text += "<b>" + tr("This is an all day event.") + "</b><br>";
}
void DateBookWeek::generateNormalTooltext( QString& str, const EffectiveEvent &ev ) {
- str += "<b>" + QObject::tr("Start") + "</b>: ";
- str += TimeString::timeString( ev.event().start().time(), ampm, FALSE );
- if( ev.startDate()!=ev.endDate() ) {
- str += " <i>" + TimeString::longDateString( ev.startDate() )+"</i>";
- }
- str += "<br>";
- str += "<b>" + QObject::tr("End") + "</b>: ";
- str += TimeString::timeString( ev.event().end().time(), ampm, FALSE );
- if( ev.startDate()!=ev.endDate() ) {
- str += " <i>" + TimeString::longDateString( ev.endDate() ) + "</i>";
- }
+ str += "<b>" + QObject::tr("Start") + "</b>: ";
+ str += TimeString::timeString( ev.event().start().time(), ampm, FALSE );
+ if( ev.startDate()!=ev.endDate() ) {
+ str += " <i>" + TimeString::longDateString( ev.startDate() )+"</i>";
+ }
+ str += "<br>";
+ str += "<b>" + QObject::tr("End") + "</b>: ";
+ str += TimeString::timeString( ev.event().end().time(), ampm, FALSE );
+ if( ev.startDate()!=ev.endDate() ) {
+ str += " <i>" + TimeString::longDateString( ev.endDate() ) + "</i>";
+ }
}
void DateBookWeek::slotShowEvent( const EffectiveEvent &ev )
@@ -467,9 +468,9 @@ void DateBookWeek::slotShowEvent( const EffectiveEvent &ev )
QString strDesc = ev.description();
int where = strDesc.find( "<" );
while ( where != -1 ) {
- strDesc.remove( where, 1 );
- strDesc.insert( where, "&#60;" );
- where = strDesc.find( "<", where );
+ strDesc.remove( where, 1 );
+ strDesc.insert( where, "&#60;" );
+ where = strDesc.find( "<", where );
}
QString strCat;
@@ -477,31 +478,31 @@ void DateBookWeek::slotShowEvent( const EffectiveEvent &ev )
// QString strCat = ev.category();
// where = strCat.find( "<" );
// while ( where != -1 ) {
-// strCat.remove( where, 1 );
-// strCat.insert( where, "&#60;" );
-// where = strCat.find( "<", where );
+// strCat.remove( where, 1 );
+// strCat.insert( where, "&#60;" );
+// where = strCat.find( "<", where );
// }
QString strLocation = ev.location();
while ( where != -1 ) {
- strLocation.remove( where, 1 );
- strLocation.insert( where, "&#60;" );
- where = strLocation.find( "<", where );
+ strLocation.remove( where, 1 );
+ strLocation.insert( where, "&#60;" );
+ where = strLocation.find( "<", where );
}
QString strNote = ev.notes();
where = strNote.find( "<" );
while ( where != -1 ) {
- strNote.remove( where, 1 );
- strNote.insert( where, "&#60;" );
- where = strNote.find( "<", where );
+ strNote.remove( where, 1 );
+ strNote.insert( where, "&#60;" );
+ where = strNote.find( "<", where );
}
QString str = "<b>" + strDesc + "</b><br>"
+ strLocation + "<br>"
+ "<i>" + strCat + "</i>"
+ "<br>" + TimeString::longDateString( ev.date() )
- + "<br>";
+ + "<br>";
if (ev.event().type() == Event::Normal )
generateNormalTooltext( str, ev );
@@ -540,41 +541,41 @@ void DateBookWeek::redraw()
void DateBookWeek::slotYearChanged( int y )
{
- int totWeek;
- QDate d( y, 12, 31 );
- int throwAway;
- calcWeek( d, totWeek, throwAway, bStartOnMonday );
- while ( totWeek == 1 ) {
- d = d.addDays( -1 );
- calcWeek( d, totWeek, throwAway, bStartOnMonday );
- }
+ int totWeek;
+ QDate d( y, 12, 31 );
+ int throwAway;
+ calcWeek( d, totWeek, throwAway, bStartOnMonday );
+ while ( totWeek == 1 ) {
+ d = d.addDays( -1 );
+ calcWeek( d, totWeek, throwAway, bStartOnMonday );
+ }
}
void DateBookWeek::slotWeekChanged( bool onMonday )
{
- bStartOnMonday = onMonday;
- view->setStartOfWeek( bStartOnMonday );
- header->setStartOfWeek( bStartOnMonday );
- redraw();
+ bStartOnMonday = onMonday;
+ view->setStartOfWeek( bStartOnMonday );
+ header->setStartOfWeek( bStartOnMonday );
+ redraw();
}
void DateBookWeek::slotClockChanged( bool ap )
{
- ampm = ap;
+ ampm = ap;
}
// return the date at the beginning of the week...
QDate DateBookWeek::weekDate() const
{
- QDate d=bdate;
+ QDate d=bdate;
- // Calculate offset to first day of week.
- int dayoffset=d.dayOfWeek();
- if(bStartOnMonday) dayoffset--;
- else if( dayoffset == 7 )
- dayoffset = 0;
+ // Calculate offset to first day of week.
+ int dayoffset=d.dayOfWeek();
+ if(bStartOnMonday) dayoffset--;
+ else if( dayoffset == 7 )
+ dayoffset = 0;
- return d.addDays(-dayoffset);
+ return d.addDays(-dayoffset);
}
// this used to only be needed by datebook.cpp, but now we need it inside
@@ -600,7 +601,7 @@ QDate DateBookWeek::weekDate() const
// week...
bool calcWeek( const QDate &d, int &week, int &year,
- bool startOnMonday )
+ bool startOnMonday )
{
int weekNumber;
int yearNumber;
@@ -611,62 +612,62 @@ bool calcWeek( const QDate &d, int &week, int &year,
int dayOfWeek = d.dayOfWeek();
if ( !d.isValid() )
- return false;
+ return false;
if ( startOnMonday ) {
- // find the Jan1Weekday;
- if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) {
- yearNumber = d.year() - 1;
- if ( jan1WeekDay == 5 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) )
- weekNumber = 53;
- else
- weekNumber = 52;
- } else
- yearNumber = d.year();
- if ( yearNumber == d.year() ) {
- int totalDays = 365;
- if ( QDate::leapYear(yearNumber) )
- totalDays++;
- if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) )
- || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3) {
- yearNumber++;
- weekNumber = 1;
- }
- }
- if ( yearNumber == d.year() ) {
- int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 );
- weekNumber = j / 7;
- if ( jan1WeekDay > 4 )
- weekNumber--;
- }
+ // find the Jan1Weekday;
+ if ( d.dayOfYear() <= ( 8 - jan1WeekDay) && jan1WeekDay > 4 ) {
+ yearNumber = d.year() - 1;
+ if ( jan1WeekDay == 5 || ( jan1WeekDay == 6 && QDate::leapYear(yearNumber) ) )
+ weekNumber = 53;
+ else
+ weekNumber = 52;
+ } else
+ yearNumber = d.year();
+ if ( yearNumber == d.year() ) {
+ int totalDays = 365;
+ if ( QDate::leapYear(yearNumber) )
+ totalDays++;
+ if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek) )
+ || (jan1WeekDay == 7) && (totalDays - d.dayOfYear()) < 3) {
+ yearNumber++;
+ weekNumber = 1;
+ }
+ }
+ if ( yearNumber == d.year() ) {
+ int j = d.dayOfYear() + (7 - dayOfWeek) + ( jan1WeekDay - 1 );
+ weekNumber = j / 7;
+ if ( jan1WeekDay > 4 )
+ weekNumber--;
+ }
} else {
- // it's better to keep these cases separate...
- if ( d.dayOfYear() <= (7 - jan1WeekDay) && jan1WeekDay > 4
- && jan1WeekDay != 7 ) {
- yearNumber = d.year() - 1;
- if ( jan1WeekDay == 6
- || (jan1WeekDay == 7 && QDate::leapYear(yearNumber) ) ) {
- weekNumber = 53;
- }else
- weekNumber = 52;
- } else
- yearNumber = d.year();
- if ( yearNumber == d.year() ) {
- int totalDays = 365;
- if ( QDate::leapYear( yearNumber ) )
- totalDays++;
- if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek % 7)) ) {
- yearNumber++;
- weekNumber = 1;
- }
- }
- if ( yearNumber == d.year() ) {
- int j = d.dayOfYear() + (7 - dayOfWeek % 7) + ( jan1WeekDay - 1 );
- weekNumber = j / 7;
- if ( jan1WeekDay > 4 ) {
- weekNumber--;
- }
- }
+ // it's better to keep these cases separate...
+ if ( d.dayOfYear() <= (7 - jan1WeekDay) && jan1WeekDay > 4
+ && jan1WeekDay != 7 ) {
+ yearNumber = d.year() - 1;
+ if ( jan1WeekDay == 6
+ || (jan1WeekDay == 7 && QDate::leapYear(yearNumber) ) ) {
+ weekNumber = 53;
+ }else
+ weekNumber = 52;
+ } else
+ yearNumber = d.year();
+ if ( yearNumber == d.year() ) {
+ int totalDays = 365;
+ if ( QDate::leapYear( yearNumber ) )
+ totalDays++;
+ if ( ((totalDays - d.dayOfYear()) < (4 - dayOfWeek % 7)) ) {
+ yearNumber++;
+ weekNumber = 1;
+ }
+ }
+ if ( yearNumber == d.year() ) {
+ int j = d.dayOfYear() + (7 - dayOfWeek % 7) + ( jan1WeekDay - 1 );
+ weekNumber = j / 7;
+ if ( jan1WeekDay > 4 ) {
+ weekNumber--;
+ }
+ }
}
year = yearNumber;
week = weekNumber;