forked from 1b-agent/opencadstudio-upstream
Merge PR #1110: expose selection settings
# Conflicts: # src/app/mod.rs # src/app/properties.rs # src/app/settings.rs # src/app/update/file.rs # src/app/view/modal.rs # src/ui/window/options.rs
This commit is contained in:
commit
9fe6033304
34 files changed
+616
-34
No files matched your search
@@ -294,6 +294,10 @@ pub fn start_allowed(cmd: &str) -> bool {
|
||||
| "ALIASEDIT"
|
||||
| "CUILOAD"
|
||||
| "CUIIMPORT"
|
||||
// The start page already offers Options as a button, so the
|
||||
// command that opens the same dialog belongs here too.
|
||||
| "OPTIONS"
|
||||
| "OP"
|
||||
)
|
||||
}
|
||||
|
||||
@@ -548,6 +552,7 @@ inventory::submit!(crate::command::CommandRegistration {
|
||||
"GRIPCOLOR",
|
||||
"GRIPHOT",
|
||||
"GRIPHOVER",
|
||||
"GRIPOBJLIMIT",
|
||||
// Reset selected entities' overrides to follow their layer.
|
||||
"SETBYLAYER",
|
||||
// Remove duplicate objects; set drawing base point; audit integrity;
|
||||
|
||||
@@ -918,6 +918,7 @@ impl OpenCADStudio {
|
||||
| "GRIPCOLOR"
|
||||
| "GRIPHOT"
|
||||
| "GRIPHOVER"
|
||||
| "GRIPOBJLIMIT"
|
||||
) =>
|
||||
{
|
||||
return self.dispatch_styleprops(&format!("SETVAR {cmd}"), i);
|
||||
@@ -940,7 +941,7 @@ impl OpenCADStudio {
|
||||
let value = it.next().map(|s| s.trim().to_string());
|
||||
if name.is_empty() || name == "?" {
|
||||
self.command_line.push_info(
|
||||
crate::t!("SETVAR: LTSCALE CELTSCALE PDMODE PDSIZE TEXTSIZE ORTHOMODE FILLMODE MIRRTEXT FRAME IMAGEFRAME PDFFRAME WIPEOUTFRAME XCLIPFRAME POINTCLOUDCLIPFRAME ZOOMWHEEL ZOOMFACTOR CURSORSIZE PICKBOX CURSORTYPE SNAPANG TEXTFILL CLIPROMPTLINES COMMANDLINEFADETIME ATTREQ ATTDIA DIMASSOC DIMCONTINUEMODE ANGBASE ANGDIR SKETCHINC SKPOLY SKTOLERANCE DONUTID DONUTOD CENTEREXE CENTERLAYER CENTERLTYPE CENTERLTSCALE CENTERLTYPEFILE CENTERCROSSSIZE CENTERCROSSGAP CENTERMARKEXE COLORTHEME SELECTIONAREA SELECTIONAREAOPACITY SELECTIONEFFECT SELECTIONEFFECTCOLOR WINDOWSAREACOLOR CROSSINGAREACOLOR SELECTIONPREVIEW GRIPSIZE GRIPCOLOR GRIPHOT GRIPHOVER | CLAYER CELTYPE TEXTSTYLE (read-only)").as_ref(),
|
||||
crate::t!("SETVAR: LTSCALE CELTSCALE PDMODE PDSIZE TEXTSIZE ORTHOMODE FILLMODE MIRRTEXT FRAME IMAGEFRAME PDFFRAME WIPEOUTFRAME XCLIPFRAME POINTCLOUDCLIPFRAME ZOOMWHEEL ZOOMFACTOR CURSORSIZE PICKBOX CURSORTYPE SNAPANG TEXTFILL CLIPROMPTLINES COMMANDLINEFADETIME ATTREQ ATTDIA DIMASSOC DIMCONTINUEMODE ANGBASE ANGDIR SKETCHINC SKPOLY SKTOLERANCE DONUTID DONUTOD CENTEREXE CENTERLAYER CENTERLTYPE CENTERLTSCALE CENTERLTYPEFILE CENTERCROSSSIZE CENTERCROSSGAP CENTERMARKEXE COLORTHEME SELECTIONAREA SELECTIONAREAOPACITY SELECTIONEFFECT SELECTIONEFFECTCOLOR WINDOWSAREACOLOR CROSSINGAREACOLOR SELECTIONPREVIEW GRIPSIZE GRIPCOLOR GRIPHOT GRIPHOVER GRIPOBJLIMIT | CLAYER CELTYPE TEXTSTYLE (read-only)").as_ref(),
|
||||
);
|
||||
} else {
|
||||
if matches!(name.as_str(), "SHOWHIST" | "SOLIDHIST") {
|
||||
@@ -1444,6 +1445,22 @@ impl OpenCADStudio {
|
||||
},
|
||||
None => Ok((format!("GRIPSIZE = {}", self.model_space.grip_size), false)),
|
||||
},
|
||||
"GRIPOBJLIMIT" => match &value {
|
||||
Some(v) => match v.parse::<i32>() {
|
||||
Ok(limit @ 0..=32767) => {
|
||||
self.grip_object_limit = limit;
|
||||
Ok((format!("GRIPOBJLIMIT = {limit}"), true))
|
||||
}
|
||||
_ => Err(
|
||||
"SETVAR: integer from 0 to 32767 required (0 = no limit)."
|
||||
.into(),
|
||||
),
|
||||
},
|
||||
None => Ok((
|
||||
format!("GRIPOBJLIMIT = {}", self.grip_object_limit),
|
||||
false,
|
||||
)),
|
||||
},
|
||||
"GRIPCOLOR" => match &value {
|
||||
Some(v) => match v.parse::<u8>() {
|
||||
Ok(color) => {
|
||||
@@ -2126,6 +2143,7 @@ impl OpenCADStudio {
|
||||
| "GRIPCOLOR"
|
||||
| "GRIPHOT"
|
||||
| "GRIPHOVER"
|
||||
| "GRIPOBJLIMIT"
|
||||
) {
|
||||
self.persist_settings_if_changed();
|
||||
} else {
|
||||
@@ -2982,6 +3000,13 @@ mod tests {
|
||||
// SELECTIONPREVIEW
|
||||
let _ = app.run_command_line("SETVAR SELECTIONPREVIEW 2");
|
||||
assert_eq!(app.model_space.selection_preview, 2);
|
||||
|
||||
let _ = app.run_command_line("SETVAR GRIPOBJLIMIT 0");
|
||||
assert_eq!(app.grip_object_limit, 0);
|
||||
let _ = app.run_command_line("GRIPOBJLIMIT 32767");
|
||||
assert_eq!(app.grip_object_limit, 32767);
|
||||
let _ = app.run_command_line("GRIPOBJLIMIT 32768");
|
||||
assert_eq!(app.grip_object_limit, 32767);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -245,6 +245,14 @@ impl OpenCADStudio {
|
||||
return Some(Task::done(Message::ShortcutsPanelOpen));
|
||||
}
|
||||
|
||||
// ── OPTIONS / OP — the preferences dialog ──────────────────────
|
||||
// Both names were registered for autocomplete but never dispatched,
|
||||
// so typing either one answered "Unknown command" and the dialog
|
||||
// could only be reached from the button on the start page.
|
||||
"OPTIONS" | "OP" => {
|
||||
return Some(Task::done(Message::OptionsOpen));
|
||||
}
|
||||
|
||||
// CUIEXPORT <path> — write the keyboard-shortcut customizations
|
||||
// (the drawing-independent CUI data) to a plain "KEY COMMAND" file.
|
||||
"CUIEXPORT" => {
|
||||
@@ -1547,6 +1555,16 @@ mod tests {
|
||||
app
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn options_and_its_alias_dispatch_from_the_start_page() {
|
||||
let mut app = fresh_app();
|
||||
let i = app.active_tab;
|
||||
assert!(app.dispatch_view("OPTIONS", i).is_some());
|
||||
assert!(app.dispatch_view("OP", i).is_some());
|
||||
assert!(crate::app::commands::start_allowed("OPTIONS"));
|
||||
assert!(crate::app::commands::start_allowed("OP"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn hatchtoback_no_hatches_warns_and_noop() {
|
||||
let mut app = fresh_app();
|
||||
|
||||
Reference in new issue
Block a user