diff options
| -rw-r--r-- | src/mainwindow.cpp | 16 | ||||
| -rw-r--r-- | src/statusbar.cpp | 52 | ||||
| -rw-r--r-- | src/statusbar.h | 19 |
3 files changed, 57 insertions, 30 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 6d65d64c..2497b05d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -243,7 +243,7 @@ MainWindow::MainWindow(QSettings &initSettings connect(ui->logList->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), ui->logList, SLOT(scrollToBottom())); - m_statusBar.reset(new StatusBar(statusBar(), ui->actionNotifications)); + m_statusBar.reset(new StatusBar(statusBar(), ui)); updateProblemsButton(); @@ -571,7 +571,7 @@ void MainWindow::updateWindowTitle(const APIUserAccount& user) void MainWindow::onRequestsChanged(const APIStats& stats, const APIUserAccount& user) { - m_statusBar->updateAPI(stats, user); + m_statusBar->setAPI(stats, user); } @@ -902,7 +902,7 @@ void MainWindow::updateProblemsButton() // updating the status bar, may be null very early when MO is starting if (m_statusBar) { - m_statusBar->updateNotifications(numProblems > 0); + m_statusBar->setNotifications(numProblems > 0); } } @@ -5593,13 +5593,9 @@ void MainWindow::openDataOriginExplorer_clicked() void MainWindow::updateAvailable() { - for (QAction *action : ui->toolBar->actions()) { - if (action->text() == tr("Update")) { - action->setEnabled(true); - action->setToolTip(tr("Update available")); - break; - } - } + ui->actionUpdate->setEnabled(true); + ui->actionUpdate->setToolTip(tr("Update available")); + m_statusBar->setUpdateAvailable(true); } diff --git a/src/statusbar.cpp b/src/statusbar.cpp index 9ff1c476..68c0642a 100644 --- a/src/statusbar.cpp +++ b/src/statusbar.cpp @@ -1,13 +1,17 @@ #include "statusbar.h" #include "nexusinterface.h" #include "settings.h" +#include "ui_mainwindow.h" -StatusBar::StatusBar(QStatusBar* bar, QAction* actionNotifications) : - m_bar(bar), m_notifications(new StatusBarNotifications(actionNotifications)), - m_progress(new QProgressBar), m_api(new QLabel) +StatusBar::StatusBar(QStatusBar* bar, Ui::MainWindow* ui) : + m_bar(bar), m_progress(new QProgressBar), + m_notifications(new StatusBarAction(ui->actionNotifications)), + m_update(new StatusBarAction(ui->actionUpdate)), + m_api(new QLabel) { m_bar->addPermanentWidget(m_progress); m_bar->addPermanentWidget(m_notifications); + m_bar->addPermanentWidget(m_update); m_bar->addPermanentWidget(m_api); m_progress->setTextVisible(true); @@ -15,12 +19,15 @@ StatusBar::StatusBar(QStatusBar* bar, QAction* actionNotifications) : m_progress->setMaximumWidth(150); m_progress->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding); + m_update->set(false); + m_notifications->set(false); + m_api->setObjectName("apistats"); m_api->setStyleSheet("QLabel{ padding: 0.1em 0 0.1em 0; }"); m_bar->clearMessage(); setProgress(-1); - updateAPI({}, {}); + setAPI({}, {}); } void StatusBar::setProgress(int percent) @@ -35,12 +42,12 @@ void StatusBar::setProgress(int percent) } } -void StatusBar::updateNotifications(bool hasNotifications) +void StatusBar::setNotifications(bool hasNotifications) { - m_notifications->update(hasNotifications); + m_notifications->set(hasNotifications); } -void StatusBar::updateAPI(const APIStats& stats, const APIUserAccount& user) +void StatusBar::setAPI(const APIStats& stats, const APIUserAccount& user) { m_api->setText( QString("API: Q: %1 | D: %2 | H: %3") @@ -73,13 +80,18 @@ void StatusBar::updateAPI(const APIStats& stats, const APIUserAccount& user) m_api->setAutoFillBackground(true); } +void StatusBar::setUpdateAvailable(bool b) +{ + m_update->set(b); +} + void StatusBar::checkSettings(const Settings& settings) { m_api->setVisible(!settings.hideAPICounter()); } -StatusBarNotifications::StatusBarNotifications(QAction* action) +StatusBarAction::StatusBarAction(QAction* action) : m_action(action), m_icon(new QLabel), m_text(new QLabel) { setLayout(new QHBoxLayout); @@ -88,19 +100,33 @@ StatusBarNotifications::StatusBarNotifications(QAction* action) layout()->addWidget(m_text); } -void StatusBarNotifications::update(bool hasNotifications) +void StatusBarAction::set(bool visible) { - if (hasNotifications) { + if (visible) { m_icon->setPixmap(m_action->icon().pixmap(16, 16)); - m_text->setText(QObject::tr("Notifications")); + m_text->setText(cleanupActionText(m_action->text())); } - setVisible(hasNotifications); + setVisible(visible); } -void StatusBarNotifications::mouseDoubleClickEvent(QMouseEvent* e) +void StatusBarAction::mouseDoubleClickEvent(QMouseEvent* e) { if (m_action->isEnabled()) { m_action->trigger(); } } + +QString StatusBarAction::cleanupActionText(const QString& original) const +{ + QString s = original; + + s.replace(QRegExp("\\&([^&])"), "\\1"); // &Item -> Item + s.replace("&&", "&"); // &&Item -> &Item + + if (s.endsWith("...")) { + s = s.left(s.size() - 3); + } + + return s; +} diff --git a/src/statusbar.h b/src/statusbar.h index 8edfd037..2baf12ee 100644 --- a/src/statusbar.h +++ b/src/statusbar.h @@ -7,14 +7,15 @@ struct APIStats; class APIUserAccount; class Settings; +namespace Ui { class MainWindow; } -class StatusBarNotifications : public QWidget +class StatusBarAction : public QWidget { public: - StatusBarNotifications(QAction* action); + StatusBarAction(QAction* action); - void update(bool hasNotifications); + void set(bool visible); protected: void mouseDoubleClickEvent(QMouseEvent* e) override; @@ -23,23 +24,27 @@ private: QAction* m_action; QLabel* m_icon; QLabel* m_text; + + QString cleanupActionText(const QString& s) const; }; class StatusBar { public: - StatusBar(QStatusBar* bar, QAction* actionNotifications); + StatusBar(QStatusBar* bar, Ui::MainWindow* ui); void setProgress(int percent); - void updateNotifications(bool hasNotifications); - void updateAPI(const APIStats& stats, const APIUserAccount& user); + void setNotifications(bool hasNotifications); + void setAPI(const APIStats& stats, const APIUserAccount& user); + void setUpdateAvailable(bool b); void checkSettings(const Settings& settings); private: QStatusBar* m_bar; - StatusBarNotifications* m_notifications; QProgressBar* m_progress; + StatusBarAction* m_notifications; + StatusBarAction* m_update; QLabel* m_api; }; |
