mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-19 17:02:08 +00:00
Port the filament-change stop button, hub version row and HMS fallback
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user