mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-27 10:51:22 +00:00
fix: custom G-code keyword check uses the wrong list and skips the editor (#14908)
This commit is contained in:
+18
-2
@@ -3991,7 +3991,7 @@ void TabPrintLayer::update_custom_dirty(std::vector<std::string> &dirty_options,
|
||||
bool Tab::validate_custom_gcode(const wxString& title, const std::string& gcode)
|
||||
{
|
||||
std::vector<std::string> tags;
|
||||
bool invalid = GCodeProcessor::contains_reserved_tags(gcode, 5, tags);
|
||||
bool invalid = GCodeProcessor::contains_reserved_tags(gcode, 5, tags, wxGetApp().preset_bundle->is_bbl_vendor());
|
||||
if (invalid) {
|
||||
std::string lines = ":\n";
|
||||
for (const std::string& keyword : tags)
|
||||
@@ -4020,11 +4020,27 @@ static void validate_custom_gcode_cb(Tab* tab, ConfigOptionsGroupShp opt_group,
|
||||
tab->on_value_change(opt_key, value);
|
||||
}
|
||||
|
||||
// Orca: names the field the way its page does. The option label alone is ambiguous, as the machine's
|
||||
// and the filament's custom G-code are both labelled "Start G-code".
|
||||
static wxString custom_gcode_group_title(const Page* page, const t_config_option_key& opt_key)
|
||||
{
|
||||
if (page)
|
||||
for (const auto& opt_group : page->m_optgroups)
|
||||
for (const auto& opt : opt_group->opt_map())
|
||||
if (opt.second.first == opt_key)
|
||||
return opt_group->title;
|
||||
return from_u8(opt_key);
|
||||
}
|
||||
|
||||
void Tab::edit_custom_gcode(const t_config_option_key& opt_key)
|
||||
{
|
||||
EditGCodeDialog dlg = EditGCodeDialog(this, opt_key, get_custom_gcode(opt_key));
|
||||
if (dlg.ShowModal() == wxID_OK) {
|
||||
set_custom_gcode(opt_key, dlg.get_edited_gcode());
|
||||
const std::string edited_gcode = dlg.get_edited_gcode();
|
||||
// Orca: this dialog writes the value straight into the config, bypassing the field's change
|
||||
// handler, so the reserved keyword check has to run here as it does when editing in place.
|
||||
validate_custom_gcodes_was_shown = !validate_custom_gcode(custom_gcode_group_title(m_active_page, opt_key), edited_gcode);
|
||||
set_custom_gcode(opt_key, edited_gcode);
|
||||
update_dirty();
|
||||
update();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user