added popover
This commit is contained in:
parent
d5b28f0b94
commit
d2ff6e2a74
17
src/main.rs
17
src/main.rs
@ -1,9 +1,12 @@
|
||||
mod patch;
|
||||
mod titlebar;
|
||||
mod boxes;
|
||||
mod menu;
|
||||
mod popover;
|
||||
|
||||
use titlebar::CustomTitleBar;
|
||||
use boxes::*;
|
||||
use popover::CustomPopoverMenu;
|
||||
|
||||
use std::path::PathBuf;
|
||||
use std::rc::Rc;
|
||||
@ -13,8 +16,10 @@ use gtk4::{
|
||||
gdk::{
|
||||
Display
|
||||
},
|
||||
gio::MenuModel,
|
||||
Application,
|
||||
ApplicationWindow,
|
||||
Builder,
|
||||
StyleContext,
|
||||
};
|
||||
|
||||
@ -38,17 +43,27 @@ fn build_ui(app: &Application) {
|
||||
gtk4::STYLE_PROVIDER_PRIORITY_APPLICATION,
|
||||
);
|
||||
|
||||
let builder = Builder::new();
|
||||
builder.add_from_resource("/com/wyattjmiller/snespatcher/appmenu.xml").expect("Error initializing app menu!");
|
||||
//println!("{:?}", builder.list_properties());
|
||||
|
||||
let app_window: Rc<ApplicationWindow> = Rc::new(ApplicationWindow::new(app));
|
||||
let header_bar: CustomTitleBar = CustomTitleBar::new();
|
||||
let popover_menu: CustomPopoverMenu = CustomPopoverMenu::new();
|
||||
let header_bar: CustomTitleBar = CustomTitleBar::new(&popover_menu);
|
||||
let app_box: AppBox = AppBox::new();
|
||||
let patch_box: PatchBox = PatchBox::new(&app_window);
|
||||
let rom_box: RomBox = RomBox::new(&app_window);
|
||||
|
||||
// set popover_menu methods
|
||||
popover_menu.set_texts();
|
||||
|
||||
// TODO: Set popover textviews and put them in a separate file
|
||||
// set header bar methods
|
||||
header_bar.set_buttons();
|
||||
header_bar.set_titlebar();
|
||||
header_bar.set_window(&app_window);
|
||||
header_bar.click_run_button();
|
||||
header_bar.click_menu();
|
||||
|
||||
// set patch box methods
|
||||
patch_box.set_label();
|
||||
|
4
src/menu.rs
Normal file
4
src/menu.rs
Normal file
@ -0,0 +1,4 @@
|
||||
enum PatchType {
|
||||
Ips,
|
||||
Bps,
|
||||
}
|
49
src/popover.rs
Normal file
49
src/popover.rs
Normal file
@ -0,0 +1,49 @@
|
||||
use std::rc::Rc;
|
||||
use futures::executor::block_on;
|
||||
use gtk4::prelude::*;
|
||||
use gtk4::subclass::prelude::*;
|
||||
use gtk4::{
|
||||
gdk::Paintable,
|
||||
glib::*,
|
||||
ApplicationWindow,
|
||||
HeaderBar,
|
||||
Button,
|
||||
Window,
|
||||
Popover,
|
||||
Builder,
|
||||
IconTheme,
|
||||
IconLookupFlags,
|
||||
TextDirection,
|
||||
MenuButton,
|
||||
TextView,
|
||||
Box,
|
||||
Orientation,
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, Downgrade)]
|
||||
pub struct CustomPopoverMenu {
|
||||
pub popover: Popover,
|
||||
pub pop_box: Box,
|
||||
pub test_text_view:Button,
|
||||
pub subtest_text_view: Button,
|
||||
}
|
||||
|
||||
impl CustomPopoverMenu {
|
||||
pub fn new() -> CustomPopoverMenu {
|
||||
CustomPopoverMenu {
|
||||
popover: Popover::new(),
|
||||
pop_box: Box::new(Orientation::Vertical, 0),
|
||||
test_text_view: Button::new(),
|
||||
subtest_text_view: Button::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_texts(&self) {
|
||||
self.test_text_view.set_label("About");
|
||||
self.subtest_text_view.set_label("Psyche!");
|
||||
self.pop_box.append(&self.test_text_view);
|
||||
self.pop_box.append(&self.subtest_text_view);
|
||||
self.pop_box.set_visible(true);
|
||||
self.popover.set_child(Some(&self.pop_box));
|
||||
}
|
||||
}
|
@ -1,45 +1,61 @@
|
||||
use std::rc::Rc;
|
||||
use futures::executor::block_on;
|
||||
use gtk4::prelude::*;
|
||||
use gtk4::{prelude::*};
|
||||
use gtk4::subclass::prelude::*;
|
||||
use gtk4::{
|
||||
gdk::Paintable,
|
||||
glib::*,
|
||||
ApplicationWindow,
|
||||
HeaderBar,
|
||||
Button,
|
||||
Window
|
||||
Window,
|
||||
Popover,
|
||||
Builder,
|
||||
IconTheme,
|
||||
IconLookupFlags,
|
||||
TextDirection,
|
||||
MenuButton,
|
||||
};
|
||||
|
||||
use crate::popover::CustomPopoverMenu;
|
||||
|
||||
#[derive(Debug, Downgrade)]
|
||||
pub struct CustomTitleBar {
|
||||
pub window: Window,
|
||||
pub titlebar: HeaderBar,
|
||||
pub run_button: Button,
|
||||
pub type_button: Button,
|
||||
pub menu_button: MenuButton,
|
||||
pub popover_menu: CustomPopoverMenu,
|
||||
}
|
||||
|
||||
impl CustomTitleBar {
|
||||
pub fn new() -> CustomTitleBar {
|
||||
pub fn new(pop: &CustomPopoverMenu) -> CustomTitleBar {
|
||||
// loading PopoverMenu logic goes here
|
||||
CustomTitleBar {
|
||||
window: Window::new(),
|
||||
titlebar: HeaderBar::new(),
|
||||
run_button: Button::new(),
|
||||
type_button: Button::new(),
|
||||
menu_button: MenuButton::new(),
|
||||
popover_menu: pop.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn set_buttons(&self) {
|
||||
// set labels
|
||||
self.run_button.set_label("Apply Patch");
|
||||
self.type_button.set_label("Patch Type");
|
||||
//self.menu_button.set_label("Menu");
|
||||
|
||||
// set css class; it turns blue!
|
||||
self.run_button.set_css_classes(&["run_btn"]);
|
||||
|
||||
// set visibility
|
||||
self.run_button.set_visible(true);
|
||||
self.type_button.set_visible(true);
|
||||
self.menu_button.set_visible(true);
|
||||
|
||||
// asdf
|
||||
// symbolic
|
||||
// let menu_button = IconTheme::new();
|
||||
// menu_button.lookup_icon("open-menu-symbolic", &[], 16, 1, TextDirection::Ltr, IconLookupFlags::empty());
|
||||
self.menu_button.set_popover(Some(&self.popover_menu.popover));
|
||||
|
||||
}
|
||||
|
||||
@ -49,13 +65,24 @@ 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) {
|
||||
window.set_titlebar(Some(&self.titlebar));
|
||||
}
|
||||
|
||||
pub fn set_titlebar(&self) {
|
||||
self.titlebar.pack_start(&self.run_button);
|
||||
self.titlebar.pack_start(&self.type_button);
|
||||
self.titlebar.pack_end(&self.menu_button);
|
||||
self.titlebar.set_css_classes(&["headerbar"])
|
||||
}
|
||||
|
||||
pub fn set_popover(&self) {
|
||||
// huh? why is this method here again?
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user