From c8a49efca98cfb6a2432b7329f6a8047af22505d Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Sun, 10 Dec 2017 23:44:44 +0100 Subject: [PATCH] Fixed dateEdit and buttons being disabled --- mainwindow.cpp | 55 ++++++++++++++++++++++++++++++++++++++++++++---- mainwindow.h | 5 +++-- stripswidget.cpp | 34 ++++++++++++++++++++++++++++++ stripswidget.h | 5 +++-- 4 files changed, 91 insertions(+), 8 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 3423eee..cadc790 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -56,15 +56,17 @@ MainWindow::MainWindow(ZeiterfassungSettings &settings, ZeiterfassungApi &erfass auto layout = new QVBoxLayout(widget); + m_stripsWidgetHeaders[i] = new QLabel(dayName, widget); { - auto label = new QLabel(dayName, widget); - auto font = label->font(); + auto font = m_stripsWidgetHeaders[i]->font(); font.setBold(true); - label->setFont(font); - layout->addWidget(label); + m_stripsWidgetHeaders[i]->setFont(font); } + layout->addWidget(m_stripsWidgetHeaders[i]); m_stripsWidgets[i] = new StripsWidget(m_erfassung, m_userInfo.userId, m_stripFactory, m_projects, widget); + connect(m_stripsWidgets[i], &StripsWidget::refreshingChanged, this, &MainWindow::refreshingChanged); + layout->addWidget(m_stripsWidgets[i++]); layout->addStretch(1); @@ -159,10 +161,23 @@ void MainWindow::getProjectsFinished() void MainWindow::getAuswertungFinished() { + if(std::none_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget){ + return stripsWidget->refreshing(); + })) + { + ui->actionToday->setEnabled(true); + ui->actionRefresh->setEnabled(true); + ui->dateEditDate->setEnabled(true); + ui->pushButtonPrev->setEnabled(true); + ui->pushButtonNext->setEnabled(true); + } + if(!m_getAuswertungReply->success()) { m_auswertungDate = QDate(); QMessageBox::warning(this, tr("Could not load Auswertung!"), tr("Could not load Auswertung!") % "\n\n" % m_getAuswertungReply->message()); + m_getAuswertungReply->deleteLater(); + m_getAuswertungReply = Q_NULLPTR; return; } @@ -199,6 +214,9 @@ void MainWindow::getAuswertungFinished() m_balanceLabel->setText(tr("%0: %1").arg(tr("Balance")).arg(gleitzeit)); m_holidaysLabel->setText(tr("%0: %1").arg(tr("Holidays")).arg(urlaubsAnspruch)); + + m_getAuswertungReply->deleteLater(); + m_getAuswertungReply = Q_NULLPTR; } void MainWindow::contextMenuBooking(const QPoint &pos) @@ -625,6 +643,17 @@ void MainWindow::dateChanged(bool force) m_getAuswertungReply = m_erfassung.doGetAuswertung(m_userInfo.userId, auswertungDate); connect(m_getAuswertungReply, &ZeiterfassungReply::finished, this, &MainWindow::getAuswertungFinished); } + + if(std::any_of(std::begin(m_stripsWidgets), std::end(m_stripsWidgets), [](StripsWidget *stripsWidget) { + return stripsWidget->refreshing(); + }) || m_getAuswertungReply) + { + ui->actionToday->setEnabled(false); + ui->actionRefresh->setEnabled(false); + ui->dateEditDate->setEnabled(false); + ui->pushButtonPrev->setEnabled(false); + ui->pushButtonNext->setEnabled(false); + } } void MainWindow::openAuswertung() @@ -663,6 +692,24 @@ void MainWindow::minimumTimeChanged() ui->timeEditTime->setMinimumTime(m_currentStripWidget->minimumTime()); } +void MainWindow::refreshingChanged() +{ + if(m_getAuswertungReply) + return; + + { + 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->setEnabled(allFinished); + ui->pushButtonPrev->setEnabled(allFinished); + ui->pushButtonNext->setEnabled(allFinished); + } +} + void MainWindow::startEnabledChanged() { ui->timeEditTime->setEnabled(m_currentStripWidget->startEnabled() || diff --git a/mainwindow.h b/mainwindow.h index ed1788b..e7487b2 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -37,7 +37,7 @@ private Q_SLOTS: void timeAssignmentTimeChanged(); void minimumTimeChanged(); - + void refreshingChanged(); void startEnabledChanged(); void endEnabledChanged(); @@ -62,7 +62,8 @@ private: QLabel *m_holidaysLabel; StripFactory &m_stripFactory; - StripsWidget *m_stripsWidgets[7]; + std::array m_stripsWidgetHeaders; + std::array m_stripsWidgets; StripsWidget *m_currentStripWidget; }; diff --git a/stripswidget.cpp b/stripswidget.cpp index 87ad8da..2fca8e4 100644 --- a/stripswidget.cpp +++ b/stripswidget.cpp @@ -25,6 +25,7 @@ StripsWidget::StripsWidget(ZeiterfassungApi &erfassung, int userId, StripFactory m_layout(new QVBoxLayout(this)), m_bookingsModel(new BookingsModel(this)), m_timeAssignmentsModel(new TimeAssignmentsModel(this)), + m_refreshing(false), m_startEnabled(false), m_endEnabled(false), m_getBookingsReply(Q_NULLPTR), @@ -79,6 +80,11 @@ const QTime StripsWidget::minimumTime() const return m_minimumTime; } +bool StripsWidget::refreshing() const +{ + return m_refreshing; +} + bool StripsWidget::startEnabled() const { return m_startEnabled; @@ -111,6 +117,12 @@ void StripsWidget::refreshBookings() m_getBookingsReply = m_erfassung.doGetBookings(m_userId, m_date, m_date); connect(m_getBookingsReply, &ZeiterfassungReply::finished, this, &StripsWidget::getBookingsFinished); + + if(!m_refreshing) + { + m_refreshing = true; + Q_EMIT refreshingChanged(); + } } void StripsWidget::refreshTimeAssignments() @@ -125,6 +137,12 @@ void StripsWidget::refreshTimeAssignments() m_getTimeAssignmentsReply = m_erfassung.doGetTimeAssignments(m_userId, m_date, m_date); connect(m_getTimeAssignmentsReply, &ZeiterfassungReply::finished, this, &StripsWidget::getTimeAssignmentsFinished); + + if(!m_refreshing) + { + m_refreshing = true; + Q_EMIT refreshingChanged(); + } } bool StripsWidget::createStrips() @@ -410,7 +428,15 @@ void StripsWidget::getBookingsFinished() m_bookings = m_getBookingsReply->bookings(); if(!m_getTimeAssignmentsReply) + { + if(m_refreshing) + { + m_refreshing = false; + Q_EMIT refreshingChanged(); + } + createStrips(); + } m_getBookingsReply->deleteLater(); m_getBookingsReply = Q_NULLPTR; @@ -421,7 +447,15 @@ void StripsWidget::getTimeAssignmentsFinished() m_timeAssignments = m_getTimeAssignmentsReply->timeAssignments(); if(!m_getBookingsReply) + { + if(m_refreshing) + { + m_refreshing = false; + Q_EMIT refreshingChanged(); + } + createStrips(); + } m_getTimeAssignmentsReply->deleteLater(); m_getTimeAssignmentsReply = Q_NULLPTR; diff --git a/stripswidget.h b/stripswidget.h index b193a46..6f8d9be 100644 --- a/stripswidget.h +++ b/stripswidget.h @@ -36,7 +36,7 @@ public: const QTime timeAssignmentTime() const; const QTime lastTimeAssignmentStart() const; const QTime minimumTime() const; - + bool refreshing() const; bool startEnabled() const; bool endEnabled() const; @@ -53,7 +53,7 @@ Q_SIGNALS: void timeAssignmentTimeChanged(); void lastTimeAssignmentStartChanged(); void minimumTimeChanged(); - + void refreshingChanged(); void startEnabledChanged(); void endEnabledChanged(); @@ -87,6 +87,7 @@ private: QTime m_timeAssignmentTime; QTime m_lastTimeAssignmentStart; QTime m_minimumTime; + bool m_refreshing; bool m_startEnabled; bool m_endEnabled;