mirror of
https://codeberg.org/unspeaker/tek.git
synced 2025-12-07 20:26:42 +01:00
arranger/sequencer control
This commit is contained in:
parent
a533951fc6
commit
52e9613d52
6 changed files with 243 additions and 209 deletions
|
|
@ -6,63 +6,35 @@ use tek_core::Direction;
|
|||
/// Represents the tracks and scenes of the composition.
|
||||
pub struct Arranger {
|
||||
/// Name of arranger
|
||||
pub name: String,
|
||||
pub name: String,
|
||||
/// Display mode of arranger
|
||||
pub mode: ArrangerViewMode,
|
||||
pub mode: ArrangerViewMode,
|
||||
/// Currently selected element.
|
||||
pub selected: ArrangerFocus,
|
||||
pub selected: ArrangerFocus,
|
||||
/// Collection of tracks.
|
||||
pub tracks: Vec<Sequencer>,
|
||||
pub tracks: Vec<Sequencer>,
|
||||
/// Collection of scenes.
|
||||
pub scenes: Vec<Scene>,
|
||||
pub focused: bool,
|
||||
pub entered: bool,
|
||||
pub transport: Option<Arc<RwLock<TransportToolbar>>>,
|
||||
pub show_sequencer: Option<Direction>
|
||||
pub scenes: Vec<Scene>,
|
||||
pub focused: bool,
|
||||
pub entered: bool,
|
||||
pub transport: Option<Arc<RwLock<TransportToolbar>>>,
|
||||
pub show_sequencer: Option<Direction>,
|
||||
pub focus_sequencer: bool,
|
||||
}
|
||||
|
||||
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 used = arrangement(buf, area)?;
|
||||
match direction {
|
||||
Direction::Down => {
|
||||
let area = Rect {
|
||||
y: area.y + used.height,
|
||||
height: area.height - used.height,
|
||||
..area
|
||||
};
|
||||
self.sequencer().map(|sequencer|sequencer.render(buf, area));
|
||||
},
|
||||
_ => unimplemented!()
|
||||
}
|
||||
Ok(area)
|
||||
} else {
|
||||
arrangement(buf, area)
|
||||
}
|
||||
});
|
||||
|
||||
impl Arranger {
|
||||
pub fn new (name: &str) -> Self {
|
||||
Self {
|
||||
name: name.into(),
|
||||
mode: ArrangerViewMode::VerticalCompact2,
|
||||
selected: ArrangerFocus::Clip(0, 0),
|
||||
scenes: vec![],
|
||||
tracks: vec![],
|
||||
entered: true,
|
||||
focused: true,
|
||||
transport: None,
|
||||
show_sequencer: Some(Direction::Down),
|
||||
name: name.into(),
|
||||
mode: ArrangerViewMode::VerticalCompact2,
|
||||
selected: ArrangerFocus::Clip(0, 0),
|
||||
scenes: vec![],
|
||||
tracks: vec![],
|
||||
entered: true,
|
||||
focused: true,
|
||||
transport: None,
|
||||
show_sequencer: Some(Direction::Down),
|
||||
focus_sequencer: false,
|
||||
}
|
||||
}
|
||||
pub fn activate (&mut self) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue