diff --git a/src/musicplayer/ui/control.gleam b/src/musicplayer/ui/control.gleam index bb9a501..1276950 100644 --- a/src/musicplayer/ui/control.gleam +++ b/src/musicplayer/ui/control.gleam @@ -5,6 +5,7 @@ import musicplayer/ui/layout.{type Section} pub type Control { UpdateDimensions(columns: Int, rows: Int) UpdateState(section: Section, content: String) + SetView(view_idx: layout.ViewIdx) Exit(reply_to: Subject(Nil)) } diff --git a/src/musicplayer/ui/layout.gleam b/src/musicplayer/ui/layout.gleam index 73d7698..6d1b919 100644 --- a/src/musicplayer/ui/layout.gleam +++ b/src/musicplayer/ui/layout.gleam @@ -123,6 +123,9 @@ pub fn update_dimensions(layout: Layout, columns: Int, rows: Int) -> Layout { Layout(..layout, columns:, rows:) } +pub fn set_view(layout: Layout, view_idx: ViewIdx) -> Layout { + Layout(..layout, current_view: view_idx) +} pub fn render(layout: Layout) -> Nil { let context = @@ -142,6 +145,7 @@ pub fn render(layout: Layout) -> Nil { render_loop( view, context, + // TODO extract to function `view_index` Section(string.append("view_", string.inspect(layout.current_view))), buffer, ) diff --git a/src/musicplayer/ui/ui.gleam b/src/musicplayer/ui/ui.gleam index 4d7cf2d..ddd5898 100644 --- a/src/musicplayer/ui/ui.gleam +++ b/src/musicplayer/ui/ui.gleam @@ -120,6 +120,12 @@ fn handle_message( process.send(reply_to, Nil) actor.stop() } + control.SetView(view_idx) -> { + let layout = layout.set_view(state.layout, view_idx) + + actor.send(state.redraw, layout) + actor.continue(State(..state, layout:)) + } } }