feat(imex): topology-aware Tool 0 Position dropdown

For single-gantry IMEX setups, front/rear is meaningless — only left/right
matters. Collapse the imex_tool_layout dropdown to two items ("Left" / "Right",
mapped to front-left/front-right internally) when imex_gantry_count == 1, and
show all four corner items otherwise. Normalize stored rear-* selections to
their front-* equivalents on the transition so the displayed selection always
matches the persisted value.

Also rename the field label "Tool 0 Corner" → "Tool 0 Position" so it reads
correctly in both single- and dual-gantry contexts, with a tooltip that
explains the IDEX/IQEX distinction.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Clifford Garwood
2026-05-14 13:25:37 -04:00
co-authored by Claude Opus 4.7
parent f11011efac
commit cb66867768
2 changed files with 48 additions and 3 deletions
+5 -3
View File
@@ -5821,10 +5821,12 @@ void PrintConfigDef::init_fff_params()
def->set_default_value(new ConfigOptionInt(2));
def = this->add("imex_tool_layout", coEnum);
def->label = L("Tool 0 Corner");
def->tooltip = L("Physical corner of the bed where tool T0 (index 0) is located. "
def->label = L("Tool 0 Position");
def->tooltip = L("Physical position on the bed where tool T0 (index 0) is located. "
"Determines how tool indices map to bed zones. "
"front = lower Y (near the operator), rear = higher Y (back of machine).");
"For single-gantry setups (IDEX) only left/right matters; "
"for dual-gantry setups (IQEX) all four corners are selectable "
"(front = lower Y / near the operator, rear = higher Y / back of machine).");
def->mode = comAdvanced;
def->enum_keys_map = &ConfigOptionEnum<ImexToolLayout>::get_enum_values();
def->enum_values.push_back("front-left");