Implement DELOBJ source deletion policies

This commit is contained in:
Marcel committed 2026-09-09 20:49:29 +02:00
1 parent f69f0b32be
commit 10d1d9b7d9
7 files changed
+196 -19

No files matched your search

+49
View File
@@ -347,6 +347,52 @@ pub(crate) enum TextEntryMode {
FreeText,
}
pub(crate) fn delobj_deletes_profiles(value: i16) -> bool {
value != 0
}
pub(crate) fn delobj_deletes_auxiliary(value: i16, creates_surface: bool) -> bool {
value == 2 || (value == 3 && !creates_surface)
}
pub(crate) fn delobj_deletes_conversion_source(value: i16) -> bool {
value >= 1
}
#[cfg(test)]
mod delobj_policy_tests {
use super::{
delobj_deletes_auxiliary, delobj_deletes_conversion_source,
delobj_deletes_profiles,
};
#[test]
fn values_zero_through_three_select_the_expected_sources() {
assert_eq!(
(0..=3).map(delobj_deletes_profiles).collect::<Vec<_>>(),
[false, true, true, true]
);
assert_eq!(
(0..=3)
.map(|value| delobj_deletes_auxiliary(value, true))
.collect::<Vec<_>>(),
[false, false, true, false]
);
assert_eq!(
(0..=3)
.map(|value| delobj_deletes_auxiliary(value, false))
.collect::<Vec<_>>(),
[false, false, true, true]
);
assert_eq!(
(0..=3)
.map(delobj_deletes_conversion_source)
.collect::<Vec<_>>(),
[false, true, true, true]
);
}
}
pub(super) struct OpenCADStudio {
start: Instant,
control: control::State,
@@ -566,6 +612,8 @@ pub(super) struct OpenCADStudio {
/// `MIRRTEXT`) — the next command-line entry is its new value, empty keeps
/// the current one.
pending_setvar: Option<String>,
/// DELOBJ system variable (0–3), shared by every open drawing.
delete_objects: i16,
/// Cursor is hovering over the UCS icon body — drives the hover highlight.
ucs_icon_hover: bool,
/// UCS icon is selected (clicked): its grips are shown and draggable.
@@ -3424,6 +3472,7 @@ impl OpenCADStudio {
block_usage_last_persist: None,
awaiting_vports: false,
pending_setvar: None,
delete_objects: 1,
ucs_icon_hover: false,
ucs_icon_selected: false,
ucs_grip_drag: None,