use cursive::Cursive; use cursive::views::Menubar; use cursive::views::Dialog; use cursive::views::EditView; use cursive::view::Nameable; use cursive::view::Resizable; use cursive::menu::MenuTree; use cursive::menu::MenuItem; use crate::views::maillist::MaillistView; use crate::views::main::MainView; use crate::views::main::MAIN_VIEW_NAME; /// build the menu bar pub fn init(siv: &mut Cursive) { let menubar = siv.menubar(); add_main(menubar); } fn add_main(bar: &mut Menubar) { bar.add_subtree( "Muar", MenuTree::new() .leaf("Query", menu_command_query) .delimiter() .leaf("Quit", menu_command_quit) ); } fn menu_command_quit(siv: &mut Cursive) { siv.quit() } fn menu_command_query(siv: &mut Cursive) { use crate::util::dialog_for; use crate::util::error_dialog_for; let edit_view = EditView::new() .on_submit(move |siv: &mut Cursive, query: &str| { let res = siv.call_on_name(MAIN_VIEW_NAME, move |main_view: &mut MainView| { main_view.add_tab_for_query(query) }); match res { Some(Ok(())) => { siv.pop_layer(); info!("Querying went fine: {}", query); }, Some(Err(e)) => { siv.pop_layer(); error!("Error: {:?}", e); siv.add_layer(error_dialog_for(e)); }, None => { siv.pop_layer(); error!("Failed to get main view"); siv.add_layer(dialog_for("Failed to get database connection set up")); }, } }) .with_name("query"); siv.add_layer({ Dialog::around(edit_view) .title("Query") .min_width(80) }) }