mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-08 20:56:43 +01:00
This commit is contained in:
parent
34070de5f7
commit
fd26b12955
18 changed files with 243 additions and 194 deletions
|
|
@ -1,15 +1,17 @@
|
|||
use crate::*;
|
||||
|
||||
impl<'t> DslNs<'t, Arc<str>> for App {
|
||||
dsl_exprs!(|app| -> Arc<str> {});
|
||||
dsl_words!(|app| -> Arc<str> {});
|
||||
fn from_literal <D: Dsl> (&self, dsl: &D) -> Perhaps<Arc<str>> {
|
||||
impl<'a> DslNs<'a, Arc<str>> for App {
|
||||
fn from_literal (&self, dsl: impl Dsl) -> Perhaps<Arc<str>> {
|
||||
Ok(dsl.src()?.map(|x|x.into()))
|
||||
}
|
||||
}
|
||||
impl<'a> DslNsWords<'a, Arc<str>> for App {}
|
||||
impl<'a> DslNsExprs<'a, Arc<str>> for App {}
|
||||
|
||||
impl<'t> DslNs<'t, bool> for App {
|
||||
dsl_words!(|app| -> bool {
|
||||
impl<'a> DslNs<'a, bool> for App {}
|
||||
impl<'a> DslNsExprs<'a, bool> for App {}
|
||||
impl<'a> DslNsWords<'a, bool> for App {
|
||||
dsl_words!('a |app| -> bool {
|
||||
":mode/editor" => app.project.editor.is_some(),
|
||||
|
||||
":focused/dialog" => !matches!(app.dialog, Dialog::None),
|
||||
|
|
@ -29,15 +31,16 @@ impl<'t> DslNs<'t, bool> for App {
|
|||
":focused/mix" => !app.editor_focused() && matches!(app.selection(),
|
||||
Selection::Mix),
|
||||
});
|
||||
//fn from_literal <D: Dsl> (&self, dsl: &D) -> Perhaps<Arc<str>> {
|
||||
//TODO
|
||||
//}
|
||||
}
|
||||
|
||||
impl<'t> DslNs<'t, ItemTheme> for App {}
|
||||
impl<'a> DslNs<'a, ItemTheme> for App {}
|
||||
impl<'a> DslNsWords<'a, ItemTheme> for App {}
|
||||
impl<'a> DslNsExprs<'a, ItemTheme> for App {}
|
||||
|
||||
impl<'t> DslNs<'t, Dialog> for App {
|
||||
dsl_words!(|app| -> Dialog {
|
||||
impl<'a> DslNs<'a, Dialog> for App {}
|
||||
impl<'a> DslNsExprs<'a, Dialog> for App {}
|
||||
impl<'a> DslNsWords<'a, Dialog> for App {
|
||||
dsl_words!('a |app| -> Dialog {
|
||||
":dialog/none" => Dialog::None,
|
||||
":dialog/options" => Dialog::Options,
|
||||
":dialog/device" => Dialog::Device(0),
|
||||
|
|
@ -59,8 +62,10 @@ impl<'t> DslNs<'t, Dialog> for App {
|
|||
});
|
||||
}
|
||||
|
||||
impl<'t> DslNs<'t, Selection> for App {
|
||||
dsl_words!(|app| -> Selection {
|
||||
impl<'a> DslNs<'a, Selection> for App {}
|
||||
impl<'a> DslNsExprs<'a, Selection> for App {}
|
||||
impl<'a> DslNsWords<'a, Selection> for App {
|
||||
dsl_words!('a |app| -> Selection {
|
||||
":select/scene" => app.selection().select_scene(app.tracks().len()),
|
||||
":select/scene/next" => app.selection().select_scene_next(app.scenes().len()),
|
||||
":select/scene/prev" => app.selection().select_scene_prev(),
|
||||
|
|
@ -70,33 +75,42 @@ impl<'t> DslNs<'t, Selection> for App {
|
|||
});
|
||||
}
|
||||
|
||||
impl<'t> DslNs<'t, Color> for App {
|
||||
dsl_words!(|app| -> Color {
|
||||
impl<'a> DslNs<'a, Color> for App {}
|
||||
impl<'a> DslNsWords<'a, Color> for App {
|
||||
dsl_words!('a |app| -> Color {
|
||||
":color/bg" => Color::Rgb(28, 32, 36),
|
||||
});
|
||||
dsl_exprs!(|app| -> Color {
|
||||
"g" (n: u8) => Color::Rgb(n, n, n),
|
||||
}
|
||||
impl<'a> DslNsExprs<'a, Color> for App {
|
||||
dsl_exprs!('a |app| -> Color {
|
||||
"g" (n: u8) => Color::Rgb(n, n, n),
|
||||
"rgb" (r: u8, g: u8, b: u8) => Color::Rgb(r, g, b),
|
||||
});
|
||||
}
|
||||
|
||||
impl<'t> DslNs<'t, Option<u7>> for App {
|
||||
dsl_words!(|app| -> Option<u7> {
|
||||
impl<'a> DslNs<'a, Option<u7>> for App {}
|
||||
impl<'a> DslNsExprs<'a, Option<u7>> for App {}
|
||||
impl<'a> DslNsWords<'a, Option<u7>> for App {
|
||||
dsl_words!('a |app| -> Option<u7> {
|
||||
":editor/pitch" => Some(
|
||||
(app.editor().as_ref().map(|e|e.get_note_pos()).unwrap() as u8).into()
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
impl<'t> DslNs<'t, Option<usize>> for App {
|
||||
dsl_words!(|app| -> Option<usize> {
|
||||
impl<'a> DslNs<'a, Option<usize>> for App {}
|
||||
impl<'a> DslNsExprs<'a, Option<usize>> for App {}
|
||||
impl<'a> DslNsWords<'a, Option<usize>> for App {
|
||||
dsl_words!('a |app| -> Option<usize> {
|
||||
":selected/scene" => app.selection().scene(),
|
||||
":selected/track" => app.selection().track(),
|
||||
});
|
||||
}
|
||||
|
||||
impl<'t> DslNs<'t, Option<Arc<RwLock<MidiClip>>>> for App {
|
||||
dsl_words!(|app| -> Option<Arc<RwLock<MidiClip>>> {
|
||||
impl<'a> DslNs<'a, Option<Arc<RwLock<MidiClip>>>> for App {}
|
||||
impl<'a> DslNsExprs<'a, Option<Arc<RwLock<MidiClip>>>> for App {}
|
||||
impl<'a> DslNsWords<'a, Option<Arc<RwLock<MidiClip>>>> for App {
|
||||
dsl_words!('a |app| -> Option<Arc<RwLock<MidiClip>>> {
|
||||
":selected/clip" => if let Selection::TrackClip { track, scene } = app.selection() {
|
||||
app.scenes()[*scene].clips[*track].clone()
|
||||
} else {
|
||||
|
|
@ -105,18 +119,63 @@ impl<'t> DslNs<'t, Option<Arc<RwLock<MidiClip>>>> for App {
|
|||
});
|
||||
}
|
||||
|
||||
dsl_ns! { num |app: App|
|
||||
u8;
|
||||
u16 => {
|
||||
impl<'a> DslNs<'a, u8> for App {
|
||||
fn from_literal (&self, dsl: impl Dsl) -> Perhaps<u8> {
|
||||
Ok(if let Some(src) = dsl.src()? {
|
||||
Some(to_number(src)? as u8)
|
||||
} else {
|
||||
None
|
||||
})
|
||||
}
|
||||
}
|
||||
impl<'a> DslNsWords<'a, u8> for App {}
|
||||
impl<'a> DslNsExprs<'a, u8> for App {}
|
||||
|
||||
impl<'a> DslNs<'a, u16> for App {
|
||||
fn from_literal (&self, dsl: impl Dsl) -> Perhaps<u16> {
|
||||
Ok(if let Some(src) = dsl.src()? {
|
||||
Some(to_number(src)? as u16)
|
||||
} else {
|
||||
None
|
||||
})
|
||||
}
|
||||
}
|
||||
impl<'a> DslNsWords<'a, u16> for App {
|
||||
dsl_words!('a |app| -> u16 {
|
||||
":w/sidebar" => app.project.w_sidebar(app.editor().is_some()),
|
||||
":h/sample-detail" => 6.max(app.height() as u16 * 3 / 9),
|
||||
};
|
||||
usize => {
|
||||
});
|
||||
}
|
||||
impl<'a> DslNsExprs<'a, u16> for App {}
|
||||
|
||||
impl<'a> DslNs<'a, usize> for App {
|
||||
fn from_literal (&self, dsl: impl Dsl) -> Perhaps<usize> {
|
||||
Ok(if let Some(src) = dsl.src()? {
|
||||
Some(to_number(src)? as usize)
|
||||
} else {
|
||||
None
|
||||
})
|
||||
}
|
||||
}
|
||||
impl<'a> DslNsWords<'a, usize> for App {
|
||||
dsl_words!('a |app| -> usize {
|
||||
":scene-count" => app.scenes().len(),
|
||||
":track-count" => app.tracks().len(),
|
||||
":device-kind" => app.dialog.device_kind().unwrap_or(0),
|
||||
":device-kind/next" => app.dialog.device_kind_next().unwrap_or(0),
|
||||
":device-kind/prev" => app.dialog.device_kind_prev().unwrap_or(0),
|
||||
};
|
||||
isize;
|
||||
});
|
||||
}
|
||||
impl<'a> DslNsExprs<'a, usize> for App {}
|
||||
|
||||
impl<'a> DslNs<'a, isize> for App {
|
||||
fn from_literal (&self, dsl: impl Dsl) -> Perhaps<isize> {
|
||||
Ok(if let Some(src) = dsl.src()? {
|
||||
Some(to_number(src)? as isize)
|
||||
} else {
|
||||
None
|
||||
})
|
||||
}
|
||||
}
|
||||
impl<'a> DslNsWords<'a, isize> for App {}
|
||||
impl<'a> DslNsExprs<'a, isize> for App {}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue