Compare commits

...

2 Commits

Author SHA1 Message Date
ca7051d24d Experiment with GUI binary 2023-08-30 17:21:30 -04:00
6c1dbeb009 Begin new GUI with Iced 2023-08-30 00:09:55 -04:00
3 changed files with 1290 additions and 49 deletions

1259
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,9 @@ edition = "2018"
[[bin]]
name = "dust"
[[bin]]
name = "gui"
[lib]
name = "dust_lib"
path = "src/lib.rs"
@ -19,7 +22,6 @@ path = "src/lib.rs"
[dependencies]
rand = "0.8.5"
chrono = "0.4.26"
eframe = "0.22.0"
trash = "3.0.3"
rayon = "1.7.0"
serde = { version = "1.0.171", features = ["derive"] }
@ -36,3 +38,8 @@ serde_json = "1.0.104"
egui_extras = "0.22.0"
rustyline = { version = "12.0.0", features = ["with-file-history", "derive"] }
ansi_term = "0.12.1"
iced = "0.10.0"
egui = "0.22.0"
eframe = "0.22.0"
env_logger = "0.10.0"
once_cell = "1.18.0"

71
src/bin/gui.rs Normal file
View File

@ -0,0 +1,71 @@
use dust_lib::eval;
use iced::widget::{button, column, container, scrollable, text, text_input};
use iced::{executor, Alignment, Application, Command, Element, Sandbox, Settings, Theme};
use once_cell::sync::Lazy;
static INPUT_ID: Lazy<text_input::Id> = Lazy::new(text_input::Id::unique);
pub fn main() -> iced::Result {
DustGui::run(Settings::default())
}
struct DustGui {
text_buffer: String,
results: Vec<String>,
}
impl Application for DustGui {
type Executor = executor::Default;
type Message = Message;
type Theme = Theme;
type Flags = ();
fn new(flags: Self::Flags) -> (Self, iced::Command<Self::Message>) {
(
DustGui {
text_buffer: String::new(),
results: Vec::new(),
},
Command::none(),
)
}
fn title(&self) -> String {
"Dust".to_string()
}
fn update(&mut self, message: Self::Message) -> iced::Command<Self::Message> {
match message {
Message::TextInput(input) => {
self.text_buffer = input;
Command::none()
}
Message::Evaluate => {
let eval_result = eval(&self.text_buffer);
Command::batch(vec![])
}
}
}
fn view(&self) -> Element<'_, Self::Message, iced::Renderer<Self::Theme>> {
let input = text_input("What needs to be done?", &self.text_buffer)
.id(INPUT_ID.clone())
.on_input(Message::TextInput)
.on_submit(Message::Evaluate)
.padding(15)
.size(30);
scrollable(container(column![input])).into()
}
}
#[derive(Debug, Clone)]
enum Message {
TextInput(String),
Evaluate,
}