From ae1934b9ac02bf4e20d8f8821fa93d3bd1301b55 Mon Sep 17 00:00:00 2001 From: daleclack Date: Wed, 30 Nov 2022 13:16:42 +0800 Subject: [PATCH] Update gtk143 --- Gtkmm4/gtk143_menutest2/CMakeLists.txt | 2 +- Gtkmm4/gtk143_menutest2/src/MenuBar.cc | 33 +++++++++++++++++++ Gtkmm4/gtk143_menutest2/src/MenuBar.hh | 24 ++++++++++++++ Gtkmm4/gtk143_menutest2/src/MenuWin.cc | 44 ++++++++++++++------------ Gtkmm4/gtk143_menutest2/src/MenuWin.hh | 17 +++------- 5 files changed, 86 insertions(+), 34 deletions(-) create mode 100644 Gtkmm4/gtk143_menutest2/src/MenuBar.cc create mode 100644 Gtkmm4/gtk143_menutest2/src/MenuBar.hh diff --git a/Gtkmm4/gtk143_menutest2/CMakeLists.txt b/Gtkmm4/gtk143_menutest2/CMakeLists.txt index 979c6a8..9a37ff7 100644 --- a/Gtkmm4/gtk143_menutest2/CMakeLists.txt +++ b/Gtkmm4/gtk143_menutest2/CMakeLists.txt @@ -26,7 +26,7 @@ link_directories (${GTKMM4_LIBRARY_DIRS}) # set(PO_DIR ${CMAKE_BINARY_DIR}/po/zh_CN/LC_MESSAGES) #Source files -set(SOURCE_FILE src/main.cc src/MenuWin.cc src/Win1.cc src/Win2.cc) +set(SOURCE_FILE src/main.cc src/MenuWin.cc src/Win1.cc src/Win2.cc src/MenuBar.cc) #Compile Resource diff --git a/Gtkmm4/gtk143_menutest2/src/MenuBar.cc b/Gtkmm4/gtk143_menutest2/src/MenuBar.cc new file mode 100644 index 0000000..2211fa5 --- /dev/null +++ b/Gtkmm4/gtk143_menutest2/src/MenuBar.cc @@ -0,0 +1,33 @@ +#include "MenuBar.hh" + +MenuBar::MenuBar() +{ + // Create models + builder_def = Gtk::Builder::create_from_resource("/org/gtk/daleclack/default_menu.xml"); + model_default = builder_def->get_object("default_menu"); + builder_win1 = Gtk::Builder::create_from_resource("/org/gtk/daleclack/win1_menu.xml"); + model_win1 = builder_win1->get_object("win1_menu"); + builder_win2 = Gtk::Builder::create_from_resource("/org/gtk/daleclack/win2_menu.xml"); + model_win2 = builder_win2->get_object("win2_menu"); + menubar = Gtk::make_managed(model_default); +} + +void MenuBar::change_menu(WinShown win_id) +{ + // Switch the menu for a window + switch (win_id) + { + case WinShown::DEFAULT: + menubar->set_menu_model(model_default); + break; + case WinShown::WIN_1: + menubar->set_menu_model(model_win1); + break; + case WinShown::WIN_2: + menubar->set_menu_model(model_win2); + break; + } +} + +MenuBar::~MenuBar(){ +} diff --git a/Gtkmm4/gtk143_menutest2/src/MenuBar.hh b/Gtkmm4/gtk143_menutest2/src/MenuBar.hh new file mode 100644 index 0000000..660077a --- /dev/null +++ b/Gtkmm4/gtk143_menutest2/src/MenuBar.hh @@ -0,0 +1,24 @@ +#pragma once + +#include + +enum class WinShown +{ + DEFAULT, + WIN_1, + WIN_2 +}; + +class MenuBar +{ +public: + MenuBar(); + ~MenuBar(); + void change_menu(WinShown win_id); + Gtk::PopoverMenuBar *menubar; + +private: + // Menu Models + Glib::RefPtr builder_def, builder_win1, builder_win2; + Glib::RefPtr model_default, model_win1, model_win2; +}; \ No newline at end of file diff --git a/Gtkmm4/gtk143_menutest2/src/MenuWin.cc b/Gtkmm4/gtk143_menutest2/src/MenuWin.cc index 8d3915a..7747154 100644 --- a/Gtkmm4/gtk143_menutest2/src/MenuWin.cc +++ b/Gtkmm4/gtk143_menutest2/src/MenuWin.cc @@ -16,14 +16,6 @@ MenuWin::MenuWin() set_icon_name("org.gtk.daleclack"); set_default_size(300, 200); - // Create models - builder_def = Gtk::Builder::create_from_resource("/org/gtk/daleclack/default_menu.xml"); - model_default = builder_def->get_object("default_menu"); - builder_win1 = Gtk::Builder::create_from_resource("/org/gtk/daleclack/win1_menu.xml"); - model_win1 = builder_win1->get_object("win1_menu"); - builder_win2 = Gtk::Builder::create_from_resource("/org/gtk/daleclack/win2_menu.xml"); - model_win2 = builder_win2->get_object("win2_menu"); - // Add actions add_action("new_win1", sigc::mem_fun(*this, &MenuWin::new_win1)); add_action("quit_win1", sigc::mem_fun(*this, &MenuWin::quit_win1)); @@ -31,8 +23,9 @@ MenuWin::MenuWin() add_action("quit_win2", sigc::mem_fun(*this, &MenuWin::quit_win2)); // Add popover menu bar - menu_bar = new Gtk::PopoverMenuBar(model_default); - main_box.append(*menu_bar); + //menu_bar = new Gtk::PopoverMenuBar(model_default); + main_box.append(*(menu_bar.menubar)); + // (menu_bar.menubar)->show(); // Add a label label1.set_expand(); @@ -52,6 +45,8 @@ MenuWin::MenuWin() btn_main.signal_clicked().connect(sigc::mem_fun(*this, &MenuWin::btnmain_clicked)); btn_win1.signal_clicked().connect(sigc::mem_fun(*this, &MenuWin::btnwin1_clicked)); btn_win2.signal_clicked().connect(sigc::mem_fun(*this, &MenuWin::btnwin2_clicked)); + window1.signal_close_request().connect(sigc::mem_fun(*this, &MenuWin::win1_closed),true); + window2.signal_close_request().connect(sigc::mem_fun(*this, &MenuWin::win2_closed),true); window1.set_transient_for(*this); window2.set_transient_for(*this); @@ -64,20 +59,20 @@ void MenuWin::btnmain_clicked() { window1.hide(); window2.hide(); - menu_bar->set_menu_model(model_default); + menu_bar.change_menu(WinShown::DEFAULT); } // Launch Window1 void MenuWin::btnwin1_clicked() { - menu_bar->set_menu_model(model_win1); + menu_bar.change_menu(WinShown::WIN_1); window1.show(); } // Launch Window2 void MenuWin::btnwin2_clicked() { - menu_bar->set_menu_model(model_win2); + menu_bar.change_menu(WinShown::WIN_2); window2.show(); } @@ -85,31 +80,40 @@ void MenuWin::btnwin2_clicked() void MenuWin::new_win1() { window1.show(); - menu_bar->set_menu_model(model_win1); + menu_bar.change_menu(WinShown::WIN_1); } // Quit a window void MenuWin::quit_win1() { window1.hide(); - menu_bar->set_menu_model(model_default); + menu_bar.change_menu(WinShown::DEFAULT); +} + +// +bool MenuWin::win1_closed(){ + window1.hide(); + menu_bar.change_menu(WinShown::DEFAULT); + return true; } // New a window void MenuWin::new_win2() { window2.show(); - menu_bar->set_menu_model(model_win2); + menu_bar.change_menu(WinShown::WIN_2); } // Quit a window void MenuWin::quit_win2() { window2.hide(); - menu_bar->set_menu_model(model_default); + menu_bar.change_menu(WinShown::DEFAULT); } -MenuWin::~MenuWin() -{ - delete menu_bar; +// +bool MenuWin::win2_closed(){ + window2.hide(); + menu_bar.change_menu(WinShown::DEFAULT); + return true; } \ No newline at end of file diff --git a/Gtkmm4/gtk143_menutest2/src/MenuWin.hh b/Gtkmm4/gtk143_menutest2/src/MenuWin.hh index 4d3919c..085fa7d 100644 --- a/Gtkmm4/gtk143_menutest2/src/MenuWin.hh +++ b/Gtkmm4/gtk143_menutest2/src/MenuWin.hh @@ -3,31 +3,20 @@ #include #include "Win1.hh" #include "Win2.hh" - -enum class WinShown -{ - DEFAULT, - WIN_1, - WIN_2 -}; +#include "MenuBar.hh" class MenuWin : public Gtk::ApplicationWindow { public: MenuWin(); - ~MenuWin(); private: // Child Widgets - Gtk::PopoverMenuBar *menu_bar; + MenuBar menu_bar; Gtk::Box main_box, btn_box; Gtk::Button btn_main, btn_win1, btn_win2; Gtk::Label label1; - // Menu Models - Glib::RefPtr builder_def, builder_win1, builder_win2; - Glib::RefPtr model_default, model_win1, model_win2; - // Windows Win1 window1; Win2 window2; @@ -38,6 +27,8 @@ private: void btnwin2_clicked(); void new_win1(); void quit_win1(); + bool win1_closed(); void new_win2(); void quit_win2(); + bool win2_closed(); }; \ No newline at end of file