Port the filament-change stop button, hub version row and HMS fallback

This commit is contained in:
SoftFever
2026-07-17 09:41:01 +08:00
parent 80d3c3908d
commit 2ee0bbde54
7 changed files with 87 additions and 3 deletions

View File

@@ -3364,6 +3364,7 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_
int flag3 = jj["flag3"].get<int>();
is_support_filament_setting_inprinting = get_flag_bits(flag3, 3);
is_enable_ams_np = get_flag_bits(flag3, 9);
is_support_fila_change_abort = get_flag_bits(flag3, 13); // Orca: REF-additive, now ported (filament-change Stop button)
is_support_filament_32_colors = get_flag_bits(flag3, 17); // Orca: REF-additive, now ported (post-review)
}
}

View File

@@ -928,6 +928,7 @@ public:
bool is_enable_np{ false };
bool is_enable_ams_np{ false };
bool is_support_filament_32_colors{ false }; // Orca: REF-additive, now ported (post-review)
bool is_support_fila_change_abort{ false }; // Orca: REF-additive, now ported (filament-change Stop button)
// Orca: REF-additive, now ported (post-review). Max filament color count for the send
// gate; returns 0 when there is no explicit upper bound.

View File

@@ -267,10 +267,15 @@ std::string HMSQuery::hms_language_code()
// set language code to en by default
return "en";
std::string lang_code = wxGetApp().app_config->get_language_code();
// Orca: english fallback limited to locales without a translated HMS catalog
// The HMS host ships no catalog for these locales, so fall back to english to avoid empty texts + retries
if (lang_code.compare("uk") == 0
|| lang_code.compare("cs") == 0
|| lang_code.compare("ru") == 0) {
|| lang_code.compare("ru") == 0
|| lang_code.compare("tr") == 0
|| lang_code.compare("pt") == 0
|| lang_code.compare("ko") == 0
)
{
BOOST_LOG_TRIVIAL(info) << "HMS: using english for lang_code = " << lang_code;
return "en";
}

View File

@@ -2136,9 +2136,21 @@ wxBoxSizer* StatusBasePanel::create_filament_group(wxWindow* parent)
if (obj) { obj->command_ams_control("resume"); }
});
// Orca: filament-change Stop button (aborts an in-progress filament change)
m_fila_change_abort = new Button(m_filament_load_box, _L("Stop"));
m_fila_change_abort->SetStyle(ButtonStyle::Regular, ButtonType::Choice);
m_fila_change_abort->Hide();
m_fila_change_abort->Bind(wxEVT_BUTTON, [this](wxCommandEvent &e) {
BOOST_LOG_TRIVIAL(info) << "on_ams_abort";
if (obj) { obj->command_ams_control("abort"); }
});
wxBoxSizer *fila_change_sizer = new wxBoxSizer(wxHORIZONTAL);
fila_change_sizer->Add(m_button_retry, 0, wxRIGHT, FromDIP(7));
fila_change_sizer->Add(m_fila_change_abort, 0, wxLEFT, FromDIP(7));
sizer_box->Add(steps_sizer, 0, wxEXPAND | wxTOP, FromDIP(5));
sizer_box->Add(m_button_retry, 0, wxLEFT, FromDIP(28));
sizer_box->Add(fila_change_sizer, 0, wxLEFT, FromDIP(28));
sizer_box->Add(0, 0, 0, wxTOP, FromDIP(5));
m_filament_load_box->SetBackgroundColour(*wxWHITE);
m_filament_load_box->Layout();
@@ -5527,6 +5539,9 @@ void StatusPanel::update_filament_loading_panel(MachineObject* obj)
ams_loading_state = false;
}
// Orca: show the Stop button when the printer supports aborting a filament change (flag3 bit-13 or printer config)
m_fila_change_abort->Show(ams_loading_state &&
(obj->is_support_fila_change_abort || DevPrinterConfigUtil::support_ams_fila_change_abort(obj->printer_type)));
show_filament_load_group(ams_loading_state);
}

View File

@@ -556,6 +556,7 @@ protected:
wxStaticBitmap *m_filament_load_img;
Button *m_button_retry {nullptr};
Button *m_fila_change_abort {nullptr}; // Orca: filament-change Stop button
StaticBox* m_filament_load_box;
// Virtual event handlers, override them in your derived class

View File

@@ -221,6 +221,7 @@ MachineInfoPanel::MachineInfoPanel(wxWindow* parent, wxWindowID id, const wxPoin
createFilaTrackSwitchWidgets(m_main_left_sizer);
createRotaryWidgets(m_main_left_sizer); // Orca: accessory firmware version display
createExhaustFan(m_main_left_sizer); // Orca: accessory firmware version display
createAmshubWidgets(m_main_left_sizer); // Orca: accessory firmware version display
// nozzle rack widgets (H2C induction hotend rack; hidden unless GetNozzleRack()->IsSupported())
createNozzleRackWidgets(m_main_left_sizer);
@@ -473,6 +474,27 @@ void MachineInfoPanel::createExhaustFan(wxBoxSizer* main_left_sizer)
main_left_sizer->Add(m_exhaustfan_sizer, 0, wxEXPAND, 0);
}
// Orca: accessory firmware version display (device photo asset not shipped, so no left icon)
void MachineInfoPanel::createAmshubWidgets(wxBoxSizer* main_left_sizer)
{
m_amshub_line_above = new wxStaticLine(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL);
m_amshub_line_above->SetBackgroundColour(wxColour(206, 206, 206));
main_left_sizer->Add(m_amshub_line_above, 0, wxEXPAND | wxLEFT, FromDIP(40));
m_amshub_img = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(200), FromDIP(200)));
wxBoxSizer* content_sizer = new wxBoxSizer(wxVERTICAL);
content_sizer->Add(0, 40, 0, wxEXPAND, FromDIP(5));
m_amshub_version = new uiDeviceUpdateVersion(this, wxID_ANY);
content_sizer->Add(m_amshub_version, 0, wxEXPAND, 0);
m_amshub_sizer = new wxBoxSizer(wxHORIZONTAL);
m_amshub_sizer->Add(m_amshub_img, 0, wxALIGN_TOP | wxALL, FromDIP(5));
m_amshub_sizer->Add(content_sizer, 1, wxEXPAND, 0);
main_left_sizer->Add(m_amshub_sizer, 0, wxEXPAND, 0);
}
void MachineInfoPanel::msw_rescale()
{
rescale_bitmaps();
@@ -615,6 +637,7 @@ void MachineInfoPanel::update(MachineObject* obj)
update_filatrack(obj);
update_rotary(obj); // Orca: accessory firmware version display
update_exhaustfan(obj); // Orca: accessory firmware version display
update_amshub(obj); // Orca: accessory firmware version display
update_nozzle_rack(obj);
//update progress
@@ -1241,6 +1264,24 @@ void MachineInfoPanel::update_exhaustfan(MachineObject* obj)
}
}
// Orca: AMS-hub / filament-buffer firmware version display (backing parse landed in cluster 2).
// Shown only when the kept m_ahb_panel path (module_vers["ahb"]) does NOT fire, so no printer gets a
// double AMS-hub row. X2D/P2S report the buffer via amshub_version_info.product_name instead of module_vers.
void MachineInfoPanel::update_amshub(MachineObject* obj)
{
bool ahb_panel_fires = obj && obj->online_ahb
&& obj->module_vers.find("ahb") != obj->module_vers.end() && !obj->is_series_o();
if (obj && !ahb_panel_fires && obj->amshub_version_info.isValid())
{
m_amshub_version->UpdateInfo(obj->amshub_version_info);
show_amshub(true);
}
else
{
show_amshub(false);
}
}
void MachineInfoPanel::show_status(int status, std::string upgrade_status_str)
{
if (last_status == status && last_status_str == upgrade_status_str) return;
@@ -1407,6 +1448,17 @@ void MachineInfoPanel::show_exhaustfan(bool show)
}
}
// Orca: accessory firmware version display
void MachineInfoPanel::show_amshub(bool show)
{
if (m_amshub_version->IsShown() != show)
{
m_amshub_img->Show(show);
m_amshub_line_above->Show(show);
m_amshub_version->Show(show);
}
}
void MachineInfoPanel::createNozzleRackWidgets(wxBoxSizer *main_left_sizer)
{
// horizontal line above

View File

@@ -152,6 +152,12 @@ protected:
wxStaticLine* m_exhaustfan_line_above = nullptr;
uiDeviceUpdateVersion* m_exhaustfan_version = nullptr;
/* AMS hub / filament buffer info (Orca: accessory firmware version display for the amshub_version_info path) */
wxBoxSizer* m_amshub_sizer = nullptr;
wxStaticBitmap* m_amshub_img = nullptr;
wxStaticLine* m_amshub_line_above = nullptr;
uiDeviceUpdateVersion* m_amshub_version = nullptr;
/* nozzle rack (H2C induction hotend rack) — opens wgtDeviceNozzleRackUpgradeDlg */
wxBoxSizer* m_nozzle_rack_sizer = nullptr;
wxStaticBitmap* m_nozzle_rack_img = nullptr;
@@ -242,6 +248,7 @@ private:
void createFilaTrackSwitchWidgets(wxBoxSizer* main_left_sizer);
void createRotaryWidgets(wxBoxSizer* main_left_sizer); // Orca: accessory firmware version display
void createExhaustFan(wxBoxSizer* main_left_sizer); // Orca: accessory firmware version display
void createAmshubWidgets(wxBoxSizer* main_left_sizer); // Orca: accessory firmware version display
void createNozzleRackWidgets(wxBoxSizer* main_left_sizer);
void update_air_pump(MachineObject* obj);
@@ -251,6 +258,7 @@ private:
void update_filatrack(MachineObject* obj);
void update_rotary(MachineObject* obj); // Orca: accessory firmware version display
void update_exhaustfan(MachineObject* obj); // Orca: accessory firmware version display
void update_amshub(MachineObject* obj); // Orca: accessory firmware version display
void update_nozzle_rack(MachineObject* obj);
void show_air_pump(bool show = true);
@@ -260,6 +268,7 @@ private:
void show_filatrack(bool show = true);
void show_rotary(bool show = true); // Orca: accessory firmware version display
void show_exhaustfan(bool show = true); // Orca: accessory firmware version display
void show_amshub(bool show = true); // Orca: accessory firmware version display
void show_nozzle_rack(bool show = true);
void on_nozzle_rack_update(wxCommandEvent& event);