From cd03d732b1f0df6c020a94135db2db4b690a4937 Mon Sep 17 00:00:00 2001 From: Akshay Date: Mon, 25 Jan 2021 14:54:51 +0530 Subject: handle cursor events and entry --- src/habit/bit.rs | 12 ++++++++++++ src/habit/count.rs | 12 ++++++++++++ src/habit/traits.rs | 15 ++++++++++++++- 3 files changed, 38 insertions(+), 1 deletion(-) (limited to 'src/habit') diff --git a/src/habit/bit.rs b/src/habit/bit.rs index 2bbb0ac..7fe6fd9 100644 --- a/src/habit/bit.rs +++ b/src/habit/bit.rs @@ -1,8 +1,10 @@ use std::collections::HashMap; use chrono::NaiveDate; +use cursive::direction::Absolute; use serde::{Deserialize, Serialize}; +use crate::app::Cursor; use crate::habit::prelude::default_auto; use crate::habit::traits::Habit; use crate::habit::{TrackEvent, ViewMode}; @@ -44,6 +46,9 @@ pub struct Bit { #[serde(skip)] view_month_offset: u32, + #[serde(skip)] + cursor: Cursor, + #[serde(skip)] view_mode: ViewMode, } @@ -56,6 +61,7 @@ impl Bit { goal: CustomBool(true), auto, view_month_offset: 0, + cursor: Cursor::new(), view_mode: ViewMode::Day, }; } @@ -124,6 +130,12 @@ impl Habit for Bit { fn view_month_offset(&self) -> u32 { self.view_month_offset } + fn move_cursor(&mut self, d: Absolute) { + self.cursor.do_move(d); + } + fn cursor(&self) -> Cursor { + self.cursor + } fn set_view_mode(&mut self, mode: ViewMode) { self.view_mode = mode; } diff --git a/src/habit/count.rs b/src/habit/count.rs index d351758..b14354c 100644 --- a/src/habit/count.rs +++ b/src/habit/count.rs @@ -1,8 +1,10 @@ use std::collections::HashMap; use chrono::NaiveDate; +use cursive::direction::Absolute; use serde::{Deserialize, Serialize}; +use crate::app::Cursor; use crate::habit::prelude::default_auto; use crate::habit::traits::Habit; use crate::habit::{TrackEvent, ViewMode}; @@ -19,6 +21,9 @@ pub struct Count { #[serde(skip)] view_month_offset: u32, + #[serde(skip)] + cursor: Cursor, + #[serde(skip)] view_mode: ViewMode, } @@ -31,6 +36,7 @@ impl Count { goal, auto, view_month_offset: 0, + cursor: Cursor::new(), view_mode: ViewMode::Day, }; } @@ -101,6 +107,12 @@ impl Habit for Count { fn view_month_offset(&self) -> u32 { self.view_month_offset } + fn move_cursor(&mut self, d: Absolute) { + self.cursor.do_move(d); + } + fn cursor(&self) -> Cursor { + self.cursor + } fn set_view_mode(&mut self, mode: ViewMode) { self.view_mode = mode; } diff --git a/src/habit/traits.rs b/src/habit/traits.rs index 74fd00b..289fd95 100644 --- a/src/habit/traits.rs +++ b/src/habit/traits.rs @@ -1,10 +1,11 @@ use chrono::NaiveDate; -use cursive::direction::Direction; +use cursive::direction::{Absolute, Direction}; use cursive::event::{Event, EventResult}; use cursive::{Printer, Vec2}; use typetag; +use crate::app::Cursor; use crate::habit::{Bit, Count, TrackEvent, ViewMode}; use crate::views::ShadowView; @@ -24,6 +25,9 @@ pub trait Habit { fn set_view_month_offset(&mut self, offset: u32); fn view_month_offset(&self) -> u32; + fn move_cursor(&mut self, d: Absolute); + fn cursor(&self) -> Cursor; + fn set_view_mode(&mut self, mode: ViewMode); fn view_mode(&self) -> ViewMode; @@ -44,6 +48,9 @@ pub trait HabitWrapper: erased_serde::Serialize { fn set_view_month_offset(&mut self, offset: u32); fn view_month_offset(&self) -> u32; + fn move_cursor(&mut self, d: Absolute); + fn cursor(&self) -> Cursor; + fn set_view_mode(&mut self, mode: ViewMode); fn view_mode(&self) -> ViewMode; @@ -87,6 +94,12 @@ macro_rules! auto_habit_impl { fn view_month_offset(&self) -> u32 { Habit::view_month_offset(self) } + fn move_cursor(&mut self, d: Absolute) { + Habit::move_cursor(self, d) + } + fn cursor(&self) -> Cursor { + Habit::cursor(self) + } fn set_view_mode(&mut self, mode: ViewMode) { Habit::set_view_mode(self, mode) } -- cgit v1.2.3 From 53f7a679a0cf7a510de13d67cf370988f71c0d08 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sat, 6 Feb 2021 19:00:40 +0530 Subject: deprecate view_month_offset in favor of cursor --- src/habit/bit.rs | 37 +++++++------------------------- src/habit/count.rs | 37 +++++++------------------------- src/habit/mod.rs | 27 ++++++++++++++++++++++++ src/habit/traits.rs | 61 ++++++++++++++++------------------------------------- 4 files changed, 61 insertions(+), 101 deletions(-) (limited to 'src/habit') diff --git a/src/habit/bit.rs b/src/habit/bit.rs index 7fe6fd9..da64ece 100644 --- a/src/habit/bit.rs +++ b/src/habit/bit.rs @@ -1,13 +1,12 @@ use std::collections::HashMap; +use std::default::Default; use chrono::NaiveDate; -use cursive::direction::Absolute; use serde::{Deserialize, Serialize}; -use crate::app::Cursor; use crate::habit::prelude::default_auto; use crate::habit::traits::Habit; -use crate::habit::{TrackEvent, ViewMode}; +use crate::habit::{InnerData, TrackEvent}; use crate::CONFIGURATION; #[derive(Copy, Clone, Debug, Serialize, Deserialize)] @@ -44,13 +43,7 @@ pub struct Bit { auto: bool, #[serde(skip)] - view_month_offset: u32, - - #[serde(skip)] - cursor: Cursor, - - #[serde(skip)] - view_mode: ViewMode, + inner_data: InnerData, } impl Bit { @@ -60,9 +53,7 @@ impl Bit { stats: HashMap::new(), goal: CustomBool(true), auto, - view_month_offset: 0, - cursor: Cursor::new(), - view_mode: ViewMode::Day, + inner_data: Default::default(), }; } } @@ -124,23 +115,11 @@ impl Habit for Bit { } } } - fn set_view_month_offset(&mut self, offset: u32) { - self.view_month_offset = offset; - } - fn view_month_offset(&self) -> u32 { - self.view_month_offset - } - fn move_cursor(&mut self, d: Absolute) { - self.cursor.do_move(d); - } - fn cursor(&self) -> Cursor { - self.cursor - } - fn set_view_mode(&mut self, mode: ViewMode) { - self.view_mode = mode; + fn inner_data_ref(&self) -> &InnerData { + &self.inner_data } - fn view_mode(&self) -> ViewMode { - self.view_mode + fn inner_data_mut_ref(&mut self) -> &mut InnerData { + &mut self.inner_data } fn is_auto(&self) -> bool { self.auto diff --git a/src/habit/count.rs b/src/habit/count.rs index b14354c..09fd399 100644 --- a/src/habit/count.rs +++ b/src/habit/count.rs @@ -1,13 +1,12 @@ use std::collections::HashMap; +use std::default::Default; use chrono::NaiveDate; -use cursive::direction::Absolute; use serde::{Deserialize, Serialize}; -use crate::app::Cursor; use crate::habit::prelude::default_auto; use crate::habit::traits::Habit; -use crate::habit::{TrackEvent, ViewMode}; +use crate::habit::{InnerData, TrackEvent}; #[derive(Debug, Serialize, Deserialize)] pub struct Count { @@ -19,13 +18,7 @@ pub struct Count { auto: bool, #[serde(skip)] - view_month_offset: u32, - - #[serde(skip)] - cursor: Cursor, - - #[serde(skip)] - view_mode: ViewMode, + inner_data: InnerData, } impl Count { @@ -35,9 +28,7 @@ impl Count { stats: HashMap::new(), goal, auto, - view_month_offset: 0, - cursor: Cursor::new(), - view_mode: ViewMode::Day, + inner_data: Default::default(), }; } } @@ -101,23 +92,11 @@ impl Habit for Count { }; } } - fn set_view_month_offset(&mut self, offset: u32) { - self.view_month_offset = offset; - } - fn view_month_offset(&self) -> u32 { - self.view_month_offset - } - fn move_cursor(&mut self, d: Absolute) { - self.cursor.do_move(d); - } - fn cursor(&self) -> Cursor { - self.cursor - } - fn set_view_mode(&mut self, mode: ViewMode) { - self.view_mode = mode; + fn inner_data_ref(&self) -> &InnerData { + &self.inner_data } - fn view_mode(&self) -> ViewMode { - self.view_mode + fn inner_data_mut_ref(&mut self) -> &mut InnerData { + &mut self.inner_data } fn is_auto(&self) -> bool { self.auto diff --git a/src/habit/mod.rs b/src/habit/mod.rs index 75e734a..d51abe5 100644 --- a/src/habit/mod.rs +++ b/src/habit/mod.rs @@ -1,3 +1,5 @@ +use std::default::Default; + mod traits; pub use traits::{Habit, HabitWrapper}; @@ -9,3 +11,28 @@ pub use bit::Bit; mod prelude; pub use prelude::{TrackEvent, ViewMode}; + +use crate::app::Cursor; + +use cursive::direction::Absolute; + +#[derive(Debug, Default)] +pub struct InnerData { + pub cursor: Cursor, + pub view_mode: ViewMode, +} + +impl InnerData { + pub fn move_cursor(&mut self, d: Absolute) { + self.cursor.small_seek(d); + } + pub fn cursor(&self) -> Cursor { + self.cursor + } + pub fn set_view_mode(&mut self, mode: ViewMode) { + self.view_mode = mode; + } + pub fn view_mode(&self) -> ViewMode { + self.view_mode + } +} diff --git a/src/habit/traits.rs b/src/habit/traits.rs index 289fd95..24d941d 100644 --- a/src/habit/traits.rs +++ b/src/habit/traits.rs @@ -1,58 +1,45 @@ use chrono::NaiveDate; -use cursive::direction::{Absolute, Direction}; +use cursive::direction::Direction; use cursive::event::{Event, EventResult}; use cursive::{Printer, Vec2}; use typetag; -use crate::app::Cursor; -use crate::habit::{Bit, Count, TrackEvent, ViewMode}; +use crate::habit::{Bit, Count, InnerData, TrackEvent}; use crate::views::ShadowView; pub trait Habit { type HabitType; - fn set_name(&mut self, name: impl AsRef); - fn set_goal(&mut self, goal: Self::HabitType); - fn name(&self) -> String; fn get_by_date(&self, date: NaiveDate) -> Option<&Self::HabitType>; + fn goal(&self) -> u32; fn insert_entry(&mut self, date: NaiveDate, val: Self::HabitType); + fn modify(&mut self, date: NaiveDate, event: TrackEvent); + fn name(&self) -> String; fn reached_goal(&self, date: NaiveDate) -> bool; fn remaining(&self, date: NaiveDate) -> u32; - fn goal(&self) -> u32; - fn modify(&mut self, date: NaiveDate, event: TrackEvent); - - fn set_view_month_offset(&mut self, offset: u32); - fn view_month_offset(&self) -> u32; - - fn move_cursor(&mut self, d: Absolute); - fn cursor(&self) -> Cursor; + fn set_goal(&mut self, goal: Self::HabitType); + fn set_name(&mut self, name: impl AsRef); - fn set_view_mode(&mut self, mode: ViewMode); - fn view_mode(&self) -> ViewMode; + fn inner_data_ref(&self) -> &InnerData; + fn inner_data_mut_ref(&mut self) -> &mut InnerData; fn is_auto(&self) -> bool; } #[typetag::serde(tag = "type")] pub trait HabitWrapper: erased_serde::Serialize { - fn remaining(&self, date: NaiveDate) -> u32; + fn draw(&self, printer: &Printer); fn goal(&self) -> u32; fn modify(&mut self, date: NaiveDate, event: TrackEvent); - fn draw(&self, printer: &Printer); + fn name(&self) -> String; fn on_event(&mut self, event: Event) -> EventResult; + fn remaining(&self, date: NaiveDate) -> u32; fn required_size(&mut self, _: Vec2) -> Vec2; fn take_focus(&mut self, _: Direction) -> bool; - fn name(&self) -> String; - fn set_view_month_offset(&mut self, offset: u32); - fn view_month_offset(&self) -> u32; - - fn move_cursor(&mut self, d: Absolute); - fn cursor(&self) -> Cursor; - - fn set_view_mode(&mut self, mode: ViewMode); - fn view_mode(&self) -> ViewMode; + fn inner_data_ref(&self) -> &InnerData; + fn inner_data_mut_ref(&mut self) -> &mut InnerData; fn is_auto(&self) -> bool; } @@ -88,23 +75,11 @@ macro_rules! auto_habit_impl { fn name(&self) -> String { Habit::name(self) } - fn set_view_month_offset(&mut self, offset: u32) { - Habit::set_view_month_offset(self, offset) - } - fn view_month_offset(&self) -> u32 { - Habit::view_month_offset(self) - } - fn move_cursor(&mut self, d: Absolute) { - Habit::move_cursor(self, d) - } - fn cursor(&self) -> Cursor { - Habit::cursor(self) - } - fn set_view_mode(&mut self, mode: ViewMode) { - Habit::set_view_mode(self, mode) + fn inner_data_ref(&self) -> &InnerData { + Habit::inner_data_ref(self) } - fn view_mode(&self) -> ViewMode { - Habit::view_mode(self) + fn inner_data_mut_ref(&mut self) -> &mut InnerData { + Habit::inner_data_mut_ref(self) } fn is_auto(&self) -> bool { Habit::is_auto(self) -- cgit v1.2.3