From 305d1e3f53c5a208a6bd98b1d8e9685d42e0f221 Mon Sep 17 00:00:00 2001 From: Julian Mutter Date: Tue, 23 Jan 2024 21:09:30 +0100 Subject: [PATCH] Add Spc and Clr buttons to MCDU --- src/mcdu.rs | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/src/mcdu.rs b/src/mcdu.rs index a18646b..d7193c2 100644 --- a/src/mcdu.rs +++ b/src/mcdu.rs @@ -23,6 +23,7 @@ pub enum McduOutput { #[derive(Debug)] pub enum KeyboardEvent { ButtonPress(char), + ClrButtonPress, SearchStarted(String), QueryChanged(String), } @@ -81,6 +82,30 @@ impl SimpleComponent for McduModel { .attach(&button, column as i32, row as i32, 1, 1); } + let button = gtk::Button::default(); + button.set_label("SPC"); + button.connect_clicked(glib::clone!(@strong sender => move |_| { + sender.input(KeyboardEvent::ButtonPress(' ')); + })); + let i = alphabet.len(); + let column = i % mcdu_width; + let row = (i - column) / mcdu_width; + widgets + .keyboard + .attach(&button, column as i32, row as i32, 1, 1); + + let button = gtk::Button::default(); + button.set_label("CLR"); + button.connect_clicked(glib::clone!(@strong sender => move |_| { + sender.input(KeyboardEvent::ClrButtonPress); + })); + let i = alphabet.len() + 1; + let column = i % mcdu_width; + let row = (i - column) / mcdu_width; + widgets + .keyboard + .attach(&button, column as i32, row as i32, 1, 1); + ComponentParts { model, widgets } } @@ -88,12 +113,16 @@ impl SimpleComponent for McduModel { self.query_changed_by_mcdu_keys = false; match message { KeyboardEvent::ButtonPress(c) => { - // println!("Button press: {}", c); self.query_changed_by_mcdu_keys = true; self.query.push(c); } + KeyboardEvent::ClrButtonPress => { + self.query_changed_by_mcdu_keys = true; + self.query.clear(); + // Run search since gtk::SearchEntry will not run it if text is empty + sender.input(KeyboardEvent::SearchStarted(String::new())); + } KeyboardEvent::SearchStarted(s) => { - // println!("Started search: {}", s); sender.output(McduOutput::SearchStarted(s)).unwrap(); } KeyboardEvent::QueryChanged(query) => self.query = query,