diff --git a/localization/i18n/list.txt b/localization/i18n/list.txt index e23eb9ad67..5e1092b56b 100644 --- a/localization/i18n/list.txt +++ b/localization/i18n/list.txt @@ -96,6 +96,8 @@ src/slic3r/GUI/Jobs/RotoptimizeJob.cpp src/slic3r/GUI/Jobs/BindJob.cpp src/slic3r/GUI/Jobs/PrintJob.cpp src/slic3r/GUI/Jobs/SendJob.cpp +src/slic3r/GUI/ThermalPreconditioningDialog.cpp +src/slic3r/GUI/ThermalPreconditioningDialog.hpp src/slic3r/GUI/Jobs/SLAImportJob.cpp src/slic3r/GUI/Jobs/UpgradeNetworkJob.cpp src/slic3r/GUI/AboutDialog.cpp diff --git a/resources/images/thermal_preconditioning_title.svg b/resources/images/thermal_preconditioning_title.svg new file mode 100644 index 0000000000..1b2d02c981 --- /dev/null +++ b/resources/images/thermal_preconditioning_title.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/resources/images/thermal_question.svg b/resources/images/thermal_question.svg new file mode 100644 index 0000000000..99027ed76b --- /dev/null +++ b/resources/images/thermal_question.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/slic3r/CMakeLists.txt b/src/slic3r/CMakeLists.txt index f979c9405c..188a2e4a6a 100644 --- a/src/slic3r/CMakeLists.txt +++ b/src/slic3r/CMakeLists.txt @@ -220,6 +220,8 @@ set(SLIC3R_GUI_SOURCES GUI/GUI_Utils.hpp GUI/HintNotification.cpp GUI/HintNotification.hpp + GUI/ThermalPreconditioningDialog.cpp + GUI/ThermalPreconditioningDialog.hpp GUI/HMS.cpp GUI/HMS.hpp GUI/HMSPanel.cpp diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index a0663166e8..4009dc6bce 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -3308,7 +3308,11 @@ int MachineObject::parse_json(std::string tunnel, std::string payload, bool key_ } } if (jj.contains("stg_cur")) { - stage_curr = jj["stg_cur"].get(); + stage_curr = jj["stg_cur"].get(); + } + + if (jj.contains("stg_cd")) { + stage_remaining_seconds = jj["stg_cd"].get(); } } catch (...) { diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 68cfe7ce1c..112b514ab3 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -446,6 +446,7 @@ public: std::vector stage_list_info; int stage_curr = 0; + int stage_remaining_seconds = 0; int m_push_count = 0; int m_full_msg_count = 0; /*the full message count, there are full or diff messages from network*/ bool calibration_done { false }; @@ -456,6 +457,7 @@ public: wxString get_curr_stage(); int get_curr_stage_idx(); + int get_stage_remaining_seconds() const { return stage_remaining_seconds; } bool is_in_calibration(); bool is_calibration_running(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index 6b60f6ebf5..eb15a4a51e 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -1,5 +1,4 @@ #include "StatusPanel.hpp" - #include "I18N.hpp" #include "Widgets/Label.hpp" #include "Widgets/Button.hpp" @@ -40,6 +39,8 @@ #include "PrintOptionsDialog.hpp" #include "SafetyOptionsDialog.hpp" +#include "ThermalPreconditioningDialog.hpp" + namespace Slic3r { namespace GUI { @@ -508,6 +509,7 @@ PrintingTaskPanel::PrintingTaskPanel(wxWindow* parent, PrintingTaskType type) : wxPanel(parent, wxID_ANY,wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL) { m_type = type; + m_question_button = nullptr; create_panel(this); SetBackgroundColour(*wxWHITE); m_bitmap_background = ScalableBitmap(this, "thumbnail_grid", m_bitmap_thumbnail->GetSize().y); @@ -517,6 +519,10 @@ PrintingTaskPanel::PrintingTaskPanel(wxWindow* parent, PrintingTaskType type) PrintingTaskPanel::~PrintingTaskPanel() { + if (m_question_button) { + delete m_question_button; + m_question_button = nullptr; + } } void PrintingTaskPanel::create_panel(wxWindow* parent) @@ -589,17 +595,6 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) bSizer_task_name->Add(task_name_panel, 0, wxEXPAND, FromDIP(5)); - m_printing_stage_value = new wxStaticText(parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT | wxST_ELLIPSIZE_END); - m_printing_stage_value->Wrap(-1); - m_printing_stage_value->SetMaxSize(wxSize(FromDIP(800),-1)); - #ifdef __WXOSX_MAC__ - m_printing_stage_value->SetFont(::Label::Body_11); - #else - m_printing_stage_value->SetFont(wxFont(11, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("HarmonyOS Sans SC"))); - #endif - - m_printing_stage_value->SetForegroundColour(STAGE_TEXT_COL); - m_staticText_profile_value = new wxStaticText(parent, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT | wxST_ELLIPSIZE_END); m_staticText_profile_value->Wrap(-1); @@ -724,16 +719,86 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) bSizer_text->Add(0, 0, 0, wxLEFT, FromDIP(20)); bSizer_text->Add(m_staticText_progress_left, 0, wxALIGN_CENTER_VERTICAL | wxALL, 0); + m_printing_stage_value = new wxStaticText(penel_finish_time, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT | wxST_ELLIPSIZE_END); + m_printing_stage_value->Wrap(-1); + m_printing_stage_value->SetMaxSize(wxSize(FromDIP(800), -1)); +#ifdef __WXOSX_MAC__ + m_printing_stage_value->SetFont(::Label::Body_11); +#else + m_printing_stage_value->SetFont(wxFont(11, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("HarmonyOS Sans SC"))); +#endif + m_printing_stage_value->SetForegroundColour(STAGE_TEXT_COL); + + m_printing_stage_value->Bind(wxEVT_LEFT_UP, &PrintingTaskPanel::on_stage_clicked, this); + + m_printing_stage_value->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent &event) { + auto *dev_manager = wxGetApp().getDeviceManager(); + MachineObject *obj = dev_manager ? dev_manager->get_selected_machine() : nullptr; + if (obj && obj->stage_curr == 58) { + m_printing_stage_value->SetCursor(wxCursor(wxCURSOR_HAND)); + wxFont font = m_printing_stage_value->GetFont(); + font.SetUnderlined(true); + m_printing_stage_value->SetFont(font); + } + event.Skip(); + }); + m_printing_stage_value->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent &event) { + auto *dev_manager = wxGetApp().getDeviceManager(); + MachineObject *obj = dev_manager ? dev_manager->get_selected_machine() : nullptr; + if (obj && obj->stage_curr == 58) { + m_printing_stage_value->SetCursor(wxCURSOR_ARROW); + wxFont font = m_printing_stage_value->GetFont(); + font.SetUnderlined(false); + m_printing_stage_value->SetFont(font); + } + event.Skip(); + }); + // penel_text->SetMaxSize(wxSize(FromDIP(600), -1)); penel_text->SetSizer(bSizer_text); penel_text->Layout(); + + // Create question button + m_question_button = new ScalableButton(penel_finish_time, wxID_ANY, "thermal_question", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, true); + m_question_button->SetToolTip(_L("Click to view thermal preconditioning explanation")); + m_question_button->Hide(); // Hide by default + m_question_button->Bind(wxEVT_LEFT_UP, &PrintingTaskPanel::on_stage_clicked, this); + m_question_button->Bind(wxEVT_ENTER_WINDOW, [this](wxMouseEvent &event) { + auto *dev_manager = wxGetApp().getDeviceManager(); + MachineObject *obj = dev_manager ? dev_manager->get_selected_machine() : nullptr; + if (obj && obj->stage_curr == 58) { + m_question_button->SetCursor(wxCursor(wxCURSOR_HAND)); + if (m_printing_stage_value) { + wxFont f = m_printing_stage_value->GetFont(); + f.SetUnderlined(true); + m_printing_stage_value->SetFont(f); + } + } + event.Skip(); + }); + m_question_button->Bind(wxEVT_LEAVE_WINDOW, [this](wxMouseEvent &event) { + auto *dev_manager = wxGetApp().getDeviceManager(); + MachineObject *obj = dev_manager ? dev_manager->get_selected_machine() : nullptr; + if (obj && obj->stage_curr == 58) { + m_question_button->SetCursor(wxCURSOR_ARROW); + if (m_printing_stage_value) { + wxFont f = m_printing_stage_value->GetFont(); + f.SetUnderlined(false); + m_printing_stage_value->SetFont(f); + } + event.Skip(); + } + }); + // Orca: display the end time of the print m_staticText_progress_end = new wxStaticText(penel_finish_time, wxID_ANY, L("N/A"), wxDefaultPosition, wxDefaultSize, 0); m_staticText_progress_end->Wrap(-1); m_staticText_progress_end->SetFont( wxFont(12, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxT("HarmonyOS Sans SC"))); m_staticText_progress_end->SetForegroundColour(wxColour(146, 146, 146)); + bSizer_finish_time->Add(m_printing_stage_value, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, 0); + bSizer_finish_time->Add(m_question_button, 0, wxALIGN_CENTER_VERTICAL | wxLEFT, FromDIP(5)); bSizer_finish_time->Add(0, 0, 1, wxEXPAND, 0); bSizer_finish_time->Add(m_staticText_progress_end, 0, wxLEFT | wxEXPAND, 0); // penel_finish_time->SetMaxSize(wxSize(FromDIP(600), -1)); @@ -746,6 +811,9 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) progress_left_sizer->Add(penel_text, 0, wxEXPAND | wxALL, 0); progress_left_sizer->Add(m_gauge_progress, 0, wxEXPAND | wxTOP | wxBOTTOM, FromDIP(10)); + + + progress_left_sizer->Add(penel_finish_time, 0, wxEXPAND |wxALL, 0); // progress_left_sizer->SetMaxSize(wxSize(FromDIP(600), -1)); @@ -769,7 +837,6 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) bSizer_subtask_info->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(14)); bSizer_subtask_info->Add(bSizer_task_name, 0, wxEXPAND|wxRIGHT, FromDIP(18)); bSizer_subtask_info->Add(m_staticText_profile_value, 0, wxEXPAND | wxTOP, FromDIP(5)); - bSizer_subtask_info->Add(m_printing_stage_value, 0, wxEXPAND | wxTOP, FromDIP(5)); bSizer_subtask_info->Add(progress_lr_panel, 0, wxEXPAND | wxTOP, FromDIP(5)); m_printing_sizer = new wxBoxSizer(wxHORIZONTAL); @@ -1077,6 +1144,39 @@ void PrintingTaskPanel::update_stage_value(wxString stage, int val) m_gauge_progress->SetValue(val); } +void PrintingTaskPanel::update_stage_value_with_machine(wxString stage, int val, MachineObject *obj) +{ + m_gauge_progress->SetValue(val); + // m_printing_stage_value->SetLabelText(stage); + m_printing_stage_value->SetLabelText(" Thermal Preconditioning for first layeroptimization"); + + if (obj && obj->stage_curr == 58) { + // Show English text for thermal preconditioning + m_printing_stage_value->SetForegroundColour(wxColour(146, 146, 146)); // Gray color, indicates clickable + m_printing_stage_value->SetCursor(wxCursor(wxCURSOR_HAND)); + m_question_button->Show(); // Show question button + } else { + m_printing_stage_value->SetLabelText(stage); + m_printing_stage_value->SetForegroundColour(STAGE_TEXT_COL); + m_printing_stage_value->SetCursor(wxCURSOR_ARROW); + m_question_button->Hide(); // Hide question button + } +} + +void PrintingTaskPanel::on_stage_clicked(wxMouseEvent &event) +{ + auto *dev_manager = wxGetApp().getDeviceManager(); + MachineObject *obj = dev_manager ? dev_manager->get_selected_machine() : nullptr; + + if (obj && obj->stage_curr == 58) { + wxWindow *top = wxGetTopLevelParent(this); + ThermalPreconditioningDialog m_thermal_dialog(top ? top : this, obj->get_dev_id() , "Calculating..."); + m_thermal_dialog.ShowModal(); + } + + event.Skip(); +} + void PrintingTaskPanel::update_progress_percent(wxString percent, wxString icon) { m_staticText_progress_percent->SetLabelText(percent); @@ -3641,7 +3741,7 @@ void StatusPanel::update_subtask(MachineObject *obj) if (obj->gcode_file_prepare_percent >= 0 && obj->gcode_file_prepare_percent <= 100 && show_percent) prepare_text += wxString::Format("(%d%%)", obj->gcode_file_prepare_percent); - m_project_task_panel->update_stage_value(prepare_text, 0); + m_project_task_panel->update_stage_value_with_machine(prepare_text, 0, obj); m_project_task_panel->update_progress_percent(NA_STR, wxEmptyString); m_project_task_panel->update_left_time(NA_STR); m_project_task_panel->update_layers_num(true, wxString::Format(_L("Layer: %s"), NA_STR)); @@ -3665,12 +3765,12 @@ void StatusPanel::update_subtask(MachineObject *obj) // update printing stage m_project_task_panel->update_left_time(obj->mc_left_time); if (obj->subtask_) { - m_project_task_panel->update_stage_value(obj->get_curr_stage(), obj->subtask_->task_progress); + m_project_task_panel->update_stage_value_with_machine(obj->get_curr_stage(), obj->subtask_->task_progress, obj); m_project_task_panel->update_progress_percent(wxString::Format("%d", obj->subtask_->task_progress), "%"); m_project_task_panel->update_layers_num(true, wxString::Format(_L("Layer: %d/%d"), obj->curr_layer, obj->total_layers)); } else { - m_project_task_panel->update_stage_value(obj->get_curr_stage(), 0); + m_project_task_panel->update_stage_value_with_machine(obj->get_curr_stage(), 0, obj); m_project_task_panel->update_progress_percent(NA_STR, wxEmptyString); m_project_task_panel->update_layers_num(true, wxString::Format(_L("Layer: %s"), NA_STR)); } @@ -3842,7 +3942,9 @@ void StatusPanel::reset_printing_values() m_project_task_panel->reset_printing_value(); m_project_task_panel->update_subtask_name(NA_STR); m_project_task_panel->show_profile_info(false); - m_project_task_panel->update_stage_value(wxEmptyString, 0); + // m_project_task_panel->update_stage_value_with_machine(wxEmptyString, 0, obj); + m_project_task_panel->update_stage_value_with_machine(wxEmptyString, 0, obj); + //obj->get_curr_stage() m_project_task_panel->update_progress_percent(NA_STR, wxEmptyString); m_project_task_panel->market_scoring_hide(); diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index f93081920a..c3369388d3 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -7,6 +7,7 @@ #include "SliceInfoPanel.hpp" #include "CameraPopup.hpp" #include "GUI.hpp" +#include "ThermalPreconditioningDialog.hpp" #include #include #include @@ -280,6 +281,7 @@ private: wxStaticText* m_staticText_consumption_of_time; wxStaticText* m_staticText_consumption_of_weight; wxStaticText* m_printing_stage_value; + ScalableButton* m_question_button; wxStaticText* m_staticText_profile_value; wxStaticText* m_staticText_progress_percent; wxStaticText* m_staticText_progress_percent_icon; @@ -330,6 +332,11 @@ public: void enable_abort_button(bool enable); void update_subtask_name(wxString name); void update_stage_value(wxString stage, int val); + void update_stage_value_with_machine(wxString stage, int val, MachineObject* obj = nullptr); + void on_stage_clicked(wxMouseEvent& event); + + // Public interface to update remaining time text in the thermal dialog + void update_thermal_remaining_time(MachineObject* obj); void update_progress_percent(wxString percent, wxString icon); void update_left_time(wxString time); void update_left_time(int mc_left_time); diff --git a/src/slic3r/GUI/ThermalPreconditioningDialog.cpp b/src/slic3r/GUI/ThermalPreconditioningDialog.cpp new file mode 100644 index 0000000000..c92c3cc6f1 --- /dev/null +++ b/src/slic3r/GUI/ThermalPreconditioningDialog.cpp @@ -0,0 +1,106 @@ +#include "ThermalPreconditioningDialog.hpp" +#include "I18N.hpp" +#include "GUI_App.hpp" +#include "wxExtensions.hpp" +#include "DeviceManager.hpp" +#include "DeviceCore/DevManager.h" + +namespace Slic3r { + +BEGIN_EVENT_TABLE(ThermalPreconditioningDialog, wxDialog) + EVT_BUTTON(wxID_OK, ThermalPreconditioningDialog::on_ok_clicked) +END_EVENT_TABLE() + +ThermalPreconditioningDialog::ThermalPreconditioningDialog(wxWindow* parent, std::string dev_id,const wxString& remaining_time) + : wxDialog(parent, wxID_ANY, _L("Thermal Preconditioning for first layer optimization"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER) + , m_dev_id(dev_id) + , m_refresh_timer(this) +{ + wxBitmap bitmap = create_scaled_bitmap("thermal_preconditioning_title", this, 16); + wxIcon icon; + icon.CopyFromBitmap(bitmap); + SetIcon(icon); + create_ui(); + + Bind(wxEVT_TIMER, &ThermalPreconditioningDialog::on_timer, this); + m_refresh_timer.Start(1000); + + // Set remaining time + if (!remaining_time.IsEmpty()) { + m_remaining_time_label->SetLabelText(wxString::Format(_L("Remaining time: %s"), remaining_time)); + } else { + m_remaining_time_label->SetLabelText(_L("Remaining time: Calculating...")); + } + + // Set dialog size and position + SetSize(wxSize(FromDIP(400), FromDIP(200))); + CentreOnScreen(); +} + +void ThermalPreconditioningDialog::create_ui() +{ + wxBoxSizer* main_sizer = new wxBoxSizer(wxVERTICAL); + // Remaining time label + m_remaining_time_label = new wxStaticText(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + wxFont time_font = m_remaining_time_label->GetFont(); + time_font.SetPointSize(14); + time_font.SetWeight(wxFONTWEIGHT_BOLD); + m_remaining_time_label->SetFont(time_font); + m_remaining_time_label->SetForegroundColour(wxColour(50, 58, 61)); + // Explanation text + m_explanation_label = new wxStaticText(this, wxID_ANY, + _L("The heated bed's thermal preconditioning helps optimize the first layer print quality. Printing will start once preconditioning is complete."), + wxDefaultPosition, wxDefaultSize, wxALIGN_CENTER); + m_explanation_label->Wrap(FromDIP(350)); + m_explanation_label->SetForegroundColour(wxColour(50, 58, 61)); + + // OK button + m_ok_button = new wxButton(this, wxID_OK, _L("OK")); + m_ok_button->SetBackgroundColour(wxColour("#B6F34F")); + m_ok_button->SetForegroundColour(wxColour("#000000")); + m_ok_button->SetMinSize(wxSize(FromDIP(80), FromDIP(32))); + + // Layout + main_sizer->Add(0, 0, 1, wxEXPAND); + main_sizer->Add(m_remaining_time_label, 0, wxALIGN_CENTER); + main_sizer->Add(m_explanation_label, 0, wxALIGN_CENTER | wxLEFT | wxRIGHT, FromDIP(25)); + main_sizer->Add(0, 0, 1, wxEXPAND); + main_sizer->Add(m_ok_button, 0, wxALIGN_RIGHT | wxRIGHT | wxBOTTOM, FromDIP(20)); + + SetSizer(main_sizer); +} + +void ThermalPreconditioningDialog::on_ok_clicked(wxCommandEvent& event) +{ + EndModal(wxID_OK); +} + +void ThermalPreconditioningDialog::update_thermal_remaining_time() +{ + DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + MachineObject * m_obj = dev->get_my_machine(m_dev_id); + + int remaining_seconds = m_obj->get_stage_remaining_seconds(); + wxString remaining_time; + if (remaining_seconds >= 0) { + int minutes = remaining_seconds/60; + int seconds = remaining_seconds % 60; + remaining_time = wxString::Format("Remaining time: %dmin%ds", minutes, seconds); + } + set_remaining_time_text(remaining_time); +} + +void ThermalPreconditioningDialog::on_timer(wxTimerEvent &event) { + DeviceManager *dev = Slic3r::GUI::wxGetApp().getDeviceManager(); + if (!dev) return; + MachineObject *m_obj = dev->get_my_machine(m_dev_id); + + if (IsShown() && m_obj && m_obj->stage_curr == 58) { + update_thermal_remaining_time(); + } else { + m_refresh_timer.Stop(); + } +} + +} // namespace Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/ThermalPreconditioningDialog.hpp b/src/slic3r/GUI/ThermalPreconditioningDialog.hpp new file mode 100644 index 0000000000..65ebae4b25 --- /dev/null +++ b/src/slic3r/GUI/ThermalPreconditioningDialog.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include +#include +#include +#include +#include +#include + +namespace Slic3r { + +class MachineObject; + +class ThermalPreconditioningDialog : public wxDialog +{ +public: + ThermalPreconditioningDialog(wxWindow *parent, std::string dev_id, const wxString &remaining_time); + ~ThermalPreconditioningDialog() = default; + + // Allow external updates of remaining time text + void set_remaining_time_text(const wxString& text) { if (m_remaining_time_label) m_remaining_time_label->SetLabelText(text); } + + void update_thermal_remaining_time(); + +private: + void create_ui(); + void on_ok_clicked(wxCommandEvent& event); + void on_timer(wxTimerEvent &event); + + std::string m_dev_id; + wxTimer m_refresh_timer; + wxStaticText* m_remaining_time_label; + wxStaticText* m_explanation_label; + wxButton* m_ok_button; + wxStaticBitmap* m_title_bitmap; + + DECLARE_EVENT_TABLE() +}; + +} // namespace Slic3r \ No newline at end of file diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index 5c1feef33a..caee5e72b6 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -573,7 +573,6 @@ void MachineInfoPanel::update(MachineObject* obj) void MachineInfoPanel::update_version_text(MachineObject* obj) { - if (obj->upgrade_display_state == DevFirmwareUpgradingState::UpgradingInProgress) { m_staticText_ver_val->SetLabelText("-"); //m_staticText_ams_ver_val->SetLabelText("-");