melors 0.2.2

Keyboard-first terminal MP3 player with queue, search, and tag editing
use super::*;

impl UiState {
    pub fn set_visualizer_mode(&mut self, mode: VisualizerMode) {
        self.visualizer_mode = mode;
    }

    pub fn cycle_theme(&mut self) -> UiTheme {
        self.theme = self.theme.cycle();
        self.theme
    }

    pub fn enter_search_mode(&mut self) {
        self.focus = FocusPanel::Library;
        self.mode = InputMode::Search;
        self.search_input.clear();
        self.search_warning = None;
        self.library_selected = 0;
        self.invalidate_library_cache();
    }

    pub fn exit_search_mode(&mut self) {
        self.mode = InputMode::Normal;
        self.search_input.clear();
        self.search_warning = None;
        self.library_selected = 0;
        self.invalidate_library_cache();
    }

    pub fn enter_edit_tag_mode(&mut self, track_id: i64, title: &str, artist: &str, album: &str) {
        self.mode = InputMode::EditTag;
        self.edit_tag_track_id = Some(track_id);
        self.edit_tag_inputs = [title.to_string(), artist.to_string(), album.to_string()];
        self.edit_tag_field = 0;
    }

    pub fn exit_edit_tag_mode(&mut self) {
        self.mode = InputMode::Normal;
        self.edit_tag_track_id = None;
        self.edit_tag_inputs = [String::new(), String::new(), String::new()];
        self.edit_tag_field = 0;
    }

    pub fn move_selection(&mut self, app: &App, delta: isize) {
        let len = self.visible_track_ids(app).len();

        if len == 0 {
            self.library_selected = 0;
            return;
        }

        let current = self.library_selected as isize;
        let next = (current + delta).clamp(0, len as isize - 1);
        self.library_selected = next as usize;
    }
}