From fb16495ec7b0daa11d53921b9d26cb3c16382333 Mon Sep 17 00:00:00 2001 From: daleclack Date: Mon, 19 Dec 2022 08:04:27 +0800 Subject: [PATCH] Add menu item for dark mode --- XeRelease_Gtkmm4/res/menubar.xml | 3 +++ XeRelease_Gtkmm4/src/MyPrefs.cc | 10 ++++++++++ XeRelease_Gtkmm4/src/MyPrefs.hh | 2 ++ XeRelease_Gtkmm4/src/MyWin.cc | 19 ++++++++++++++++--- XeRelease_Gtkmm4/src/MyWin.hh | 4 +++- 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/XeRelease_Gtkmm4/res/menubar.xml b/XeRelease_Gtkmm4/res/menubar.xml index 584bdf4..460a36c 100644 --- a/XeRelease_Gtkmm4/res/menubar.xml +++ b/XeRelease_Gtkmm4/res/menubar.xml @@ -21,6 +21,9 @@ win.back3 + + check_dark + About win.about diff --git a/XeRelease_Gtkmm4/src/MyPrefs.cc b/XeRelease_Gtkmm4/src/MyPrefs.cc index f4f71c6..f5f5eb8 100644 --- a/XeRelease_Gtkmm4/src/MyPrefs.cc +++ b/XeRelease_Gtkmm4/src/MyPrefs.cc @@ -181,6 +181,16 @@ void MyPrefs::set_parent_win(Gtk::Window *parent) msg_dialog1.set_transient_for(*parent); } +void MyPrefs::set_dark_mode(bool dark_mode_enabled){ + // Put the config of dark mode to the class + dark_mode = dark_mode_enabled; +} + +void MyPrefs::save_config_now(){ + // Save config when the dark mode config is modified + btnok_clicked(); +} + void MyPrefs::btnpath_clicked() { // Create a Dialog diff --git a/XeRelease_Gtkmm4/src/MyPrefs.hh b/XeRelease_Gtkmm4/src/MyPrefs.hh index d989797..be21773 100644 --- a/XeRelease_Gtkmm4/src/MyPrefs.hh +++ b/XeRelease_Gtkmm4/src/MyPrefs.hh @@ -32,6 +32,8 @@ public: static MyPrefs *create(); void set_parent_win(Gtk::Window *parent); void init_json_data(json &data1); + void save_config_now(); + void set_dark_mode(bool dark_mode_enabled); private: Glib::RefPtr ref_Glade; diff --git a/XeRelease_Gtkmm4/src/MyWin.cc b/XeRelease_Gtkmm4/src/MyWin.cc index 8c4d9ad..c98889c 100644 --- a/XeRelease_Gtkmm4/src/MyWin.cc +++ b/XeRelease_Gtkmm4/src/MyWin.cc @@ -18,7 +18,7 @@ MyWin::MyWin() btn_ver("Xe-Ver"), cfg_box(Gtk::Orientation::VERTICAL, 5), msg_dialog(*this), - dark_mode(true) + check_dark("Enable dark mode") { // Initalize window set_icon_name("Xe-Release"); @@ -58,7 +58,6 @@ MyWin::MyWin() btn_box.append(btn_ver); btn_box.set_opacity(0.7); overlay.add_overlay(btn_box); - btn_ver.signal_clicked().connect(sigc::mem_fun(*this, &MyWin::main_releases)); // Show everything set_child(back_overlay); @@ -79,7 +78,7 @@ MyWin::MyWin() // Create Style for widgets provider = Gtk::CssProvider::create(); - if(dark_mode){ + if(check_dark.get_active()){ provider->load_from_resource("/org/gtk/daleclack/style_dark.css"); }else{ provider->load_from_resource("/org/gtk/daleclack/style.css"); @@ -92,6 +91,10 @@ MyWin::MyWin() switcher.set_stack(stack1); // show_all_children(); + // Connect Signals + btn_ver.signal_clicked().connect(sigc::mem_fun(*this, &MyWin::main_releases)); + check_dark.signal_toggled().connect(sigc::mem_fun(*this, &MyWin::check_toggled)); + // Free Memory pixbuf.reset(); sized.reset(); @@ -114,6 +117,9 @@ void MyWin::titlebar_init() auto object = menu_builder->get_object("app-menu"); popover.set_menu_model(object); + // Add a check button for dark mode + popover.add_child(check_dark, "check_dark"); + // Add Menu Actions add_action("configs", sigc::mem_fun(*this, &MyWin::config_dialog)); add_action("back1", sigc::mem_fun(*this, &MyWin::background1)); @@ -186,6 +192,7 @@ void MyWin::load_config(){ config_longterm = data["Longterm"]; config_stable = data["Stable"]; config_devel = data["Develop"]; + check_dark.set_active(data["dark_mode"]); } else { @@ -229,6 +236,12 @@ void MyWin::main_releases() } } +void MyWin::check_toggled(){ + // Get the state of check button and set the config to json file + prefs->set_dark_mode(check_dark.get_active()); + prefs->save_config_now(); +} + void MyWin::about_dialog() { char *version, *copyright; diff --git a/XeRelease_Gtkmm4/src/MyWin.hh b/XeRelease_Gtkmm4/src/MyWin.hh index 59c4870..382c662 100644 --- a/XeRelease_Gtkmm4/src/MyWin.hh +++ b/XeRelease_Gtkmm4/src/MyWin.hh @@ -29,7 +29,8 @@ private: void titlebar_init(); // Css Style - bool dark_mode; + // bool dark_mode; + Gtk::CheckButton check_dark; Glib::RefPtr provider; // Config Page @@ -55,4 +56,5 @@ private: void on_window_hide(Gtk::Window *window); void about_dialog(); void main_releases(); + void check_toggled(); }; \ No newline at end of file