par-term-settings-ui 0.19.0

Settings UI for par-term terminal emulator
Documentation
//! Status bar poll intervals section (system monitor, git branch refresh rates).

use crate::SettingsUI;
use crate::search::SearchTag;
use crate::section::{SLIDER_WIDTH, collapsing_section};
use std::collections::HashSet;

const SLIDER_HEIGHT: f32 = 18.0;

pub fn show_poll_intervals_section(
    ui: &mut egui::Ui,
    settings: &mut SettingsUI,
    changes_this_frame: &mut bool,
    collapsed: &mut HashSet<String>,
) {
    collapsing_section(
        ui,
        "Poll Intervals",
        "status_bar_poll_intervals",
        false,
        collapsed,
        |ui| {
            crate::dependent::dependent(
                ui,
                settings.config.status_bar.status_bar_enabled,
                "Enable status bar",
                |ui| {
                    ui.horizontal(|ui| {
                        ui.label("System monitor:");
                        if ui
                            .add_sized(
                                [SLIDER_WIDTH, SLIDER_HEIGHT],
                                egui::Slider::new(
                                    &mut settings.config.status_bar.status_bar_system_poll_interval,
                                    0.5..=30.0,
                                )
                                .suffix(" s")
                                .show_value(true),
                            )
                            .search_tag(&["status_bar_system_poll_interval"])
                            .on_hover_text("How often to poll CPU, memory, and network usage")
                            .changed()
                        {
                            settings.has_changes = true;
                            *changes_this_frame = true;
                        }
                        crate::reset::reset_button(ui, settings, changes_this_frame, |c| {
                            &mut c.status_bar.status_bar_system_poll_interval
                        });
                    });

                    ui.horizontal(|ui| {
                        ui.label("Git branch:");
                        if ui
                            .add_sized(
                                [SLIDER_WIDTH, SLIDER_HEIGHT],
                                egui::Slider::new(
                                    &mut settings.config.status_bar.status_bar_git_poll_interval,
                                    1.0..=60.0,
                                )
                                .suffix(" s")
                                .show_value(true),
                            )
                            .search_tag(&["status_bar_git_poll_interval"])
                            .on_hover_text("How often to poll the current git branch name")
                            .changed()
                        {
                            settings.has_changes = true;
                            *changes_this_frame = true;
                        }
                        crate::reset::reset_button(ui, settings, changes_this_frame, |c| {
                            &mut c.status_bar.status_bar_git_poll_interval
                        });
                    });

                    ui.horizontal(|ui| {
                        ui.label("Disk free space:");
                        if ui
                            .add_sized(
                                [SLIDER_WIDTH, SLIDER_HEIGHT],
                                egui::Slider::new(
                                    &mut settings.config.status_bar.status_bar_disk_poll_interval,
                                    5.0..=600.0,
                                )
                                .suffix(" s")
                                .show_value(true),
                            )
                            .search_tag(&["status_bar_disk_poll_interval"])
                            .on_hover_text("How often to poll free disk space (default 60 sec)")
                            .changed()
                        {
                            settings.has_changes = true;
                            *changes_this_frame = true;
                        }
                        crate::reset::reset_button(ui, settings, changes_this_frame, |c| {
                            &mut c.status_bar.status_bar_disk_poll_interval
                        });
                    });

                    ui.horizontal(|ui| {
                        if ui
                            .checkbox(
                                &mut settings.config.status_bar.status_bar_disk_follow_cwd,
                                "Follow active tab's directory",
                            )
                            .search_tag(&["status_bar_disk_follow_cwd"])
                            .on_hover_text(
                                "Off (default): show the disk par-term launched from. \
                         On: show the disk containing the active tab/pane's working directory.",
                            )
                            .changed()
                        {
                            settings.has_changes = true;
                            *changes_this_frame = true;
                        }
                    });
                },
            );
        },
    );
}