mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			705 lines
		
	
	
		
			No EOL
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			705 lines
		
	
	
		
			No EOL
		
	
	
		
			27 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "UpgradePanel.hpp"
 | |
| #include <slic3r/GUI/Widgets/Label.hpp>
 | |
| #include <slic3r/GUI/I18N.hpp>
 | |
| #include "GUI.hpp"
 | |
| #include "GUI_App.hpp"
 | |
| #include "libslic3r/Thread.hpp"
 | |
| #include "ReleaseNote.hpp"
 | |
| 
 | |
| namespace Slic3r {
 | |
| namespace GUI {
 | |
| 
 | |
| static const wxColour TEXT_NORMAL_CLR = wxColour(0, 174, 66);
 | |
| static const wxColour TEXT_FAILED_CLR = wxColour(255, 111, 0);
 | |
| 
 | |
| MachineInfoPanel::MachineInfoPanel(wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name)
 | |
|     :wxPanel(parent, id, pos, size, style)
 | |
| {
 | |
|     this->SetBackgroundColour(wxColour(255, 255, 255));
 | |
| 
 | |
|     init_bitmaps();
 | |
| 
 | |
| 
 | |
| 
 | |
|     wxBoxSizer *m_top_sizer = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
|     m_panel_caption = create_caption_panel(this);
 | |
| 
 | |
|     m_top_sizer->Add(m_panel_caption, 0, wxEXPAND | wxALL, 0);
 | |
| 
 | |
|     wxBoxSizer *m_main_sizer = new wxBoxSizer(wxHORIZONTAL);
 | |
| 
 | |
|     wxBoxSizer *m_main_left_sizer = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
|     wxBoxSizer *m_ota_sizer = new wxBoxSizer(wxHORIZONTAL);
 | |
| 
 | |
|     m_printer_img = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(200), FromDIP(200)));
 | |
|    
 | |
|     m_printer_img->SetBitmap(m_img_printer);
 | |
|     m_ota_sizer->Add(m_printer_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, 0);
 | |
| 
 | |
|     wxBoxSizer *m_ota_content_sizer = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
|     m_ota_content_sizer->Add(0, 0, 1, wxEXPAND, 0);
 | |
| 
 | |
|     wxFlexGridSizer *m_ota_info_sizer = new wxFlexGridSizer(0, 2, 0, 0);
 | |
|     m_ota_info_sizer->AddGrowableCol(1);
 | |
|     m_ota_info_sizer->SetFlexibleDirection(wxHORIZONTAL);
 | |
|     m_ota_info_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
 | |
| 
 | |
|     m_staticText_model_id = new wxStaticText(this, wxID_ANY, _L("Model:"), wxDefaultPosition, wxDefaultSize, 0);
 | |
|     m_staticText_model_id->Wrap(-1);
 | |
|     m_staticText_model_id->SetFont(Label::Head_14);
 | |
|     m_ota_info_sizer->Add(m_staticText_model_id, 0, wxALIGN_RIGHT | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_staticText_model_id_val = new wxStaticText(this, wxID_ANY, "-", wxDefaultPosition, wxDefaultSize, 0);
 | |
|     m_staticText_model_id_val->Wrap(-1);
 | |
|     m_ota_info_sizer->Add(m_staticText_model_id_val, 0, wxALL | wxEXPAND, FromDIP(5));
 | |
| 
 | |
|     m_staticText_sn = new wxStaticText(this, wxID_ANY, _L("Serial:"), wxDefaultPosition, wxDefaultSize, 0);
 | |
|     m_staticText_sn->Wrap(-1);
 | |
|     m_staticText_sn->SetFont(Label::Head_14);
 | |
|     m_ota_info_sizer->Add(m_staticText_sn, 0, wxALIGN_RIGHT | wxALL | wxEXPAND, FromDIP(5));
 | |
| 
 | |
|     m_staticText_sn_val = new wxStaticText(this, wxID_ANY, "-", wxDefaultPosition, wxDefaultSize, 0);
 | |
|     m_staticText_sn_val->Wrap(-1);
 | |
|     m_ota_info_sizer->Add(m_staticText_sn_val, 0, wxALL | wxEXPAND, FromDIP(5));
 | |
| 
 | |
|     wxBoxSizer *m_ota_ver_sizer = new wxBoxSizer(wxHORIZONTAL);
 | |
| 
 | |
|     m_ota_ver_sizer->Add(0, 0, 1, wxEXPAND, 0);
 | |
| 
 | |
|     m_ota_new_version_img = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(5), FromDIP(5)));
 | |
|     m_ota_new_version_img->SetBitmap(upgrade_green_icon);
 | |
|     m_ota_ver_sizer->Add(m_ota_new_version_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_staticText_ver = new wxStaticText(this, wxID_ANY, _L("Version:"), wxDefaultPosition, wxDefaultSize, 0);
 | |
|     m_staticText_ver->Wrap(-1);
 | |
|     m_staticText_ver->SetFont(Label::Head_14);
 | |
|     m_ota_ver_sizer->Add(m_staticText_ver, 0, wxALIGN_RIGHT | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_ota_info_sizer->Add(m_ota_ver_sizer, 0, wxEXPAND, 0);
 | |
| 
 | |
|     m_staticText_ver_val = new wxStaticText(this, wxID_ANY, "-", wxDefaultPosition, wxDefaultSize, 0);
 | |
|     m_staticText_ver_val->Wrap(-1);
 | |
|     m_ota_info_sizer->Add(m_staticText_ver_val, 0, wxALL | wxEXPAND, FromDIP(5));
 | |
| 
 | |
|     m_ota_content_sizer->Add(m_ota_info_sizer, 0, wxEXPAND, 0);
 | |
| 
 | |
|     m_ota_content_sizer->Add(0, 0, 1, wxEXPAND, 0);
 | |
| 
 | |
|     m_ota_sizer->Add(m_ota_content_sizer, 1, wxEXPAND, 0);
 | |
| 
 | |
|     m_main_left_sizer->Add(m_ota_sizer, 0, wxEXPAND, 0);
 | |
| 
 | |
|     m_staticline = new wxStaticLine(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL);
 | |
|     m_staticline->SetBackgroundColour(wxColour(206,206,206));
 | |
|     m_staticline->Show(false);
 | |
|     m_main_left_sizer->Add(m_staticline, 0, wxEXPAND | wxLEFT, FromDIP(40));
 | |
| 
 | |
|     m_ams_sizer = new wxBoxSizer(wxHORIZONTAL);
 | |
|     m_ams_img   = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(200), FromDIP(200)));
 | |
| 
 | |
|    
 | |
| 
 | |
|     m_ams_img->SetBitmap(m_img_monitor_ams);
 | |
|     m_ams_sizer->Add(m_ams_img, 0, wxALIGN_TOP | wxALL, FromDIP(5));
 | |
| 
 | |
|     wxBoxSizer *m_ams_content_sizer = new wxBoxSizer(wxVERTICAL);
 | |
|     m_ams_content_sizer->Add(0, 40, 0, wxEXPAND, FromDIP(5));
 | |
|     m_ams_info_sizer = new wxGridSizer(0, 2, FromDIP(30), FromDIP(30));
 | |
| 
 | |
| 
 | |
|     for (auto i = 0; i < 4; i++) {
 | |
|         auto amspanel = new AmsPanel(this, wxID_ANY);
 | |
|         m_ams_info_sizer->Add(amspanel, 1, wxEXPAND, 5);
 | |
|         amspanel->Hide();
 | |
| 
 | |
|         /*AmsPanelItem item = AmsPanelItem();
 | |
|         item.id           = i;
 | |
|         item.item         = amspanel;*/
 | |
|         m_amspanel_list.Add(amspanel);
 | |
|     }
 | |
| 
 | |
|     m_ams_content_sizer->Add(m_ams_info_sizer, 0, wxEXPAND, 0);
 | |
| 
 | |
|     m_ams_sizer->Add(m_ams_content_sizer, 1, wxEXPAND, 0);
 | |
| 
 | |
|     m_main_left_sizer->Add(m_ams_sizer, 0, wxEXPAND, 0);
 | |
| 
 | |
|     //Hide ams
 | |
|     show_ams(false, true);
 | |
| 
 | |
|     m_main_sizer->Add(m_main_left_sizer, 1, wxEXPAND, 0);
 | |
| 
 | |
|     wxBoxSizer *m_main_right_sizer = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
|     m_main_right_sizer->SetMinSize(wxSize(FromDIP(137), -1));
 | |
| 
 | |
|     m_main_right_sizer->Add(0, FromDIP(50), 0, wxEXPAND, FromDIP(5));
 | |
| 
 | |
|     m_button_upgrade_firmware = new Button(this, _L("Upgrade firmware"));
 | |
|     StateColor btn_bg(std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Disabled), std::pair<wxColour, int>(wxColour(27, 136, 68), StateColor::Pressed),
 | |
|                       std::pair<wxColour, int>(wxColour(61, 203, 115), StateColor::Hovered), std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Enabled),
 | |
|                       std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Normal));
 | |
|     StateColor btn_bd(std::pair<wxColour, int>(wxColour(144, 144, 144), StateColor::Disabled), std::pair<wxColour, int>(wxColour(0, 174, 66), StateColor::Enabled));
 | |
|     StateColor btn_text(std::pair<wxColour, int>(wxColour(144, 144, 144), StateColor::Disabled), std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Enabled));
 | |
|     m_button_upgrade_firmware->SetBackgroundColor(btn_bg);
 | |
|     m_button_upgrade_firmware->SetBorderColor(btn_bd);
 | |
|     m_button_upgrade_firmware->SetTextColor(btn_text);
 | |
|     m_button_upgrade_firmware->SetFont(Label::Body_10);
 | |
|     m_button_upgrade_firmware->SetMinSize(wxSize(FromDIP(-1), FromDIP(24)));
 | |
|     m_button_upgrade_firmware->SetCornerRadius(FromDIP(12));
 | |
|     m_main_right_sizer->Add(m_button_upgrade_firmware, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_staticText_upgrading_info = new wxStaticText(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0);
 | |
|     m_staticText_upgrading_info->Wrap(-1);
 | |
|     m_main_right_sizer->Add(m_staticText_upgrading_info, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_upgrading_sizer = new wxBoxSizer(wxHORIZONTAL);
 | |
| 
 | |
|     m_upgrading_sizer->Add(0, 0, 1, wxEXPAND, 0);
 | |
| 
 | |
|     m_upgrade_progress = new ProgressBar(this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize);
 | |
|     m_upgrade_progress->SetValue(0);
 | |
|     m_upgrade_progress->SetSize(wxSize(FromDIP(54), FromDIP(14)));
 | |
|     m_upgrade_progress->SetMinSize(wxSize(FromDIP(54), FromDIP(14)));
 | |
|     m_upgrading_sizer->Add(m_upgrade_progress, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_staticText_upgrading_percent = new wxStaticText(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize);
 | |
|     m_staticText_upgrading_percent->Wrap(-1);
 | |
|     m_upgrading_sizer->Add(m_staticText_upgrading_percent, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_upgrade_retry_img = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize);
 | |
|     m_upgrading_sizer->Add(m_upgrade_retry_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_upgrading_sizer->Add(0, 0, 1, wxEXPAND, 0);
 | |
| 
 | |
|     m_main_right_sizer->Add(m_upgrading_sizer, 0, wxEXPAND, 0);
 | |
| 
 | |
|     wxBoxSizer *sizer_release_note = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
| 
 | |
|     m_staticText_release_note = new wxStaticText(this, wxID_ANY, _L("Release Note"), wxDefaultPosition, wxDefaultSize);
 | |
|     m_staticText_release_note->Wrap(-1);
 | |
|     m_staticText_release_note->SetForegroundColour(wxColour(0x1F,0x8E,0xEA));
 | |
| 
 | |
|     auto line_release_note = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL);
 | |
|     line_release_note->SetBackgroundColour(wxColour(0x1F, 0x8E, 0xEA));
 | |
| 
 | |
|     sizer_release_note->Add(m_staticText_release_note, 0, wxALL, 0);
 | |
|     sizer_release_note->Add(line_release_note, 1, wxEXPAND | wxALL, 0);
 | |
| 
 | |
|     m_main_right_sizer->Add(sizer_release_note, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, 0);
 | |
| 
 | |
|     m_main_right_sizer->Add(0, 0, 1, wxEXPAND, 0);
 | |
| 
 | |
|     m_main_sizer->Add(m_main_right_sizer, 0, wxEXPAND, 0);
 | |
| 
 | |
|     m_top_sizer->Add(m_main_sizer, 1, wxEXPAND, 0);
 | |
| 
 | |
|     this->SetSizer(m_top_sizer);
 | |
|     this->Layout();
 | |
| 
 | |
|     // Connect Events
 | |
|     m_upgrade_retry_img->Bind(wxEVT_LEFT_UP, [this](auto &e) {
 | |
|         upgrade_firmware_internal();
 | |
|         });
 | |
| 
 | |
|     m_staticText_release_note->Bind(wxEVT_LEFT_DOWN, &MachineInfoPanel::on_show_release_note, this);
 | |
|     m_button_upgrade_firmware->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MachineInfoPanel::on_upgrade_firmware), NULL, this);
 | |
| }
 | |
| 
 | |
| 
 | |
| wxPanel *MachineInfoPanel::create_caption_panel(wxWindow *parent)
 | |
| {
 | |
|     auto caption_panel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
 | |
|     caption_panel->SetBackgroundColour(wxColour(248, 248, 248));
 | |
|     caption_panel->SetMinSize(wxSize(FromDIP(925), FromDIP(36)));
 | |
| 
 | |
|     wxBoxSizer *m_caption_sizer = new wxBoxSizer(wxHORIZONTAL);
 | |
| 
 | |
|     m_caption_sizer->Add(17, 0, 0, wxEXPAND, 0);
 | |
| 
 | |
|     m_upgrade_status_img = new wxStaticBitmap(caption_panel, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(5), FromDIP(5)));
 | |
|     m_upgrade_status_img->SetBitmap(upgrade_gray_icon);
 | |
|     m_caption_sizer->Add(m_upgrade_status_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
 | |
| 
 | |
|     m_caption_text = new wxStaticText(caption_panel, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize);
 | |
|     m_caption_text->Wrap(-1);
 | |
|     m_caption_sizer->Add(m_caption_text, 1, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
 | |
| 
 | |
|     caption_panel->SetSizer(m_caption_sizer);
 | |
|     caption_panel->Layout();
 | |
|     m_caption_sizer->Fit(caption_panel);
 | |
| 
 | |
|     return caption_panel;
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::msw_rescale() 
 | |
| {
 | |
|     init_bitmaps();
 | |
|     m_button_upgrade_firmware->SetSize(wxSize(FromDIP(-1), FromDIP(24)));
 | |
|     m_button_upgrade_firmware->SetMinSize(wxSize(FromDIP(-1), FromDIP(24)));
 | |
|     m_button_upgrade_firmware->SetMaxSize(wxSize(FromDIP(-1), FromDIP(24)));
 | |
|     m_printer_img->SetBitmap(m_img_printer);
 | |
|     m_ams_img->SetBitmap(m_img_monitor_ams);
 | |
|     Layout();
 | |
|     Fit();
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::init_bitmaps()
 | |
| {
 | |
|     m_img_printer        = create_scaled_bitmap("monitor_upgrade_printer", nullptr, 200);
 | |
|     m_img_monitor_ams    = create_scaled_bitmap("monitor_upgrade_ams", nullptr, 200);
 | |
|     upgrade_green_icon   = create_scaled_bitmap("monitor_upgrade_online", nullptr, 5);
 | |
|     upgrade_gray_icon    = create_scaled_bitmap("monitor_upgrade_offline", nullptr, 5);
 | |
|     upgrade_yellow_icon  = create_scaled_bitmap("monitor_upgrade_busy", nullptr, 5);
 | |
| }
 | |
| 
 | |
| MachineInfoPanel::~MachineInfoPanel()
 | |
| {
 | |
|     // Disconnect Events
 | |
|     m_button_upgrade_firmware->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(MachineInfoPanel::on_upgrade_firmware), NULL, this);
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::update(MachineObject* obj)
 | |
| {
 | |
|     m_obj = obj;
 | |
|     if (obj) {
 | |
|         this->Freeze();
 | |
|         //update online status img
 | |
|         m_panel_caption->Freeze();
 | |
|         if (!obj->is_connected()) {
 | |
|             m_upgrade_status_img->SetBitmap(upgrade_gray_icon);
 | |
|             wxString caption_text = wxString::Format("%s(%s)", from_u8(obj->dev_name), _L("Offline"));
 | |
|             m_caption_text->SetLabelText(caption_text);
 | |
|             show_status(MachineObject::UpgradingDisplayState::UpgradingUnavaliable);
 | |
|         } else {
 | |
|             show_status(obj->upgrade_display_state);
 | |
|             if (obj->upgrade_display_state == (int) MachineObject::UpgradingDisplayState::UpgradingUnavaliable) {
 | |
|                 if (obj->can_abort()) {
 | |
|                     wxString caption_text = wxString::Format("%s(%s)", from_u8(obj->dev_name), _L("Printing"));
 | |
|                     m_caption_text->SetLabelText(caption_text);
 | |
|                 } else {
 | |
|                     wxString caption_text = wxString::Format("%s", from_u8(obj->dev_name));
 | |
|                     m_caption_text->SetLabelText(caption_text);
 | |
|                 }
 | |
|                 m_upgrade_status_img->SetBitmap(upgrade_yellow_icon);
 | |
|             } else {
 | |
|                 wxString caption_text = wxString::Format("%s(%s)", from_u8(obj->dev_name), _L("Idle"));
 | |
|                 m_caption_text->SetLabelText(caption_text);
 | |
|                 m_upgrade_status_img->SetBitmap(upgrade_green_icon);
 | |
|             }
 | |
|         }
 | |
|         m_panel_caption->Layout();
 | |
|         m_panel_caption->Thaw();
 | |
| 
 | |
|         // update version
 | |
|         update_version_text(obj);
 | |
| 
 | |
|         // update ams
 | |
|         update_ams(obj);
 | |
| 
 | |
|         //update progress
 | |
|         int upgrade_percent = obj->get_upgrade_percent();
 | |
|         if (obj->upgrade_display_state == (int) MachineObject::UpgradingDisplayState::UpgradingInProgress) {
 | |
|             m_upgrade_progress->SetValue(upgrade_percent);
 | |
|             m_staticText_upgrading_percent->SetLabelText(wxString::Format("%d%%", upgrade_percent));
 | |
|         } else if (obj->upgrade_display_state == (int) MachineObject::UpgradingDisplayState::UpgradingFinished) {
 | |
|             wxString result_text = obj->get_upgrade_result_str(obj->upgrade_err_code);
 | |
|             m_staticText_upgrading_info->SetLabelText(result_text);
 | |
|             m_upgrade_progress->SetValue(upgrade_percent);
 | |
|             m_staticText_upgrading_percent->SetLabelText(wxString::Format("%d%%", upgrade_percent));
 | |
|         }
 | |
| 
 | |
|         wxString model_id_text = obj->get_printer_type_display_str();
 | |
|         m_staticText_model_id_val->SetLabelText(model_id_text);
 | |
|         wxString sn_text = obj->dev_id;
 | |
|         m_staticText_sn_val->SetLabelText(sn_text.MakeUpper());
 | |
| 
 | |
|         this->Layout();
 | |
|         this->Thaw();
 | |
|     }
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::update_version_text(MachineObject* obj)
 | |
| {
 | |
|     if (obj->upgrade_display_state == (int)MachineObject::UpgradingDisplayState::UpgradingInProgress) {
 | |
|         m_staticText_ver_val->SetLabelText("-");
 | |
|         //m_staticText_ams_ver_val->SetLabelText("-");
 | |
|         m_ota_new_version_img->Hide();
 | |
|     } else {
 | |
|         // update version text
 | |
|         auto it = obj->module_vers.find("ota");
 | |
|         if (obj->upgrade_new_version
 | |
|             && !obj->ota_new_version_number.empty()) {
 | |
|             if (it != obj->module_vers.end()) {
 | |
|                 wxString ver_text = wxString::Format("%s->%s", it->second.sw_ver, obj->ota_new_version_number);
 | |
|                 m_staticText_ver_val->SetLabelText(ver_text);
 | |
|             }
 | |
|             else {
 | |
|                 m_staticText_ver_val->SetLabelText("-");
 | |
|             }
 | |
|             m_ota_new_version_img->Show();
 | |
|         }
 | |
|         else {
 | |
|             if (it != obj->module_vers.end()) {
 | |
|                 wxString ver_text = wxString::Format("%s(%s)", it->second.sw_ver, _L("Lastest version"));
 | |
|                 m_staticText_ver_val->SetLabelText(ver_text);
 | |
|             }
 | |
|             else {
 | |
|                 m_staticText_ver_val->SetLabelText("-");
 | |
|             }
 | |
|             m_ota_new_version_img->Hide();
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::update_ams(MachineObject *obj)
 | |
| {
 | |
|     if (obj->ams_exist_bits != 0) {
 | |
|         show_ams(true);
 | |
|         std::map<int, MachineObject::ModuleVersionInfo> ver_list = obj->get_ams_version();
 | |
| 
 | |
|         AmsPanelHash::iterator iter = m_amspanel_list.begin();
 | |
| 
 | |
|         for (auto i = 0; i < m_amspanel_list.GetCount(); i++) {
 | |
|             AmsPanel *amspanel = m_amspanel_list[i];
 | |
|              amspanel->Hide();
 | |
|         }
 | |
| 
 | |
| 
 | |
|         auto ams_index = 0;
 | |
|         for (std::map<std::string, Ams *>::iterator iter = obj->amsList.begin(); iter != obj->amsList.end(); iter++) {
 | |
|             wxString ams_name;
 | |
|             wxString ams_sn;
 | |
|             wxString ams_ver;
 | |
| 
 | |
|             AmsPanel *amspanel = m_amspanel_list[ams_index];
 | |
|             amspanel->Show();
 | |
| 
 | |
| 
 | |
|             auto it = ver_list.find(atoi(iter->first.c_str()));
 | |
|             if (it == ver_list.end()) {
 | |
|                 // hide this ams
 | |
|                 wxString ams_text = wxString::Format("AMS%s", std::to_string(ams_index + 1));
 | |
|                 ams_name          = ams_text;
 | |
|                 ams_sn   = "-";
 | |
|                 ams_ver  = "-";
 | |
|             } else {
 | |
|                 // update ams img
 | |
|                 wxString ams_text = wxString::Format("AMS%s", std::to_string(ams_index + 1));
 | |
|                 ams_name = ams_text;
 | |
|                 if (obj->upgrade_new_version
 | |
|                     && !obj->ams_new_version_number.empty()
 | |
|                     && obj->ams_new_version_number.compare(it->second.sw_ver) != 0) { 
 | |
|                     amspanel->m_ams_new_version_img->Show();
 | |
|                     wxString ver_text = wxString::Format("%s->%s", it->second.sw_ver, obj->ams_new_version_number);
 | |
|                     ams_ver = ver_text;
 | |
|                 } else {
 | |
|                     amspanel->m_ams_new_version_img->Hide();
 | |
|                     wxString ver_text = wxString::Format("%s(%s)", it->second.sw_ver, _L("Lastest version"));
 | |
|                     ams_ver = ver_text;
 | |
|                 }
 | |
|                 // update ams sn
 | |
|                 if (it->second.sn.empty()) {
 | |
|                     ams_sn = "-";
 | |
|                 } else {
 | |
|                     wxString sn_text = it->second.sn;
 | |
|                     ams_sn = sn_text.MakeUpper();
 | |
|                 } 
 | |
|             }
 | |
| 
 | |
|             amspanel->m_staticText_ams->SetLabelText(ams_name);
 | |
|             amspanel->m_staticText_ams_sn_val->SetLabelText(ams_sn);
 | |
|             amspanel->m_staticText_ams_ver_val->SetLabelText(ams_ver);
 | |
| 
 | |
|             ams_index++;
 | |
|         }
 | |
|     } else {
 | |
|         show_ams(false);
 | |
|     }
 | |
|     this->Layout();
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::show_status(int status)
 | |
| {
 | |
|     if (last_status == status)
 | |
|         return;
 | |
|     last_status = status;
 | |
| 
 | |
|     BOOST_LOG_TRIVIAL(trace) << "MachineInfoPanel: show_status = " << status;
 | |
| 
 | |
|     Freeze();
 | |
|     
 | |
|     if (status == (int)MachineObject::UpgradingDisplayState::UpgradingUnavaliable) {
 | |
|         m_button_upgrade_firmware->Show();
 | |
|         m_button_upgrade_firmware->Disable();
 | |
|         for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) {
 | |
|             m_upgrading_sizer->Show(false);
 | |
|         }
 | |
|         m_upgrade_retry_img->Hide();
 | |
|         m_staticText_upgrading_info->Hide();
 | |
|         m_staticText_upgrading_percent->Hide();
 | |
|     } else if (status == (int) MachineObject::UpgradingDisplayState::UpgradingAvaliable) {
 | |
|         m_button_upgrade_firmware->Show();
 | |
|         m_button_upgrade_firmware->Enable();
 | |
|         for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) { m_upgrading_sizer->Show(false); }
 | |
|         m_upgrade_retry_img->Hide();
 | |
|         m_staticText_upgrading_info->Hide();
 | |
|         m_staticText_upgrading_percent->Hide();
 | |
|     } else if (status == (int) MachineObject::UpgradingDisplayState::UpgradingInProgress) {
 | |
|         m_button_upgrade_firmware->Hide();
 | |
|         for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) { m_upgrading_sizer->Show(true); }
 | |
|         m_upgrade_retry_img->Hide();
 | |
|         m_staticText_upgrading_info->Show();
 | |
|         m_staticText_upgrading_info->SetLabel(_L("Upgrading"));
 | |
|         m_staticText_upgrading_info->SetForegroundColour(TEXT_NORMAL_CLR);
 | |
|         m_staticText_upgrading_percent->SetForegroundColour(TEXT_NORMAL_CLR);
 | |
|         m_staticText_upgrading_percent->Show();
 | |
|     } else if (status == (int) MachineObject::UpgradingDisplayState::UpgradingFinished) {
 | |
|         if (true) {
 | |
|             for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) { m_upgrading_sizer->Show(true); }
 | |
|             m_button_upgrade_firmware->Hide();
 | |
|             m_staticText_upgrading_info->SetLabel(_L("Upgrading success"));
 | |
|             m_staticText_upgrading_info->Show();
 | |
|             m_staticText_upgrading_info->SetForegroundColour(TEXT_NORMAL_CLR);
 | |
|             m_staticText_upgrading_percent->SetForegroundColour(TEXT_NORMAL_CLR);
 | |
|             m_upgrade_retry_img->Hide();
 | |
|         } else {
 | |
|             m_staticText_upgrading_info->SetLabel(_L("Upgrading failed"));
 | |
|             m_staticText_upgrading_info->SetForegroundColour(TEXT_FAILED_CLR);
 | |
|             for (size_t i = 0; i < m_upgrading_sizer->GetItemCount(); i++) { m_upgrading_sizer->Show(true); }
 | |
|             m_button_upgrade_firmware->Hide();
 | |
|             m_staticText_upgrading_info->Show();
 | |
|             m_staticText_upgrading_percent->Hide();
 | |
|             m_upgrade_retry_img->Show();
 | |
|         }
 | |
|     } else {
 | |
|         ;
 | |
|     }
 | |
|     Layout();
 | |
|     Thaw();
 | |
| 
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::show_ams(bool show, bool force_update)
 | |
| {
 | |
|     if (m_last_ams_show != show || force_update) {
 | |
|         m_ams_img->Show(show);
 | |
|         m_ams_sizer->Show(show);
 | |
|         m_staticline->Show(show);
 | |
|         BOOST_LOG_TRIVIAL(trace) << "upgrade: show_ams = " << show;
 | |
|     }
 | |
|     m_last_ams_show = show;
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::upgrade_firmware_internal() {
 | |
|     if (!m_obj)
 | |
|         return;
 | |
|     if (panel_type == ptOtaPanel) {
 | |
|         m_obj->command_upgrade_firmware(m_ota_info);
 | |
|     } else if (panel_type == ptAmsPanel) {
 | |
|         m_obj->command_upgrade_firmware(m_ams_info);
 | |
|     } else if (panel_type == ptPushPanel) {
 | |
|         m_obj->command_upgrade_confirm();
 | |
|     }
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::on_upgrade_firmware(wxCommandEvent &event)
 | |
| {
 | |
|     if (m_obj)
 | |
|         m_obj->command_upgrade_confirm();
 | |
| }
 | |
| 
 | |
| void MachineInfoPanel::on_show_release_note(wxMouseEvent &event) 
 | |
| {
 | |
|     DeviceManager *dev = wxGetApp().getDeviceManager();
 | |
|     if (!dev) return;
 | |
| 
 | |
| 
 | |
|     std::string next_version_release_note = "";
 | |
|     std::string now_version_release_note  = "";
 | |
|     std::string version_number            = "";
 | |
| 
 | |
|     for (auto iter : m_obj->firmware_list) {
 | |
|         if (iter.version == m_obj->ota_new_version_number) {
 | |
|             version_number            = m_obj->ota_new_version_number;
 | |
|             next_version_release_note = iter.description;
 | |
|         }
 | |
|         if (iter.version == m_obj->get_ota_version()) { 
 | |
|             version_number           = m_obj->get_ota_version();
 | |
|             now_version_release_note = iter.description;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     ReleaseNoteDialog dlg;
 | |
| 
 | |
|     if (!next_version_release_note.empty()) { 
 | |
|         dlg.update_release_note(next_version_release_note, version_number);
 | |
|         dlg.ShowModal();
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     if (!now_version_release_note.empty()) {
 | |
|         dlg.update_release_note(now_version_release_note, version_number);
 | |
|         dlg.ShowModal();
 | |
|         return;
 | |
|     }
 | |
| }
 | |
| 
 | |
| UpgradePanel::UpgradePanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style)
 | |
|     :wxPanel(parent, id, pos, size, style)
 | |
| {
 | |
|     this->SetBackgroundColour(wxColour(238, 238, 238));
 | |
| 
 | |
|     auto m_main_sizer = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
|     m_scrolledWindow = new wxScrolledWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxVSCROLL);
 | |
|     m_scrolledWindow->SetScrollRate(5, 5);
 | |
| 
 | |
|     m_machine_list_sizer = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
|     m_scrolledWindow->SetSizerAndFit(m_machine_list_sizer);
 | |
| 
 | |
|     m_main_sizer->Add(m_scrolledWindow, 1, wxALIGN_CENTER_HORIZONTAL | wxEXPAND, 0);
 | |
| 
 | |
|     this->SetSizerAndFit(m_main_sizer);
 | |
| 
 | |
|     Layout();
 | |
| }
 | |
| 
 | |
| UpgradePanel::~UpgradePanel()
 | |
| {
 | |
| 
 | |
| }
 | |
| 
 | |
| void UpgradePanel::msw_rescale() 
 | |
| { 
 | |
|     /*if (m_push_upgrade_panel)
 | |
|         m_push_upgrade_panel->msw_rescale();*/
 | |
| }
 | |
| 
 | |
| void UpgradePanel::clean_push_upgrade_panel()
 | |
| {
 | |
|     if (m_push_upgrade_panel) {
 | |
|         delete m_push_upgrade_panel;
 | |
|         m_push_upgrade_panel = nullptr;
 | |
|     }
 | |
| }
 | |
| 
 | |
| void UpgradePanel::refresh_version_and_firmware(MachineObject* obj)
 | |
| {
 | |
|     BOOST_LOG_TRIVIAL(trace) << "refresh version";
 | |
|     if (obj) {
 | |
|         obj->command_get_version();
 | |
|         obj->get_firmware_info();
 | |
|         m_need_update = true;
 | |
|     }
 | |
| }
 | |
| 
 | |
| void UpgradePanel::update(MachineObject *obj)
 | |
| {
 | |
|     if (m_obj != obj) {
 | |
|         m_obj = obj;
 | |
|         refresh_version_and_firmware(obj);
 | |
|     }
 | |
| 
 | |
|     Freeze();
 | |
|     if (m_obj && m_need_update) {
 | |
|         if (m_obj->is_firmware_info_valid()) {
 | |
|             clean_push_upgrade_panel();
 | |
|             m_push_upgrade_panel = new MachineInfoPanel(m_scrolledWindow);
 | |
|             m_machine_list_sizer->Add(m_push_upgrade_panel, 0, wxTOP | wxALIGN_CENTER_HORIZONTAL, FromDIP(8));
 | |
|             m_need_update = false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //update panels
 | |
|     if (m_push_upgrade_panel) {
 | |
|         m_push_upgrade_panel->update(obj);
 | |
|     }
 | |
| 
 | |
|     if (!obj)
 | |
|         clean_push_upgrade_panel();
 | |
|     this->Layout();
 | |
|     Thaw();
 | |
| 
 | |
|     m_obj = obj;
 | |
| }
 | |
| 
 | |
| bool UpgradePanel::Show(bool show)
 | |
| {
 | |
|     if (show) {
 | |
|         DeviceManager* dev = wxGetApp().getDeviceManager();
 | |
|         if (dev) {
 | |
|             MachineObject* obj = dev->get_default_machine();
 | |
|             refresh_version_and_firmware(obj);
 | |
|         }
 | |
|     }
 | |
|     return wxPanel::Show(show);
 | |
| }
 | |
| 
 | |
|  AmsPanel::AmsPanel(wxWindow *      parent,
 | |
|                    wxWindowID      id /*= wxID_ANY*/,
 | |
|                    const wxPoint & pos /*= wxDefaultPosition*/,
 | |
|                    const wxSize &  size /*= wxDefaultSize*/,
 | |
|                    long            style /*= wxTAB_TRAVERSAL*/,
 | |
|                    const wxString &name /*= wxEmptyString*/)
 | |
|     : wxPanel(parent,id,pos,size,style)
 | |
| {
 | |
|      auto upgrade_green_icon = create_scaled_bitmap("monitor_upgrade_online", nullptr, 5);
 | |
| 
 | |
|      auto ams_sizer = new wxFlexGridSizer(0, 2, 0, 0);
 | |
|      ams_sizer->AddGrowableCol(1);
 | |
|      ams_sizer->SetFlexibleDirection(wxHORIZONTAL);
 | |
|      ams_sizer->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
 | |
| 
 | |
|      m_staticText_ams = new wxStaticText(this, wxID_ANY, "-", wxDefaultPosition, wxDefaultSize, 0);
 | |
|      m_staticText_ams->SetFont(Label::Head_14);
 | |
|      m_staticText_ams->Wrap(-1);
 | |
| 
 | |
|      auto m_staticText_ams_sn = new wxStaticText(this, wxID_ANY, _L("Serial:"), wxDefaultPosition, wxDefaultSize, 0);
 | |
|      m_staticText_ams_sn->Wrap(-1);
 | |
|      m_staticText_ams_sn->SetFont(Label::Head_14);
 | |
| 
 | |
|      m_staticText_ams_sn_val = new wxStaticText(this, wxID_ANY, "-", wxDefaultPosition, wxDefaultSize, 0);
 | |
|      m_staticText_ams_sn_val->Wrap(-1);
 | |
| 
 | |
|      wxBoxSizer *m_ams_ver_sizer = new wxBoxSizer(wxHORIZONTAL);
 | |
| 
 | |
|      m_ams_ver_sizer->Add(0, 0, 1, wxEXPAND, 0);
 | |
| 
 | |
|      m_ams_new_version_img = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(5), FromDIP(5)));
 | |
|      m_ams_new_version_img->SetBitmap(upgrade_green_icon);
 | |
|      m_ams_ver_sizer->Add(m_ams_new_version_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
 | |
|      m_ams_new_version_img->Hide();
 | |
| 
 | |
|      auto m_staticText_ams_ver = new wxStaticText(this, wxID_ANY, _L("Version:"), wxDefaultPosition, wxDefaultSize, 0);
 | |
|      m_staticText_ams_ver->Wrap(-1);
 | |
|      m_staticText_ams_ver->SetFont(Label::Head_14);
 | |
|      m_ams_ver_sizer->Add(m_staticText_ams_ver, 0, wxALIGN_RIGHT | wxALL, FromDIP(5));
 | |
| 
 | |
|      m_staticText_ams_ver_val = new wxStaticText(this, wxID_ANY, "-", wxDefaultPosition, wxDefaultSize, 0);
 | |
|      m_staticText_ams_ver_val->Wrap(-1);
 | |
| 
 | |
|      ams_sizer->Add(m_staticText_ams, 0, wxALIGN_RIGHT | wxALL, FromDIP(5));
 | |
|      ams_sizer->Add(0, 0, 1, wxEXPAND, 5);
 | |
|      ams_sizer->Add(m_staticText_ams_sn, 0, wxALIGN_RIGHT | wxALL, FromDIP(5));
 | |
|      ams_sizer->Add(m_staticText_ams_sn_val, 0, wxALL | wxEXPAND, FromDIP(5));
 | |
|      ams_sizer->Add(m_ams_ver_sizer, 1, wxEXPAND, 5);
 | |
|      ams_sizer->Add(m_staticText_ams_ver_val, 0, wxALL | wxEXPAND, FromDIP(5));
 | |
|      ams_sizer->Add(0, 0, 1, wxEXPAND, 0);
 | |
| 
 | |
|      SetSizer(ams_sizer);
 | |
|      Layout();
 | |
|  }
 | |
| 
 | |
|  AmsPanel::~AmsPanel() 
 | |
|  {
 | |
| 
 | |
|  }
 | |
| 
 | |
| }
 | |
| } | 
