reload settings + custom css path

This commit is contained in:
ouwou 2020-12-18 02:05:24 -05:00
parent 387dd31039
commit 712eba816e
6 changed files with 33 additions and 3 deletions

View File

@ -66,7 +66,7 @@ int Abaddon::StartGTK() {
// tmp css stuff
m_css_provider = Gtk::CssProvider::create();
m_css_provider->signal_parsing_error().connect([this](const Glib::RefPtr<const Gtk::CssSection> &section, const Glib::Error &error) {
Gtk::MessageDialog dlg(*m_main_window, "main.css failed parsing (" + error.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
Gtk::MessageDialog dlg(*m_main_window, "css failed parsing (" + error.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
dlg.run();
});
@ -99,6 +99,7 @@ int Abaddon::StartGTK() {
m_main_window->signal_action_reload_css().connect(sigc::mem_fun(*this, &Abaddon::ActionReloadCSS));
m_main_window->signal_action_join_guild().connect(sigc::mem_fun(*this, &Abaddon::ActionJoinGuildDialog));
m_main_window->signal_action_set_status().connect(sigc::mem_fun(*this, &Abaddon::ActionSetStatus));
m_main_window->signal_action_reload_settings().connect(sigc::mem_fun(*this, &Abaddon::ActionReloadSettings));
m_main_window->signal_action_show_user_menu().connect(sigc::mem_fun(*this, &Abaddon::ShowUserMenu));
@ -454,13 +455,17 @@ void Abaddon::ActionReactionRemove(Snowflake id, const Glib::ustring &param) {
m_discord.RemoveReaction(id, param);
}
void Abaddon::ActionReloadSettings() {
m_settings.Reload();
}
void Abaddon::ActionReloadCSS() {
try {
Gtk::StyleContext::remove_provider_for_screen(Gdk::Screen::get_default(), m_css_provider);
m_css_provider->load_from_path("./css/main.css");
m_css_provider->load_from_path(m_settings.GetMainCSS());
Gtk::StyleContext::add_provider_for_screen(Gdk::Screen::get_default(), m_css_provider, GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
} catch (Glib::Error &e) {
Gtk::MessageDialog dlg(*m_main_window, "main.css failed to load (" + e.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
Gtk::MessageDialog dlg(*m_main_window, "css failed to load (" + e.what() + ")", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
dlg.run();
}
}

View File

@ -46,6 +46,7 @@ public:
void ActionReactionAdd(Snowflake id, const Glib::ustring &param);
void ActionReactionRemove(Snowflake id, const Glib::ustring &param);
void ActionReloadSettings();
void ActionReloadCSS();
ImageManager &GetImageManager();

View File

@ -14,6 +14,10 @@ SettingsManager::SettingsManager(std::string filename)
m_ok = rc == SI_OK;
}
void SettingsManager::Reload() {
m_ok = m_ini.LoadFile(m_filename.c_str()) == SI_OK;
}
std::string SettingsManager::GetSettingString(const std::string &section, const std::string &key, std::string fallback) const {
return m_ini.GetValue(section.c_str(), key.c_str(), fallback.c_str());
}
@ -65,3 +69,7 @@ int SettingsManager::GetCacheHTTPConcurrency() const {
bool SettingsManager::GetPrefetch() const {
return GetSettingBool("discord", "prefetch", false);
}
std::string SettingsManager::GetMainCSS() const {
return GetSettingString("gui", "css", "./css/main.css");
}

View File

@ -6,6 +6,7 @@
class SettingsManager {
public:
SettingsManager(std::string filename);
void Reload();
void Close();
bool GetUseMemoryDB() const;
@ -16,6 +17,7 @@ public:
std::string GetLinkColor() const;
int GetCacheHTTPConcurrency() const;
bool GetPrefetch() const;
std::string GetMainCSS() const;
bool IsValid() const;

View File

@ -28,7 +28,9 @@ MainWindow::MainWindow()
m_menu_file.set_label("File");
m_menu_file.set_submenu(m_menu_file_sub);
m_menu_file_reload_settings.set_label("Reload Settings");
m_menu_file_reload_css.set_label("Reload CSS");
m_menu_file_sub.append(m_menu_file_reload_settings);
m_menu_file_sub.append(m_menu_file_reload_css);
m_menu_bar.append(m_menu_file);
@ -58,6 +60,10 @@ MainWindow::MainWindow()
m_signal_action_set_status.emit();
});
m_menu_file_reload_settings.signal_activate().connect([this] {
m_signal_action_reload_settings.emit();
});
m_content_box.set_hexpand(true);
m_content_box.set_vexpand(true);
@ -258,3 +264,7 @@ MainWindow::type_signal_action_set_status MainWindow::signal_action_set_status()
MainWindow::type_signal_action_show_user_menu MainWindow::signal_action_show_user_menu() {
return m_signal_action_show_user_menu;
}
MainWindow::type_signal_action_reload_settings MainWindow::signal_action_reload_settings() {
return m_signal_action_reload_settings;
}

View File

@ -41,6 +41,7 @@ public:
typedef sigc::signal<void> type_signal_action_join_guild;
typedef sigc::signal<void> type_signal_action_set_status;
typedef sigc::signal<void, const GdkEvent *, Snowflake, Snowflake> type_signal_action_show_user_menu;
typedef sigc::signal<void> type_signal_action_reload_settings;
type_signal_action_connect signal_action_connect();
type_signal_action_disconnect signal_action_disconnect();
@ -49,6 +50,7 @@ public:
type_signal_action_join_guild signal_action_join_guild();
type_signal_action_set_status signal_action_set_status();
type_signal_action_show_user_menu signal_action_show_user_menu();
type_signal_action_reload_settings signal_action_reload_settings();
protected:
type_signal_action_connect m_signal_action_connect;
@ -58,6 +60,7 @@ protected:
type_signal_action_join_guild m_signal_action_join_guild;
type_signal_action_set_status m_signal_action_set_status;
type_signal_action_show_user_menu m_signal_action_show_user_menu;
type_signal_action_reload_settings m_signal_action_reload_settings;
protected:
Gtk::Box m_main_box;
@ -80,5 +83,6 @@ protected:
Gtk::MenuItem m_menu_file;
Gtk::Menu m_menu_file_sub;
Gtk::MenuItem m_menu_file_reload_settings;
Gtk::MenuItem m_menu_file_reload_css;
};