From 5cefd97f8ce201245abcb4e2de2949ed8b4529d1 Mon Sep 17 00:00:00 2001 From: Markus Krause Date: Sat, 16 Mar 2024 15:01:04 +0100 Subject: [PATCH] - add history to search box - select search box text on focus for easier typing of new terms --- Cargo.lock | 11 ++++++++++- Cargo.toml | 5 ++++- src/app.rs | 22 +++++++++++++++++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 777cf0b..cc36471 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -963,12 +963,13 @@ dependencies = [ [[package]] name = "easyeda_to_kicad_lib_ui" -version = "1.1.2" +version = "1.2.0" dependencies = [ "arboard", "downloader", "eframe", "egui", + "egui-dropdown", "egui_extras", "env_logger", "glob", @@ -1046,6 +1047,14 @@ dependencies = [ "serde", ] +[[package]] +name = "egui-dropdown" +version = "0.7.0" +source = "git+https://github.com/markusdd/egui-dropdown.git?branch=master#5792fc54bbef79f1dd90f7db944ca075f4a039c0" +dependencies = [ + "egui", +] + [[package]] name = "egui-winit" version = "0.26.2" diff --git a/Cargo.toml b/Cargo.toml index 4f556e4..cefd40c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "easyeda_to_kicad_lib_ui" -version = "1.1.2" +version = "1.2.0" authors = ["Markus Krause "] edition = "2021" rust-version = "1.72" @@ -14,6 +14,8 @@ eframe = { version = "0.26.2", default-features = false, features = [ "glow", # Use the glow rendering backend. Alternative: "wgpu". "persistence", # Enable restoring app state when restarting the app. ] } +# remove until PR merged egui-dropdown = "0.7.0" +egui-dropdown = { git = "https://github.com/markusdd/egui-dropdown.git", branch = "master" } image = { version = "0.24.9", features = ["jpeg", "png"] } egui_extras = { version = "0.26.2", features = ["all_loaders"] } log = "0.4" @@ -28,6 +30,7 @@ tempdir = "0.3.7" glob = "0.3.1" arboard = "3.3.2" + # You only need serde if you want app persistence: serde = { version = "1", features = ["derive"] } diff --git a/src/app.rs b/src/app.rs index 174190c..709a3a2 100644 --- a/src/app.rs +++ b/src/app.rs @@ -1,4 +1,5 @@ use std::{ + collections::VecDeque, fs::{create_dir_all, read_to_string}, path::Path, }; @@ -6,6 +7,7 @@ use std::{ use arboard::Clipboard; use downloader::{Download, Downloader}; use egui::{TextEdit, Vec2, Window}; +use egui_dropdown::DropDownBox; use egui_extras::{Column, TableBuilder}; use glob::glob; use indexmap::{indexmap, IndexMap}; @@ -32,6 +34,7 @@ pub struct MyApp { skip_existing: bool, no_footprint: bool, no_symbol: bool, + history: VecDeque, #[serde(skip)] tempdir: Option, #[serde(skip)] @@ -60,6 +63,7 @@ impl Default for MyApp { skip_existing: false, no_footprint: false, no_symbol: false, + history: VecDeque::with_capacity(11), tempdir: TempDir::new("easyedatokicadlib").ok(), settings_open: false, is_init: false, @@ -273,12 +277,28 @@ impl eframe::App for MyApp { ui.vertical(|ui| { ui.horizontal(|ui| { ui.label("LCSC number or part URL: "); - ui.add(TextEdit::singleline(&mut self.part).desired_width(800.0)); + // ui.add(TextEdit::singleline(&mut self.part).desired_width(800.0)); + + ui.add( + DropDownBox::from_iter( + &self.history, + "searchbox", + &mut self.part, + |ui, text| ui.selectable_label(false, text), + ) + .desired_width(800.0) + .select_on_focus(true) + .filter_by_input(false), + ); + if ui.button("Search").clicked() { self.part = self.part.trim().to_owned(); if let Some(tabledata) = Self::get_part(self.part.as_str()) { self.current_part = tabledata; self.search_good = true; + // handle history + self.history.push_front(self.part.clone()); + self.history.truncate(10); } else { self.search_good = false; }