mod patch; mod titlebar; mod boxes; use titlebar::CustomTitleBar; use boxes::*; use std::path::PathBuf; use std::rc::Rc; use gtk4::prelude::*; use gtk4::{ gdk::{ Display }, Application, ApplicationWindow, StyleContext, }; fn main() { let app = Application::new(Some("com.wyattjmiller.snespatcher"), Default::default()); app.connect_activate(build_ui); app.run(); } fn build_ui(app: &Application) { let resources_bytes = include_bytes!("../resources/resources.gresource"); let resource_data = glib::Bytes::from(&resources_bytes[..]); let res = gio::Resource::from_data(&resource_data).unwrap(); gio::resources_register(&res); let provider = gtk4::CssProvider::new(); provider.load_from_resource("/com/wyattjmiller/snespatcher/style.css"); StyleContext::add_provider_for_display( &Display::default().expect("Error initializing CSS provider!"), &provider, gtk4::STYLE_PROVIDER_PRIORITY_APPLICATION, ); let app_window: Rc = Rc::new(ApplicationWindow::new(app)); let header_bar: CustomTitleBar = CustomTitleBar::new(); let app_box: AppBox = AppBox::new(); let patch_box: PatchBox = PatchBox::new(&app_window); let rom_box: RomBox = RomBox::new(&app_window); // set header bar methods header_bar.set_buttons(); header_bar.set_titlebar(); header_bar.set_window(&app_window); header_bar.click_run_button(); // set patch box methods patch_box.set_label(); patch_box.set_button(); patch_box.set_box(); patch_box.click_button(app_window.clone()); // set rom box methods rom_box.set_label(); rom_box.set_button(); rom_box.set_box(); rom_box.click_button(app_window.clone()); // set app box methods app_box.set_box(&rom_box, &patch_box); // set apps default methods app_window.set_title(Some("SNES Patcher")); app_window.set_resizable(false); app_window.set_child(Some(&app_box.app_box)); app_window.show(); } async fn dialog>(window: Rc) { let question_dialog = gtk4::MessageDialog::builder() .transient_for(&*window) .modal(true) .buttons(gtk4::ButtonsType::OkCancel) .text("What is your answer?") .build(); let answer = question_dialog.run_future().await; question_dialog.close(); let info_dialog = gtk4::MessageDialog::builder() .transient_for(&*window) .modal(true) .buttons(gtk4::ButtonsType::Close) .text("You answered") .secondary_text(&format!("Your answer: {:?}", answer)) .build(); info_dialog.run_future().await; info_dialog.close(); }