ui work, needs more work done

This commit is contained in:
Wyatt J. Miller 2021-06-27 16:39:38 -04:00
parent 073b4a1eb8
commit cd1cb7250a
2 changed files with 220 additions and 0 deletions

160
src/boxes.rs Normal file
View File

@ -0,0 +1,160 @@
use gtk4::prelude::*;
use gtk4::{
glib::*,
ApplicationWindow,
Box,
Button,
FileChooserAction,
FileChooserDialog,
Label,
Orientation,
ResponseType,
};
pub trait CustomBox {
fn click_button(&self) {}
fn set_button(&self) {}
fn set_label(&self) {}
fn set_box(&self) {}
}
pub struct AppBox {
pub app_box: Box,
}
#[derive(Debug, Downgrade)]
pub struct RomBox {
pub rom_box: Box,
pub rom_button: Button,
pub rom_label: Label,
pub rom_filechooser: FileChooserDialog,
}
#[derive(Debug, Downgrade)]
pub struct PatchBox {
pub patch_box: Box,
pub patch_button: Button,
pub patch_label: Label,
pub patch_filechooser: FileChooserDialog,
}
impl AppBox {
pub fn new() -> AppBox {
AppBox {
app_box: Box::new(Orientation::Vertical, 0),
}
}
pub fn set_box(&self, rom_box: &RomBox, patch_box: &PatchBox) {
self.app_box.set_visible(true);
self.app_box.append(&rom_box.rom_box);
self.app_box.append(&patch_box.patch_box);
}
}
impl RomBox {
pub fn new(app: &ApplicationWindow) -> RomBox {
RomBox {
rom_box: Box::new(Orientation::Horizontal, 0),
rom_button: Button::new(),
rom_label: Label::new(Some("Choose ROM")),
rom_filechooser: FileChooserDialog::new(
Some("Select a ROM"),
Some(app),
FileChooserAction::Open,
&[("OK", ResponseType::Ok), ("Cancel", ResponseType::Cancel)]
),
}
}
}
impl CustomBox for RomBox {
fn click_button(&self) {
self.rom_button.connect_clicked(clone!(@weak self as this =>
move |_| {
this.rom_filechooser.show();
}));
}
fn set_button(&self) {
self.rom_button.set_margin_top(20);
self.rom_button.set_margin_bottom(0);
self.rom_button.set_margin_start(20);
self.rom_button.set_margin_end(20);
self.rom_button.set_visible(true);
self.rom_button.set_label("Open");
}
fn set_label(&self) {
self.rom_label.set_margin_top(20);
self.rom_label.set_margin_bottom(0);
self.rom_label.set_margin_start(20);
self.rom_label.set_margin_end(20);
self.rom_label.set_visible(true);
}
fn set_box(&self) {
self.rom_box.set_homogeneous(true);
self.rom_box.set_visible(true);
self.rom_box.append(&self.rom_label);
self.rom_box.append(&self.rom_button);
}
}
impl PatchBox {
pub fn new(app: &ApplicationWindow) -> PatchBox {
PatchBox {
patch_box: Box::new(Orientation::Horizontal, 0),
patch_button: Button::new(),
patch_label: Label::new(Some("Choose Patch")),
patch_filechooser: FileChooserDialog::new(
Some("Select a Patch"),
Some(app),
FileChooserAction::Open,
&[("OK", ResponseType::Ok), ("Cancel", ResponseType::Cancel)]
),
}
}
}
impl CustomBox for PatchBox{
fn click_button(&self) {
self.patch_button.connect_clicked(clone!(@weak self as this =>
move |_| {
this.patch_filechooser.show();
//this.patch_filechooser.close();
}));
// self.patch_filechooser.connect_response(clone!(@weak self as this =>
// move |_, ResponseType::Ok| {
// this.patch_filechooser.close();
// }));
}
fn set_button(&self) {
self.patch_button.set_margin_top(20);
self.patch_button.set_margin_bottom(20);
self.patch_button.set_margin_start(20);
self.patch_button.set_margin_end(20);
self.patch_button.set_visible(true);
self.patch_button.set_label("Open");
}
fn set_label(&self) {
self.patch_label.set_margin_top(20);
self.patch_label.set_margin_bottom(20);
self.patch_label.set_margin_start(20);
self.patch_label.set_margin_end(20);
self.patch_label.set_visible(true);
}
fn set_box(&self) {
self.patch_box.set_homogeneous(true);
self.patch_box.set_visible(true);
self.patch_box.append(&self.patch_label);
self.patch_box.append(&self.patch_button);
}
}

60
src/titlebar.rs Normal file
View File

@ -0,0 +1,60 @@
use std::rc::Rc;
use futures::executor::block_on;
use gtk4::prelude::*;
use gtk4::{
glib::*,
ApplicationWindow,
HeaderBar,
Button,
Window
};
#[derive(Debug, Downgrade)]
pub struct CustomTitleBar {
pub window: Window,
pub titlebar: HeaderBar,
pub run_button: Button,
pub type_button: Button,
}
impl CustomTitleBar {
pub fn new() -> CustomTitleBar {
CustomTitleBar {
window: Window::new(),
titlebar: HeaderBar::new(),
run_button: Button::new(),
type_button: Button::new(),
}
}
pub fn set_buttons(&self) {
// set labels
self.run_button.set_label("Apply Patch");
self.type_button.set_label("Patch Type");
// 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);
// asdf
}
pub fn click_run_button(&self) {
self.run_button.connect_clicked(move |button| {
button.set_label("Avery is awesome!");
});
}
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);
}
}