added a real menu

This commit is contained in:
Wyatt J. Miller 2022-05-24 10:43:44 -04:00
parent b2efd6917d
commit 20cc623431
2 changed files with 41 additions and 26 deletions

View File

@ -1,23 +1,10 @@
use std::rc::Rc;
use futures::executor::block_on;
use gtk4::prelude::*; use gtk4::prelude::*;
use gtk4::subclass::prelude::*;
use gtk4::{ use gtk4::{
AboutDialog, AboutDialog,
gdk::Paintable,
glib::*, glib::*,
ApplicationWindow,
HeaderBar,
Button, Button,
Window,
Popover, Popover,
Builder,
License, License,
IconTheme,
IconLookupFlags,
TextDirection,
MenuButton,
TextView,
Box, Box,
Orientation, Orientation,
}; };

View File

@ -1,6 +1,8 @@
use std::rc::Rc; use std::rc::Rc;
use futures::executor::block_on; use futures::executor::block_on;
use gtk4::{prelude::*}; use gio::{Menu, MenuItem, SimpleAction, SimpleActionGroup};
use gtk4::builders::PopoverMenuBuilder;
use gtk4::{prelude::*, PopoverMenu, AboutDialog, License};
use gtk4::subclass::prelude::*; use gtk4::subclass::prelude::*;
use gtk4::{ use gtk4::{
gdk::Paintable, gdk::Paintable,
@ -19,24 +21,26 @@ use gtk4::{
use crate::popover::CustomPopoverMenu; use crate::popover::CustomPopoverMenu;
#[derive(Debug, Downgrade)] #[derive(Debug)]
pub struct CustomTitleBar { pub struct CustomTitleBar {
pub window: Window, pub window: Window,
pub titlebar: HeaderBar, pub titlebar: HeaderBar,
pub run_button: Button, pub run_button: Button,
pub menu_button: MenuButton, pub menu_button: MenuButton,
pub popover_menu: CustomPopoverMenu, pub menu: Menu,
pub menu_actions: SimpleActionGroup,
} }
impl CustomTitleBar { impl CustomTitleBar {
pub fn new(pop: &CustomPopoverMenu) -> CustomTitleBar { pub fn new() -> CustomTitleBar {
// loading PopoverMenu logic goes here // loading PopoverMenu logic goes here
CustomTitleBar { CustomTitleBar {
window: Window::new(), window: Window::new(),
titlebar: HeaderBar::new(), titlebar: HeaderBar::new(),
run_button: Button::new(), run_button: Button::new(),
menu_button: MenuButton::new(), menu_button: MenuButton::new(),
popover_menu: pop.clone(), menu: Menu::new(),
menu_actions: SimpleActionGroup::new(),
} }
} }
@ -55,8 +59,39 @@ impl CustomTitleBar {
// symbolic // symbolic
// let menu_button = IconTheme::new(); // let menu_button = IconTheme::new();
// menu_button.lookup_icon("open-menu-symbolic", &[], 16, 1, TextDirection::Ltr, IconLookupFlags::empty()); // menu_button.lookup_icon("open-menu-symbolic", &[], 16, 1, TextDirection::Ltr, IconLookupFlags::empty());
self.menu_button.set_popover(Some(&self.popover_menu.popover)); //self.menu_button.set_popover(Some(&self.popover_menu.popover));
self.menu.append(Some("About"), Some("about_action"));
self.menu.append(Some("Keyboard Shortcuts"), None);
self.menu.append(Some("Quit"), None);
let popover_menu = Some(PopoverMenu::builder().menu_model(&self.menu).build());
self.menu_button.set_popover(Some(&popover_menu.unwrap()));
}
pub fn set_actions(&self) {
// about action
let about_action = SimpleAction::new("about_action", None);
about_action.set_enabled(true);
about_action.connect_activate(clone!(@strong self as this =>
move |_, _| {
let about_dialog = AboutDialog::builder()
.program_name("SNESPatcher")
.version("0.1.0")
.comments("GTK4 app to patch your SNES ROMs!")
.authors(["Wyatt J. Miller".to_string()].to_vec())
.documenters(["Wyatt J. Miller".to_string()].to_vec())
.license_type(License::Mpl20)
.website("https://scm.wyattjmiller.com/wymiller/snespatcher")
.website_label("Website?")
.modal(false)
.can_focus(true)
//.child(&window)
.build();
about_dialog.show();
}));
// add actions to the menu
self.menu_actions.add_action(&about_action);
//println!("{:?}", self.menu_actions.is_action_enabled("About"));
} }
pub fn click_run_button(&self) { pub fn click_run_button(&self) {
@ -65,13 +100,6 @@ impl CustomTitleBar {
}); });
} }
pub fn click_menu(&self) {
// self.menu_button.connect_clicked(clone!(@weak self as this =>
// move |_| {
// this.popover.show();
// }));
}
pub fn set_window(&self, window: &ApplicationWindow) { pub fn set_window(&self, window: &ApplicationWindow) {
window.set_titlebar(Some(&self.titlebar)); window.set_titlebar(Some(&self.titlebar));
} }