From 68909a15f92aaf4dc4e4d0a6ebcee6a15b6de87b Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Tue, 19 Dec 2017 21:20:16 +0100 Subject: [PATCH] Fixed #31 and #35 --- plugins/presenceplugin/presencewidget.cpp | 10 ++-- plugins/presenceplugin/presencewidget.h | 2 +- plugins/reportsplugin/reportswidget.cpp | 3 ++ zeiterfassunglib/mainwindow.cpp | 62 ++++++++--------------- zeiterfassunglib/mainwindow.h | 8 ++- 5 files changed, 37 insertions(+), 48 deletions(-) diff --git a/plugins/presenceplugin/presencewidget.cpp b/plugins/presenceplugin/presencewidget.cpp index 35d19f1..cbcbca6 100644 --- a/plugins/presenceplugin/presencewidget.cpp +++ b/plugins/presenceplugin/presencewidget.cpp @@ -14,6 +14,8 @@ PresenceWidget::PresenceWidget(MainWindow &mainWindow) : QWidget(&mainWindow), m_mainWindow(mainWindow) { + connect(&m_mainWindow, &MainWindow::refreshEverything, this, &PresenceWidget::refresh); + m_labelAvailable = new QLabel(this); m_labelAvailable->setFrameShape(QFrame::Panel); m_labelAvailable->setFrameShadow(QFrame::Sunken); @@ -25,17 +27,17 @@ PresenceWidget::PresenceWidget(MainWindow &mainWindow) : m_mainWindow.statusBar()->addWidget(m_labelNotAvailable); m_action = m_mainWindow.menuView()->addAction(QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/refresh.png")), - tr("Refresh presence"), this, &PresenceWidget::timeout); + tr("Refresh presence"), this, &PresenceWidget::refresh); auto timer = new QTimer(this); timer->setInterval(60000); - connect(timer, &QTimer::timeout, this, &PresenceWidget::timeout); + connect(timer, &QTimer::timeout, this, &PresenceWidget::refresh); timer->start(); - timeout(); + refresh(); } -void PresenceWidget::timeout() +void PresenceWidget::refresh() { m_labelAvailable->setText(tr("%0: %1").arg(tr("Available")).arg(tr("???"))); m_labelNotAvailable->setText(tr("%0: %1").arg(tr("Not available")).arg(tr("???"))); diff --git a/plugins/presenceplugin/presencewidget.h b/plugins/presenceplugin/presencewidget.h index 90d2433..ce7f6dc 100644 --- a/plugins/presenceplugin/presencewidget.h +++ b/plugins/presenceplugin/presencewidget.h @@ -18,7 +18,7 @@ public: explicit PresenceWidget(MainWindow &mainWindow); private Q_SLOTS: - void timeout(); + void refresh(); void finished(); private: diff --git a/plugins/reportsplugin/reportswidget.cpp b/plugins/reportsplugin/reportswidget.cpp index c448ca5..1aded66 100644 --- a/plugins/reportsplugin/reportswidget.cpp +++ b/plugins/reportsplugin/reportswidget.cpp @@ -18,6 +18,9 @@ ReportsWidget::ReportsWidget(MainWindow &mainWindow) : QWidget(&mainWindow), m_mainWindow(mainWindow) { + connect(&m_mainWindow, &MainWindow::dateChanged, this, &ReportsWidget::dateChanged); + connect(&m_mainWindow, &MainWindow::refreshEverything, this, &ReportsWidget::refresh); + m_labelBalance = new QLabel(this); m_labelBalance->setFrameShape(QFrame::Panel); m_labelBalance->setFrameShadow(QFrame::Sunken); diff --git a/zeiterfassunglib/mainwindow.cpp b/zeiterfassunglib/mainwindow.cpp index b3908d7..29abb46 100644 --- a/zeiterfassunglib/mainwindow.cpp +++ b/zeiterfassunglib/mainwindow.cpp @@ -38,13 +38,6 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass { ui->setupUi(this); - for(quint8 i = 0; i < 7; i++) - { - m_stripsWidgets[i] = new StripsWidget(*this, ui->widgetWeek); - connect(m_stripsWidgets[i], &StripsWidget::refreshingChanged, this, &MainWindow::refreshingChanged); - ui->layoutWeek->addWidget(m_stripsWidgets[i]); - } - setWindowTitle(tr("Zeiterfassung - %0 (%1)").arg(m_userInfo.text).arg(m_userInfo.email)); ui->actionQuit->setShortcut(QKeySequence::Quit); @@ -52,7 +45,7 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->actionToday, &QAction::triggered, [=](){ ui->dateEditDate->setDate(QDate::currentDate()); }); ui->actionRefresh->setShortcut(QKeySequence::Refresh); - connect(ui->actionRefresh, &QAction::triggered, this, [=](){ dateChanged(true); }); + connect(ui->actionRefresh, &QAction::triggered, this, &MainWindow::refreshEverything); connect(ui->actionAboutMe, &QAction::triggered, [=](){ AboutMeDialog(userInfo, this).exec(); }); connect(ui->actionSettings, &QAction::triggered, [=](){ SettingsDialog(m_settings, this).exec(); }); @@ -62,7 +55,7 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->actionAboutQt, &QAction::triggered, [=](){ QMessageBox::aboutQt(this); }); ui->dateEditDate->setDate(QDate::currentDate()); - connect(ui->dateEditDate, &QDateTimeEdit::dateChanged, this, [=](){ dateChanged(false); }); + connect(ui->dateEditDate, &QDateTimeEdit::dateChanged, this, &MainWindow::dateChangedSlot); connect(ui->pushButtonPrev, &QAbstractButton::pressed, [=](){ ui->dateEditDate->setDate(ui->dateEditDate->date().addDays(-1)); }); connect(ui->pushButtonNext, &QAbstractButton::pressed, [=](){ ui->dateEditDate->setDate(ui->dateEditDate->date().addDays(1)); }); @@ -83,7 +76,14 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass connect(ui->pushButtonStart, &QAbstractButton::pressed, this, &MainWindow::pushButtonStartPressed); connect(ui->pushButtonEnd, &QAbstractButton::pressed, this, &MainWindow::pushButtonEndPressed); - dateChanged(); + for(quint8 i = 0; i < 7; i++) + { + m_stripsWidgets[i] = new StripsWidget(*this, ui->widgetWeek); + connect(this, &MainWindow::refreshEverything, m_stripsWidgets[i], &StripsWidget::refresh); + ui->layoutWeek->addWidget(m_stripsWidgets[i]); + } + + dateChangedSlot(ui->dateEditDate->date()); } MainWindow::~MainWindow() @@ -141,6 +141,11 @@ QDate MainWindow::date() const return ui->dateEditDate->date(); } +void MainWindow::setDate(const QDate &date) +{ + ui->dateEditDate->setDate(date); +} + const QMap &MainWindow::projects() const { return m_projects; @@ -305,18 +310,17 @@ void MainWindow::pushButtonEndPressed() ui->pushButtonNext->setEnabled(false); } -void MainWindow::dateChanged(bool force) +void MainWindow::dateChangedSlot(const QDate &date) { - auto firstDayOfWeek = ui->dateEditDate->date().addDays(-(ui->dateEditDate->date().dayOfWeek() - 1)); + auto firstDayOfWeek = date.addDays(-(ui->dateEditDate->date().dayOfWeek() - 1)); for(quint8 i = 0; i < 7; i++) { - auto date = firstDayOfWeek.addDays(i); + auto weekDay = firstDayOfWeek.addDays(i); - if(force || m_stripsWidgets[i]->date() != date) - m_stripsWidgets[i]->setDate(date); + m_stripsWidgets[i]->setDate(weekDay); - if(date == ui->dateEditDate->date() && (force || m_currentStripWidget != m_stripsWidgets[i])) + if(weekDay == date && m_currentStripWidget != m_stripsWidgets[i]) { if(m_currentStripWidget) { @@ -337,16 +341,7 @@ void MainWindow::dateChanged(bool force) } } - if(std::any_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget) { - return stripsWidget->refreshing(); - })) - { - ui->actionToday->setEnabled(false); - ui->actionRefresh->setEnabled(false); - ui->dateEditDate->setReadOnly(true); - ui->pushButtonPrev->setEnabled(false); - ui->pushButtonNext->setEnabled(false); - } + Q_EMIT dateChanged(ui->dateEditDate->date()); } void MainWindow::minimumTimeChanged() @@ -354,21 +349,6 @@ void MainWindow::minimumTimeChanged() ui->timeEditTime->setMinimumTime(m_currentStripWidget->minimumTime()); } -void MainWindow::refreshingChanged() -{ - { - auto allFinished = std::none_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget){ - return stripsWidget->refreshing(); - }); - - ui->actionToday->setEnabled(allFinished); - ui->actionRefresh->setEnabled(allFinished); - ui->dateEditDate->setReadOnly(!allFinished); - ui->pushButtonPrev->setEnabled(allFinished); - ui->pushButtonNext->setEnabled(allFinished); - } -} - void MainWindow::startEnabledChanged() { auto startEnabled = m_currentStripWidget->startEnabled(); diff --git a/zeiterfassunglib/mainwindow.h b/zeiterfassunglib/mainwindow.h index a49ae98..b9d88de 100644 --- a/zeiterfassunglib/mainwindow.h +++ b/zeiterfassunglib/mainwindow.h @@ -42,18 +42,22 @@ public: StripFactory &stripFactory() const; QDate date() const; + void setDate(const QDate &date); const QMap &projects() const; const std::array &stripsWidgets() const; +Q_SIGNALS: + void dateChanged(const QDate &date); + void refreshEverything(); + private Q_SLOTS: void getProjectsFinished(); void pushButtonStartPressed(); void pushButtonEndPressed(); - void dateChanged(bool force = false); + void dateChangedSlot(const QDate &date); void minimumTimeChanged(); - void refreshingChanged(); void startEnabledChanged(); void endEnabledChanged();