tek/crates/tek_sequencer/src/arranger_view.rs

58 lines
1.9 KiB
Rust

use crate::*;
use tek_core::Direction;
/// Display mode of arranger
pub enum ArrangerViewMode {
VerticalExpanded,
VerticalCompact1,
VerticalCompact2,
Horizontal,
}
impl ArrangerViewMode {
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,
}
}
}
render!(Arranger |self, buf, area| {
let arrangement = |buf, area| match self.mode {
ArrangerViewMode::Horizontal =>
super::arranger_view_h::draw(self, buf, area),
ArrangerViewMode::VerticalCompact1 =>
super::arranger_view_v::draw_compact_1(self, buf, area),
ArrangerViewMode::VerticalCompact2 =>
super::arranger_view_v::draw_compact_2(self, buf, area),
ArrangerViewMode::VerticalExpanded =>
super::arranger_view_v::draw_expanded(self, buf, area),
};
if let Some(direction) = self.show_sequencer {
let arrangement = arrangement(buf, area)?;
match direction {
Direction::Down => {
let sequencer = if let Some(sequencer) = self.sequencer() {
sequencer.render(buf, Rect {
y: area.y + arrangement.height,
height: area.height - arrangement.height,
..area
})?
} else {
Rect::default()
};
Corners(Style::default().green().not_dim()).draw(buf, match self.focus_sequencer {
true => sequencer,
false => arrangement,
})?;
},
_ => unimplemented!()
}
Ok(area)
} else {
arrangement(buf, area)
}
});