From 6adbdd38f29812b1b882108080ba61d16a357696 Mon Sep 17 00:00:00 2001 From: Nefomemes Date: Fri, 22 Oct 2021 09:44:49 +0700 Subject: [PATCH] refactor: move menubar code to menubar.rs --- src/app/menubar.rs | 86 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 src/app/menubar.rs diff --git a/src/app/menubar.rs b/src/app/menubar.rs new file mode 100644 index 0000000..eba4474 --- /dev/null +++ b/src/app/menubar.rs @@ -0,0 +1,86 @@ +use super::imp::EchidnaEditor; +use super::imp::EchidnaEditorExt; +use gio::{MenuModel, SimpleAction}; +use glib::clone; +use gtk::prelude::*; +use gtk::AboutDialog; + +pub trait MenubarImplementedEditor { + fn setup_menubar( + &self, + app: &super::EchidnaEditor, + window: gtk::ApplicationWindow, + builder: gtk::Builder, + ); +} + +impl MenubarImplementedEditor for EchidnaEditor { + fn setup_menubar( + &self, + app: &super::EchidnaEditor, + window: gtk::ApplicationWindow, + builder: gtk::Builder, + ) { + let menubuilder = gtk::Builder::from_string(include_str!("../../ui/menu.ui")); + let menubar: MenuModel = menubuilder + .object("menu") + .expect("Could not get object 'menu' from builder."); + app.set_menubar(Some(&menubar)); + window.set_show_menubar(true); + let act_exit: SimpleAction = SimpleAction::new("exit", None); + app.add_action(&act_exit); + + act_exit.connect_activate(clone!(@weak app => + move |_action, _value| { + app.quit(); + } + )); + + let act_about: SimpleAction = SimpleAction::new("about", None); + app.add_action(&act_about); + act_about.connect_activate(|_action, _value| { + let about_dialog: AboutDialog = AboutDialog::new(); + + about_dialog.set_license_type(gtk::License::Mpl20); + about_dialog.set_program_name(Some("Echidna Code Editor")); + about_dialog.set_website(Some("https://gitlab.com/EchidnaHQ/Echidna")); + about_dialog.set_authors(&["FortressValkriye"]); + about_dialog.set_copyright(Some("Made with by ❤️ Echidna contributors")); + about_dialog.set_visible(true); + }); + + let notebook: gtk::Notebook = builder + .object("echidna-notebook") + .expect("Could not get 'echidna-notebook' from builder."); + //app.notebook = Some(Rc::new(RefCell::new(notebook))); + let act_exit: SimpleAction = SimpleAction::new("exit", None); + app.add_action(&act_exit); + + act_exit.connect_activate(clone!(@weak app => + move |_action, _value| { + app.quit(); + } + )); + + let act_about: SimpleAction = SimpleAction::new("about", None); + app.add_action(&act_about); + act_about.connect_activate(|_action, _value| { + let about_dialog: AboutDialog = AboutDialog::new(); + + about_dialog.set_license_type(gtk::License::Mpl20); + about_dialog.set_program_name(Some("Echidna Code Editor")); + about_dialog.set_website(Some("https://gitlab.com/EchidnaHQ/Echidna")); + about_dialog.set_authors(&["FortressValkriye"]); + about_dialog.set_copyright(Some("Made with by ❤️ Echidna contributors")); + about_dialog.set_visible(true); + }); + + let action_open_file: SimpleAction = SimpleAction::new("open-file", None); + + window.add_action(&action_open_file); + action_open_file.connect_activate(clone!(@weak window, @weak app, @weak notebook => + move |action, variant| { + Self::action_open_file(window, app, action, variant, notebook); + })); + } +}