aboutsummaryrefslogtreecommitdiff
path: root/src/tui/commandnew.rs
diff options
context:
space:
mode:
authorlukeflo2024-10-25 12:48:19 +0200
committerlukeflo2024-10-25 12:48:19 +0200
commit23ee04fffe4bdf4b8c34603e4b191d7cc308051b (patch)
tree70e4b146e388067dec7e4d5d1c5b8cd3628b5e4a /src/tui/commandnew.rs
parentbc4513d700b724b8edb72b6a1a429df60967a12c (diff)
downloadbibiman-23ee04fffe4bdf4b8c34603e4b191d7cc308051b.tar.gz
bibiman-23ee04fffe4bdf4b8c34603e4b191d7cc308051b.zip
Inegrate new command-action driven structure
- Map keys to actions to commands - allows for easily adding config file support - restructure folders/files - implement own input mode - rewrite UI rendering to make it better editable
Diffstat (limited to 'src/tui/commandnew.rs')
-rw-r--r--src/tui/commandnew.rs191
1 files changed, 0 insertions, 191 deletions
diff --git a/src/tui/commandnew.rs b/src/tui/commandnew.rs
deleted file mode 100644
index 1f70264..0000000
--- a/src/tui/commandnew.rs
+++ /dev/null
@@ -1,191 +0,0 @@
-// bibiman - a TUI for managing BibLaTeX databases
-// Copyright (C) 2024 lukeflo
-//
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, see <https://www.gnu.org/licenses/>.
-/////
-
-use ratatui::crossterm::event::{
- Event, KeyCode, KeyEvent, KeyModifiers, MouseEvent, MouseEventKind,
-};
-use tui_input::Input;
-
-// Possible ressources to open
-#[derive(Debug, PartialEq, Eq)]
-pub enum OpenRessource {
- Pdf,
- WebLink,
- Note,
-}
-
-/// Application command.
-#[derive(Debug, PartialEq, Eq)]
-pub enum CmdAction {
- // Toggle area
- ToggleArea,
- // Scroll list/table down
- SelectNextRow(u16),
- // Scroll list/table up.
- SelectPrevRow(u16),
- // Select nex table col.
- SelectNextCol,
- // Select previous table col.
- SelectPrevCol,
- // Scroll info/preview area down
- ScrollInfoDown,
- // Scroll info/preview area up
- ScrollInfoUp,
- // Go to top.
- Top,
- // Go to bottom.
- Bottom,
- // Search list
- SearchList,
- // Reset lists
- ResetList,
- // Confirm search/selection
- Confirm,
- // Sort table/list
- SortList,
- // Yank selected item
- YankItem,
- // Edit file
- EditFile,
- // Open linked ressource
- Open(OpenRessource),
- // Input command.
- Input(InputCmdAction),
- // Hexdump command.
- Exit,
- // Do nothing.
- Nothing,
-}
-
-impl From<KeyEvent> for CmdAction {
- fn from(key_event: KeyEvent) -> Self {
- match key_event.code {
- // Go to first/last entry of selected list/table
- KeyCode::Char('g') | KeyCode::Home => Self::Top,
- KeyCode::Char('G') | KeyCode::End => Self::Bottom,
- // Scroll columns of EntryTable
- KeyCode::Right | KeyCode::Char('l') => Self::SelectNextCol,
- KeyCode::Left | KeyCode::Char('h') => Self::SelectPrevCol,
- // Scroll table/list vertically by 1
- KeyCode::Down | KeyCode::Char('j') => {
- if key_event.modifiers == KeyModifiers::ALT {
- Self::ScrollInfoDown
- } else {
- Self::SelectNextRow(1)
- }
- }
- KeyCode::Up | KeyCode::Char('k') => {
- if key_event.modifiers == KeyModifiers::ALT {
- Self::ScrollInfoUp
- } else {
- Self::SelectPrevRow(1)
- }
- }
- // Scroll table/list vertically by 5
- KeyCode::Char('d') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- Self::SelectNextRow(5)
- } else {
- Self::Nothing
- }
- }
- KeyCode::Char('u') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- Self::SelectPrevRow(5)
- } else {
- Self::Open(OpenRessource::WebLink)
- }
- }
- // Scroll info/preview area
- KeyCode::PageDown => Self::ScrollInfoDown,
- KeyCode::PageUp => Self::ScrollInfoUp,
- // Exit App
- KeyCode::Char('q') => Self::Exit,
- KeyCode::Char('c') | KeyCode::Char('C') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- Self::Exit
- } else {
- Self::Nothing
- }
- }
- // Switch selected area
- KeyCode::Tab => Self::ToggleArea,
- KeyCode::BackTab => Self::ToggleArea,
- // Enter search mode
- KeyCode::Char('/') => Self::Input(InputCmdAction::Enter),
- KeyCode::Char('f') => {
- if key_event.modifiers == KeyModifiers::CONTROL {
- Self::Input(InputCmdAction::Enter)
- } else {
- Self::Nothing
- }
- }
- // KeyCode::Backspace => Self::Input(InputCommand::Resume(Event::Key(key_event))),
- // Confirm selection
- KeyCode::Enter => Self::Confirm,
- // Reset lists/tables
- KeyCode::Esc => Self::ResetList,
- // Open linked ressource
- KeyCode::Char('o') => Self::Open(OpenRessource::Pdf),
- // KeyCode::Char('u') => Self::Open(OpenRessource::WebLink),
- // Edit currently selected entry
- KeyCode::Char('e') => Self::EditFile,
- // Yank selected item/value
- KeyCode::Char('y') => Self::YankItem,
- // Else do nothing
- _ => Self::Nothing,
- }
- }
-}
-
-impl From<MouseEvent> for CmdAction {
- fn from(mouse_event: MouseEvent) -> Self {
- match mouse_event.kind {
- MouseEventKind::ScrollDown => Self::SelectNextRow(1),
- MouseEventKind::ScrollUp => Self::SelectPrevRow(1),
- _ => Self::Nothing,
- }
- }
-}
-
-/// Input mode command.
-#[derive(Debug, PartialEq, Eq)]
-pub enum InputCmdAction {
- // Handle input.
- Handle(Event),
- // Enter input mode.
- Enter,
- // Confirm input.
- Confirm,
- // Exit input mode
- Exit,
-}
-
-impl InputCmdAction {
- /// Parses the event.
- pub fn parse(key_event: KeyEvent, input: &Input) -> Self {
- if key_event.code == KeyCode::Esc
- || (key_event.code == KeyCode::Backspace && input.value().is_empty())
- {
- Self::Exit
- } else if key_event.code == KeyCode::Enter {
- Self::Confirm
- } else {
- Self::Handle(Event::Key(key_event))
- }
- }
-}