X-Git-Url: https://git.toastfreeware.priv.at/toast/confclerk.git/blobdiff_plain/1006c4f227463a6d15169edc89a1fd99bfdb557d..080dc7d603d45ba0662aa731418993ddd45b5fe8:/src/gui/daynavigatorwidget.cpp diff --git a/src/gui/daynavigatorwidget.cpp b/src/gui/daynavigatorwidget.cpp index 48ce89a..1b61efd 100644 --- a/src/gui/daynavigatorwidget.cpp +++ b/src/gui/daynavigatorwidget.cpp @@ -1,6 +1,6 @@ /* * Copyright (C) 2010 Ixonos Plc. - * Copyright (C) 2011 Philipp Spitzer, gregor herrmann + * Copyright (C) 2011-2024 Philipp Spitzer, gregor herrmann, Stefan Stahl * * This file is part of ConfClerk. * @@ -17,107 +17,134 @@ * You should have received a copy of the GNU General Public License along with * ConfClerk. If not, see . */ -#include "daynavigatorwidget.h" #include -#include #include -#include +#include "daynavigatorwidget.h" +#include "conference.h" +#include "application.h" + + +DayNavigatorWidget::DayNavigatorWidget(QWidget *aParent): QWidget(aParent) { + setupUi(this); -DayNavigatorWidget::DayNavigatorWidget(QWidget *aParent) - : QWidget(aParent) - , mStartDate(QDate()) - , mEndDate(QDate()) - , mCurDate(QDate()) -{ - 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()); + configureNavigation(); } -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; - else if (mCurDate < mStartDate) mCurDate = mStartDate; - else if (mCurDate > mEndDate) mCurDate = mEndDate; + // 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::unsetDates() { + mStartDate= QDate(); + mEndDate = QDate(); + mCurDate = QDate(); + + configureNavigation(); + emit(dateChanged(mCurDate)); + this->update(); } -void DayNavigatorWidget::todayButtonClicked() -{ - QDate targetDate = QDate::currentDate(); - if (targetDate>mStartDate && targetDateupdate(); - } +QSize DayNavigatorWidget::minimumSizeHint() const { +#ifdef MAEMO + return QSize(20, 0); +#else + return QSize(fontMetrics().lineSpacing() * 3 / 2, 0); +#endif } -void DayNavigatorWidget::paintEvent(QPaintEvent *aEvent) -{ - Q_UNUSED(aEvent); - QString selectedDateStr = mCurDate.toString("dddd\nyyyy-MM-dd"); - QPainter painter(this); - painter.save(); +void DayNavigatorWidget::configureNavigation() { + prevDayButton->setDisabled(!mStartDate.isValid() || mCurDate == mStartDate); + nextDayButton->setDisabled(!mEndDate.isValid() || mCurDate == mEndDate); +} - // rectangle only for the text - int marginSize = 9; - int buttonSize = 32; + +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::paintEvent(QPaintEvent *aEvent) { + Q_UNUSED(aEvent); + QString selectedDateStr; + if (mCurDate.isValid()) { + QString selectedDateFormat = #ifdef MAEMO - QRect q(y()-height()+1*marginSize+2.5*buttonSize, x(), height()-2*marginSize-2.5*buttonSize, width()); + "dddd\nyyyy-MM-dd"; #else - QRect q(y()-height()+1*marginSize+2*buttonSize, x(), height()-2*marginSize-3*buttonSize, width()); + "dddd • yyyy-MM-dd"; #endif + selectedDateStr = mCurDate.toString(selectedDateFormat); + bool hasConference = ((Application*) qApp)->hasActiveConference(); + if (hasConference) { + Conference& conference = ((Application*) qApp)->activeConference(); + if (conference.hasDisplayTimeShift() && conference.displayTimeShift() != 0) { + QTime shift(0, 0); + bool minus = conference.displayTimeShift() < 0; + shift = shift.addSecs(conference.displayTimeShift() * 60 * (minus ? -1 : 1)); + selectedDateStr += " • " + (minus ? QString("-") : "+") + shift.toString("HH:mm"); + } + } + } else { + selectedDateStr = tr("No date"); + } + QPainter painter(this); + painter.save(); + + // rectangle only for the text + QRect q(-selectedDate->height()-selectedDate->y(), selectedDate->x(), selectedDate->height(), selectedDate->width()); painter.rotate(270); // font size adjustion, static on maemo, dynamically otherwise @@ -125,7 +152,12 @@ void DayNavigatorWidget::paintEvent(QPaintEvent *aEvent) #ifdef MAEMO qreal factor = 0.8; #else - qreal factor = (qreal) 2 * q.width() / painter.fontMetrics().width(selectedDateStr); +#if QT_VERSION >= 0x050b00 // QT 5.11 + auto dateStrWidth = painter.fontMetrics().horizontalAdvance(selectedDateStr); +#else + auto dateStrWidth = painter.fontMetrics().width(selectedDateStr); +#endif + qreal factor = (qreal) 2 * q.width() / dateStrWidth; #endif if (factor < 1) f.setPointSizeF(f.pointSizeF() * factor); painter.setFont(f); @@ -133,4 +165,3 @@ void DayNavigatorWidget::paintEvent(QPaintEvent *aEvent) painter.drawText(q, Qt::AlignCenter, selectedDateStr); painter.restore(); } -