From 1e0e2f57472538bd880967ebe061c8f39a7e270b Mon Sep 17 00:00:00 2001 From: umopapisdn Date: Tue, 13 May 2003 22:58:18 +0000 Subject: Bugfix: (Bug #0000902) Adding events in weekview shouldn't create them as events on the first day of the week but rather the last visited day. --- diff --git a/core/pim/datebook/datebookweek.cpp b/core/pim/datebook/datebookweek.cpp index 3ae4610..12f57a0 100644 --- a/core/pim/datebook/datebookweek.cpp +++ b/core/pim/datebook/datebookweek.cpp @@ -370,7 +370,7 @@ DateBookWeek::DateBookWeek( bool ap, bool startOnMonday, DateBookDB *newDB, 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( int, int ) ), this, SLOT( dateChanged( int, int ) ) ); + 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))); @@ -399,11 +399,16 @@ void DateBookWeek::keyPressEvent(QKeyEvent *e) void DateBookWeek::showDay( int day ) { - QDate d; - d = dateFromWeek( _week, year, bStartOnMonday ); + QDate d=bdate; + + // Calculate offset to first day of week. + int dayoffset=d.dayOfWeek(); + if(bStartOnMonday) dayoffset--; + day--; - d = d.addDays( day ); + d=d.addDays(day-dayoffset); emit showDate( d.year(), d.month(), d.day() ); + qDebug("%4d-%02d-%02d / Day %d\n",d.year(),d.month(),d.day(),day); } void DateBookWeek::setDate( int y, int m, int d ) @@ -411,34 +416,22 @@ void DateBookWeek::setDate( int y, int m, int d ) setDate(QDate(y, m, d)); } -void DateBookWeek::setDate(QDate date) +void DateBookWeek::setDate(QDate newdate) { - dow = date.dayOfWeek(); - int w, y; - calcWeek( date, w, y, bStartOnMonday ); - header->setDate( date ); + bdate=newdate; + dow = newdate.dayOfWeek(); + header->setDate( newdate ); } -void DateBookWeek::dateChanged( int y, int w ) +void DateBookWeek::dateChanged( QDate &newdate ) { - year = y; - _week = w; + bdate=newdate; getEvents(); } QDate DateBookWeek::date() const { - QDate d; - d = dateFromWeek( _week - 1, year, bStartOnMonday ); - if ( bStartOnMonday ) - d = d.addDays( 7 + dow - 1 ); - else { - if ( dow == 7 ) - d = d.addDays( dow ); - else - d = d.addDays( 7 + dow ); - } - return d; + return bdate; } void DateBookWeek::getEvents() @@ -578,7 +571,13 @@ void DateBookWeek::slotClockChanged( bool ap ) // return the date at the beginning of the week... QDate DateBookWeek::weekDate() const { - return dateFromWeek( _week, year, bStartOnMonday ); + QDate d=bdate; + + // Calculate offset to first day of week. + int dayoffset=d.dayOfWeek(); + if(bStartOnMonday) dayoffset--; + + return d.addDays(-dayoffset); } // this used to only be needed by datebook.cpp, but now we need it inside diff --git a/core/pim/datebook/datebookweek.h b/core/pim/datebook/datebookweek.h index 8c5e06d..c273e30 100644 --- a/core/pim/datebook/datebookweek.h +++ b/core/pim/datebook/datebookweek.h @@ -124,7 +124,7 @@ protected slots: private slots: void showDay( int day ); - void dateChanged( int y, int w ); + void dateChanged( QDate &newdate ); void slotShowEvent( const EffectiveEvent & ); void slotHideEvent(); void slotYearChanged( int ); @@ -150,6 +150,7 @@ private: int year; int _week; int dow; + QDate bdate; DateBookWeekHeader *header; DateBookWeekView *view; DateBookDB *db; @@ -161,6 +162,5 @@ private: }; -bool calcWeek( const QDate &d, int &week, int &year, - bool startOnMonday = false ); +bool calcWeek( const QDate &d, int &week, int &year, bool startOnMonday = false ); #endif diff --git a/core/pim/datebook/datebookweekheaderimpl.cpp b/core/pim/datebook/datebookweekheaderimpl.cpp index fd792e2..ff7626f 100644 --- a/core/pim/datebook/datebookweekheaderimpl.cpp +++ b/core/pim/datebook/datebookweekheaderimpl.cpp @@ -105,7 +105,7 @@ void DateBookWeekHeader::setDate(const QDate &d) { QString::number(stop.day()) + "." + start.monthName(stop.month()) +" ("+ tr("w")+":"+QString::number( week ) +")"); - emit dateChanged(year,week); + emit dateChanged(date); } void DateBookWeekHeader::setStartOfWeek( bool onMonday ) @@ -113,27 +113,3 @@ void DateBookWeekHeader::setStartOfWeek( bool onMonday ) bStartOnMonday = onMonday; setDate( date ); } - -// dateFromWeek -// compute the date from the week in the year -QDate dateFromWeek( int week, int year, bool startOnMonday ) -{ - QDate d; - d.setYMD( year, 1, 1 ); - int dayOfWeek = d.dayOfWeek(); - if ( startOnMonday ) { - if ( dayOfWeek <= 4 ) { - d = d.addDays( ( week - 1 ) * 7 - dayOfWeek + 1 ); - } else { - d = d.addDays( (week) * 7 - dayOfWeek + 1 ); - } - } else { - if ( dayOfWeek <= 4 || dayOfWeek == 7) { - d = d.addDays( ( week - 1 ) * 7 - dayOfWeek % 7 ); - } else { - d = d.addDays( ( week ) * 7 - dayOfWeek % 7 ); - } - } - return d; -} - diff --git a/core/pim/datebook/datebookweekheaderimpl.h b/core/pim/datebook/datebookweekheaderimpl.h index 1ab1d52..d8dce90 100644 --- a/core/pim/datebook/datebookweekheaderimpl.h +++ b/core/pim/datebook/datebookweekheaderimpl.h @@ -36,7 +36,7 @@ public: void setStartOfWeek( bool onMonday ); signals: - void dateChanged( int y, int w ); + void dateChanged( QDate &date ); public slots: void pickDate(); @@ -54,6 +54,4 @@ private: bool bStartOnMonday; }; -QDate dateFromWeek( int week, int year, bool startOnMonday ); - #endif // DATEBOOKDAYHEADER_H diff --git a/core/pim/datebook/datebookweeklst.cpp b/core/pim/datebook/datebookweeklst.cpp index a39ff40..7817042 100644 --- a/core/pim/datebook/datebookweeklst.cpp +++ b/core/pim/datebook/datebookweeklst.cpp @@ -72,7 +72,7 @@ void DateBookWeekLstHeader::setDate(const QDate &d) { QString::number(stop.day()) + "." + start.monthName(stop.month()) +" ("+ tr("w")+":"+QString::number( week ) +")"); - emit dateChanged(year,week); + emit dateChanged(date); } void DateBookWeekLstHeader::pickDate() { @@ -109,7 +109,7 @@ void DateBookWeekLstHeader::prevMonth() setDate(date.addDays(-28)); } -DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /*onM*/, +DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /* onM */, QWidget* parent, const char* name, WFlags fl ) @@ -117,7 +117,7 @@ DateBookWeekLstDayHdr::DateBookWeekLstDayHdr(const QDate &d, bool /*onM*/, date=d; - static const char *wdays={"MTWTFSS"}; + static const char *wdays={"MTWTFSSM"}; char day=wdays[d.dayOfWeek()-1]; label->setText( QString(QObject::tr(QString(QChar(day)))) + " " +QString::number(d.day()) ); @@ -234,25 +234,28 @@ DateBookWeekLstView::DateBookWeekLstView(QValueList &ev, dayOrder[0]=7; } - for (int i=0; i<7; i++) { + // Calculate offset to first day of week. + int dayoffset=d.dayOfWeek(); + if(bStartOnMonday) dayoffset--; + + for (int i=0; i<7; i++) { // Header - DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i), bStartOnMonday,this); - connect(hdr, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); - connect(hdr, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)), - this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &))); - layout->addWidget(hdr); - - // Events - while ( (*it).date().dayOfWeek() == dayOrder[i] && it!=ev.end() ) { - if(!(((*it).end().hour()==0) && ((*it).end().minute()==0) && ((*it).startDate()!=(*it).date()))) { // Skip events ending at 00:00 starting at another day. - DateBookWeekLstEvent *l=new DateBookWeekLstEvent(*it,weeklistviewconfig,this); - layout->addWidget(l); - connect (l, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &))); + DateBookWeekLstDayHdr *hdr=new DateBookWeekLstDayHdr(d.addDays(i-dayoffset), bStartOnMonday,this); + connect(hdr, SIGNAL(showDate(int,int,int)), this, SIGNAL(showDate(int,int,int))); + connect(hdr, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &)), + this, SIGNAL(addEvent(const QDateTime &, const QDateTime &, const QString &, const QString &))); + layout->addWidget(hdr); + + // Events + while ( (*it).date().dayOfWeek() == dayOrder[i] && it!=ev.end() ) { + if(!(((*it).end().hour()==0) && ((*it).end().minute()==0) && ((*it).startDate()!=(*it).date()))) { // Skip events ending at 00:00 starting at another day. + DateBookWeekLstEvent *l=new DateBookWeekLstEvent(*it,weeklistviewconfig,this); + layout->addWidget(l); + connect (l, SIGNAL(editEvent(const Event &)), this, SIGNAL(editEvent(const Event &))); + } + it++; } - it++; - } - - layout->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); + layout->addItem(new QSpacerItem(1,1, QSizePolicy::Minimum, QSizePolicy::Expanding)); } } DateBookWeekLstView::~DateBookWeekLstView(){} @@ -298,7 +301,7 @@ DateBookWeekLst::DateBookWeekLst( bool ap, bool onM, DateBookDB *newDB, header=new DateBookWeekLstHeader(onM, this); layout->addWidget( header ); - connect(header, SIGNAL(dateChanged(int,int)), this, SLOT(dateChanged(int,int))); + connect(header, SIGNAL(dateChanged(QDate &)), this, SLOT(dateChanged(QDate &))); connect(header, SIGNAL(setDbl(bool)), this, SLOT(setDbl(bool))); scroll=new QScrollView(this); @@ -318,32 +321,18 @@ DateBookWeekLst::~DateBookWeekLst(){ } void DateBookWeekLst::setDate(const QDate &d) { - int w,y; - calcWeek(d,w,y,bStartOnMonday); - year=y; - _week=w; - header->setDate(date()); + bdate=d; + header->setDate(d); } + void DateBookWeekLst::setDbl(bool on) { dbl=on; redraw(); } void DateBookWeekLst::redraw() {getEvents();} -QDate DateBookWeekLst::date() const { - QDate d; - d.setYMD(year,1,1); - - int dow= d.dayOfWeek(); - if (!bStartOnMonday) - if (dow==7) { - dow=1; - } else { - dow++; - } - - d=d.addDays( (_week-1)*7 - dow + 1 ); - return d; +QDate DateBookWeekLst::date() { + return bdate; } void DateBookWeekLst::getEvents() { @@ -371,9 +360,8 @@ void DateBookWeekLst::getEvents() { scroll->updateScrollBars(); } -void DateBookWeekLst::dateChanged(int y, int w) { - year=y; - _week=w; +void DateBookWeekLst::dateChanged(QDate &newdate) { + bdate=newdate; getEvents(); } @@ -395,4 +383,4 @@ void DateBookWeekLst::keyPressEvent(QKeyEvent *e) default: e->ignore(); } -} \ No newline at end of file +} diff --git a/core/pim/datebook/datebookweeklst.h b/core/pim/datebook/datebookweeklst.h index f858c4f..0bfbcda 100644 --- a/core/pim/datebook/datebookweeklst.h +++ b/core/pim/datebook/datebookweeklst.h @@ -32,7 +32,7 @@ public slots: void pickDate(); void setDate(int y, int m, int d); signals: - void dateChanged(int y, int w); + void dateChanged(QDate &newdate); void setDbl(bool on); private: QDate date; @@ -119,11 +119,11 @@ public: void setDate( int y, int w ); void setDate(const QDate &d ); int week() const { return _week; }; - QDate date() const; + QDate date(); public slots: void redraw(); - void dateChanged(int y, int w); + void dateChanged(QDate &date); protected slots: void keyPressEvent(QKeyEvent *); @@ -141,12 +141,13 @@ private: bool ampm; bool bStartOnMonday; bool dbl; - int year, _week; + QDate bdate; + int year, _week,dow; DateBookWeekLstHeader *header; QWidget *view; QVBoxLayout *layout; QScrollView *scroll; - + void getEvents(); }; -- cgit v0.9.0.2