diff options
Diffstat (limited to 'src/saverwidget.cpp')
-rw-r--r-- | src/saverwidget.cpp | 99 |
1 files changed, 26 insertions, 73 deletions
diff --git a/src/saverwidget.cpp b/src/saverwidget.cpp index 027212f..17353d6 100644 --- a/src/saverwidget.cpp +++ b/src/saverwidget.cpp @@ -1,11 +1,13 @@ #include "saverwidget.h" #include "ui_saver.h" #include "screensaver.h" +#include "deadlinetype.h" #include <QTimer> #include <QX11Info> #include <QDateTime> #include <QSettings> +#include <QFile> #include <X11/Xlib.h> static const QChar C_ZERO('0'); @@ -29,7 +31,7 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) : _logoutDeadline(0), _shutdownDeadline(0), _counter(0), - _deadlineType(DeadlineType::Unspecified), + _deadlineType(DeadlineType::Unknown), _standbyDisabled(false), _isLocked(false) { @@ -40,52 +42,37 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) : if (_counter % 60 == 0) { this->reloadValues(); } - if (_counter % 10 == 0) { + if (_counter % 4 == 0) { _isLocked = ScreenSaver::isLocked(); } _counter++; qlonglong now = QDateTime::currentMSecsSinceEpoch() / 1000; // Determine what's timing out next (session/schedule) - DeadlineType type = DeadlineType::Unspecified; - qlonglong shutdownRemaining = _shutdownDeadline - now; - qlonglong logoutRemaining = _logoutDeadline - now; - if (shutdownRemaining > -330 && (shutdownRemaining < logoutRemaining || logoutRemaining <= -330)) { - type = DeadlineType::Shutdown; - } else if (logoutRemaining > -330) { - type = (_isLocked ? DeadlineType::IdleKillLocked : DeadlineType::IdleKill); - } - if (type == DeadlineType::Shutdown) { - // Shutdown is about to happen (sooner than idle logout) - if (shutdownRemaining < 0) { - ui->lblHeader->setText(QString("Dieser Rechner ist seit %1 ausgeschaltet (theoretisch zumindest)").arg(formatTime(-shutdownRemaining))); - } else { - ui->lblHeader->setText(QString("Achtung: Rechner wird in %1 heruntergefahren!").arg(formatTime(shutdownRemaining))); - } - } else if (type == DeadlineType::IdleKillLocked) { - // Idle logout is about to happen - if (logoutRemaining < 0) { - //ui->lblHeader->setText("Diese Sitzung kann durch einen Klick auf 'New Login' beendet werden..."); - ui->lblHeader->setText("Diese Sitzung wird in Kürze beendet..."); - } else { - ui->lblHeader->setText(QString("Diese Sitzung wird in %1 beendet, wenn sie nicht entsperrt wird.").arg(formatTime(logoutRemaining))); - } - } else if (type == DeadlineType::IdleKill) { - // Idle logout is about to happen, but password is not required to reactivate session - if (logoutRemaining < 0) { - ui->lblHeader->setText("Hier hat wohl jemand vergessen sich auszuloggen..."); - } else { - ui->lblHeader->setText(QString("Diese Sitzung wird in %1 beendet, wenn sie nicht weiter verwendet wird.").arg(formatTime(logoutRemaining))); - } - } else { - if (_isLocked) { - ui->lblHeader->setText("Rechner gesperrt"); + const DeadlineType *type; + qlonglong remaining = 0; + do { + qlonglong shutdownRemaining = _shutdownDeadline - now; + qlonglong logoutRemaining = _logoutDeadline - now; + if (shutdownRemaining > -330 && (shutdownRemaining < logoutRemaining || logoutRemaining <= -330)) { + type = DeadlineType::Shutdown; + remaining = shutdownRemaining; + } else if (logoutRemaining > -330) { + type = DeadlineType::IdleKill; + remaining = logoutRemaining; } else { - ui->lblHeader->setText("Schon schon schon..."); + type = DeadlineType::NoTimeout; } + } while (0); + if (remaining < 0) { + remaining = 0; } + ui->lblHeader->setText(type->headerLine(_isLocked).arg(formatTime(remaining))); ui->lblClock->setText(QDateTime::currentDateTime().toString(QLocale().dateFormat() + " HH:mm ")); - displayText(type); - bool shouldDisable = (logoutRemaining > -330 && logoutRemaining < 310) || (shutdownRemaining > -330 && shutdownRemaining < 310); + if (_deadlineType != type) { + _deadlineType = type; + ui->lblText->setText(type->bodyText(_isLocked)); + } + bool shouldDisable = (remaining > 0 && remaining < 310); if (_standbyDisabled != shouldDisable) { _standbyDisabled = shouldDisable; if (shouldDisable) { @@ -97,7 +84,6 @@ SaverWidget::SaverWidget(WId parentWinId, QWidget *parent) : } }); t->start(); - this->setMouseTracking(true); reloadValues(); } @@ -117,40 +103,7 @@ void SaverWidget::reloadValues() _logoutDeadline = s.value("lockDeadline", 0).toLongLong(); _shutdownDeadline = s.value("shutdownDeadline", 0).toLongLong(); // TODO: Load text strings for everything - _deadlineType = DeadlineType::Unspecified; -} - -void SaverWidget::displayText(DeadlineType dlt) -{ - if (_deadlineType == dlt) - return; - _deadlineType = dlt; - if (dlt == DeadlineType::IdleKillLocked) { - ui->lblText->setText("<html><body><br>" - "Zum oben angegebenen Zeitpunkt wird die aktuell laufende Sitzung beendet, " - "wenn sie zuvor nicht wieder entsperrt wird.<br>" - "Alle noch laufenden Programme (z.B. Word, Photoshop, Matlab, etc.)<br>" - "werden ohne Nachfrage geschlossen. Stellen Sie daher sicher, bis zum angegebenen Zeitpunkt<br>" - "sämtliche sich in Bearbeitung befindlichen Daten abzuspeichern, bzw. die Sitzung wieder zu entsperren.<br><br>" - "Dies dient dazu zu vermeiden, dass ein Rechner stundenlang gesperrt wird und somit<br>" - "anderen Nutzern nicht zur Verfügung steht.</body></html>"); - } else if (dlt == DeadlineType::IdleKill) { - ui->lblText->setText("<html><body>Keine Nutzeraktivität festgestellt.<br>" - "Zum oben angegebenen Zeitpunkt wird die aktuell laufende Sitzung beendet, " - "wenn der Rechner nicht mehr verwendet wird.<br>" - "Alle noch laufenden Programme (z.B. Word, Photoshop, Matlab, etc.)<br>" - "werden ohne Nachfrage geschlossen. Stellen Sie daher sicher, bis zum angegebenen Zeitpunkt<br>" - "sämtliche sich in Bearbeitung befindlichen Daten abzuspeichern.<br><br>" - "Dies dient dazu zu vermeiden, dass ein Rechner stundenlang gesperrt wird und somit<br>" - "anderen Nutzern nicht zur Verfügung steht.</body></html>"); - } else if (dlt == DeadlineType::Shutdown) { - ui->lblText->setText("<html><body>Achtung: Zum oben angegebenen Zeitpunkt wird der Computer heruntergefahren bzw. neugestartet.<br>" - "Alle noch laufenden Programme (z.B. Word, Photoshop, Matlab, etc.)<br>" - "werden ohne Nachfrage beendet. Stellen Sie daher sicher, bis zum angegebenen Zeitpunkt<br>" - "sämtliche Daten abzuspeichern und die Sitzung zu verlassen.</body></html>"); - } else { - ui->lblText->setText(""); - } + _deadlineType = DeadlineType::Unknown; } void SaverWidget::mouseMoveEvent(QMouseEvent *) |