syncthingtray/widgets/settings/settingsdialog.h

194 lines
6.1 KiB
C
Raw Normal View History

2016-08-25 00:45:32 +02:00
#ifndef SETTINGS_DIALOG_H
#define SETTINGS_DIALOG_H
#include "./settings.h"
2016-09-03 20:14:52 +02:00
2018-01-27 23:33:52 +01:00
#include "../webview/webviewdefs.h"
#include <syncthingmodel/syncthingicons.h>
2019-05-19 17:56:11 +02:00
2016-08-25 00:45:32 +02:00
#include <qtutilities/settingsdialog/optionpage.h>
#include <qtutilities/settingsdialog/qtsettings.h>
2017-05-01 03:34:43 +02:00
#include <qtutilities/settingsdialog/settingsdialog.h>
2016-08-25 00:45:32 +02:00
2016-09-03 19:39:43 +02:00
#include <QProcess>
2017-05-01 03:34:43 +02:00
#include <QWidget>
2016-08-25 00:45:32 +02:00
QT_FORWARD_DECLARE_CLASS(QAction)
2019-05-19 17:56:11 +02:00
QT_FORWARD_DECLARE_CLASS(QLabel)
2019-06-10 22:48:26 +02:00
namespace CppUtilities {
class DateTime;
}
2019-06-10 22:48:26 +02:00
namespace QtUtilities {
class ColorButton;
class IconButton;
} // namespace QtUtilities
2019-06-10 22:48:26 +02:00
2016-08-25 00:45:32 +02:00
namespace Data {
class SyncthingConnection;
class SyncthingService;
class SyncthingProcess;
class SyncthingLauncher;
class SyncthingStatusComputionModel;
} // namespace Data
2016-08-25 00:45:32 +02:00
namespace QtGui {
/*!
* \brief The GuiType enum specifies a GUI type.
*
* Such a value can be passed to some option pages to show only the options which are relevant
* for the particular GUI type.
*/
enum class GuiType {
TrayWidget,
Plasmoid,
};
2016-08-25 00:45:32 +02:00
BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(ConnectionOptionPage)
public:
2017-05-01 03:34:43 +02:00
ConnectionOptionPage(Data::SyncthingConnection *connection, QWidget *parentWidget = nullptr);
void hideConnectionStatus();
2017-05-01 03:34:43 +02:00
2016-08-25 00:45:32 +02:00
private:
2017-05-01 03:34:43 +02:00
DECLARE_SETUP_WIDGETS
void insertFromConfigFile(bool forceFileSelection);
2017-05-01 03:34:43 +02:00
void updateConnectionStatus();
void applyAndReconnect();
bool showConnectionSettings(int index);
bool cacheCurrentSettings(bool applying);
void saveCurrentConfigName(const QString &name);
void addNewConfig();
void removeSelectedConfig();
void moveSelectedConfigDown();
void moveSelectedConfigUp();
void setCurrentIndex(int currentIndex);
2017-05-01 03:34:43 +02:00
Data::SyncthingConnection *m_connection;
Data::SyncthingConnectionSettings m_primarySettings;
std::vector<Data::SyncthingConnectionSettings> m_secondarySettings;
Data::SyncthingStatusComputionModel *m_statusComputionModel;
2017-05-01 03:34:43 +02:00
int m_currentIndex;
2016-08-25 00:45:32 +02:00
END_DECLARE_OPTION_PAGE
BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(NotificationsOptionPage)
public:
NotificationsOptionPage(GuiType guiType = GuiType::TrayWidget, QWidget *parentWidget = nullptr);
private:
DECLARE_SETUP_WIDGETS
const GuiType m_guiType;
END_DECLARE_OPTION_PAGE
2016-08-25 00:45:32 +02:00
DECLARE_UI_FILE_BASED_OPTION_PAGE(AppearanceOptionPage)
2016-08-29 20:51:30 +02:00
BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(IconsOptionPage)
public:
2019-08-03 16:31:38 +02:00
enum class Context { Combined, UI, System };
explicit IconsOptionPage(Context context = Context::Combined, QWidget *parentWidget = nullptr);
2019-05-19 17:56:11 +02:00
DECLARE_SETUP_WIDGETS
private:
void update();
Context m_context;
2019-05-19 17:56:11 +02:00
Data::StatusIconSettings m_settings;
struct {
2019-06-10 22:48:26 +02:00
QtUtilities::ColorButton *colorButtons[3] = {};
2019-05-19 17:56:11 +02:00
QLabel *previewLabel = nullptr;
Data::StatusIconColorSet *setting = nullptr;
2019-05-19 17:56:11 +02:00
Data::StatusEmblem statusEmblem = Data::StatusEmblem::None;
} m_widgets[Data::StatusIconSettings::distinguishableColorCount];
END_DECLARE_OPTION_PAGE
2016-09-03 19:39:43 +02:00
DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_SETUP(AutostartOptionPage)
2016-08-25 00:45:32 +02:00
BEGIN_DECLARE_TYPEDEF_UI_FILE_BASED_OPTION_PAGE(LauncherOptionPage)
class QT_UTILITIES_EXPORT LauncherOptionPage : public QObject, public ::QtUtilities::UiFileBasedOptionPage<Ui::LauncherOptionPage> {
Q_OBJECT
public:
LauncherOptionPage(QWidget *parentWidget = nullptr);
LauncherOptionPage(
const QString &tool, const QString &toolName = QString(), const QString &windowTitle = QString(), QWidget *parentWidget = nullptr);
~LauncherOptionPage() override;
bool apply() override;
void reset() override;
2020-03-08 13:50:32 +01:00
private Q_SLOTS:
void handleSyncthingLaunched(bool running);
void handleSyncthingReadyRead();
void handleSyncthingOutputAvailable(const QByteArray &output);
void handleSyncthingExited(int exitCode, QProcess::ExitStatus exitStatus);
2019-07-07 14:31:09 +02:00
void handleSyncthingError(QProcess::ProcessError error);
bool isRunning() const;
void launch();
#ifdef SYNCTHINGWIDGETS_USE_LIBSYNCTHING
void updateLibSyncthingLogLevel();
#endif
void stop();
void restoreDefaultArguments();
2017-05-01 03:34:43 +02:00
2016-09-03 19:39:43 +02:00
private:
DECLARE_SETUP_WIDGETS
Data::SyncthingProcess *const m_process;
Data::SyncthingLauncher *const m_launcher;
QAction *m_restoreArgsAction;
QAction *m_syncthingDownloadAction;
bool m_kill;
QString m_tool, m_toolName, m_windowTitle;
};
2016-09-03 19:39:43 +02:00
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE(SystemdOptionPage)
private:
2017-05-01 03:34:43 +02:00
DECLARE_SETUP_WIDGETS
void handleSystemUnitChanged();
2017-05-01 03:34:43 +02:00
void handleDescriptionChanged(const QString &description);
2019-06-10 22:48:26 +02:00
void handleStatusChanged(const QString &activeState, const QString &subState, CppUtilities::DateTime activeSince);
2017-05-01 03:34:43 +02:00
void handleEnabledChanged(const QString &unitFileState);
Data::SyncthingService *const m_service;
QMetaObject::Connection m_unitChangedConn;
QMetaObject::Connection m_descChangedConn;
QMetaObject::Connection m_statusChangedConn;
QMetaObject::Connection m_enabledChangedConn;
END_DECLARE_OPTION_PAGE
#endif
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
2016-08-25 00:45:32 +02:00
DECLARE_UI_FILE_BASED_OPTION_PAGE(WebViewOptionPage)
#else
DECLARE_OPTION_PAGE(WebViewOptionPage)
#endif
2019-06-10 22:48:26 +02:00
class SYNCTHINGWIDGETS_EXPORT SettingsDialog : public QtUtilities::SettingsDialog {
2016-08-25 00:45:32 +02:00
Q_OBJECT
public:
explicit SettingsDialog(Data::SyncthingConnection *connection, QWidget *parent = nullptr);
2019-06-10 22:48:26 +02:00
explicit SettingsDialog(const QList<QtUtilities::OptionCategory *> &categories, QWidget *parent = nullptr);
explicit SettingsDialog(QWidget *parent = nullptr);
2018-10-10 21:26:46 +02:00
~SettingsDialog() override;
void hideConnectionStatus();
private:
void init();
ConnectionOptionPage *m_connectionsOptionPage;
2016-08-25 00:45:32 +02:00
};
} // namespace QtGui
2016-08-25 00:45:32 +02:00
DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, ConnectionOptionPage)
DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, NotificationsOptionPage)
DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, AppearanceOptionPage)
2019-05-19 17:56:11 +02:00
DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, IconsOptionPage)
DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, AutostartOptionPage)
DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, LauncherOptionPage)
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, SystemdOptionPage)
#endif
#ifndef SYNCTHINGWIDGETS_NO_WEBVIEW
DECLARE_EXTERN_UI_FILE_BASED_OPTION_PAGE_NS(QtGui, WebViewOptionPage)
#endif
2016-08-25 00:45:32 +02:00
#endif // SETTINGS_DIALOG_H