summaryrefslogtreecommitdiff
authorumopapisdn <umopapisdn>2003-05-13 22:58:18 (UTC)
committer umopapisdn <umopapisdn>2003-05-13 22:58:18 (UTC)
commit1e0e2f57472538bd880967ebe061c8f39a7e270b (patch) (side-by-side diff)
treefcc070d53148385f93c0dc6ab5443d5100be0d26
parent45c0386de12b107e54e4d020d54eb05517a9efac (diff)
downloadopie-1e0e2f57472538bd880967ebe061c8f39a7e270b.zip
opie-1e0e2f57472538bd880967ebe061c8f39a7e270b.tar.gz
opie-1e0e2f57472538bd880967ebe061c8f39a7e270b.tar.bz2
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.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/pim/datebook/datebookweek.cpp47
-rw-r--r--core/pim/datebook/datebookweek.h6
-rw-r--r--core/pim/datebook/datebookweekheaderimpl.cpp26
-rw-r--r--core/pim/datebook/datebookweekheaderimpl.h4
-rw-r--r--core/pim/datebook/datebookweeklst.cpp76
-rw-r--r--core/pim/datebook/datebookweeklst.h11
6 files changed, 66 insertions, 104 deletions
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<EffectiveEvent> &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();
};