diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index f2a808c189..759c7ba5b0 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3364,6 +3364,7 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_ int flag3 = jj["flag3"].get(); 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) } } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 234a412dad..2408df501f 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -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. diff --git a/src/slic3r/GUI/HMS.cpp b/src/slic3r/GUI/HMS.cpp index 4d39a7b0be..a8486f360a 100644 --- a/src/slic3r/GUI/HMS.cpp +++ b/src/slic3r/GUI/HMS.cpp @@ -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"; } diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index c27fd982d8..e6015a8a33 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -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); } diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index d286add1b0..d0c8c99f49 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -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 diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index d0b7e039a9..c3daae2418 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -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 diff --git a/src/slic3r/GUI/UpgradePanel.hpp b/src/slic3r/GUI/UpgradePanel.hpp index 68aa1b9089..ba7e86e807 100644 --- a/src/slic3r/GUI/UpgradePanel.hpp +++ b/src/slic3r/GUI/UpgradePanel.hpp @@ -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);