need to fix this later

This commit is contained in:
Simon Gardling 2022-04-11 15:24:30 -04:00
parent 3120f8781d
commit e7d30e7213
3 changed files with 12 additions and 19 deletions

View File

@ -87,9 +87,10 @@ impl Default for FunctionEntry {
impl FunctionEntry { impl FunctionEntry {
/// Create autocomplete ui and handle user input /// Create autocomplete ui and handle user input
pub fn auto_complete(&mut self, ui: &mut egui::Ui, i: i32) { pub fn auto_complete(&mut self, ui: &mut egui::Ui, i: i32) {
let mut output_string: String = self.raw_func_str.clone(); self.autocomplete.update(&self.raw_func_str);
self.autocomplete.ui(ui, &mut output_string, i); self.autocomplete.ui(ui, i);
let output_string = self.autocomplete.string.clone();
self.update_string(output_string.as_str()); self.update_string(output_string.as_str());
} }

View File

@ -1,6 +1,6 @@
use crate::misc::chars_take; use crate::misc::chars_take;
const HINTENUM_EMPTY: HintEnum = HintEnum::Single("x^2"); pub const HINTENUM_EMPTY: HintEnum = HintEnum::Single("x^2");
const HINTENUM_CLOSED_PARENS: HintEnum = HintEnum::Single(")"); const HINTENUM_CLOSED_PARENS: HintEnum = HintEnum::Single(")");
/// Generate a hint based on the input `input`, returns an `Option<String>` /// Generate a hint based on the input `input`, returns an `Option<String>`
@ -39,7 +39,7 @@ pub fn generate_hint<'a>(input: &str) -> &'a HintEnum<'a> {
&HintEnum::None &HintEnum::None
} }
#[derive(Clone, PartialEq)] #[derive(PartialEq)]
pub enum HintEnum<'a> { pub enum HintEnum<'a> {
Single(&'a str), Single(&'a str),
Many(&'a [&'a str]), Many(&'a [&'a str]),

View File

@ -16,30 +16,27 @@ pub struct AutoComplete<'a> {
pub i: usize, pub i: usize,
pub hint: &'a HintEnum<'a>, pub hint: &'a HintEnum<'a>,
pub string: String, pub string: String,
pub first: bool,
} }
impl Default for Movement { impl Default for Movement {
fn default() -> Movement { Movement::None } fn default() -> Self { Self::None }
} }
impl<'a> Default for AutoComplete<'a> { impl<'a> Default for AutoComplete<'a> {
fn default() -> AutoComplete<'a> { fn default() -> AutoComplete<'a> {
AutoComplete { AutoComplete {
i: 0, i: 0,
hint: &HintEnum::None, hint: &crate::suggestions::HINTENUM_EMPTY,
string: String::new(), string: String::new(),
first: true,
} }
} }
} }
impl<'a> AutoComplete<'a> { impl<'a> AutoComplete<'a> {
fn update(&mut self, string: &str) { pub fn update(&mut self, string: &str) {
if (&self.string != string) | self.first { if &self.string != string {
self.string = string.to_string(); self.string = string.to_string();
self.hint = generate_hint(string); self.hint = generate_hint(string);
self.first = false;
} }
} }
@ -51,12 +48,11 @@ impl<'a> AutoComplete<'a> {
match self.hint { match self.hint {
HintEnum::Many(hints) => { HintEnum::Many(hints) => {
if movement == &Movement::Complete { if movement == &Movement::Complete {
println!("applying multicomplete");
self.string += hints[self.i]; self.string += hints[self.i];
return; return;
} }
// maximum i value // maximum index value
let max_i = hints.len() - 1; let max_i = hints.len() - 1;
match movement { match movement {
@ -83,13 +79,10 @@ impl<'a> AutoComplete<'a> {
} }
} }
pub fn ui(&mut self, ui: &mut egui::Ui, string: &mut String, func_i: i32) { pub fn ui(&mut self, ui: &mut egui::Ui, func_i: i32) {
let mut movement: Movement = Movement::default(); let mut movement: Movement = Movement::default();
// update self let mut func_edit = egui::TextEdit::singleline(&mut self.string)
self.update(string);
let mut func_edit = egui::TextEdit::singleline(string)
.hint_forward(true) // Make the hint appear after the last text in the textbox .hint_forward(true) // Make the hint appear after the last text in the textbox
.lock_focus(true); .lock_focus(true);
@ -166,7 +159,6 @@ impl<'a> AutoComplete<'a> {
}, },
}))); })));
TextEdit::store_state(ui.ctx(), te_id, state); TextEdit::store_state(ui.ctx(), te_id, state);
*string = self.string.clone();
} }
} }
} }