#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct HitKeyDoc {
pub panel: &'static str,
pub prefix: &'static str,
pub meaning: &'static str,
pub command: Option<&'static str>,
}
pub fn hit_key_docs() -> Vec<&'static HitKeyDoc> {
let sets: &[&[HitKeyDoc]] = &[
crate::panels::history::HIT_KEYS,
crate::panels::toolbar::HIT_KEYS,
crate::panels::workbench_toolbar::HIT_KEYS,
crate::panels::file::HIT_KEYS,
crate::panels::scene::HIT_KEYS,
crate::panels::selection::HIT_KEYS,
crate::panels::part_properties::HIT_KEYS,
crate::panels::context_bar::HIT_KEYS,
crate::panels::mode_bar::HIT_KEYS,
crate::panels::expressions::HIT_KEYS,
crate::panels::document_tabs::HIT_KEYS,
crate::panels::settings::HIT_KEYS,
crate::panels::info::HIT_KEYS,
crate::panels::info_windows::HIT_KEYS,
crate::panels::interference::HIT_KEYS,
crate::panels::auto_constraints::HIT_KEYS,
crate::panels::step_parts::HIT_KEYS,
crate::panels::wire_harness::HIT_KEYS,
crate::panels::bug_report::HIT_KEYS,
crate::panels::pmi::HIT_KEYS,
crate::panels::bom::HIT_KEYS,
crate::panels::assembly_constraints::HIT_KEYS,
crate::panels::spline_anchors::HIT_KEYS,
crate::panels::stl_import::HIT_KEYS,
crate::recovery::HIT_KEYS,
crate::viewport::HIT_KEYS,
];
sets.iter().flat_map(|s| s.iter()).collect()
}
pub fn documented(panel: &str, key: &str) -> bool {
hit_key_docs()
.iter()
.any(|d| d.panel == panel && (key == d.prefix || (d.prefix.ends_with(':') && key.starts_with(d.prefix))))
}
pub fn hit_key_docs_json() -> serde_json::Value {
serde_json::Value::Array(
hit_key_docs()
.iter()
.map(|d| serde_json::json!({ "panel": d.panel, "prefix": d.prefix, "meaning": d.meaning, "command": d.command }))
.collect(),
)
}