diff options
author | Akshay <nerdy@peppe.rs> | 2020-07-20 19:29:50 +0530 |
---|---|---|
committer | Akshay <nerdy@peppe.rs> | 2020-07-20 19:29:50 +0530 |
commit | 81451d8d5112fc74004e7ba70d9d682b15bc402e (patch) | |
tree | 3d7afa4e4109bbf9a64ac765be5c9d4d4c3e51d0 | |
parent | a0b6e884e39c858855db28377f094c9466002274 (diff) |
add set-name commandfeature/edit
-rw-r--r-- | Cargo.lock | 42 | ||||
-rw-r--r-- | src/app/impl_self.rs | 11 | ||||
-rw-r--r-- | src/command.rs | 9 | ||||
-rw-r--r-- | src/habit/bit.rs | 4 | ||||
-rw-r--r-- | src/habit/traits.rs | 6 |
5 files changed, 27 insertions, 45 deletions
@@ -92,12 +92,6 @@ dependencies = [ ] [[package]] -name = "cc" -version = "1.0.58" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518" - -[[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -201,10 +195,7 @@ dependencies = [ "lazy_static", "libc", "log", - "maplit", - "ncurses", "signal-hook", - "term_size", "termion", "unicode-segmentation", "unicode-width", @@ -540,12 +531,6 @@ dependencies = [ ] [[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] name = "maybe-uninit" version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -595,17 +580,6 @@ dependencies = [ ] [[package]] -name = "ncurses" -version = "5.99.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15699bee2f37e9f8828c7b35b2bc70d13846db453f2d507713b758fabe536b82" -dependencies = [ - "cc", - "libc", - "pkg-config", -] - -[[package]] name = "net2" version = "0.2.34" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -713,12 +687,6 @@ dependencies = [ ] [[package]] -name = "pkg-config" -version = "0.3.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d36492546b6af1463394d46f0c834346f31548646f6ba10849802c9c9a27ac33" - -[[package]] name = "proc-macro-hack" version = "0.5.16" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -882,16 +850,6 @@ dependencies = [ ] [[package]] -name = "term_size" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4129646ca0ed8f45d09b929036bafad5377103edd06e50bf574b353d2b08d9" -dependencies = [ - "libc", - "winapi 0.3.9", -] - -[[package]] name = "termion" version = "1.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/src/app/impl_self.rs b/src/app/impl_self.rs index 744f906..e2cf00d 100644 --- a/src/app/impl_self.rs +++ b/src/app/impl_self.rs @@ -233,7 +233,16 @@ impl App { Command::Quit => self.save_state(), Command::MonthNext => self.sift_forward(), Command::MonthPrev => self.sift_backward(), - Command::Blank => {} + Command::SetName(n) => { + if self.habits.is_empty() { + self.message + .set_message("Can't call command `set` on empty habit list!"); + self.message.set_kind(MessageKind::Error); + return; + } + self.habits[self.focus].set_name(n); + } + _ | Command::Blank => {} }, Err(e) => { self.message.set_message(e.to_string()); diff --git a/src/command.rs b/src/command.rs index f856b00..8fe991c 100644 --- a/src/command.rs +++ b/src/command.rs @@ -59,6 +59,8 @@ pub enum Command { Delete(String), TrackUp(String), TrackDown(String), + SetGoal(u32), + SetName(String), Quit, Blank, } @@ -136,6 +138,13 @@ impl Command { } "mprev" | "month-prev" => return Ok(Command::MonthPrev), "mnext" | "month-next" => return Ok(Command::MonthNext), + "set-name" | "setn" => { + if args.is_empty() { + return Err(CommandLineError::NotEnoughArgs(first, 1)); + } + let name = &args[0]; + return Ok(Command::SetName(name.clone())); + } "q" | "quit" => return Ok(Command::Quit), "" => return Ok(Command::Blank), s => return Err(CommandLineError::InvalidCommand(s.into())), diff --git a/src/habit/bit.rs b/src/habit/bit.rs index 3386182..3f5035a 100644 --- a/src/habit/bit.rs +++ b/src/habit/bit.rs @@ -69,8 +69,8 @@ impl Habit for Bit { fn set_name(&mut self, n: impl AsRef<str>) { self.name = n.as_ref().to_owned(); } - fn set_goal(&mut self, g: Self::HabitType) { - self.goal = g; + fn set_goal(&mut self, _: Self::HabitType) { + self.goal = true.into(); } fn get_by_date(&self, date: NaiveDate) -> Option<&Self::HabitType> { self.stats.get(&date) diff --git a/src/habit/traits.rs b/src/habit/traits.rs index 74fd00b..1234005 100644 --- a/src/habit/traits.rs +++ b/src/habit/traits.rs @@ -40,6 +40,7 @@ pub trait HabitWrapper: erased_serde::Serialize { fn required_size(&mut self, _: Vec2) -> Vec2; fn take_focus(&mut self, _: Direction) -> bool; fn name(&self) -> String; + fn set_name(&mut self, name: String); fn set_view_month_offset(&mut self, offset: u32); fn view_month_offset(&self) -> u32; @@ -50,6 +51,8 @@ pub trait HabitWrapper: erased_serde::Serialize { fn is_auto(&self) -> bool; } +// typetag dosen't support generics yet, we have to resort to dollar store generics, +// aka macros macro_rules! auto_habit_impl { ($struct_name:ident) => { #[typetag::serde] @@ -81,6 +84,9 @@ macro_rules! auto_habit_impl { fn name(&self) -> String { Habit::name(self) } + fn set_name(&mut self, n: String) { + Habit::set_name(self, &n) + } fn set_view_month_offset(&mut self, offset: u32) { Habit::set_view_month_offset(self, offset) } |