From 701240fa88cacc82261c5210e49860910d415266 Mon Sep 17 00:00:00 2001 From: Philipp Spitzer Date: Wed, 21 Sep 2011 19:29:43 +0000 Subject: [PATCH] Cleanup daynavigatorwidget. --- src/gui/daynavigatorwidget.cpp | 108 ++++++++++++++++----------------- src/gui/daynavigatorwidget.h | 54 ++--------------- 2 files changed, 56 insertions(+), 106 deletions(-) diff --git a/src/gui/daynavigatorwidget.cpp b/src/gui/daynavigatorwidget.cpp index 48ca927..f8674af 100644 --- a/src/gui/daynavigatorwidget.cpp +++ b/src/gui/daynavigatorwidget.cpp @@ -20,89 +20,84 @@ #include "daynavigatorwidget.h" #include -#include #include -#include -DayNavigatorWidget::DayNavigatorWidget(QWidget *aParent) - : QWidget(aParent) - , mStartDate(QDate()) - , mEndDate(QDate()) - , mCurDate(QDate()) -{ - setupUi(this); +DayNavigatorWidget::DayNavigatorWidget(QWidget *aParent): QWidget(aParent) { + setupUi(this); + connect(prevDayButton, SIGNAL(clicked()), SLOT(prevDayButtonClicked())); connect(nextDayButton, SIGNAL(clicked()), SLOT(nextDayButtonClicked())); connect(todayButton, SIGNAL(clicked()), SLOT(todayButtonClicked())); - - mFontMetrics = new QFontMetrics(QLabel().font()); } -void DayNavigatorWidget::setDates(const QDate &aStartDate, const QDate &aEndDate) -{ - Q_ASSERT(aStartDate<=aEndDate); + +void DayNavigatorWidget::setDates(const QDate &aStartDate, const QDate &aEndDate) { + Q_ASSERT(aStartDate.isValid() && aEndDate.isValid() && aStartDate<=aEndDate); mStartDate = aStartDate; mEndDate = aEndDate; + if (!mCurDate.isValid()) mCurDate = mStartDate; // if mCurDate is out of range, set it to mstartDate else if (mCurDate < mStartDate || mCurDate > mEndDate) mCurDate = mStartDate; - prevDayButton->setDisabled(mCurDate == mStartDate); - nextDayButton->setDisabled(mCurDate == mEndDate); + configureNavigation(); emit(dateChanged(mCurDate)); this->update(); } -void DayNavigatorWidget::configureNavigation() -{ - // check start date - if(mCurDate==mStartDate || mStartDate==mEndDate) - prevDayButton->setDisabled(true); - else - prevDayButton->setDisabled(false); - // check end date - if(mCurDate==mEndDate || mStartDate==mEndDate) - nextDayButton->setDisabled(true); - else - nextDayButton->setDisabled(false); -} -void DayNavigatorWidget::prevDayButtonClicked() -{ - if(mCurDate>mStartDate) - { - mCurDate = mCurDate.addDays(-1); - configureNavigation(); - emit(dateChanged(mCurDate)); - this->update(); +void DayNavigatorWidget::setCurDate(const QDate& curDate) { + Q_ASSERT(curDate.isValid()); + if (curDate == mCurDate) return; + + if (!mStartDate.isValid()) { + // the start and end date have not been set + mStartDate = curDate; + mEndDate = curDate; + mCurDate = curDate; } + + else if (curDate < mStartDate) mCurDate = mStartDate; + else if (curDate > mEndDate) mCurDate = mEndDate; + else mCurDate = curDate; + + configureNavigation(); + emit(dateChanged(mCurDate)); + this->update(); } -void DayNavigatorWidget::nextDayButtonClicked() -{ - if(mCurDateupdate(); - } + +void DayNavigatorWidget::configureNavigation() { + prevDayButton->setDisabled(mCurDate == mStartDate); + nextDayButton->setDisabled(mCurDate == mEndDate); } -void DayNavigatorWidget::todayButtonClicked() -{ - QDate targetDate = QDate::currentDate(); - if (targetDate>mStartDate && targetDateupdate(); - } + +void DayNavigatorWidget::prevDayButtonClicked() { + if(mCurDate <= mStartDate) return; + mCurDate = mCurDate.addDays(-1); + configureNavigation(); + emit(dateChanged(mCurDate)); + this->update(); +} + + +void DayNavigatorWidget::nextDayButtonClicked() { + if(mCurDate >= mEndDate) return; + mCurDate = mCurDate.addDays(1); + configureNavigation(); + emit(dateChanged(mCurDate)); + this->update(); } + +void DayNavigatorWidget::todayButtonClicked() { + setCurDate(QDate::currentDate()); +} + + void DayNavigatorWidget::paintEvent(QPaintEvent *aEvent) { Q_UNUSED(aEvent); @@ -134,4 +129,3 @@ void DayNavigatorWidget::paintEvent(QPaintEvent *aEvent) painter.drawText(q, Qt::AlignCenter, selectedDateStr); painter.restore(); } - diff --git a/src/gui/daynavigatorwidget.h b/src/gui/daynavigatorwidget.h index 79d71f0..de8cc22 100644 --- a/src/gui/daynavigatorwidget.h +++ b/src/gui/daynavigatorwidget.h @@ -24,59 +24,16 @@ #include #include -/*#include */ -/*#include */ - -/*class QFontMetrics;*/ - -/*class VerticalLabel : public QWidget*/ -/*{*/ - -/*public:*/ -/*VerticalLabel(QWidget *aParent = NULL)*/ -/*: QWidget(aParent)*/ -/*, mText("")*/ -/*{*/ -/*mFont = QLabel().font();*/ -/*} */ - -/*void paintEvent(QPaintEvent *)*/ -/*{ */ -/*QPainter p(this);*/ -/*drawRotatedText(&p, 270, width()/2, height()/2, mText);*/ -/*} */ - -/*void drawRotatedText(QPainter *aPainter, qreal aDegrees, int x, int y, const QString &aText)*/ -/*{ */ - -/*aPainter->save();*/ -/*aPainter->setFont(mFont);*/ -/*aPainter->translate(x, y); */ -/*aPainter->rotate(aDegrees);*/ -/*QFontMetrics fm(mFont);*/ -/*QRect r = fm.boundingRect(aText);*/ -/*aPainter->drawText(-r.width()/2, fm.descent()/2, aText);*/ -/*aPainter->restore();*/ -/*} */ - -/*void setText(const QString &aText)*/ -/*{*/ -/*mText = aText;*/ -/*update();*/ -/*}*/ - -/*private:*/ -/*QString mText;*/ -/*QFont mFont;*/ -/*};*/ - -class DayNavigatorWidget : public QWidget, private Ui::DayNavigatorWidget -{ +/** The DayNavigator widget manages three dates, the startDate, curDate and endDate. +Either startDate, curDate and endDate all have to be valid and startDate <= curDate <= endDate, +OR all three dates are invalid (representing "no date range", e.g. no conference). */ +class DayNavigatorWidget : public QWidget, private Ui::DayNavigatorWidget { Q_OBJECT public: DayNavigatorWidget(QWidget *aParent = NULL); ~DayNavigatorWidget() {} void setDates(const QDate &aStartDate, const QDate &aEndDate); + void setCurDate(const QDate& curDate); QDate curDate() const {return mCurDate;} protected: void paintEvent(QPaintEvent *); @@ -91,7 +48,6 @@ class DayNavigatorWidget : public QWidget, private Ui::DayNavigatorWidget QDate mStartDate; QDate mEndDate; QDate mCurDate; - QFontMetrics *mFontMetrics; }; #endif /* DAYNAVIGATORWIDGET_H */ -- 2.39.5