diff --git a/hammond-gtk/src/content.rs b/hammond-gtk/src/content.rs index 6a190e7..be7a491 100644 --- a/hammond-gtk/src/content.rs +++ b/hammond-gtk/src/content.rs @@ -89,8 +89,7 @@ pub trait UpdateView { fn update(&mut self); } -#[derive(Debug)] -pub struct Empty {} +pub struct Empty; #[derive(Debug)] pub struct PodcastsView {} @@ -259,3 +258,158 @@ pub fn on_podcasts_child_activate(stack: >k::Stack, pd: &Podcast) { update_widget(stack, pd); stack.set_visible_child_full("widget", gtk::StackTransitionType::SlideLeft); } + +// FIXME: Rename and remove aliases +type ShowsPopulated = PopulatedView; +type ShowsEmpty = EmptyView; +type EpisodesPopulated = PodcastWidget; +type EpisodesEmpty = EmptyView; + +struct Populated; +// struct Empty; +// struct Shows; +// struct Episodes; + +// Thats probably too overengineered +// struct StackStateMachine { +// shows: ShowsMachine, +// episodes: EpisodesMachine, +// stack: gtk::Stack, +// state: T, +// } + +#[derive(Debug, Clone)] +struct ShowsMachine { + populated: ShowsPopulated, + empty: ShowsEmpty, + stack: gtk::Stack, + state: S, +} + +#[derive(Debug)] +struct EpisodesMachine { + populated: EpisodesPopulated, + empty: EpisodesEmpty, + stack: gtk::Stack, + state: S, +} + +// impl Into> for StackStateMachine { +// fn into(self) -> StackStateMachine { +// self.stack.set_visible_child_name("shows"); + +// StackStateMachine { +// shows: self.shows, +// episodes: self.episodes, +// stack: self.stack, +// state: Shows {}, +// } +// } +// } + +// impl Into> for StackStateMachine { +// fn into(self) -> StackStateMachine { +// self.stack.set_visible_child_name("episodes"); + +// StackStateMachine { +// shows: self.shows, +// episodes: self.episodes, +// stack: self.stack, +// state: Episodes {}, +// } +// } +// } + +impl Into> for ShowsMachine { + fn into(self) -> ShowsMachine { + self.stack.set_visible_child_name("populated"); + + ShowsMachine { + populated: self.populated, + empty: self.empty, + stack: self.stack, + state: Populated {}, + } + } +} + +impl Into> for ShowsMachine { + fn into(self) -> ShowsMachine { + self.stack.set_visible_child_name("empty"); + + ShowsMachine { + populated: self.populated, + empty: self.empty, + stack: self.stack, + state: Empty {}, + } + } +} + +impl Into> for EpisodesMachine { + fn into(self) -> EpisodesMachine { + self.stack.set_visible_child_name("populated"); + + EpisodesMachine { + populated: self.populated, + empty: self.empty, + stack: self.stack, + state: Populated {}, + } + } +} + +impl Into> for EpisodesMachine { + fn into(self) -> EpisodesMachine { + self.stack.set_visible_child_name("empty"); + + EpisodesMachine { + populated: self.populated, + empty: self.empty, + stack: self.stack, + state: Empty {}, + } + } +} + +// enum StackStateWrapper { +// Shows(StackStateMachine), +// Episodes(StackStateMachine), +// } + +enum ShowStateWrapper { + Populated(EpisodesMachine), + Empty(EpisodesMachine), +} + +enum EpisodeStateWrapper { + Populated(EpisodesMachine), + Empty(EpisodesMachine), +} + +// impl StackStateWrapper { +// fn switch(mut self) -> Self { +// match self { +// StackStateWrapper::Shows(val) => StackStateWrapper::Episodes(val.into()), +// StackStateWrapper::Episodes(val) => StackStateWrapper::Shows(val.into()) +// } +// } +// } + +impl ShowStateWrapper { + fn switch(self) -> Self { + match self { + ShowStateWrapper::Populated(val) => ShowStateWrapper::Empty(val.into()), + ShowStateWrapper::Empty(val) => ShowStateWrapper::Populated(val.into()), + } + } +} + +impl EpisodeStateWrapper { + fn switch(self) -> Self { + match self { + EpisodeStateWrapper::Populated(val) => EpisodeStateWrapper::Empty(val.into()), + EpisodeStateWrapper::Empty(val) => EpisodeStateWrapper::Populated(val.into()), + } + } +}