use std::sync::Mutex; use std::rc::Rc; use gtk::prelude::*; use gtk::Application; use self::state::View; mod state; mod welcome; mod generate; pub fn run() { let app = Application::builder() .application_id("org.n8.indexsearch") .build(); app.connect_activate(|app| { let window = gtk::ApplicationWindow::builder() .application(app) .default_width(800) .default_height(600) .title("Index Search") .build(); let mut vm = state::ViewManager::new(window); let welcome = Rc::new(Mutex::new(welcome::Welcome::new())); vm.add_view(welcome.clone()); let generate = Rc::new(Mutex::new(generate::Generate::new())); vm.add_view(generate.clone()); let vm = Rc::new(vm); welcome.lock().unwrap().set_vm(Rc::clone(&vm)); generate.lock().unwrap().set_vm(Rc::clone(&vm)); vm.set_current_view("welcome"); vm.get_window().show_all(); }); app.run(); }