use super::{BrowserAction, WindowAction};
use gtk::{
Align, MenuButton,
gio::{self},
prelude::ActionExt,
};
use std::rc::Rc;
pub trait Menu {
fn menu(actions: (&Rc<BrowserAction>, &Rc<WindowAction>)) -> Self;
}
#[rustfmt::skip] impl Menu for MenuButton {
fn menu(
(browser_action, window_action): (&Rc<BrowserAction>, &Rc<WindowAction>),
) -> Self {
let main = gio::Menu::new();
let main_page = gio::Menu::new();
main_page.append(Some("New"), Some(&format!(
"{}.{}",
window_action.id,
window_action.append.simple_action.name()
)));
main_page.append(Some("Reload"), Some(&format!(
"{}.{}",
window_action.id,
window_action.reload.simple_action.name()
)));
main_page.append(Some("Find.."), Some(&format!(
"{}.{}",
window_action.id,
window_action.find.simple_action.name()
)));
let main_page_file = gio::Menu::new();
main_page_file.append(Some("Open.."), Some(&format!(
"{}.{}",
window_action.id,
window_action.open.simple_action.name()
)));
main_page_file.append(Some("Save as.."), Some(&format!(
"{}.{}",
window_action.id,
window_action.save_as.simple_action.name()
)));
main_page.append_submenu(Some("File"), &main_page_file);
let main_page_mark = gio::Menu::new();
main_page_mark.append(Some("Bookmark"), Some(&format!(
"{}.{}",
window_action.id,
window_action.bookmark.simple_action.name()
)));
main_page_mark.append(Some("Pin"), Some(&format!(
"{}.{}",
window_action.id,
window_action.pin.simple_action.name()
)));
main_page.append_section(None, &main_page_mark);
let main_page_tools = gio::Menu::new();
main_page_tools.append(Some("Source"), Some(&format!(
"{}.{}",
window_action.id,
window_action.source.simple_action.name()
)));
main_page.append_section(None, &main_page_tools);
let main_page_navigation = gio::Menu::new();
main_page_navigation.append(Some("Home"), Some(&format!(
"{}.{}",
window_action.id,
window_action.home.simple_action.name()
)));
let main_page_navigation_history = gio::Menu::new();
main_page_navigation_history.append(Some("Back"), Some(&format!(
"{}.{}",
window_action.id,
window_action.history_back.simple_action.name()
)));
main_page_navigation_history.append(Some("Forward"), Some(&format!(
"{}.{}",
window_action.id,
window_action.history_forward.simple_action.name()
)));
main_page_navigation.append_submenu(Some("Navigation"), &main_page_navigation_history);
main_page.append_section(None, &main_page_navigation);
let main_page_close = gio::Menu::new();
main_page_close.append(Some("Current"), Some(&format!(
"{}.{}",
window_action.id,
window_action.close.simple_action.name()
)));
main_page_close.append(Some("All"), Some(&format!(
"{}.{}",
window_action.id,
window_action.close_all.simple_action.name()
)));
main_page.append_submenu(Some("Close"), &main_page_close);
main.append_submenu(Some("Page"), &main_page);
main.append(Some("Bookmarks"), Some(&format!(
"{}.{}",
browser_action.id,
browser_action.bookmarks.simple_action.name()
)));
main.append(Some("History"), Some(&format!(
"{}.{}",
browser_action.id,
browser_action.history.simple_action.name()
)));
let main_settings = gio::Menu::new();
main_settings.append(Some("Proxy connection"), Some(&format!(
"{}.{}",
browser_action.id,
browser_action.proxy.simple_action.name()
)));
main.append_submenu(Some("Settings"), &main_settings);
let main_tool = gio::Menu::new();
main_tool.append(Some("Debug"), Some(&format!(
"{}.{}",
browser_action.id,
browser_action.debug.simple_action.name()
)));
main_tool.append(Some("Open profile directory"), Some(&format!(
"{}.{}",
browser_action.id,
browser_action.profile.simple_action.name()
)));
main_tool.append(Some("About"), Some(&format!(
"{}.{}",
browser_action.id,
browser_action.about.simple_action.name()
)));
main.append_submenu(Some("Tool"), &main_tool);
main.append(Some("Quit"), Some(&format!(
"{}.{}",
browser_action.id,
browser_action.close.simple_action.name()
)));
MenuButton::builder()
.css_classes(["flat"])
.icon_name("open-menu-symbolic")
.menu_model(&main)
.tooltip_text("Menu")
.valign(Align::Center)
.build()
}
}