mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-22 14:50:59 +00:00
feat: iMEX multi-material warning badge, conflict dialog, and mode row UI
- Add warning badge (obj_warning.svg overlay) to the iMEX plate icon when a parallel mode is active alongside multi-material objects on the same plate - Add has_imex_multimaterial_conflict() using get_extruders(true) so only filaments actually used on the plate are checked - Move multi-material caution dialog from reslice() into on_action_slice_plate / on_action_slice_all so it fires exactly once per user action and does not disrupt GL thumbnail generation during Slice All - Fix is_imex missing from p->config init key list so on_config_change() diff detection correctly triggers refresh_imex_icons() - Defer imex_changed handling until after set_bed_shape() so m_shape is current - Replace plain remove button with ScalableButton (imex_remove.svg) in mode rows - Add EditGCodeDialog launch button per mode row for placeholder browsing Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
1 parent
1d68f917b0
commit
73b5b750c6
5 files changed
+159
-12
No files matched your search
+21
-4
@@ -4653,17 +4653,34 @@ private:
|
||||
sizer->Add(r.name, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6);
|
||||
}
|
||||
sizer->Add(grid_panel, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6);
|
||||
sizer->Add(r.gcode, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 6);
|
||||
sizer->Add(r.gcode, 1, wxALIGN_CENTER_VERTICAL | wxRIGHT, 4);
|
||||
|
||||
// Placeholder search + (for non-primary) delete — stacked vertically
|
||||
auto* btn_col = new wxBoxSizer(wxVERTICAL);
|
||||
wxTextCtrl* gcode_ctrl = r.gcode;
|
||||
auto* ph_btn = new ScalableButton(r.panel, wxID_ANY, "edit", wxEmptyString,
|
||||
wxDefaultSize, wxDefaultPosition,
|
||||
wxBU_EXACTFIT | wxNO_BORDER, 16);
|
||||
ph_btn->SetToolTip(_L("Edit G-code / browse placeholders"));
|
||||
ph_btn->Bind(wxEVT_BUTTON, [this, gcode_ctrl](wxCommandEvent&) {
|
||||
EditGCodeDialog dlg(this, "imex_mode_gcode", gcode_ctrl->GetValue().ToStdString());
|
||||
if (dlg.ShowModal() == wxID_OK)
|
||||
gcode_ctrl->SetValue(dlg.get_edited_gcode());
|
||||
});
|
||||
btn_col->Add(ph_btn, 0, wxBOTTOM, 2);
|
||||
|
||||
if (!is_primary) {
|
||||
auto* rm = new wxButton(r.panel, wxID_ANY, wxT("\u00d7"),
|
||||
wxDefaultPosition, wxSize(24, 24), wxBU_EXACTFIT);
|
||||
auto* rm = new ScalableButton(r.panel, wxID_ANY, "imex_remove", wxEmptyString,
|
||||
wxDefaultSize, wxDefaultPosition,
|
||||
wxBU_EXACTFIT | wxNO_BORDER, 16);
|
||||
rm->SetToolTip(_L("Remove mode"));
|
||||
rm->Bind(wxEVT_BUTTON, [this, this_panel](wxCommandEvent&) {
|
||||
remove_row(this_panel);
|
||||
notify();
|
||||
});
|
||||
sizer->Add(rm, 0, wxALIGN_CENTER_VERTICAL);
|
||||
btn_col->Add(rm, 0);
|
||||
}
|
||||
sizer->Add(btn_col, 0, wxALIGN_CENTER_VERTICAL);
|
||||
r.panel->SetSizer(sizer);
|
||||
|
||||
m_rows_sizer->Add(r.panel, 0, wxEXPAND | wxBOTTOM, 4);
|
||||
|
||||
Reference in new issue
Block a user