extern crate gtk;
#[macro_use]
extern crate relm;
#[macro_use]
extern crate relm_derive;
extern crate tokio_core;
use gtk::{Dialog, DialogExt, Inhibit, WidgetExt, Window, WindowType, DIALOG_MODAL};
use relm::{RemoteRelm, Widget};
use self::Msg::*;
#[derive(Msg)]
enum Msg {
Quit,
}
#[derive(Clone)]
struct Win {
window: Window,
}
impl Widget for Win {
type Model = ();
type ModelParam = ();
type Msg = Msg;
type Root = Window;
fn model(_: ()) -> () {
()
}
fn root(&self) -> &Self::Root {
&self.window
}
fn update(&mut self, event: Msg, _model: &mut ()) {
match event {
Quit => gtk::main_quit(),
}
}
fn view(relm: &RemoteRelm<Self>, _model: &Self::Model) -> Self {
let window = Window::new(WindowType::Toplevel);
window.show_all();
let parent = window.clone();
connect!(relm, window, connect_delete_event(_, _) {
let num = dialog(&parent);
match num {
1 => (Some(Quit), Inhibit(false)),
_ => (None, Inhibit(true)),
}
});
Win {
window: window,
}
}
}
fn dialog(window: &Window) -> i32 {
let buttons = &[("Yes", 1), ("No", 2)];
let dialog = Dialog::new_with_buttons(Some("Quit?"), Some(window), DIALOG_MODAL, buttons);
let result = dialog.run();
dialog.destroy();
result
}
fn main() {
Win::run(()).unwrap();
}