mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-12 11:37:42 +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>();
|
int flag3 = jj["flag3"].get<int>();
|
||||||
is_support_filament_setting_inprinting = get_flag_bits(flag3, 3);
|
is_support_filament_setting_inprinting = get_flag_bits(flag3, 3);
|
||||||
is_enable_ams_np = get_flag_bits(flag3, 9);
|
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)
|
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_np{ false };
|
||||||
bool is_enable_ams_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_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
|
// Orca: REF-additive, now ported (post-review). Max filament color count for the send
|
||||||
// gate; returns 0 when there is no explicit upper bound.
|
// 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
|
// set language code to en by default
|
||||||
return "en";
|
return "en";
|
||||||
std::string lang_code = wxGetApp().app_config->get_language_code();
|
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
|
if (lang_code.compare("uk") == 0
|
||||||
|| lang_code.compare("cs") == 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;
|
BOOST_LOG_TRIVIAL(info) << "HMS: using english for lang_code = " << lang_code;
|
||||||
return "en";
|
return "en";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2136,9 +2136,21 @@ wxBoxSizer* StatusBasePanel::create_filament_group(wxWindow* parent)
|
|||||||
if (obj) { obj->command_ams_control("resume"); }
|
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(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));
|
sizer_box->Add(0, 0, 0, wxTOP, FromDIP(5));
|
||||||
m_filament_load_box->SetBackgroundColour(*wxWHITE);
|
m_filament_load_box->SetBackgroundColour(*wxWHITE);
|
||||||
m_filament_load_box->Layout();
|
m_filament_load_box->Layout();
|
||||||
@@ -5527,6 +5539,9 @@ void StatusPanel::update_filament_loading_panel(MachineObject* obj)
|
|||||||
ams_loading_state = false;
|
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);
|
show_filament_load_group(ams_loading_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -556,6 +556,7 @@ protected:
|
|||||||
wxStaticBitmap *m_filament_load_img;
|
wxStaticBitmap *m_filament_load_img;
|
||||||
|
|
||||||
Button *m_button_retry {nullptr};
|
Button *m_button_retry {nullptr};
|
||||||
|
Button *m_fila_change_abort {nullptr}; // Orca: filament-change Stop button
|
||||||
StaticBox* m_filament_load_box;
|
StaticBox* m_filament_load_box;
|
||||||
|
|
||||||
// Virtual event handlers, override them in your derived class
|
// 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);
|
createFilaTrackSwitchWidgets(m_main_left_sizer);
|
||||||
createRotaryWidgets(m_main_left_sizer); // Orca: accessory firmware version display
|
createRotaryWidgets(m_main_left_sizer); // Orca: accessory firmware version display
|
||||||
createExhaustFan(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())
|
// nozzle rack widgets (H2C induction hotend rack; hidden unless GetNozzleRack()->IsSupported())
|
||||||
createNozzleRackWidgets(m_main_left_sizer);
|
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);
|
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()
|
void MachineInfoPanel::msw_rescale()
|
||||||
{
|
{
|
||||||
rescale_bitmaps();
|
rescale_bitmaps();
|
||||||
@@ -615,6 +637,7 @@ void MachineInfoPanel::update(MachineObject* obj)
|
|||||||
update_filatrack(obj);
|
update_filatrack(obj);
|
||||||
update_rotary(obj); // Orca: accessory firmware version display
|
update_rotary(obj); // Orca: accessory firmware version display
|
||||||
update_exhaustfan(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_nozzle_rack(obj);
|
||||||
|
|
||||||
//update progress
|
//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)
|
void MachineInfoPanel::show_status(int status, std::string upgrade_status_str)
|
||||||
{
|
{
|
||||||
if (last_status == status && last_status_str == upgrade_status_str) return;
|
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)
|
void MachineInfoPanel::createNozzleRackWidgets(wxBoxSizer *main_left_sizer)
|
||||||
{
|
{
|
||||||
// horizontal line above
|
// horizontal line above
|
||||||
|
|||||||
@@ -152,6 +152,12 @@ protected:
|
|||||||
wxStaticLine* m_exhaustfan_line_above = nullptr;
|
wxStaticLine* m_exhaustfan_line_above = nullptr;
|
||||||
uiDeviceUpdateVersion* m_exhaustfan_version = 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 */
|
/* nozzle rack (H2C induction hotend rack) — opens wgtDeviceNozzleRackUpgradeDlg */
|
||||||
wxBoxSizer* m_nozzle_rack_sizer = nullptr;
|
wxBoxSizer* m_nozzle_rack_sizer = nullptr;
|
||||||
wxStaticBitmap* m_nozzle_rack_img = nullptr;
|
wxStaticBitmap* m_nozzle_rack_img = nullptr;
|
||||||
@@ -242,6 +248,7 @@ private:
|
|||||||
void createFilaTrackSwitchWidgets(wxBoxSizer* main_left_sizer);
|
void createFilaTrackSwitchWidgets(wxBoxSizer* main_left_sizer);
|
||||||
void createRotaryWidgets(wxBoxSizer* main_left_sizer); // Orca: accessory firmware version display
|
void createRotaryWidgets(wxBoxSizer* main_left_sizer); // Orca: accessory firmware version display
|
||||||
void createExhaustFan(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 createNozzleRackWidgets(wxBoxSizer* main_left_sizer);
|
||||||
|
|
||||||
void update_air_pump(MachineObject* obj);
|
void update_air_pump(MachineObject* obj);
|
||||||
@@ -251,6 +258,7 @@ private:
|
|||||||
void update_filatrack(MachineObject* obj);
|
void update_filatrack(MachineObject* obj);
|
||||||
void update_rotary(MachineObject* obj); // Orca: accessory firmware version display
|
void update_rotary(MachineObject* obj); // Orca: accessory firmware version display
|
||||||
void update_exhaustfan(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 update_nozzle_rack(MachineObject* obj);
|
||||||
|
|
||||||
void show_air_pump(bool show = true);
|
void show_air_pump(bool show = true);
|
||||||
@@ -260,6 +268,7 @@ private:
|
|||||||
void show_filatrack(bool show = true);
|
void show_filatrack(bool show = true);
|
||||||
void show_rotary(bool show = true); // Orca: accessory firmware version display
|
void show_rotary(bool show = true); // Orca: accessory firmware version display
|
||||||
void show_exhaustfan(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 show_nozzle_rack(bool show = true);
|
||||||
|
|
||||||
void on_nozzle_rack_update(wxCommandEvent& event);
|
void on_nozzle_rack_update(wxCommandEvent& event);
|
||||||
|
|||||||
Reference in New Issue
Block a user