use glerminal::menu_systems::{Dialog, Filter, Menu, MenuList, MenuPosition, TextInput, TextItem}; use glerminal::{Parser, TerminalBuilder, TextBuffer}; fn main() { let terminal = TerminalBuilder::new() .with_title("Simple window") .with_dimensions((1280, 720)) .build(); let mut text_buffer; match TextBuffer::create(&terminal, (80, 24)) { Ok(buffer) => text_buffer = buffer, Err(error) => panic!(format!("Failed to initialize text buffer: {}", error)), } let filter = Filter::empty_filter() .with_basic_latin_characters() .with_basic_numerals() .with_latin_1_supplement() .with_latin_extended_a() .with_basic_special_symbols(); let mut title = TextItem::new("Menu systems + parser example").with_max_width(40); let mut button = TextItem::new("Times pressed: [fg=red]0[/fg]").with_is_button(true); let mut times_pressed = 0; let mut test_input = TextInput::new(None, None) .with_prefix("Input some text [[fg=green]") .with_suffix("[/fg]]") .with_filter(filter.clone()) .with_width(10, 10); let mut test_dialog = Dialog::new(30, 4, 4).with_text( "Hello! This is some [fg=green][shake=0.5]spooky stuff[/shake][/fg]. I can even add stuff with [bg=red]red background![/bg].", ); let mut parser = Parser::new(); parser.add_color("green", [0.2, 1.0, 0.2, 1.0]); parser.add_color("red", [1.0, 0.2, 0.2, 1.0]); let mut menu = Menu::new() .with_pos((5, 5)) .with_focus(true) .with_text_processor(parser); while terminal.refresh() { let events = terminal.get_current_events(); let dirty = menu.update( &events, terminal.delta_time(), &text_buffer, &mut MenuList::new() .with_item(&mut title, None) .with_item(&mut button, MenuPosition::RelativeToLast(0, 1)) .with_item(&mut test_input, None) .with_item(&mut test_dialog, MenuPosition::RelativeToLast(0, 1)), ); if button.was_just_pressed() { times_pressed += 1; button.set_text(format!("Times pressed: [fg=red]{}[/fg]", times_pressed)); } if dirty { text_buffer.clear(); menu.draw(&mut text_buffer); terminal.flush(&mut text_buffer); } terminal.draw(&text_buffer); } }