use std::path::Path;
use std::time::Duration;
use strum::EnumIter;
use tui_pane::ToastId;
use super::panes::PaneId;
use super::panes::SyncedDescriptionHeight;
use super::project_list::ProjectList;
use super::running_targets::RunningTargets;
use super::settings::SettingsRenderInputs;
use super::state::CiStatusLookup;
use super::state::Config;
use super::state::Inflight;
use super::state::Scan;
use crate::project::AbsolutePath;
#[derive(Clone, Debug)]
pub enum DismissTarget {
Toast(ToastId),
DeletedProject(AbsolutePath),
}
pub(crate) struct PaneRenderCtx<'a> {
pub(crate) animation_elapsed: Duration,
pub(crate) config: &'a Config,
pub(crate) project_list: &'a ProjectList,
pub(crate) selected_project_path: Option<&'a Path>,
pub(crate) inflight: &'a Inflight,
pub(crate) scan: &'a Scan,
pub(crate) ci_status_lookup: &'a CiStatusLookup,
pub(crate) settings_render_inputs: Option<&'a SettingsRenderInputs>,
pub(crate) synced_description_height: SyncedDescriptionHeight,
pub(crate) running_targets: &'a RunningTargets,
}
#[derive(Clone, Debug)]
pub enum HoverTarget {
PaneRow { pane: PaneId, row: usize },
Dismiss(DismissTarget),
ToastCard(ToastId),
}
#[derive(EnumIter, Clone, Copy, PartialEq, Eq, Hash, Debug)]
pub enum HittableId {
ProjectList,
Package,
Lang,
Cpu,
Git,
Targets,
Lints,
CiRuns,
Output,
}
pub const HITTABLE_Z_ORDER: [HittableId; 9] = [
HittableId::ProjectList,
HittableId::Package,
HittableId::Lang,
HittableId::Cpu,
HittableId::Git,
HittableId::Targets,
HittableId::Lints,
HittableId::CiRuns,
HittableId::Output,
];
#[cfg(test)]
mod hit_test_tests {
use std::collections::HashSet;
use strum::IntoEnumIterator;
use super::HITTABLE_Z_ORDER;
use super::HittableId;
#[test]
fn z_order_covers_every_hittable_id() {
let in_order: HashSet<HittableId> = HITTABLE_Z_ORDER.iter().copied().collect();
let all: HashSet<HittableId> = HittableId::iter().collect();
assert_eq!(
in_order, all,
"every HittableId must appear exactly once in HITTABLE_Z_ORDER"
);
assert_eq!(
HITTABLE_Z_ORDER.len(),
in_order.len(),
"HITTABLE_Z_ORDER must not contain duplicates"
);
}
}