summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mainwindow.cpp16
-rw-r--r--src/statusbar.cpp52
-rw-r--r--src/statusbar.h19
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;
};