atac 0.22.1

Arguably a Terminal API Client. Feature-full, free, open-source, offline and account-less.
use crate::models::settings::Setting;

#[derive(Default)]
pub struct SettingsPopup {
    pub settings: Vec<(String, Setting)>,
    pub selection: usize,
}

impl SettingsPopup {
    pub fn next(&mut self) {
        if self.selection + 1 < self.settings.len() {
            self.selection += 1;
        }
        else {
            self.selection = 0;
        }
    }

    pub fn previous(&mut self) {
        if self.selection as isize - 1 >= 0 {
            self.selection -= 1;
        }
        else {
            self.selection = self.settings.len() - 1;
        }
    }

    pub fn toggle_setting_left(&mut self) {
        match self.settings[self.selection].1 {
            Setting::Bool(_) => self.settings[self.selection].1 = Setting::Bool(false),
            Setting::U32(u32) => match u32 > 100 {
                true => self.settings[self.selection].1 = Setting::U32(u32 - 100),
                false => self.settings[self.selection].1 = Setting::U32(100),
            }
        }
    }

    pub fn toggle_setting_right(&mut self) {
        match self.settings[self.selection].1 {
            Setting::Bool(_) => self.settings[self.selection].1 = Setting::Bool(true),
            Setting::U32(u32) => match u32 < 100000 {
                true => self.settings[self.selection].1 = Setting::U32(u32 + 100),
                false => self.settings[self.selection].1 = Setting::U32(100000),
            }
        }
    }
}