Browse Source

make submenus build by separated class methods

CPP-GTK4
yggverse 3 months ago
parent
commit
f43d1ef725
  1. 164
      src/app/browser/header/menu.cpp
  2. 35
      src/app/browser/header/menu.hpp

164
src/app/browser/header/menu.cpp

@ -4,114 +4,156 @@ using namespace app::browser::header; @@ -4,114 +4,156 @@ using namespace app::browser::header;
Menu::Menu()
{
// Set widget defaults
set_tooltip_text(
_("Menu")
);
// Build tab submenu model
main_tab = Gio::Menu::create();
set_menu_model(
main(
main_tab(
main_tab_page(
main_tab_page_navigation(
main_tab_page_navigation_history()
)
),
main_tab_close()
),
main_tools()
)
);
}
main_tab->append(
_("New tab.."),
"win.main_tab_append"
Glib::RefPtr<Gio::Menu> Menu::main(
Glib::RefPtr<Gio::Menu> main_tab,
Glib::RefPtr<Gio::Menu> main_tools
) {
auto model = Gio::Menu::create();
model->append_submenu(
_("Tab"),
main_tab
);
model->append_submenu(
_("Tools"),
main_tools
);
// Build tab page submenu model
main_tab_page = Gio::Menu::create();
model->append(
_("Quit"),
"app.quit"
);
// Build tab page navigation submenu model
main_tab_page_navigation = Gio::Menu::create();
return model;
}
// Build tab page navigation history submenu model
main_tab_page_navigation_history = Gio::Menu::create();
Glib::RefPtr<Gio::Menu> Menu::main_tab(
Glib::RefPtr<Gio::Menu> main_tab_page,
Glib::RefPtr<Gio::Menu> main_tab_close
) {
auto model = Gio::Menu::create();
main_tab_page_navigation_history->append(
_("Back"),
"win.main_tab_page_navigation_history_try_back"
model->append(
_("New.."),
"win.main_tab_append"
);
main_tab_page_navigation_history->append(
_("Forward"),
"win.main_tab_page_navigation_history_try_forward"
model->append_submenu(
_("Page"),
main_tab_page
);
model->append_submenu(
_("Close"),
main_tab_close
);
return model;
}
Glib::RefPtr<Gio::Menu> Menu::main_tab_page(
Glib::RefPtr<Gio::Menu> main_tab_page_navigation
) {
auto model = Gio::Menu::create();
model->append_submenu(
_("Navigation"),
main_tab_page_navigation
);
main_tab_page_navigation->append_submenu(
return model;
}
Glib::RefPtr<Gio::Menu> Menu::main_tab_page_navigation(
Glib::RefPtr<Gio::Menu> main_tab_page_navigation_history
) {
auto model = Gio::Menu::create();
model->append_submenu(
_("History"),
main_tab_page_navigation_history
);
main_tab_page_navigation->append(
model->append(
_("Update"),
"win.main_tab_page_update"
);
main_tab_page->append_submenu(
_("Navigation"),
main_tab_page_navigation
return model;
}
Glib::RefPtr<Gio::Menu> Menu::main_tab_page_navigation_history()
{
auto model = Gio::Menu::create();
model->append(
_("Back"),
"win.main_tab_page_navigation_history_try_back"
);
main_tab->append_submenu(
_("Page"),
main_tab_page
model->append(
_("Forward"),
"win.main_tab_page_navigation_history_try_forward"
);
// Build tab close submenu model
main_tab_close = Gio::Menu::create();
return model;
}
main_tab_close->append(
Glib::RefPtr<Gio::Menu> Menu::main_tab_close()
{
auto model = Gio::Menu::create();
model->append(
_("Active tab"),
"win.main_tab_close"
);
main_tab_close->append(
model->append(
_("All tabs to left"),
"win.main_tab_close_left"
);
main_tab_close->append(
model->append(
_("All tabs to right"),
"win.main_tab_close_right"
);
main_tab_close->append(
model->append(
_("All tabs"),
"win.main_tab_close_all"
);
main_tab->append_submenu(
_("Close"),
main_tab_close
);
return model;
}
// Build tools submenu model
main_tools = Gio::Menu::create();
Glib::RefPtr<Gio::Menu> Menu::main_tools()
{
auto model = Gio::Menu::create();
main_tools->append(
model->append(
_("Debug"),
"win.debug"
);
// Build main menu model
main = Gio::Menu::create();
main->append_submenu(
_("Tab"),
main_tab
);
main->append_submenu(
_("Tools"),
main_tools
);
main->append(
_("Quit"),
"app.quit"
);
// Apply model
set_menu_model(
main
);
return model;
}

35
src/app/browser/header/menu.hpp

@ -9,13 +9,34 @@ namespace app::browser::header @@ -9,13 +9,34 @@ namespace app::browser::header
{
class Menu : public Gtk::MenuButton
{
Glib::RefPtr<Gio::Menu> main,
main_tab,
main_tab_page,
main_tab_page_navigation,
main_tab_page_navigation_history,
main_tab_close,
main_tools;
// 1 level
Glib::RefPtr<Gio::Menu> main(
Glib::RefPtr<Gio::Menu> main_tab,
Glib::RefPtr<Gio::Menu> main_tools
);
// 2 level
Glib::RefPtr<Gio::Menu> main_tab(
Glib::RefPtr<Gio::Menu> main_tab_page,
Glib::RefPtr<Gio::Menu> main_tab_close
);
// 3 level
Glib::RefPtr<Gio::Menu> main_tab_page(
Glib::RefPtr<Gio::Menu> main_tab_page_navigation
);
// 4 level
Glib::RefPtr<Gio::Menu> main_tab_page_navigation(
Glib::RefPtr<Gio::Menu> main_tab_page_navigation_history
);
// 5 level
Glib::RefPtr<Gio::Menu> main_tab_page_navigation_history();
Glib::RefPtr<Gio::Menu> main_tab_close();
Glib::RefPtr<Gio::Menu> main_tools();
public:

Loading…
Cancel
Save