From 59536b69ec10a39e8335f8c60d63b75f81d5b8f3 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Sat, 23 Dec 2017 10:41:01 +0100 Subject: [PATCH] Removd PresenceWidget blocking the input #50 --- plugins/presenceplugin/presenceplugin.cpp | 5 +- plugins/presenceplugin/presencewidget.cpp | 59 ++++++++++++----------- plugins/presenceplugin/presencewidget.h | 11 ++--- 3 files changed, 39 insertions(+), 36 deletions(-) diff --git a/plugins/presenceplugin/presenceplugin.cpp b/plugins/presenceplugin/presenceplugin.cpp index 3e5e64d..870f593 100644 --- a/plugins/presenceplugin/presenceplugin.cpp +++ b/plugins/presenceplugin/presenceplugin.cpp @@ -4,6 +4,9 @@ #include #include #include +#include + +#include "mainwindow.h" #include "presencewidget.h" @@ -29,5 +32,5 @@ PresencePlugin::PresencePlugin(QObject *parent) : void PresencePlugin::attachTo(MainWindow &mainWindow) { - new PresenceWidget(mainWindow); + mainWindow.statusBar()->addWidget(new PresenceWidget(mainWindow)); } diff --git a/plugins/presenceplugin/presencewidget.cpp b/plugins/presenceplugin/presencewidget.cpp index 227810c..190476d 100644 --- a/plugins/presenceplugin/presencewidget.cpp +++ b/plugins/presenceplugin/presencewidget.cpp @@ -1,6 +1,5 @@ #include "presencewidget.h" -#include #include #include #include @@ -13,23 +12,18 @@ #include "zeiterfassungapi.h" PresenceWidget::PresenceWidget(MainWindow &mainWindow) : - QWidget(&mainWindow), + QPushButton(&mainWindow), m_mainWindow(mainWindow) { connect(&m_mainWindow, &MainWindow::refreshEverything, this, &PresenceWidget::refresh); - m_buttonAvailable = new QPushButton(QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/present.png")), QStringLiteral(), this); - m_menuAvailable = new QMenu(this); - m_buttonAvailable->setMenu(m_menuAvailable); - m_mainWindow.statusBar()->addWidget(m_buttonAvailable); + m_menu = new QMenu(this); + setMenu(m_menu); - m_buttonNotAvailable = new QPushButton(QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/not-present.png")), QStringLiteral(), this); - m_menuNotAvailable = new QMenu(this); - m_buttonNotAvailable->setMenu(m_menuNotAvailable); - m_mainWindow.statusBar()->addWidget(m_buttonNotAvailable); - - m_action = m_mainWindow.menuView()->addAction(QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/refresh.png")), - tr("Refresh presence"), this, &PresenceWidget::refresh); + m_action = new QAction(QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/refresh.png")), + tr("Refresh presence"), this); + connect(m_action, &QAction::triggered, this, &PresenceWidget::refresh); + m_mainWindow.menuView()->addAction(m_action); auto timer = new QTimer(this); timer->setInterval(60000); @@ -41,10 +35,8 @@ PresenceWidget::PresenceWidget(MainWindow &mainWindow) : void PresenceWidget::refresh() { - m_buttonAvailable->setText(tr("%0: %1").arg(tr("Available")).arg(tr("???"))); - m_menuAvailable->clear(); - m_buttonNotAvailable->setText(tr("%0: %1").arg(tr("Not available")).arg(tr("???"))); - m_menuNotAvailable->clear(); + setText(tr("%0 available, %1 not available").arg(tr("???")).arg(tr("???"))); + m_menu->clear(); m_action->setEnabled(false); @@ -61,18 +53,31 @@ void PresenceWidget::finished() goto after; } - for(const auto &status : m_reply->presenceStatuses()) { - if(status.presence == QStringLiteral("J")) - m_menuAvailable->addAction(tr("%0 %1").arg(status.firstName).arg(status.lastName)); - else if(status.presence == QStringLiteral("N")) - m_menuNotAvailable->addAction(tr("%0 %1").arg(status.firstName).arg(status.lastName)); - else - qWarning() << "unknown presence" << status.firstName << status.lastName << status.presence; - } + int present = 0, + notPresent = 0; - m_buttonAvailable->setText(tr("%0: %1").arg(tr("Available")).arg(m_menuAvailable->actions().count())); - m_buttonNotAvailable->setText(tr("%0: %1").arg(tr("Not available")).arg(m_menuNotAvailable->actions().count())); + for(const auto &status : m_reply->presenceStatuses()) + { + QIcon icon; + if(status.presence == QStringLiteral("J")) + { + present++; + icon = QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/present.png")); + } + else if(status.presence == QStringLiteral("N")) + { + notPresent++; + icon = QIcon(QStringLiteral(":zeiterfassung/plugins/presenceplugin/images/not-present.png")); + } + else + qWarning() << "unknown presence" << status.firstName << status.lastName << status.presence; + + m_menu->addAction(icon, tr("%0 %1").arg(status.firstName).arg(status.lastName)); + } + + setText(tr("%0 available, %1 not available").arg(present).arg(notPresent)); + } after: m_action->setEnabled(true); diff --git a/plugins/presenceplugin/presencewidget.h b/plugins/presenceplugin/presencewidget.h index 15a8ed6..e05b230 100644 --- a/plugins/presenceplugin/presencewidget.h +++ b/plugins/presenceplugin/presencewidget.h @@ -1,16 +1,15 @@ #pragma once -#include +#include #include "replies/getpresencestatusreply.h" -class QPushButton; class QMenu; class QAction; class MainWindow; -class PresenceWidget : public QWidget +class PresenceWidget : public QPushButton { Q_OBJECT @@ -24,11 +23,7 @@ private Q_SLOTS: private: MainWindow &m_mainWindow; - QPushButton *m_buttonAvailable; - QMenu *m_menuAvailable; - QPushButton *m_buttonNotAvailable; - QMenu *m_menuNotAvailable; - + QMenu *m_menu; QAction *m_action; std::unique_ptr m_reply;