diff options
Diffstat (limited to 'src/gui/welcome.rs')
| -rw-r--r-- | src/gui/welcome.rs | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/src/gui/welcome.rs b/src/gui/welcome.rs index 3dac0dd..7c7d02f 100644 --- a/src/gui/welcome.rs +++ b/src/gui/welcome.rs @@ -1,3 +1,4 @@ +use gtk::glib; use gtk::prelude::*; use super::state::{View, ViewManager}; use std::rc::Rc; @@ -15,25 +16,61 @@ impl View for Welcome { self.vm = vm } - fn make_current(&self) -> gtk::Box { + fn make_current(&self) -> Option<gtk::Box> { + let splash = gtk::Window::new(gtk::WindowType::Popup); + splash.set_type_hint(gtk::gdk::WindowTypeHint::Splashscreen); + splash.set_decorated(false); + splash.set_position(gtk::WindowPosition::Center); + splash.set_resizable(false); + splash.set_size_request(300, 200); let center = gtk::Box::new(gtk::Orientation::Vertical, 10); let main = gtk::Box::new(gtk::Orientation::Horizontal, 10); let gen_button = gtk::Button::with_label("Generate"); - let merge_button = gtk::Button::with_label("Merge"); let load_button = gtk::Button::with_label("Load"); - main.pack_start(&gen_button, true, false, 10); - main.pack_start(&merge_button, true, false, 10); - main.pack_start(&load_button, true, false, 10); + main.pack_start(&gen_button, true, true, 0); + main.pack_start(&load_button, true, true, 0); + main.set_height_request(50); + main.set_homogeneous(true); + + let bt = include_bytes!("icon.svg"); + let loader = gtk::gdk_pixbuf::PixbufLoader::new(); + loader.write(bt).ok(); + loader.set_size(100, 100); + loader.close().ok(); + let pixbuf = loader.pixbuf().unwrap(); + let image = gtk::Image::from_pixbuf(Some(&pixbuf)); + + center.pack_start(&image, true, true, 0); center.pack_start(&main, true, false, 0); + self.vm.get_window().set_type_hint(gtk::gdk::WindowTypeHint::Splashscreen); + let vm = Rc::clone(&self.vm); - gen_button.connect_clicked(move |_| { + gen_button.connect_clicked(glib::clone!(@weak splash => move |_| { vm.set_current_view("generate"); + splash.close(); + })); + + let vm = Rc::clone(&self.vm); + load_button.connect_clicked(glib::clone!(@weak splash => move |_| { + vm.set_current_view("load"); + splash.close(); + })); + + let vm = Rc::clone(&self.vm); + splash.connect_hide(move |_| { + if vm.get_current_view() == "welcome" { + vm.get_window().application().unwrap().quit(); + } }); - center + center.set_margin(10); + splash.add(¢er); + splash.show_all(); + + None } } |