first prototype
This commit is contained in:
parent
0c8c0463d5
commit
1ea9e22d01
3 changed files with 208 additions and 7 deletions
56
Cargo.lock
generated
56
Cargo.lock
generated
|
|
@ -621,6 +621,27 @@ version = "1.2.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
|
checksum = "f27ae1dd37df86211c42e150270f82743308803d90a6f6e6651cd730d5e1732f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dirs"
|
||||||
|
version = "6.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c3e8aa94d75141228480295a7d0e7feb620b1a5ad9f12bc40be62411e38cce4e"
|
||||||
|
dependencies = [
|
||||||
|
"dirs-sys",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "dirs-sys"
|
||||||
|
version = "0.5.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e01a3366d27ee9890022452ee61b2b63a67e6f13f58900b651ff5665f0bb1fab"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"option-ext",
|
||||||
|
"redox_users",
|
||||||
|
"windows-sys 0.61.2",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dispatch"
|
name = "dispatch"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
|
|
@ -858,6 +879,7 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b"
|
||||||
name = "fridge"
|
name = "fridge"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"dirs",
|
||||||
"iced",
|
"iced",
|
||||||
"ron",
|
"ron",
|
||||||
"serde",
|
"serde",
|
||||||
|
|
@ -974,6 +996,17 @@ dependencies = [
|
||||||
"windows-link",
|
"windows-link",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "getrandom"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ff2abc00be7fca6ebc474524697ae276ad847ad0a6b3faa4bcb027e9a4614ad0"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"wasi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.3.4"
|
version = "0.3.4"
|
||||||
|
|
@ -2077,6 +2110,12 @@ version = "1.21.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "option-ext"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "orbclient"
|
name = "orbclient"
|
||||||
version = "0.3.55"
|
version = "0.3.55"
|
||||||
|
|
@ -2366,6 +2405,17 @@ dependencies = [
|
||||||
"bitflags 2.13.0",
|
"bitflags 2.13.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "redox_users"
|
||||||
|
version = "0.5.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a4e608c6638b9c18977b00b475ac1f28d14e84b27d8d42f70e0bf1e3dec127ac"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom 0.2.17",
|
||||||
|
"libredox",
|
||||||
|
"thiserror 2.0.18",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "renderdoc-sys"
|
name = "renderdoc-sys"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
|
@ -3032,6 +3082,12 @@ dependencies = [
|
||||||
"winapi-util",
|
"winapi-util",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasi"
|
||||||
|
version = "0.11.1+wasi-snapshot-preview1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasip2"
|
name = "wasip2"
|
||||||
version = "1.0.4+wasi-0.2.12"
|
version = "1.0.4+wasi-0.2.12"
|
||||||
|
|
|
||||||
|
|
@ -7,3 +7,4 @@ edition = "2024"
|
||||||
iced = "0.14.0"
|
iced = "0.14.0"
|
||||||
serde = { version = "1.0.228", features = [ "derive" ] }
|
serde = { version = "1.0.228", features = [ "derive" ] }
|
||||||
ron = "0.12.2"
|
ron = "0.12.2"
|
||||||
|
dirs = "6.0.0"
|
||||||
|
|
|
||||||
158
src/main.rs
158
src/main.rs
|
|
@ -1,20 +1,164 @@
|
||||||
use iced::{Element, Renderer, Theme, widget};
|
use std::fs;
|
||||||
|
|
||||||
|
use iced::{
|
||||||
|
Color, Element, Renderer, Theme,
|
||||||
|
alignment::{Horizontal, Vertical},
|
||||||
|
color, widget,
|
||||||
|
};
|
||||||
|
|
||||||
mod data;
|
mod data;
|
||||||
|
|
||||||
enum Message {}
|
macro_rules! data {
|
||||||
|
() => {
|
||||||
|
dirs::data_dir().unwrap().join("fridge.ron")
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
struct State {}
|
#[derive(Clone, Debug)]
|
||||||
|
enum Message {
|
||||||
|
AddCategory,
|
||||||
|
RemoveCategory {
|
||||||
|
i_category: usize,
|
||||||
|
},
|
||||||
|
CategoryChanged {
|
||||||
|
i_category: usize,
|
||||||
|
new_value: String,
|
||||||
|
},
|
||||||
|
|
||||||
|
AddElement {
|
||||||
|
i_category: usize,
|
||||||
|
},
|
||||||
|
RemoveElement {
|
||||||
|
i_category: usize,
|
||||||
|
i_element: usize,
|
||||||
|
},
|
||||||
|
ElementChanged {
|
||||||
|
i_category: usize,
|
||||||
|
i_element: usize,
|
||||||
|
new_value: String,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Default)]
|
||||||
|
struct State {
|
||||||
|
table: data::Table,
|
||||||
|
}
|
||||||
impl State {
|
impl State {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
Self {}
|
let mut state = Self::default();
|
||||||
|
if let Ok(file) =
|
||||||
|
fs::File::open(data!()).inspect_err(|e| eprintln!("failed to read data file: {e}"))
|
||||||
|
{
|
||||||
|
state.table = ron::de::from_reader(file).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
state
|
||||||
}
|
}
|
||||||
fn view(&self) -> Element<'_, Message, Theme, Renderer> {
|
fn view(&self) -> Element<'_, Message, Theme, Renderer> {
|
||||||
widget::space().into()
|
widget::row(self.table.iter().enumerate().map(|(i_category, category)| {
|
||||||
|
widget::column([
|
||||||
|
widget::row([
|
||||||
|
widget::text_input("category", &category.header)
|
||||||
|
.on_input(move |new_value| Message::CategoryChanged {
|
||||||
|
i_category,
|
||||||
|
new_value,
|
||||||
|
})
|
||||||
|
.size(30)
|
||||||
|
.into(),
|
||||||
|
widget::button("X")
|
||||||
|
.style(widget::button::danger)
|
||||||
|
.on_press(Message::RemoveCategory { i_category })
|
||||||
|
.height(50)
|
||||||
|
.into(),
|
||||||
|
])
|
||||||
|
.align_y(Vertical::Center)
|
||||||
|
.into(),
|
||||||
|
widget::scrollable(widget::column(category.elements.iter().enumerate().map(
|
||||||
|
|(i_element, element)| {
|
||||||
|
widget::row([
|
||||||
|
widget::text_input("content", &element)
|
||||||
|
.on_input(move |new_value| Message::ElementChanged {
|
||||||
|
i_category,
|
||||||
|
i_element,
|
||||||
|
new_value,
|
||||||
|
})
|
||||||
|
.into(),
|
||||||
|
widget::button("X")
|
||||||
|
.style(widget::button::warning)
|
||||||
|
.on_press(Message::RemoveElement {
|
||||||
|
i_category,
|
||||||
|
i_element,
|
||||||
|
})
|
||||||
|
.into(),
|
||||||
|
])
|
||||||
|
.into()
|
||||||
|
},
|
||||||
|
)))
|
||||||
|
.into(),
|
||||||
|
widget::button("add element")
|
||||||
|
.on_press(Message::AddElement { i_category })
|
||||||
|
.into(),
|
||||||
|
])
|
||||||
|
.align_x(Horizontal::Center)
|
||||||
|
.into()
|
||||||
|
}))
|
||||||
|
.push(widget::button("add category").on_press(Message::AddCategory))
|
||||||
|
.into()
|
||||||
|
}
|
||||||
|
fn update(&mut self, message: Message) {
|
||||||
|
match message {
|
||||||
|
Message::AddCategory => {
|
||||||
|
self.table.push(Default::default());
|
||||||
|
}
|
||||||
|
Message::RemoveCategory { i_category } => {
|
||||||
|
self.table.remove(i_category);
|
||||||
|
}
|
||||||
|
Message::CategoryChanged {
|
||||||
|
i_category,
|
||||||
|
new_value,
|
||||||
|
} => {
|
||||||
|
self.table[i_category].header = new_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
Message::AddElement { i_category } => {
|
||||||
|
self.table[i_category].elements.push(Default::default());
|
||||||
|
}
|
||||||
|
Message::RemoveElement {
|
||||||
|
i_category,
|
||||||
|
i_element,
|
||||||
|
} => {
|
||||||
|
self.table[i_category].elements.remove(i_element);
|
||||||
|
}
|
||||||
|
Message::ElementChanged {
|
||||||
|
i_category,
|
||||||
|
i_element,
|
||||||
|
new_value,
|
||||||
|
} => {
|
||||||
|
self.table[i_category].elements[i_element] = new_value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
impl Drop for State {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
ron::Options::default()
|
||||||
|
.to_io_writer(fs::File::create(data!()).unwrap(), &self.table)
|
||||||
|
.unwrap();
|
||||||
}
|
}
|
||||||
fn update(&mut self, message: Message) {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result<(), iced::Error> {
|
fn main() -> Result<(), iced::Error> {
|
||||||
iced::application(State::new, State::update, State::view).run()
|
iced::application(State::new, State::update, State::view)
|
||||||
|
.theme(Theme::custom(
|
||||||
|
"custom",
|
||||||
|
iced::theme::Palette {
|
||||||
|
background: color!(0x080808),
|
||||||
|
text: Color::WHITE,
|
||||||
|
primary: color!(0xff00ff),
|
||||||
|
success: color!(0x00ff00),
|
||||||
|
warning: color!(0x880000),
|
||||||
|
danger: color!(0xff0000),
|
||||||
|
},
|
||||||
|
))
|
||||||
|
.run()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue