mirror of
https://codeberg.org/unspeaker/tek.git
synced 2026-08-07 14:06:57 +02:00
simpler value getters
This commit is contained in:
parent
b19d5bef24
commit
711e4fe6a9
3 changed files with 37 additions and 39 deletions
70
src/app.rs
70
src/app.rs
|
|
@ -73,30 +73,22 @@ fn get_arc_str (_state: &App, src: impl Language) -> Perhaps<Arc<str>> {
|
|||
}
|
||||
|
||||
fn get_u16 (state: &App, src: impl Language) -> Perhaps<u16> {
|
||||
if let Some(sym) = src.word()? {
|
||||
Ok(Some(match sym {
|
||||
":w/sidebar" => state.project.w_sidebar(state.editor().is_some()),
|
||||
":h/sample-detail" => 6.max(state.size.h() as u16 * 3 / 9),
|
||||
_ => return Err(format!("not a u16: {sym}").into())
|
||||
}))
|
||||
} else {
|
||||
try_to_u16(src)
|
||||
}
|
||||
Ok(Some(match src.word()? {
|
||||
Some(":w/sidebar") => state.project.w_sidebar(state.editor().is_some()),
|
||||
Some(":h/sample-detail") => 6.max(state.size.h() as u16 * 3 / 9),
|
||||
_ => return try_to_u16(src)
|
||||
}))
|
||||
}
|
||||
|
||||
fn get_usize (state: &App, src: impl Language) -> Perhaps<usize> {
|
||||
if let Some(sym) = src.word()? {
|
||||
Ok(Some(match sym {
|
||||
":scene-count" => state.scenes().len(),
|
||||
":track-count" => state.tracks().len(),
|
||||
":device-kind" => state.dialog.device_kind().unwrap_or(0),
|
||||
":device-kind/next" => state.dialog.device_kind_next().unwrap_or(0),
|
||||
":device-kind/prev" => state.dialog.device_kind_prev().unwrap_or(0),
|
||||
_ => return Err(format!("not usize: {sym}").into())
|
||||
}))
|
||||
} else {
|
||||
try_to_usize(src)
|
||||
}
|
||||
Ok(Some(match src.word()? {
|
||||
Some(":scene-count") => state.scenes().len(),
|
||||
Some(":track-count") => state.tracks().len(),
|
||||
Some(":device-kind") => state.dialog.device_kind().unwrap_or(0),
|
||||
Some(":device-kind/next") => state.dialog.device_kind_next().unwrap_or(0),
|
||||
Some(":device-kind/prev") => state.dialog.device_kind_prev().unwrap_or(0),
|
||||
_ => return try_to_usize(src)
|
||||
}))
|
||||
}
|
||||
|
||||
fn get_bool (state: &App, src: impl Language) -> Perhaps<bool> {
|
||||
|
|
@ -132,33 +124,37 @@ fn get_selection (state: &App, src: impl Language) -> Perhaps<Selection> {
|
|||
})).transpose()
|
||||
}
|
||||
|
||||
fn get_color (state: &App, src: impl Language) -> Perhaps<Color> {
|
||||
Ok(if let Some(sym) = src.word()? {
|
||||
match sym {
|
||||
":color/bg" => Some(Color::Rgb(28, 32, 36)),
|
||||
_ => return Err(format!("not a color: {sym}").into())
|
||||
}
|
||||
} else if let Some(expr) = src.expr()? {
|
||||
fn get_color (_state: &App, src: impl Language) -> Perhaps<Color> {
|
||||
Ok(if let Ok(Some(expr)) = src.expr() {
|
||||
match expr.head()? {
|
||||
Some("g") => {
|
||||
let n = try_to_u8(expr.tail())?
|
||||
.ok_or::<Box<dyn Error>>(format!("not gray: {expr}").into())?;
|
||||
let n = try_to_u8(expr.tail())?.ok_or::<Box<dyn Error>>(
|
||||
format!("not gray: {expr}").into()
|
||||
)?;
|
||||
Some(Color::Rgb(n, n, n))
|
||||
},
|
||||
Some("rgb") => {
|
||||
let r = try_to_u8(expr.tail().head())?
|
||||
.ok_or::<Box<dyn Error>>(format!("not red: {expr}").into())?;
|
||||
let g = try_to_u8(expr.tail().tail().head())?
|
||||
.ok_or::<Box<dyn Error>>(format!("not green: {expr}").into())?;
|
||||
let b = try_to_u8(expr.tail().tail().tail().head())?
|
||||
.ok_or::<Box<dyn Error>>(format!("not blue: {expr}").into())?;
|
||||
let r = try_to_u8(expr.tail().head())?.ok_or::<Box<dyn Error>>(
|
||||
format!("not red: {expr}").into()
|
||||
)?;
|
||||
let g = try_to_u8(expr.tail().tail().head())?.ok_or::<Box<dyn Error>>(
|
||||
format!("not green: {expr}").into()
|
||||
)?;
|
||||
let b = try_to_u8(expr.tail().tail().tail().head())?.ok_or::<Box<dyn Error>>(
|
||||
format!("not blue: {expr}").into()
|
||||
)?;
|
||||
Some(Color::Rgb(r, g, b))
|
||||
},
|
||||
Some(_) => return Err(format!("not a color expression: {expr}").into()),
|
||||
None => return Err(format!("not a color expression: {expr}").into())
|
||||
}
|
||||
} else if let Ok(Some(sym)) = src.word() {
|
||||
match sym {
|
||||
":color/bg" => Some(Color::Rgb(28, 32, 36)),
|
||||
_ => return Err(format!("not a color: {sym}").into())
|
||||
}
|
||||
} else {
|
||||
None
|
||||
return Err(format!("not a color: {:?}", src.src()?).into())
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,9 @@ impl View<Tui> for App {
|
|||
}
|
||||
for (index, dsl) in self.mode.view.iter().enumerate() {
|
||||
if let Err(e) = self.interpret(to, dsl) {
|
||||
*self.error.write().unwrap() = Some(format!("view #{index}: {e}").into());
|
||||
*self.error.write().unwrap() = Some(format!(
|
||||
"mode {:?} view #{index}: {e}", &self.mode.name,
|
||||
).into());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
2
tengri
2
tengri
|
|
@ -1 +1 @@
|
|||
Subproject commit be98e666f53eedf95618396239641ad846a772bd
|
||||
Subproject commit ad1a514eddbf3104b7631dedef786389863988bf
|
||||
Loading…
Add table
Add a link
Reference in a new issue