minikube/gui/tray.cpp

117 lines
2.9 KiB
C++

#include "tray.h"
#include <QAction>
#include <QCoreApplication>
#include <QMenu>
Tray::Tray(QIcon icon)
{
m_icon = icon;
trayIconMenu = new QMenu();
trayIcon = new QSystemTrayIcon(this);
connect(trayIcon, &QSystemTrayIcon::activated, this, &Tray::iconActivated);
minimizeAction = new QAction(tr("Mi&nimize"), this);
connect(minimizeAction, &QAction::triggered, this, &Tray::hideWindow);
restoreAction = new QAction(tr("&Restore"), this);
connect(restoreAction, &QAction::triggered, this, &Tray::restoreWindow);
quitAction = new QAction(tr("&Quit"), this);
connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
startAction = new QAction(tr("Start"), this);
connect(startAction, &QAction::triggered, this, &Tray::start);
pauseAction = new QAction(tr("Pause"), this);
connect(pauseAction, &QAction::triggered, this, &Tray::pauseOrUnpause);
stopAction = new QAction(tr("Stop"), this);
connect(stopAction, &QAction::triggered, this, &Tray::stop);
statusAction = new QAction(tr("Status:"), this);
statusAction->setEnabled(false);
trayIconMenu->addAction(statusAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(startAction);
trayIconMenu->addAction(pauseAction);
trayIconMenu->addAction(stopAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(minimizeAction);
trayIconMenu->addAction(restoreAction);
trayIconMenu->addSeparator();
trayIconMenu->addAction(quitAction);
trayIcon->setContextMenu(trayIconMenu);
trayIcon->setIcon(m_icon);
trayIcon->show();
}
void Tray::iconActivated(QSystemTrayIcon::ActivationReason reason)
{
switch (reason) {
case QSystemTrayIcon::Trigger:
case QSystemTrayIcon::DoubleClick:
emit restoreWindow();
break;
default:;
}
}
void Tray::updateStatus(Cluster cluster)
{
QString status = cluster.status();
if (status.isEmpty()) {
status = "Stopped";
}
statusAction->setText("Status: " + status);
}
bool Tray::isVisible()
{
return trayIcon->isVisible();
}
void Tray::setVisible(bool visible)
{
minimizeAction->setEnabled(visible);
restoreAction->setEnabled(!visible);
}
static QString getPauseLabel(bool isPaused)
{
if (isPaused) {
return "Unpause";
}
return "Pause";
}
static QString getStartLabel(bool isRunning)
{
if (isRunning) {
return "Restart";
}
return "Start";
}
void Tray::updateTrayActions(Cluster cluster)
{
startAction->setEnabled(true);
bool isRunning = cluster.status() == "Running";
bool isPaused = cluster.status() == "Paused";
pauseAction->setEnabled(isRunning || isPaused);
stopAction->setEnabled(isRunning || isPaused);
pauseAction->setText(getPauseLabel(isPaused));
startAction->setText(getStartLabel(isRunning));
}
void Tray::disableActions()
{
startAction->setEnabled(false);
stopAction->setEnabled(false);
pauseAction->setEnabled(false);
}