fumble 0.6.1

an oxidized implementation of the original clumsy tool, designed to simulate adverse network conditions on Windows systems.
use crate::cli::tui::ui::LayoutSection;
use crate::cli::tui::widgets::bandwidth_widget::BandwidthWidget;
use crate::cli::tui::widgets::custom_widget::CustomWidget;
use crate::cli::tui::widgets::delay_widget::DelayWidget;
use crate::cli::tui::widgets::drop_widget::DropWidget;
use crate::cli::tui::widgets::duplicate_widget::DuplicateWidget;
use crate::cli::tui::widgets::filter_widget::FilterWidget;
use crate::cli::tui::widgets::logs_widget::LogsWidget;
use crate::cli::tui::widgets::reorder_widget::ReorderWidget;
use crate::cli::tui::widgets::tamper_widget::TamperWidget;
use crate::cli::tui::widgets::throttle_widget::ThrottleWidget;

pub struct TuiState<'a> {
    pub processing: bool,
    pub filter_widget: FilterWidget<'a>,
    pub sections: Vec<CustomWidget<'a>>,
    pub logs_widget: LogsWidget,
    pub selected: usize,
    pub interacting: Option<usize>,
    pub focused: LayoutSection,
}

impl<'a> Default for TuiState<'a> {
    fn default() -> Self {
        Self::new()
    }
}

impl<'a> TuiState<'a> {
    pub fn new() -> Self {
        TuiState {
            processing: true,
            filter_widget: FilterWidget::new(),
            sections: vec![
                CustomWidget::Drop(DropWidget::new()),
                CustomWidget::Delay(DelayWidget::new()),
                CustomWidget::Throttle(ThrottleWidget::new()),
                CustomWidget::Reorder(ReorderWidget::new()),
                CustomWidget::Tamper(TamperWidget::new()),
                CustomWidget::Duplicate(DuplicateWidget::new()),
                CustomWidget::Bandwidth(BandwidthWidget::new()),
            ],
            selected: 0,
            interacting: None,
            logs_widget: LogsWidget::new(),
            focused: LayoutSection::Main,
        }
    }
}