syncthingtray/tray/gui/traywidget.h

176 lines
5.1 KiB
C
Raw Normal View History

2016-08-30 20:01:07 +02:00
#ifndef TRAY_WIDGET_H
#define TRAY_WIDGET_H
2016-08-25 00:45:32 +02:00
#include <syncthingwidgets/settings/settings.h>
#include <syncthingwidgets/webview/webviewdefs.h>
#include <syncthingmodel/syncthingdevicemodel.h>
#include <syncthingmodel/syncthingdirectorymodel.h>
#include <syncthingmodel/syncthingdownloadmodel.h>
#include <syncthingmodel/syncthingrecentchangesmodel.h>
#include <syncthingmodel/syncthingsortfiltermodel.h>
#include <syncthingconnector/syncthingconnection.h>
#include <syncthingconnector/syncthingnotifier.h>
#include <syncthingconnector/syncthingprocess.h>
2016-08-25 00:45:32 +02:00
#include <QWidget>
#include <memory>
2016-09-03 19:39:43 +02:00
QT_FORWARD_DECLARE_CLASS(QFrame)
2016-09-03 20:14:52 +02:00
QT_FORWARD_DECLARE_CLASS(QMenu)
QT_FORWARD_DECLARE_CLASS(QActionGroup)
QT_FORWARD_DECLARE_CLASS(QPushButton)
QT_FORWARD_DECLARE_CLASS(QTreeView)
2016-09-03 19:39:43 +02:00
2019-06-10 22:48:26 +02:00
namespace CppUtilities {
2016-08-25 00:45:32 +02:00
class QtConfigArguments;
}
2016-08-30 20:01:07 +02:00
2019-06-10 22:48:26 +02:00
namespace QtUtilities {
2016-08-25 00:45:32 +02:00
class AboutDialog;
}
namespace QtGui {
class WebViewDialog;
class SettingsDialog;
class TrayMenu;
2016-08-30 20:01:07 +02:00
2016-08-25 00:45:32 +02:00
namespace Ui {
class TrayWidget;
}
2017-05-01 03:34:43 +02:00
class TrayWidget : public QWidget {
2016-08-25 00:45:32 +02:00
Q_OBJECT
public:
TrayWidget(TrayMenu *parent = nullptr);
2018-10-10 21:26:46 +02:00
~TrayWidget() override;
2016-08-25 00:45:32 +02:00
Data::SyncthingConnection &connection();
const Data::SyncthingConnection &connection() const;
Data::SyncthingNotifier &notifier();
const Data::SyncthingNotifier &notifier() const;
2016-09-03 20:14:52 +02:00
QMenu *connectionsMenu();
static const std::vector<TrayWidget *> &instances();
Data::SyncthingConnectionSettings *selectedConnection();
2016-08-25 00:45:32 +02:00
2020-03-08 13:50:32 +01:00
public Q_SLOTS:
2016-08-25 00:45:32 +02:00
void showSettingsDialog();
void showAboutDialog();
void showWebUi();
void showOwnDeviceId();
void showLog();
void showNotifications();
void showUsingPositioningSettings();
#ifdef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
void showInternalErrorsButton();
void showInternalErrorsDialog();
#endif
2016-12-10 12:03:08 +01:00
void dismissNotifications();
2016-10-05 00:01:55 +02:00
void restartSyncthing();
void quitTray();
void applySettings(const QString &connectionConfig = QString());
2016-08-25 00:45:32 +02:00
2020-03-08 13:50:32 +01:00
private Q_SLOTS:
void handleStatusChanged(Data::SyncthingStatus status);
#ifdef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
void handleErrorsCleared();
#endif
static void applySettingsOnAllInstances();
2016-09-21 21:09:12 +02:00
void openDir(const Data::SyncthingDir &dir);
void openItemDir(const Data::SyncthingItemDownloadProgress &item);
void scanDir(const Data::SyncthingDir &dir);
void pauseResumeDev(const Data::SyncthingDev &dev);
2017-02-23 15:49:58 +01:00
void pauseResumeDir(const Data::SyncthingDir &dir);
void showRecentChangesContextMenu(const QPoint &position);
2016-08-29 20:51:30 +02:00
void changeStatus();
2016-08-30 20:01:07 +02:00
void updateTraffic();
void updateOverallStatistics();
void updateIconAndTooltip();
void toggleRunning();
Settings::Launcher::LauncherStatus handleLauncherStatusChanged();
2019-07-13 13:21:25 +02:00
Settings::Launcher::LauncherStatus applyLauncherSettings(
bool reconnectRequired = false, bool skipApplyingToConnection = false, bool skipStartStopButton = false);
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
Settings::Systemd::ServiceStatus handleSystemdStatusChanged();
Settings::Systemd::ServiceStatus applySystemdSettings(bool reconnectRequired = false);
#endif
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
2016-08-25 00:45:32 +02:00
void handleWebViewDeleted();
2016-09-03 20:14:52 +02:00
#endif
2019-06-10 22:48:26 +02:00
void handleNewNotification(CppUtilities::DateTime when, const QString &msg);
2016-09-03 20:14:52 +02:00
void handleConnectionSelected(QAction *connectionAction);
void showDialog(QWidget *dlg);
2016-08-25 00:45:32 +02:00
private:
TrayMenu *m_menu;
std::unique_ptr<Ui::TrayWidget> m_ui;
2020-10-18 17:13:52 +02:00
static QWidget *s_dialogParent;
static SettingsDialog *s_settingsDlg;
static QtUtilities::AboutDialog *s_aboutDlg;
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
2016-08-25 00:45:32 +02:00
WebViewDialog *m_webViewDlg;
#endif
2016-09-03 19:39:43 +02:00
QFrame *m_cornerFrame;
#ifdef SYNCTHINGTRAY_UNIFY_TRAY_MENUS
QPushButton *m_internalErrorsButton;
#endif
2016-08-25 00:45:32 +02:00
Data::SyncthingConnection m_connection;
Data::SyncthingNotifier m_notifier;
2016-08-25 00:45:32 +02:00
Data::SyncthingDirectoryModel m_dirModel;
2020-10-20 19:16:53 +02:00
Data::SyncthingSortFilterModel m_sortFilterDirModel;
2016-08-25 00:45:32 +02:00
Data::SyncthingDeviceModel m_devModel;
2020-10-20 19:16:53 +02:00
Data::SyncthingSortFilterModel m_sortFilterDevModel;
2016-09-21 21:09:12 +02:00
Data::SyncthingDownloadModel m_dlModel;
2020-01-18 16:37:20 +01:00
Data::SyncthingRecentChangesModel m_recentChangesModel;
2016-09-03 20:14:52 +02:00
QMenu *m_connectionsMenu;
QActionGroup *m_connectionsActionGroup;
Data::SyncthingConnectionSettings *m_selectedConnection;
2016-12-26 19:19:10 +01:00
QMenu *m_notificationsMenu;
std::vector<Data::SyncthingLogEntry> m_notifications;
2019-07-13 13:21:25 +02:00
enum class StartStopButtonTarget { None, Service, Launcher } m_startStopButtonTarget;
static std::vector<TrayWidget *> s_instances;
2016-08-25 00:45:32 +02:00
};
inline Data::SyncthingConnection &TrayWidget::connection()
{
return m_connection;
}
inline const Data::SyncthingConnection &TrayWidget::connection() const
{
return m_connection;
}
inline Data::SyncthingNotifier &TrayWidget::notifier()
{
return m_notifier;
}
inline const Data::SyncthingNotifier &TrayWidget::notifier() const
{
return m_notifier;
}
2016-09-03 20:14:52 +02:00
inline QMenu *TrayWidget::connectionsMenu()
{
return m_connectionsMenu;
}
inline const std::vector<TrayWidget *> &TrayWidget::instances()
{
return s_instances;
}
inline Data::SyncthingConnectionSettings *TrayWidget::selectedConnection()
{
return m_selectedConnection;
}
} // namespace QtGui
2016-08-25 00:45:32 +02:00
2016-08-30 20:01:07 +02:00
#endif // TRAY_WIDGET_H