Adjust shown event time when displayTimeShift is set.
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Wed, 28 Jul 2021 21:41:14 +0000 (23:41 +0200)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Wed, 28 Jul 2021 21:41:39 +0000 (23:41 +0200)
src/gui/daynavigatorwidget.cpp
src/gui/mainwindow.cpp
src/mvc/conference.cpp
src/mvc/conference.h
src/mvc/conferencemodel.cpp
src/mvc/conferencemodel.h
src/mvc/delegate.cpp
src/mvc/eventmodel.cpp

index 0fdfe97ff74f1efe5ec37e98750918dee6c3ac3c..82b34438156d8d869e4842228bd819f10dfc3531 100644 (file)
@@ -21,6 +21,8 @@
 
 #include <QPainter>
 #include <QLabel>
+#include <conference.h>
+#include <application.h>
 
 
 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();
 
index 918134382b7caaaa0661c9c3c9c49f2aed5d23f1..550e3fd0bc8f793bee802be2b99f03f7d06dd969 100644 (file)
@@ -37,6 +37,7 @@
 
 #include <QDialog>
 #include <QMessageBox>
+#include <application.h>
 
 #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<Event> events = Event::getImminentAlarmEvents(AppSettings::preEventAlarmSec(), Conference::activeConference());
+    int conferenceId = Conference::activeConference();
+    QList<Event> 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();
 }
 
 
index dde854aaf985d9e7a6ea4149ebbd5960034f6a99..2fd7af0efdcaf0f22001a1ea1019717b64052ca6 100644 (file)
@@ -60,3 +60,6 @@ int Conference::activeConference() {
 }
 
 
+QTime Conference::shiftTime(const QTime& value) const {
+    return value.addSecs(displayTimeShift() * 60);
+}
index f042445293bd85e79083b84a554c17e33a7025a0..8f8abff35cebdefc11c4dcb6c761342a782a5a3d 100644 (file)
@@ -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)
     {
index c03761cfd96d9c3193d87287600c0217b8264677..604d98fc89cfdb123c1eb8b538bbc87bf4036d6d 100644 (file)
@@ -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
index b7297ba2c83218a2f2447df376f9596ce572d2cc..34cfa35a024fd4f2a2188f6834c4c3723ec05936 100644 (file)
@@ -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();
index a3e64a7b3df4f0431e96dcde2ab7a68a210b512b..33b59c86d3c422277f07b0b7713ef40207a6ce06 100644 (file)
@@ -23,7 +23,9 @@
 
 #include <QDebug>
 #include <QPainter>
+#include <application.h>
 
+#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());
 
index ff3d0ebede1201bb1ad6bc6e7a8e3d20e6a0bebf..ac131a4099b52d6d023d8b690a7593d6e2f0cd57 100644 (file)
@@ -22,6 +22,8 @@
 #include "track.h"
 #include "room.h"
 
+#include <application.h>
+
 const QString EventModel::COMMA_SEPARATOR = ", ";
 
 EventModel::EventModel()
@@ -34,7 +36,10 @@ void EventModel::Group::setTitle(const QList<Event>& 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"));
 }