Show the connection config name in tooltip when displaying multiple icons

This commit is contained in:
Martchus 2020-10-19 18:33:10 +02:00
parent 0d8c5e524a
commit a6727b0fa7
5 changed files with 40 additions and 6 deletions

View File

@ -251,7 +251,9 @@ void TrayIcon::showSyncthingNotification(CppUtilities::DateTime when, const QStr
void TrayIcon::updateStatusIconAndText()
{
const StatusInfo statusInfo(trayMenu().widget().connection());
auto &trayWidget = trayMenu().widget();
const auto statusInfo = StatusInfo(trayMenu().widget().connection(),
TrayWidget::instances().size() > 1 && trayWidget.selectedConnection() ? trayWidget.selectedConnection()->label : QString());
if (statusInfo.additionalStatusText().isEmpty()) {
setToolTip(statusInfo.statusText());
} else {

View File

@ -84,11 +84,19 @@ TrayWidget::TrayWidget(TrayMenu *parent)
, m_selectedConnection(nullptr)
, m_startStopButtonTarget(StartStopButtonTarget::None)
{
// don't show connection status within connection settings if there are multiple tray widgets/icons (would be ambiguous)
if (!s_instances.empty() && s_settingsDlg) {
s_settingsDlg->hideConnectionStatus();
}
// take record of the newly created instance
s_instances.push_back(this);
// show the connection configuration in the previous icon's tooltip as soon as there's a 2nd icon
if (s_instances.size() == 2) {
s_instances.front()->updateIconAndTooltip();
}
m_ui->setupUi(this);
// setup models and views
@ -214,6 +222,8 @@ TrayWidget::~TrayWidget()
if (s_instances.empty()) {
delete s_dialogParent;
QCoreApplication::quit();
} else if (s_instances.size() == 1) {
s_instances.front()->updateIconAndTooltip();
}
}
@ -649,6 +659,16 @@ void TrayWidget::updateOverallStatistics()
m_ui->localStatisticsLabel->setText(directoryStatusString(overallStats.local));
}
void TrayWidget::updateIconAndTooltip()
{
if (!m_menu) {
return;
}
if (auto *const trayIcon = m_menu->icon()) {
trayIcon->updateStatusIconAndText();
}
}
void TrayWidget::toggleRunning()
{
switch (m_startStopButtonTarget) {

View File

@ -55,6 +55,7 @@ public:
const Data::SyncthingNotifier &notifier() const;
QMenu *connectionsMenu();
static const std::vector<TrayWidget *> &instances();
Data::SyncthingConnectionSettings *selectedConnection();
public Q_SLOTS:
void showSettingsDialog();
@ -88,6 +89,7 @@ private Q_SLOTS:
void changeStatus();
void updateTraffic();
void updateOverallStatistics();
void updateIconAndTooltip();
void toggleRunning();
Settings::Launcher::LauncherStatus handleLauncherStatusChanged();
Settings::Launcher::LauncherStatus applyLauncherSettings(
@ -161,6 +163,12 @@ inline const std::vector<TrayWidget *> &TrayWidget::instances()
{
return s_instances;
}
inline Data::SyncthingConnectionSettings *TrayWidget::selectedConnection()
{
return m_selectedConnection;
}
} // namespace QtGui
#endif // TRAY_WIDGET_H

View File

@ -32,7 +32,7 @@ void StatusInfo::recomputeAdditionalStatusText()
}
}
void StatusInfo::updateConnectionStatus(const SyncthingConnection &connection)
void StatusInfo::updateConnectionStatus(const SyncthingConnection &connection, const QString &configurationName)
{
m_additionalStatusInfo.clear();
@ -92,6 +92,10 @@ void StatusInfo::updateConnectionStatus(const SyncthingConnection &connection)
}
}
if (!configurationName.isEmpty()) {
m_statusText = configurationName % QChar(':') % QChar(' ') % m_statusText;
}
recomputeAdditionalStatusText();
}

View File

@ -16,12 +16,12 @@ namespace QtGui {
class SYNCTHINGWIDGETS_EXPORT StatusInfo {
public:
explicit StatusInfo();
explicit StatusInfo(const Data::SyncthingConnection &connection);
explicit StatusInfo(const Data::SyncthingConnection &connection, const QString &configurationName = QString());
const QString &statusText() const;
const QString &additionalStatusText() const;
const QIcon &statusIcon() const;
void updateConnectionStatus(const Data::SyncthingConnection &connection);
void updateConnectionStatus(const Data::SyncthingConnection &connection, const QString &configurationName = QString());
void updateConnectedDevices(const Data::SyncthingConnection &connection);
private:
@ -34,9 +34,9 @@ private:
const QIcon *m_statusIcon;
};
inline StatusInfo::StatusInfo(const Data::SyncthingConnection &connection)
inline StatusInfo::StatusInfo(const Data::SyncthingConnection &connection, const QString &configurationName)
{
updateConnectionStatus(connection);
updateConnectionStatus(connection, configurationName);
updateConnectedDevices(connection);
}