mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 12:16:42 +01:00
looks like layout must return size only
This commit is contained in:
parent
70cef99931
commit
4e0eb0c335
3 changed files with 195 additions and 230 deletions
|
|
@ -230,8 +230,7 @@ impl Handle<Tui> for Arranger<Tui> {
|
|||
match from.event() {
|
||||
// mode_switch: switch the display mode
|
||||
key!(KeyCode::Char('`')) => {
|
||||
self.mode.to_next();
|
||||
Ok(Some(true))
|
||||
self.mode.to_next()
|
||||
},
|
||||
// cursor_up: move cursor up
|
||||
key!(KeyCode::Up) => {
|
||||
|
|
@ -240,7 +239,6 @@ impl Handle<Tui> for Arranger<Tui> {
|
|||
_ => self.scene_prev(),
|
||||
};
|
||||
self.show_phrase()?;
|
||||
Ok(Some(true))
|
||||
},
|
||||
// cursor_down
|
||||
key!(KeyCode::Down) => {
|
||||
|
|
@ -249,7 +247,6 @@ impl Handle<Tui> for Arranger<Tui> {
|
|||
_ => self.scene_next(),
|
||||
};
|
||||
self.show_phrase()?;
|
||||
Ok(Some(true))
|
||||
},
|
||||
// cursor left
|
||||
key!(KeyCode::Left) => {
|
||||
|
|
@ -258,7 +255,6 @@ impl Handle<Tui> for Arranger<Tui> {
|
|||
_ => self.track_prev(),
|
||||
};
|
||||
self.show_phrase()?;
|
||||
Ok(Some(true))
|
||||
},
|
||||
// cursor right
|
||||
key!(KeyCode::Right) => {
|
||||
|
|
@ -267,67 +263,45 @@ impl Handle<Tui> for Arranger<Tui> {
|
|||
_ => self.track_next(),
|
||||
};
|
||||
self.show_phrase()?;
|
||||
Ok(Some(true))
|
||||
},
|
||||
// increment: use next clip here
|
||||
key!(KeyCode::Char('.')) => {
|
||||
self.phrase_next();
|
||||
Ok(Some(true))
|
||||
},
|
||||
// decrement: use previous next clip here
|
||||
key!(KeyCode::Char(',')) => {
|
||||
self.phrase_prev();
|
||||
Ok(Some(true))
|
||||
},
|
||||
// decrement: use previous clip here
|
||||
key!(KeyCode::Enter) => {
|
||||
self.activate();
|
||||
Ok(Some(true))
|
||||
},
|
||||
// scene_add: add a new scene
|
||||
key!(Ctrl-KeyCode::Char('a')) => {
|
||||
self.scene_add(None)?;
|
||||
Ok(Some(true))
|
||||
},
|
||||
// track_add: add a new scene
|
||||
key!(Ctrl-KeyCode::Char('t')) => {
|
||||
self.track_add(None)?;
|
||||
Ok(Some(true))
|
||||
},
|
||||
// rename: add a new scene
|
||||
key!(KeyCode::Char('n')) => {
|
||||
self.rename_selected();
|
||||
Ok(Some(true))
|
||||
},
|
||||
// length: add a new scene
|
||||
key!(KeyCode::Char('l')) => {
|
||||
todo!();
|
||||
Ok(Some(true))
|
||||
},
|
||||
// color: set color of item at cursor
|
||||
key!(KeyCode::Char('c')) => {
|
||||
todo!();
|
||||
Ok(Some(true))
|
||||
},
|
||||
_ => Ok(None)
|
||||
}
|
||||
}
|
||||
}
|
||||
/// Display mode of arranger
|
||||
#[derive(PartialEq)]
|
||||
pub enum ArrangerViewMode { VerticalExpanded, VerticalCompact1, VerticalCompact2, Horizontal }
|
||||
/// Arranger display mode can be cycled
|
||||
impl ArrangerViewMode {
|
||||
/// Cycle arranger display mode
|
||||
pub fn to_next (&mut self) {
|
||||
*self = match self {
|
||||
Self::VerticalExpanded => Self::VerticalCompact1,
|
||||
Self::VerticalCompact1 => Self::VerticalCompact2,
|
||||
Self::VerticalCompact2 => Self::Horizontal,
|
||||
Self::Horizontal => Self::VerticalExpanded,
|
||||
_ => return Ok(None)
|
||||
}
|
||||
Ok(Some(true))
|
||||
}
|
||||
}
|
||||
|
||||
impl Content for Arranger<Tui> {
|
||||
type Engine = Tui;
|
||||
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||
|
|
@ -360,6 +334,21 @@ impl Content for Arranger<Tui> {
|
|||
})
|
||||
}
|
||||
}
|
||||
/// Display mode of arranger
|
||||
#[derive(PartialEq)]
|
||||
pub enum ArrangerViewMode { VerticalExpanded, VerticalCompact1, VerticalCompact2, Horizontal }
|
||||
/// Arranger display mode can be cycled
|
||||
impl ArrangerViewMode {
|
||||
/// Cycle arranger display mode
|
||||
pub fn to_next (&mut self) {
|
||||
*self = match self {
|
||||
Self::VerticalExpanded => Self::VerticalCompact1,
|
||||
Self::VerticalCompact1 => Self::VerticalCompact2,
|
||||
Self::VerticalCompact2 => Self::Horizontal,
|
||||
Self::Horizontal => Self::VerticalExpanded,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ArrangerViewVertical<'a, 'b, E: Engine>(
|
||||
&'a Arranger<E>, &'b [(usize, usize)], &'b [(usize, usize)]
|
||||
|
|
@ -503,16 +492,16 @@ struct TracksHeader<'a>(
|
|||
impl<'a> Content for TracksHeader<'a> {
|
||||
type Engine = Tui;
|
||||
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||
let Self(_offset, columns, tracks) = *self;
|
||||
Split::right(move |add|{
|
||||
let Self(offset, columns, tracks) = *self;
|
||||
Plus::X(offset, Split::right(move |add|{
|
||||
for (track, (w, _)) in tracks.iter().zip(columns) {
|
||||
add(&Min::X(*w as u16, Layers::new(|add|{
|
||||
add(&Min::XY(*w as u16, 2, Layers::new(|add|{
|
||||
add(&Background(COLOR_BG1))?;
|
||||
add(&track.name.read().unwrap().as_str())
|
||||
})))?;
|
||||
}
|
||||
Ok(())
|
||||
})
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -546,15 +535,16 @@ impl<'a> Content for SceneRow<'a> {
|
|||
let playing = scene.is_playing(tracks);
|
||||
Split::right(move |add| {
|
||||
add(&Layers::new(|add|{
|
||||
add(&Split::right(|add|{
|
||||
add(&if playing { "▶" } else { " " })?;
|
||||
add(&scene.name.read().unwrap().as_str())
|
||||
}))?;
|
||||
add(&Background(COLOR_BG1))
|
||||
//add(&Split::right(|add|{
|
||||
//add(&if playing { "▶" } else { " " })?;
|
||||
add(&scene.name.read().unwrap().as_str())?;
|
||||
//}))?;
|
||||
//add(&Background(COLOR_BG1))
|
||||
Ok(())
|
||||
}))?;
|
||||
for (track, (_w, _x)) in columns.iter().enumerate() {
|
||||
add(&SceneClip(tracks.get(track), scene.clips.get(track)))?;
|
||||
}
|
||||
//for (track, (_w, _x)) in columns.iter().enumerate() {
|
||||
//add(&SceneClip(tracks.get(track), scene.clips.get(track)))?;
|
||||
//}
|
||||
Ok(())
|
||||
})
|
||||
}
|
||||
|
|
@ -589,8 +579,6 @@ struct ArrangerViewHorizontal<'a, E: Engine>(
|
|||
impl<'a> Content for ArrangerViewHorizontal<'a, Tui> {
|
||||
type Engine = Tui;
|
||||
fn content (&self) -> impl Widget<Engine = Tui> {
|
||||
//let area = to.area();
|
||||
//let area = [area.x(), area.y(), area.w(), area.h().min((2 + state.tracks.len() * 2) as u16)];
|
||||
let Arranger { tracks, focused, selected, scenes, .. } = self.0;
|
||||
let tracks = tracks.as_slice();
|
||||
Layers::new(|add|{
|
||||
|
|
|
|||
|
|
@ -98,47 +98,35 @@ impl Handle<Tui> for ArrangerStandalone<Tui> {
|
|||
key!(KeyCode::Char(' ')) => {
|
||||
if let Some(ref mut transport) = self.transport {
|
||||
transport.toggle_play()?;
|
||||
Ok(Some(true))
|
||||
} else {
|
||||
Ok(None)
|
||||
return Ok(None)
|
||||
}
|
||||
},
|
||||
key!(KeyCode::Tab) => {
|
||||
self.focus_next();
|
||||
Ok(Some(true))
|
||||
},
|
||||
key!(KeyCode::BackTab) => {
|
||||
self.focus_prev();
|
||||
Ok(Some(true))
|
||||
},
|
||||
key!(KeyCode::Down) => {
|
||||
if self.focus == 0 || (
|
||||
self.focus == 1 && self.arranger.is_last_row()
|
||||
) {
|
||||
self.focus_next();
|
||||
Ok(Some(true))
|
||||
} else {
|
||||
self.focused_mut().handle(from)
|
||||
return self.focused_mut().handle(from)
|
||||
}
|
||||
},
|
||||
key!(KeyCode::Up) => {
|
||||
if self.focus == 1 && self.arranger.is_first_row() {
|
||||
self.focus_prev();
|
||||
Ok(Some(true))
|
||||
} else {
|
||||
self.focused_mut().handle(from)
|
||||
return self.focused_mut().handle(from)
|
||||
}
|
||||
},
|
||||
_ => self.focused_mut().handle(from)
|
||||
_ => return self.focused_mut().handle(from)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct SequencerProxy<E: Engine>(Arc<RwLock<Arranger<E>>>);
|
||||
|
||||
impl Handle<Tui> for SequencerProxy<Tui> {
|
||||
fn handle (&mut self, from: &Tui) -> Perhaps<bool> {
|
||||
self.0.write().unwrap().handle(from)
|
||||
Ok(Some(true))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue