diff options
| author | sam-anthony <samanthony6@protonmail.com> | 2022-02-04 15:52:17 -0330 |
|---|---|---|
| committer | sam-anthony <samanthony6@protonmail.com> | 2022-02-04 15:52:17 -0330 |
| commit | 36928f2351d0eb5fd27ccfe862f2cca21758f663 (patch) | |
| tree | 9b4858d82822b2eb8b46534a050b39b319e700a7 /src/app.rs | |
| parent | 02ecdb28dfe91b625f8bf51e0fbd2504a3731344 (diff) | |
| download | volute-36928f2351d0eb5fd27ccfe862f2cca21758f663.zip | |
refactor
Diffstat (limited to 'src/app.rs')
| -rw-r--r-- | src/app.rs | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/app.rs b/src/app.rs new file mode 100644 index 0000000..eaaccc8 --- /dev/null +++ b/src/app.rs @@ -0,0 +1,77 @@ +use crate::input::{InputMode, InputParam, Row}; + +pub struct App { + pub tab_index: usize, + pub tab_titles: Vec<&'static str>, + + pub rows: Vec<Row>, + pub selected_row: usize, + pub selected_column: InputParam, + + pub input_mode: InputMode, +} + +impl App { + pub fn next_tab(&mut self) { + self.tab_index = (self.tab_index + 1) % self.tab_titles.len(); + } + + pub fn previous_tab(&mut self) { + if self.tab_index > 0 { + self.tab_index -= 1; + } else { + self.tab_index = self.tab_titles.len() - 1; + } + } + + pub fn next_row(&mut self) { + if self.selected_row < self.rows.len() - 1 { + self.selected_row += 1; + } else { + self.selected_row = 0; + } + } + + pub fn previous_row(&mut self) { + if self.selected_row > 0 { + self.selected_row -= 1; + } else { + self.selected_row = self.rows.len() - 1; + } + } + + pub fn next_column(&mut self) { + self.selected_column = self.selected_column.next(); + } + + pub fn previous_column(&mut self) { + self.selected_column = self.selected_column.previous(); + } + + pub fn insert_row(&mut self) { + let index = self.selected_row; + self.rows.insert(index, self.rows[index].clone()); + } + + pub fn remove_row(&mut self) { + if self.rows.len() > 1 { + self.rows.remove(self.selected_row); + if self.selected_row > 0 { + self.selected_row -= 1; + } + } + } +} + +impl Default for App { + fn default() -> App { + App { + tab_index: 0, + tab_titles: vec!["Input", "Config"], + rows: vec![Row::default()], + selected_row: 0, + selected_column: InputParam::Rpm(String::new()), + input_mode: InputMode::Normal, + } + } +} |