feat: per-plate iXex mode selection with undo, dark mode icons, and menu fixes

- Add per-plate iXex mode icon to the plate toolbar (normal, hover, dark, dark-hover SVG variants)
- Left-click cycles through available modes; right-click shows a popup menu with all modes as radio items
- Mode changes are recorded in the undo/redo snapshot system
- Fix double context menu: suppress EVT_GLCANVAS_PLATE_RIGHT_CLICK and EVT_GLCANVAS_RIGHT_CLICK when the iXex icon popup was already shown
- Remove ixex_parallel_mode combo from Print Settings > Other > Special mode (superseded by per-plate icon)
- Remove dead code: refresh_ixex_mode_combo(), m_ixex_mode_combo member, related Tab reload hook
- iXex mode persisted in 3MF project files via existing plate metadata serialization

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Clifford Garwood
2026-04-07 23:25:22 -04:00
co-authored by Claude Sonnet 4.6
parent f8565df113
commit ec40172019
15 changed files with 226 additions and 91 deletions
+7 -1
View File
@@ -1533,7 +1533,13 @@ void GCodeViewer::render(int canvas_width, int canvas_height, int right_margin)
if (is_ixex_opt && is_ixex_opt->value) {
const DynamicPrintConfig& process_cfg = preset_bundle->prints.get_edited_preset().config;
auto* mode_opt = process_cfg.opt<ConfigOptionString>("ixex_parallel_mode");
const std::string mode = mode_opt ? mode_opt->value : "primary";
std::string mode = mode_opt ? mode_opt->value : "primary";
// Per-plate mode overrides the process preset.
if (auto* plate = wxGetApp().plater()->get_partplate_list().get_curr_plate()) {
std::string plate_mode = plate->get_ixex_mode();
if (plate_mode != "primary")
mode = plate_mode;
}
if (mode != m_ixex_last_mode) {
m_sequential_view.m_ixex_secondary_markers.clear();