Mercurial > minori
view include/gui/dialog/settings.h @ 316:180714442770
settings: clean up code
author | Paper <paper@paper.us.eu.org> |
---|---|
date | Tue, 11 Jun 2024 15:11:09 -0400 |
parents | 657fda1b9cac |
children | b1f4d1867ab1 |
line wrap: on
line source
#ifndef MINORI_GUI_DIALOG_SETTINGS_H_ #define MINORI_GUI_DIALOG_SETTINGS_H_ #include "core/anime.h" #include "core/config.h" #include "core/session.h" #include "gui/widgets/sidebar.h" #include <QDialog> #include <QDialogButtonBox> #include <QLabel> #include <QListWidget> #include <QLocale> #include <QStackedWidget> #include <QTabWidget> #include <QVBoxLayout> #include <QWidget> /* !!! MOVE THIS ELSEWHERE! */ class DroppableListWidget : public QListWidget { Q_OBJECT public: explicit DroppableListWidget(QWidget* parent); signals: void FilesDropped(QStringList list); protected: void dragEnterEvent(QDragEnterEvent* event) override; void dragMoveEvent(QDragMoveEvent* event) override; void dropEvent(QDropEvent* event) override; }; class SettingsPage : public QWidget { Q_OBJECT public: SettingsPage(QWidget* parent = nullptr, QString title = ""); void SetTitle(QString title); virtual void SaveInfo() = 0; void AddTab(QWidget* tab, QString title = ""); private: QLabel page_title_; QTabWidget tab_widget_; QVBoxLayout layout_; }; class SettingsPageServices final : public SettingsPage { Q_OBJECT public: SettingsPageServices(QWidget* parent = nullptr); void SaveInfo() override; private: QWidget* CreateMainPage(); QWidget* CreateAniListPage(); decltype(session.config.service) service; }; class SettingsPageApplication final : public SettingsPage { Q_OBJECT public: SettingsPageApplication(QWidget* parent = nullptr); void SaveInfo() override; private: QWidget* CreateAnimeListWidget(); QWidget* CreateGeneralWidget(); Theme::Theme theme; QLocale locale; decltype(session.config.anime_list.score_format) format; decltype(session.config.anime_list.language) language; decltype(session.config.anime_list.display_aired_episodes) display_aired_episodes; decltype(session.config.anime_list.display_available_episodes) display_available_episodes; decltype(session.config.anime_list.highlight_anime_if_available) highlight_anime_if_available; decltype(session.config.anime_list.highlighted_anime_above_others) highlighted_anime_above_others; }; class SettingsPageTorrents final : public SettingsPage { Q_OBJECT public: SettingsPageTorrents(QWidget* parent = nullptr); void SaveInfo() override; private: QWidget* CreateGeneralWidget(); decltype(session.config.torrents.feed_link) feed_link; }; class SettingsPageRecognition final : public SettingsPage { Q_OBJECT public: SettingsPageRecognition(QWidget* parent = nullptr); void SaveInfo() override; private: QWidget* CreatePlayersWidget(); decltype(session.config.recognition.detect_media_players) detect_media_players; decltype(session.config.recognition.players) players; }; class SettingsPageLibrary final : public SettingsPage { Q_OBJECT public: SettingsPageLibrary(QWidget* parent = nullptr); void SaveInfo() override; private: QWidget* CreateFoldersWidget(); decltype(session.config.library.paths) paths; decltype(session.config.library.real_time_monitor) real_time_monitor; }; class SettingsDialog final : public QDialog { Q_OBJECT public: SettingsDialog(QWidget* parent = nullptr); QWidget* CreateServicesMainPage(QWidget* parent); void OnOK(); protected: void showEvent(QShowEvent* event) override; private: QVBoxLayout layout_; QWidget widget_; QHBoxLayout widget_layout_; SideBar sidebar_; QStackedWidget stacked_; SettingsPageServices services_page_; SettingsPageApplication application_page_; SettingsPageTorrents torrents_page_; SettingsPageRecognition recognition_page_; SettingsPageLibrary library_page_; QDialogButtonBox button_box_; }; #endif // MINORI_GUI_DIALOG_SETTINGS_H_