From 5b7fa79bd7a4f4b468a82947cc1659e866084c73 Mon Sep 17 00:00:00 2001 From: Philipp Spitzer Date: Wed, 28 Jul 2021 23:41:14 +0200 Subject: [PATCH] Adjust shown event time when displayTimeShift is set. --- src/gui/daynavigatorwidget.cpp | 20 ++++++++++++++++++-- src/gui/mainwindow.cpp | 11 ++++++++--- src/mvc/conference.cpp | 3 +++ src/mvc/conference.h | 5 +++++ src/mvc/conferencemodel.cpp | 18 ++++++++++-------- src/mvc/conferencemodel.h | 4 +++- src/mvc/delegate.cpp | 5 ++++- src/mvc/eventmodel.cpp | 7 ++++++- 8 files changed, 57 insertions(+), 16 deletions(-) diff --git a/src/gui/daynavigatorwidget.cpp b/src/gui/daynavigatorwidget.cpp index 0fdfe97..82b3443 100644 --- a/src/gui/daynavigatorwidget.cpp +++ b/src/gui/daynavigatorwidget.cpp @@ -21,6 +21,8 @@ #include #include +#include +#include DayNavigatorWidget::DayNavigatorWidget(QWidget *aParent): QWidget(aParent) { @@ -107,8 +109,22 @@ void DayNavigatorWidget::nextDayButtonClicked() { void DayNavigatorWidget::paintEvent(QPaintEvent *aEvent) { Q_UNUSED(aEvent); - - QString selectedDateStr = mCurDate.isValid() ? mCurDate.toString("dddd\nyyyy-MM-dd") : tr("No date"); + QString selectedDateStr; + if (mCurDate.isValid()) { + selectedDateStr = mCurDate.toString("dddd\nyyyy-MM-dd"); + 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(); diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index 9181343..550e3fd 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -37,6 +37,7 @@ #include #include +#include #include "ui_about.h" #include "eventdialog.h" @@ -238,22 +239,24 @@ void MainWindow::onSystemTrayMessageClicked() { void MainWindow::onAlarmTimerTimeout() { // determine if an alarm is set on an event that's starting soon - QList events = Event::getImminentAlarmEvents(AppSettings::preEventAlarmSec(), Conference::activeConference()); + int conferenceId = Conference::activeConference(); + QList events = Event::getImminentAlarmEvents(AppSettings::preEventAlarmSec(), conferenceId); if (events.empty()) return; // build a message string + const Conference conference = Conference::getById(conferenceId); Event event; QString title; QString message; if (events.size() == 1) { event = events.first(); - title = tr("Next event at %1").arg(event.start().toString("HH:mm")); + title = tr("Next event at %1").arg(conference.shiftTime(event.start().time()).toString("HH:mm")); message = tr("\"%1\"\n(%2)").arg(event.title()).arg(event.room()->name()); } else { title = tr("%1 upcoming events").arg(events.size()); QStringList messages; foreach (event, events) { - messages += tr("%1: \"%2\" (%3)").arg(event.start().toString("HH:mm")).arg(event.title()).arg(event.room()->name()); + messages += tr("%1: \"%2\" (%3)").arg(conference.shiftTime(event.start().time()).toString("HH:mm")).arg(event.title()).arg(event.room()->name()); } message = messages.join("\n"); } @@ -322,6 +325,7 @@ void MainWindow::initTabs() if (confId != -1) // only init tabs if a conference is active { Conference active = Conference::getById(confId); + ((Application*) qApp)->setActiveConference(active); QDate startDate = active.start(); QDate endDate = active.end(); @@ -345,6 +349,7 @@ void MainWindow::unsetConference() clearTabs(); dayNavigator->unsetDates(); setWindowTitle(saved_title); + ((Application*) qApp)->unsetActiveConference(); } diff --git a/src/mvc/conference.cpp b/src/mvc/conference.cpp index dde854a..2fd7af0 100644 --- a/src/mvc/conference.cpp +++ b/src/mvc/conference.cpp @@ -60,3 +60,6 @@ int Conference::activeConference() { } +QTime Conference::shiftTime(const QTime& value) const { + return value.addSecs(displayTimeShift() * 60); +} diff --git a/src/mvc/conference.h b/src/mvc/conference.h index f042445..8f8abff 100644 --- a/src/mvc/conference.h +++ b/src/mvc/conference.h @@ -55,6 +55,8 @@ public: int utcOffset() const {return value("utc_offset").toInt();} bool hasDisplayTimeShift() const {return !value("display_time_shift").isNull();} int displayTimeShift() const {return value("display_time_shift").toInt();} + void setDisplayTimeShift(int newValue) {setValue("display_time_shift", newValue); update("display_time_shift");} + bool isActive() const { return value("active").toBool(); } QString url() const { return stringFromNullable(value("url")); } @@ -64,6 +66,9 @@ public: update("url"); } + /// Returns a QTime that is shifted by displayTimeShift minutes + QTime shiftTime(const QTime& value) const; + private: static QString stringFromNullable(const QVariant& v) { diff --git a/src/mvc/conferencemodel.cpp b/src/mvc/conferencemodel.cpp index c03761c..604d98f 100644 --- a/src/mvc/conferencemodel.cpp +++ b/src/mvc/conferencemodel.cpp @@ -39,19 +39,21 @@ QVariant ConferenceModel::data(const QModelIndex& index, int role) const if (role != Qt::DisplayRole) { return QVariant(); } - return conferences[index.row()].title(); +} - try { - const Conference& c = conferenceFromIndex(index); - return c.title(); - } catch (OrmNoObjectException&) { - return QVariant(); +const Conference& ConferenceModel::conferenceFromIndex(const QModelIndex& index) const +{ + if (index.parent().isValid() + or index.column() != 0 + or index.row() >= conferences.size()) + { + throw OrmNoObjectException(); } - + return conferences[index.row()]; } -const Conference& ConferenceModel::conferenceFromIndex(const QModelIndex& index) const +Conference& ConferenceModel::conferenceFromIndex(const QModelIndex& index) { if (index.parent().isValid() or index.column() != 0 diff --git a/src/mvc/conferencemodel.h b/src/mvc/conferencemodel.h index b7297ba..34cfa35 100644 --- a/src/mvc/conferencemodel.h +++ b/src/mvc/conferencemodel.h @@ -29,7 +29,8 @@ It also provides typed access to the conferences from ConferenceEditor. -It does not actually modify anything in DB, this is performed by other classes. +It does not actually modify anything in DB (unless methods changing the conference instance returned by conferenceFromIndex are used), +this is performed by other classes. \see ConferenceEditor, MainWindow::showConferences() */ @@ -43,6 +44,7 @@ public: virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; const Conference& conferenceFromIndex(const QModelIndex&) const; + Conference& conferenceFromIndex(const QModelIndex&); QModelIndex indexFromId(int id) const; public slots: void newConferenceBegin(); diff --git a/src/mvc/delegate.cpp b/src/mvc/delegate.cpp index a3e64a7..33b59c8 100644 --- a/src/mvc/delegate.cpp +++ b/src/mvc/delegate.cpp @@ -23,7 +23,9 @@ #include #include +#include +#include "conference.h" #include "room.h" const int SPACER = 10; @@ -147,7 +149,8 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons painter->setPen(QPen(conflictSeverity != csNone ? Qt::black : textColor)); QPointF titlePointF(option.rect.x() + SPACER, option.rect.y() + SPACER + mControls[FavouriteControlStrong]->image()->height()); - QTime start = event->start().time(); + Conference& conference = ((Application*) qApp)->activeConference(); + QTime start = conference.shiftTime(event->start().time()); painter->setFont(fontBig); painter->drawText(titlePointF,start.toString("hh:mm") + "-" + start.addSecs(event->duration()).toString("hh:mm") + ", " + event->roomName()); diff --git a/src/mvc/eventmodel.cpp b/src/mvc/eventmodel.cpp index ff3d0eb..ac131a4 100644 --- a/src/mvc/eventmodel.cpp +++ b/src/mvc/eventmodel.cpp @@ -22,6 +22,8 @@ #include "track.h" #include "room.h" +#include + const QString EventModel::COMMA_SEPARATOR = ", "; EventModel::EventModel() @@ -34,7 +36,10 @@ void EventModel::Group::setTitle(const QList& mEvents) { for (int i = mFirstEventIndex; i != mFirstEventIndex + mChildCount; ++i) { endTime = qMax(mEvents.at(i).start().addSecs(mEvents.at(i).duration()), endTime); } - mTitle = QString("%1 - %2").arg(startTime.toString("HH:mm")).arg(endTime.toString("HH:mm")); + Conference& conference = ((Application*) qApp)->activeConference(); + QTime s = conference.shiftTime(startTime.time()); + QTime e = conference.shiftTime(endTime.time()); + mTitle = QString("%1 - %2").arg(s.toString("HH:mm")).arg(e.toString("HH:mm")); } -- 2.39.5