From 6d9dfe6fe16dd95801810d73cbcce80ce3020129 Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Sat, 10 Feb 2018 05:41:25 +0200 Subject: [PATCH] EpisodeWidget: Add a StateMachine for the size labels. --- hammond-gtk/src/widgets/episode_states.rs | 138 ++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/hammond-gtk/src/widgets/episode_states.rs b/hammond-gtk/src/widgets/episode_states.rs index d1ea1f9..7f470f7 100644 --- a/hammond-gtk/src/widgets/episode_states.rs +++ b/hammond-gtk/src/widgets/episode_states.rs @@ -184,3 +184,141 @@ impl DurationMachine { } } } + +#[derive(Debug, Clone)] +pub struct LocalShown; + +#[derive(Debug, Clone)] +pub struct TotalShown; + +#[derive(Debug, Clone)] +pub struct Unkown; + +#[derive(Debug, Clone)] +pub struct InProgress; + +#[derive(Debug, Clone)] +pub struct Size { + local_size: gtk::Label, + total_size: gtk::Label, + separator: gtk::Label, + prog_separator: gtk::Label, + state: S, +} + +impl Size { + fn new( + local_size: gtk::Label, + total_size: gtk::Label, + separator: gtk::Label, + prog_separator: gtk::Label, + ) -> Self { + local_size.hide(); + total_size.hide(); + separator.hide(); + prog_separator.hide(); + + Size { + local_size, + total_size, + separator, + prog_separator, + state: Unkown {}, + } + } +} + +impl From> for Size { + fn from(f: Size) -> Self { + f.prog_separator.hide(); + f.total_size.hide(); + f.local_size.show(); + f.separator.show(); + + Size { + local_size: f.local_size, + total_size: f.total_size, + separator: f.separator, + prog_separator: f.prog_separator, + state: LocalShown {}, + } + } +} + +impl From> for Size { + fn from(f: Size) -> Self { + f.prog_separator.show(); + f.total_size.show(); + f.local_size.show(); + f.separator.show(); + + Size { + local_size: f.local_size, + total_size: f.total_size, + separator: f.separator, + prog_separator: f.prog_separator, + state: InProgress {}, + } + } +} + +impl From> for Size { + fn from(f: Size) -> Self { + f.prog_separator.show(); + f.total_size.show(); + f.local_size.show(); + f.separator.show(); + + Size { + local_size: f.local_size, + total_size: f.total_size, + separator: f.separator, + prog_separator: f.prog_separator, + state: InProgress {}, + } + } +} + +impl From> for Size { + fn from(f: Size) -> Self { + f.prog_separator.hide(); + f.total_size.hide(); + f.local_size.show(); + f.separator.show(); + + Size { + local_size: f.local_size, + total_size: f.total_size, + separator: f.separator, + prog_separator: f.prog_separator, + state: LocalShown {}, + } + } +} + +pub enum SizeMachine { + LocalShown(Size), + TotallShown(Size), + Unkown(Size), + InProgress(Size), +} + +impl SizeMachine { + pub fn new( + local_size: gtk::Label, + total_size: gtk::Label, + separator: gtk::Label, + prog_separator: gtk::Label, + ) -> Self { + SizeMachine::Unkown(Size::::new( + local_size, + total_size, + separator, + prog_separator, + )) + } + + pub fn determine_state(self) -> Self { + unimplemented!() + } +}