aboutsummaryrefslogtreecommitdiff
path: root/src/habit.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/habit.rs')
-rw-r--r--src/habit.rs53
1 files changed, 50 insertions, 3 deletions
diff --git a/src/habit.rs b/src/habit.rs
index 48dd363..5469aab 100644
--- a/src/habit.rs
+++ b/src/habit.rs
@@ -15,6 +15,19 @@ pub enum TrackEvent {
15 Decrement, 15 Decrement,
16} 16}
17 17
18#[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
19pub enum ViewMode {
20 Day,
21 Month,
22 Year,
23}
24
25impl std::default::Default for ViewMode {
26 fn default() -> Self {
27 ViewMode::Day
28 }
29}
30
18#[derive(Copy, Clone, Debug, Serialize, Deserialize)] 31#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
19pub struct CustomBool(bool); 32pub struct CustomBool(bool);
20 33
@@ -51,8 +64,12 @@ pub trait Habit {
51 fn remaining(&self, date: NaiveDate) -> u32; 64 fn remaining(&self, date: NaiveDate) -> u32;
52 fn total(&self) -> u32; 65 fn total(&self) -> u32;
53 fn modify(&mut self, date: NaiveDate, event: TrackEvent); 66 fn modify(&mut self, date: NaiveDate, event: TrackEvent);
67
54 fn set_view_month_offset(&mut self, offset: u32); 68 fn set_view_month_offset(&mut self, offset: u32);
55 fn view_month_offset(&self) -> u32; 69 fn view_month_offset(&self) -> u32;
70
71 fn set_view_mode(&mut self, mode: ViewMode);
72 fn view_mode(&self) -> ViewMode;
56} 73}
57 74
58#[typetag::serde(tag = "type")] 75#[typetag::serde(tag = "type")]
@@ -64,9 +81,13 @@ pub trait HabitWrapper: erased_serde::Serialize {
64 fn on_event(&mut self, event: Event) -> EventResult; 81 fn on_event(&mut self, event: Event) -> EventResult;
65 fn required_size(&mut self, _: Vec2) -> Vec2; 82 fn required_size(&mut self, _: Vec2) -> Vec2;
66 fn take_focus(&mut self, _: Direction) -> bool; 83 fn take_focus(&mut self, _: Direction) -> bool;
84 fn get_name(&self) -> String;
85
67 fn set_view_month_offset(&mut self, offset: u32); 86 fn set_view_month_offset(&mut self, offset: u32);
68 fn view_month_offset(&self) -> u32; 87 fn view_month_offset(&self) -> u32;
69 fn get_name(&self) -> String; 88
89 fn set_view_mode(&mut self, mode: ViewMode);
90 fn view_mode(&self) -> ViewMode;
70} 91}
71 92
72macro_rules! auto_habit_impl { 93macro_rules! auto_habit_impl {
@@ -94,14 +115,20 @@ macro_rules! auto_habit_impl {
94 fn take_focus(&mut self, d: Direction) -> bool { 115 fn take_focus(&mut self, d: Direction) -> bool {
95 ShadowView::take_focus(self, d) 116 ShadowView::take_focus(self, d)
96 } 117 }
118 fn get_name(&self) -> String {
119 Habit::name(self)
120 }
97 fn set_view_month_offset(&mut self, offset: u32) { 121 fn set_view_month_offset(&mut self, offset: u32) {
98 Habit::set_view_month_offset(self, offset) 122 Habit::set_view_month_offset(self, offset)
99 } 123 }
100 fn view_month_offset(&self) -> u32 { 124 fn view_month_offset(&self) -> u32 {
101 Habit::view_month_offset(self) 125 Habit::view_month_offset(self)
102 } 126 }
103 fn get_name(&self) -> String { 127 fn set_view_mode(&mut self, mode: ViewMode) {
104 Habit::name(self) 128 Habit::set_view_mode(self, mode)
129 }
130 fn view_mode(&self) -> ViewMode {
131 Habit::view_mode(self)
105 } 132 }
106 } 133 }
107 }; 134 };
@@ -118,6 +145,9 @@ pub struct Count {
118 145
119 #[serde(skip)] 146 #[serde(skip)]
120 view_month_offset: u32, 147 view_month_offset: u32,
148
149 #[serde(skip)]
150 view_mode: ViewMode,
121} 151}
122 152
123impl Count { 153impl Count {
@@ -127,6 +157,7 @@ impl Count {
127 stats: HashMap::new(), 157 stats: HashMap::new(),
128 goal, 158 goal,
129 view_month_offset: 0, 159 view_month_offset: 0,
160 view_mode: ViewMode::Day,
130 }; 161 };
131 } 162 }
132} 163}
@@ -193,6 +224,12 @@ impl Habit for Count {
193 fn view_month_offset(&self) -> u32 { 224 fn view_month_offset(&self) -> u32 {
194 self.view_month_offset 225 self.view_month_offset
195 } 226 }
227 fn set_view_mode(&mut self, mode: ViewMode) {
228 self.view_mode = mode;
229 }
230 fn view_mode(&self) -> ViewMode {
231 self.view_mode
232 }
196} 233}
197 234
198#[derive(Debug, Serialize, Deserialize)] 235#[derive(Debug, Serialize, Deserialize)]
@@ -203,6 +240,9 @@ pub struct Bit {
203 240
204 #[serde(skip)] 241 #[serde(skip)]
205 view_month_offset: u32, 242 view_month_offset: u32,
243
244 #[serde(skip)]
245 view_mode: ViewMode,
206} 246}
207 247
208impl Bit { 248impl Bit {
@@ -212,6 +252,7 @@ impl Bit {
212 stats: HashMap::new(), 252 stats: HashMap::new(),
213 goal: CustomBool(true), 253 goal: CustomBool(true),
214 view_month_offset: 0, 254 view_month_offset: 0,
255 view_mode: ViewMode::Day,
215 }; 256 };
216 } 257 }
217} 258}
@@ -268,4 +309,10 @@ impl Habit for Bit {
268 fn view_month_offset(&self) -> u32 { 309 fn view_month_offset(&self) -> u32 {
269 self.view_month_offset 310 self.view_month_offset
270 } 311 }
312 fn set_view_mode(&mut self, mode: ViewMode) {
313 self.view_mode = mode;
314 }
315 fn view_mode(&self) -> ViewMode {
316 self.view_mode
317 }
271} 318}