refactor: move menubar code to menubar.rs

merge-requests/8/head
Nefo Fortressia 2021-10-22 09:44:49 +07:00
parent 9b56dd086b
commit 6adbdd38f2
1 changed files with 86 additions and 0 deletions

86
src/app/menubar.rs Normal file
View File

@ -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);
}));
}
}