From 74e92ac51de3f5cfe2d5073c11f9b6f8c62e4f81 Mon Sep 17 00:00:00 2001 From: tao wang Date: Tue, 2 Aug 2022 17:37:08 +0800 Subject: [PATCH] FIX:amsmapping update layout and fixes some issues Change-Id: I3d88a06d5a9ac084b7ec498f7d201dda38d00fe7 --- src/slic3r/GUI/AmsMappingPopup.cpp | 81 ++++++++++++++++----------- src/slic3r/GUI/AmsMappingPopup.hpp | 6 +- src/slic3r/GUI/SelectMachine.cpp | 28 ++++++++- src/slic3r/GUI/SelectMachine.hpp | 3 +- src/slic3r/GUI/Widgets/AMSControl.cpp | 3 + 5 files changed, 83 insertions(+), 38 deletions(-) diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 085786a8e..346fc032d 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -193,9 +193,38 @@ void MaterialItem::doRender(wxDC &dc) m_sizer_main = new wxBoxSizer(wxVERTICAL); //m_sizer_main->Add(0, 0, 1, wxEXPAND, 0); + auto title_panel = new wxPanel(this, wxID_ANY); + title_panel->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + title_panel->SetSize(wxSize(-1, FromDIP(30))); + title_panel->SetMinSize(wxSize(-1, FromDIP(30))); + + + wxBoxSizer *title_sizer_h= new wxBoxSizer(wxHORIZONTAL); + + wxBoxSizer *title_sizer_v = new wxBoxSizer(wxVERTICAL); + + auto title_text = new wxStaticText(title_panel, wxID_ANY, _L("AMS Slots")); + title_text->SetForegroundColour(wxColour(0x32, 0x3A, 0x3D)); + title_text->SetFont(::Label::Head_13); + title_sizer_v->Add(title_text, 0, wxALIGN_CENTER, 5); + title_sizer_h->Add(title_sizer_v, 1, wxALIGN_CENTER, 5); + title_panel->SetSizer(title_sizer_h); + title_panel->Layout(); + title_panel->Fit(); + + m_sizer_list = new wxBoxSizer(wxVERTICAL); + + + m_warning_text = new wxStaticText(this, wxID_ANY, _L("Note: Only the AMS slots loaded with the same material type can be selected.")); + m_warning_text->SetForegroundColour(wxColour(0xFF, 0x6F, 0x00)); + m_warning_text->SetFont(::Label::Body_12); + + m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2)); + m_sizer_main->Add(m_sizer_list, 0, wxEXPAND | wxALL, FromDIP(0)); + m_sizer_main->Add(m_warning_text, wxEXPAND, wxALL, FromDIP(10)); + SetSizer(m_sizer_main); Layout(); - } @@ -233,6 +262,7 @@ void AmsMapingPopup::on_left_down(wxMouseEvent &evt) void AmsMapingPopup::update_ams_data(std::map amsList) { + m_has_unmatch_filament = false; m_mapping_item_list.clear(); if (m_amsmapping_sizer_list.size() > 0) { for (wxBoxSizer *bz : m_amsmapping_sizer_list) { bz->Clear(true); } @@ -275,6 +305,8 @@ void AmsMapingPopup::update_ams_data(std::map amsList) add_ams_mapping(tray_datas); } + + m_warning_text->Show(m_has_unmatch_filament); Layout(); Fit(); } @@ -302,49 +334,35 @@ void AmsMapingPopup::add_ams_mapping(std::vector tray_data) m_mapping_item_list.push_back(m_filament_name); if (tray_data[i].type == NORMAL) { - m_filament_name->set_data(tray_data[i].colour, tray_data[i].name, tray_data[i]); + if (is_match_material(tray_data[i].name)) { + m_filament_name->set_data(tray_data[i].colour, tray_data[i].name, tray_data[i]); + } else { + m_filament_name->set_data(wxColour(0xEE,0xEE,0xEE), tray_data[i].name, tray_data[i], true); + m_has_unmatch_filament = true; + } + m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { if (!is_match_material(tray_data[i].name)) return; m_filament_name->send_event(m_current_filament_id); Dismiss(); - /* wxCommandEvent event(EVT_SET_FINISH_MAPPING); - event.SetInt(tray_data[i].id); - wxString param = wxString::Format("%d|%d|%d|%02d|%d", tray_data[i].colour.Red(), tray_data[i].colour.Green(), tray_data[i].colour.Blue(), tray_data[i].id + 1, - m_current_filament_id); - event.SetString(param); - event.SetEventObject(this->GetParent()); - wxPostEvent(this->GetParent(), event); - Dismiss();*/ }); } // temp if (tray_data[i].type == EMPTY) { - m_filament_name->set_data(wxColour(0x6B, 0x6B, 0x6B), "-", tray_data[i]); + m_filament_name->set_data(wxColour(0xCE, 0xCE, 0xCE), "-", tray_data[i]); m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { m_filament_name->send_event(m_current_filament_id); - /* wxCommandEvent event(EVT_SET_FINISH_MAPPING); - event.SetInt(tray_data[i].id); - wxString param = wxString::Format("%d|%d|%d|%02d|%d", 0x6B, 0x6B, 0x6B, tray_data[i].id + 1, m_current_filament_id); - event.SetString(param); - event.SetEventObject(this->GetParent()); - wxPostEvent(this->GetParent(), event);*/ Dismiss(); }); } // third party if (tray_data[i].type == THIRD) { - m_filament_name->set_data(wxColour(0x6B, 0x6B, 0x6B), "?", tray_data[i]); + m_filament_name->set_data(wxColour(0xCE, 0xCE, 0xCE), "?", tray_data[i]); m_filament_name->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_filament_name](wxMouseEvent &e) { m_filament_name->send_event(m_current_filament_id); - //wxCommandEvent event(EVT_SET_FINISH_MAPPING); - //event.SetInt(tray_data[i].id); - //wxString param = wxString::Format("%d|%d|%d|%02d|%d", 0x6B, 0x6B, 0x6B, tray_data[i].id + 1, m_current_filament_id); - //event.SetString(param); - //event.SetEventObject(this->GetParent()); - //wxPostEvent(this->GetParent(), event); Dismiss(); }); } @@ -355,7 +373,7 @@ void AmsMapingPopup::add_ams_mapping(std::vector tray_data) sizer_mapping_list->Add(sizer_mapping_item, 0, wxALIGN_CENTER_HORIZONTAL | wxALL, FromDIP(5)); m_amsmapping_sizer_list.push_back(sizer_mapping_list); } - m_sizer_main->Add(sizer_mapping_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_sizer_list->Add(sizer_mapping_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); } void AmsMapingPopup::OnDismiss() @@ -399,14 +417,6 @@ void MappingItem::send_event(int fliament_id) event.SetString(param); event.SetEventObject(this->GetParent()->GetParent()); wxPostEvent(this->GetParent()->GetParent(), event); - - /* wxCommandEvent event(EVT_SET_FINISH_MAPPING); - event.SetInt(tray_data[i].id); - wxString param = wxString::Format("%d|%d|%d|%02d|%d", tray_data[i].colour.Red(), tray_data[i].colour.Green(), tray_data[i].colour.Blue(), tray_data[i].id + 1, - m_current_filament_id); - event.SetString(param); - event.SetEventObject(this->GetParent()); - wxPostEvent(this->GetParent(), event);*/ } void MappingItem::msw_rescale() @@ -446,6 +456,8 @@ void MappingItem::render(wxDC &dc) dc.SetFont(::Label::Body_12); auto txt_colour = m_coloul.GetLuminance() < 0.5 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30); + txt_colour = m_unmatch ? wxColour(0xCE, 0xCE, 0xCE) : txt_colour; + dc.SetTextForeground(txt_colour); /*if (dc.GetTextExtent(m_name).x > GetSize().x - 10) { @@ -457,8 +469,9 @@ void MappingItem::render(wxDC &dc) dc.DrawText(m_name, wxPoint((GetSize().x - txt_size.x) / 2, (GetSize().y - txt_size.y) / 2)); } -void MappingItem::set_data(wxColour colour, wxString name, TrayData data) +void MappingItem::set_data(wxColour colour, wxString name, TrayData data, bool unmatch) { + m_unmatch = unmatch; m_tray_data = data; if (m_coloul != colour || m_name != name) { m_coloul = colour; diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index fd0fe52ee..0174f7ae6 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -96,11 +96,12 @@ public: wxColour m_coloul; wxString m_name; TrayData m_tray_data; + bool m_unmatch{false}; void msw_rescale(); void paintEvent(wxPaintEvent &evt); void render(wxDC &dc); - void set_data(wxColour colour, wxString name, TrayData data); + void set_data(wxColour colour, wxString name, TrayData data, bool unmatch = false); void doRender(wxDC &dc); }; @@ -110,13 +111,16 @@ public: AmsMapingPopup(wxWindow *parent); ~AmsMapingPopup() {}; + wxStaticText * m_warning_text{nullptr}; std::vector m_materials_list; std::vector m_amsmapping_sizer_list; std::vector m_mapping_item_list; + bool m_has_unmatch_filament {false}; int m_current_filament_id; std::string m_tag_material; wxBoxSizer *m_sizer_main{nullptr}; + wxBoxSizer *m_sizer_list{nullptr}; void update_materials_list(std::vector list); void set_tag_texture(std::string texture); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index aa6da4dba..0ca233c60 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -743,6 +743,26 @@ void SelectMachineDialog::stripWhiteSpace(std::string& str) } } +wxString SelectMachineDialog::format_text(wxString &m_msg) +{ + if (wxGetApp().app_config->get("language") != "zh_CN") {return m_msg; } + + wxString out_txt = m_msg; + wxString count_txt = ""; + int new_line_pos = 0; + + for (int i = 0; i < m_msg.length(); i++) { + auto text_size = m_statictext_ams_msg->GetTextExtent(count_txt); + if (text_size.x < (FromDIP(400))) { + count_txt += m_msg[i]; + } else { + out_txt.insert(i - 1, '\n'); + count_txt = ""; + } + } + return out_txt; +} + SelectMachineDialog::SelectMachineDialog(Plater *plater) : DPIDialog(static_cast(wxGetApp().mainframe), wxID_ANY, _L("Send print job to"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX) , m_plater(plater), m_export_3mf_cancel(false) @@ -1065,7 +1085,7 @@ void SelectMachineDialog::sync_ams_mapping_result(std::vector &res ams_col = AmsTray::decode_color(f->color); } else { // default color - ams_col = wxColour(0xEE, 0xEE, 0xEE); + ams_col = wxColour(0xCE, 0xCE, 0xCE); } m->set_ams_info(ams_col, ams_id); @@ -1175,6 +1195,8 @@ void SelectMachineDialog::update_ams_status_msg(wxString msg, bool is_warning) Fit(); } } else { + msg = format_text(msg); + auto str_new = msg.ToStdString(); stripWhiteSpace(str_new); @@ -1208,6 +1230,8 @@ void SelectMachineDialog::update_priner_status_msg(wxString msg, bool is_warning Fit(); } } else { + msg = format_text(msg); + auto str_new = msg.ToStdString(); stripWhiteSpace(str_new); @@ -2012,8 +2036,8 @@ void SelectMachineDialog::set_default() if (obj_ && obj_->has_ams()) { m_mapping_popup.set_current_filament_id(extruder); - m_mapping_popup.update_ams_data(obj_->amsList); m_mapping_popup.set_tag_texture(materials[extruder]); + m_mapping_popup.update_ams_data(obj_->amsList); m_mapping_popup.Popup(); } } diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index 37a3e9fc2..d0aec046c 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -309,7 +309,8 @@ protected: void stripWhiteSpace(std::string& str); - void update_ams_status_msg(wxString msg, bool is_warning = false); + wxString format_text(wxString &m_msg); + void update_ams_status_msg(wxString msg, bool is_warning = false); void update_priner_status_msg(wxString msg, bool is_warning = false); void update_print_status_msg(wxString msg, bool is_warning = false, bool is_printer = true); diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index f8812c647..7499fa2a6 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1431,6 +1431,7 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_simplebook_right = new wxSimplebook(amswin, wxID_ANY); m_simplebook_right->SetMinSize(AMS_STEP_SIZE); m_simplebook_right->SetSize(AMS_STEP_SIZE); + m_simplebook_right->SetBackgroundColour(*wxWHITE); m_sizer_right->Add(m_simplebook_right, 0, wxALL, 0); auto tip_right = new wxPanel(m_simplebook_right, wxID_ANY, wxDefaultPosition, AMS_STEP_SIZE, wxTAB_TRAVERSAL); @@ -1451,10 +1452,12 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons m_filament_load_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); m_filament_load_step->SetMinSize(AMS_STEP_SIZE); m_filament_load_step->SetSize(AMS_STEP_SIZE); + m_filament_load_step->SetBackgroundColour(*wxWHITE); m_filament_unload_step = new ::StepIndicator(m_simplebook_right, wxID_ANY); m_filament_unload_step->SetMinSize(AMS_STEP_SIZE); m_filament_unload_step->SetSize(AMS_STEP_SIZE); + m_filament_unload_step->SetBackgroundColour(*wxWHITE); m_simplebook_right->AddPage(tip_right, wxEmptyString, false); m_simplebook_right->AddPage(m_filament_load_step, wxEmptyString, false);