diff --git a/resources/images/ams_mapping_container.svg b/resources/images/ams_mapping_container.svg new file mode 100644 index 0000000000..6577b485ff --- /dev/null +++ b/resources/images/ams_mapping_container.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index a008747288..a4ea07c7be 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -209,9 +209,9 @@ void MaterialItem::doRender(wxDC &dc) AmsMapingPopup::AmsMapingPopup(wxWindow *parent) :wxPopupTransientWindow(parent, wxBORDER_NONE) { - SetSize(wxSize(FromDIP(300), -1)); - SetMinSize(wxSize(FromDIP(300), -1)); - SetMaxSize(wxSize(FromDIP(300), -1)); + SetSize(wxSize(FromDIP(360), -1)); + SetMinSize(wxSize(FromDIP(360), -1)); + SetMaxSize(wxSize(FromDIP(360), -1)); Bind(wxEVT_PAINT, &AmsMapingPopup::paintEvent, this); @@ -243,6 +243,17 @@ void MaterialItem::doRender(wxDC &dc) title_panel->Fit(); m_sizer_list = new wxBoxSizer(wxVERTICAL); + for (auto i = 0; i < AMS_TOTAL_COUNT; i++) { + auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL); + auto ams_mapping_item_container = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("ams_mapping_container", this, 130), wxDefaultPosition, + wxSize(FromDIP(328), FromDIP(130)), 0); + ams_mapping_item_container->SetSizer(sizer_mapping_list); + ams_mapping_item_container->Layout(); + ams_mapping_item_container->Hide(); + m_amsmapping_container_sizer_list.push_back(sizer_mapping_list); + m_amsmapping_container_list.push_back(ams_mapping_item_container); + m_sizer_list->Add(ams_mapping_item_container, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxBOTTOM, FromDIP(5)); + } m_warning_text = new wxStaticText(this, wxID_ANY, wxEmptyString); m_warning_text->SetForegroundColour(wxColour(0xFF, 0x6F, 0x00)); @@ -253,7 +264,9 @@ void MaterialItem::doRender(wxDC &dc) m_warning_text->Wrap(FromDIP(280)); m_sizer_main->Add(title_panel, 0, wxEXPAND | wxALL, FromDIP(2)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(8)); m_sizer_main->Add(m_sizer_list, 0, wxEXPAND | wxALL, FromDIP(0)); + m_sizer_main->Add(0, 0, 0, wxTOP, FromDIP(8)); m_sizer_main->Add(m_warning_text, 0, wxEXPAND | wxALL, FromDIP(10)); SetSizer(m_sizer_main); @@ -315,15 +328,25 @@ 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); } - m_amsmapping_sizer_list.clear(); + //m_mapping_item_list.clear(); + + + for (wxWindow *mitem : m_mapping_item_list) { + mitem->Destroy(); + mitem = nullptr; + } + m_mapping_item_list.clear(); + + if (m_amsmapping_container_sizer_list.size() > 0) { + for (wxBoxSizer *siz : m_amsmapping_container_sizer_list) { + siz->Clear(true); + } } std::map::iterator ams_iter; BOOST_LOG_TRIVIAL(trace) << "ams_mapping total count " << amsList.size(); + int m_amsmapping_container_list_index = 0; for (ams_iter = amsList.begin(); ams_iter != amsList.end(); ams_iter++) { @@ -355,7 +378,10 @@ void AmsMapingPopup::update_ams_data(std::map amsList) tray_datas.push_back(td); } - add_ams_mapping(tray_datas); + + m_amsmapping_container_list[m_amsmapping_container_list_index]->Show(); + add_ams_mapping(tray_datas, m_amsmapping_container_list[m_amsmapping_container_list_index], m_amsmapping_container_sizer_list[m_amsmapping_container_list_index]); + m_amsmapping_container_list_index++; } @@ -406,40 +432,38 @@ std::vector AmsMapingPopup::parse_ams_mapping(std::map tray_data) +void AmsMapingPopup::add_ams_mapping(std::vector tray_data, wxWindow* container, wxBoxSizer* sizer) { - auto sizer_mapping_list = new wxBoxSizer(wxHORIZONTAL); - + sizer->Add(0,0,0,wxLEFT,FromDIP(8)); for (auto i = 0; i < tray_data.size(); i++) { - wxBoxSizer *sizer_mapping_item = new wxBoxSizer(wxVERTICAL); // set number - auto number = new wxStaticText(this, wxID_ANY, wxGetApp().transition_tridid(tray_data[i].id), wxDefaultPosition, wxDefaultSize, 0); + /* auto number = new wxStaticText(this, wxID_ANY, wxGetApp().transition_tridid(tray_data[i].id), wxDefaultPosition, wxDefaultSize, 0); number->SetFont(::Label::Body_13); number->SetForegroundColour(wxColour(0X6B, 0X6B, 0X6B)); - number->Wrap(-1); + number->Wrap(-1);*/ // set button - MappingItem *m_filament_name = new MappingItem(this); - m_filament_name->SetSize(wxSize(FromDIP(62), FromDIP(22))); - m_filament_name->SetMinSize(wxSize(FromDIP(62), FromDIP(22))); - m_filament_name->SetMaxSize(wxSize(FromDIP(62), FromDIP(22))); - //m_filament_name->SetCornerRadius(5); - m_filament_name->SetFont(::Label::Body_12); - m_mapping_item_list.push_back(m_filament_name); - + MappingItem *m_mapping_item = new MappingItem(container); + m_mapping_item->SetSize(wxSize(FromDIP(68), FromDIP(100))); + m_mapping_item->SetMinSize(wxSize(FromDIP(68), FromDIP(100))); + m_mapping_item->SetMaxSize(wxSize(FromDIP(68), FromDIP(100))); + //m_mapping_item->SetCornerRadius(5); + m_mapping_item->SetFont(::Label::Body_12); + m_mapping_item_list.push_back(m_mapping_item); + if (tray_data[i].type == NORMAL) { if (is_match_material(tray_data[i].filament_type)) { - m_filament_name->set_data(tray_data[i].colour, tray_data[i].name, tray_data[i]); + m_mapping_item->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_mapping_item->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) { + m_mapping_item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_mapping_item](wxMouseEvent &e) { if (!is_match_material(tray_data[i].filament_type)) return; - m_filament_name->send_event(m_current_filament_id); + m_mapping_item->send_event(m_current_filament_id); Dismiss(); }); } @@ -447,29 +471,30 @@ void AmsMapingPopup::add_ams_mapping(std::vector tray_data) // temp if (tray_data[i].type == EMPTY) { - 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); + m_mapping_item->set_data(wxColour(0xCE, 0xCE, 0xCE), "-", tray_data[i]); + m_mapping_item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_mapping_item](wxMouseEvent &e) { + m_mapping_item->send_event(m_current_filament_id); Dismiss(); }); } // third party if (tray_data[i].type == THIRD) { - 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); + m_mapping_item->set_data(wxColour(0xCE, 0xCE, 0xCE), "?", tray_data[i]); + m_mapping_item->Bind(wxEVT_LEFT_DOWN, [this, tray_data, i, m_mapping_item](wxMouseEvent &e) { + m_mapping_item->send_event(m_current_filament_id); Dismiss(); }); } - sizer_mapping_item->Add(number, 0, wxALIGN_CENTER_HORIZONTAL, 0); - sizer_mapping_item->Add(m_filament_name, 0, wxALIGN_CENTER_HORIZONTAL, 0); - sizer_mapping_list->Add(sizer_mapping_item, 0, wxALL, FromDIP(5)); - m_amsmapping_sizer_list.push_back(sizer_mapping_list); + //sizer_mapping_item->Add(number, 0, wxALIGN_CENTER_HORIZONTAL, 0); + //sizer_mapping_item->Add(m_mapping_item, 0, wxALIGN_CENTER_HORIZONTAL, 0); + m_mapping_item->set_tray_index(wxGetApp().transition_tridid(tray_data[i].id)); + sizer->Add(0,0,0,wxRIGHT,FromDIP(8)); + sizer->Add(m_mapping_item, 0, wxTOP, FromDIP(2)); } - m_sizer_list->Add(sizer_mapping_list, 0, wxALIGN_CENTER_HORIZONTAL, 0); + } void AmsMapingPopup::OnDismiss() @@ -514,7 +539,7 @@ void MappingItem::send_event(int fliament_id) wxString param = wxString::Format("%d|%d|%d|%s|%d", m_coloul.Red(), m_coloul.Green(), m_coloul.Blue(), number, fliament_id); event.SetString(param); event.SetEventObject(this->GetParent()->GetParent()); - wxPostEvent(this->GetParent()->GetParent(), event); + wxPostEvent(this->GetParent()->GetParent()->GetParent(), event); } void MappingItem::msw_rescale() @@ -551,7 +576,7 @@ void MappingItem::render(wxDC &dc) #endif // materials name - dc.SetFont(::Label::Body_12); + dc.SetFont(::Label::Head_14); auto txt_colour = m_coloul.GetLuminance() < 0.5 ? *wxWHITE : wxColour(0x26, 0x2E, 0x30); txt_colour = m_unmatch ? wxColour(0xCE, 0xCE, 0xCE) : txt_colour; @@ -563,8 +588,15 @@ void MappingItem::render(wxDC &dc) m_name = m_name.substr(0, 3) + "." + m_name.substr(m_name.length() - 1); }*/ - auto txt_size = dc.GetTextExtent(m_name); - dc.DrawText(m_name, wxPoint((GetSize().x - txt_size.x) / 2, (GetSize().y - txt_size.y) / 2)); + auto txt_size = dc.GetTextExtent(m_tray_index); + auto top = (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2 + FromDIP(16); + dc.DrawText(m_tray_index, wxPoint((GetSize().x - txt_size.x) / 2, top)); + + + top += txt_size.y + FromDIP(12); + dc.SetFont(::Label::Head_13); + txt_size = dc.GetTextExtent(m_name); + dc.DrawText(m_name, wxPoint((GetSize().x - txt_size.x) / 2, top)); } void MappingItem::set_data(wxColour colour, wxString name, TrayData data, bool unmatch) @@ -582,17 +614,28 @@ void MappingItem::doRender(wxDC &dc) { dc.SetPen(m_coloul); dc.SetBrush(wxBrush(m_coloul)); - dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y,5); - if (m_coloul == *wxWHITE) { - dc.SetPen(wxPen(wxColour(0xAC, 0xAC, 0xAC),1)); -#ifdef __APPLE__ - dc.DrawRoundedRectangle(1, 1, GetSize().x - 1, GetSize().y - 1, 5); -#else - dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 5); -#endif // __APPLE__ + dc.DrawRectangle(0, (GetSize().y - MAPPING_ITEM_REAL_SIZE.y) / 2, MAPPING_ITEM_REAL_SIZE.x, MAPPING_ITEM_REAL_SIZE.y); - - } +// if (m_coloul == *wxWHITE) { +// dc.SetPen(wxPen(wxColour(0xAC, 0xAC, 0xAC), 1)); +//#ifdef __APPLE__ +// dc.DrawRectangle(1, 1, GetSize().x - 1, GetSize().y - 1); +//#else +// dc.DrawRectangle(0, 0, tray_size.x, tray_size.y); +//#endif // __APPLE__ +// } + + wxColour side_colour = wxColour(0xE4E4E4); + + dc.SetPen(side_colour); + dc.SetBrush(wxBrush(side_colour)); +#ifdef __APPLE__ + dc.DrawRectangle(0, 0, FromDIP(4), GetSize().y); + dc.DrawRectangle(GetSize().x - FromDIP(4), 0, FromDIP(4), GetSize().y); +#else + dc.DrawRectangle(0, 0, FromDIP(4), GetSize().y); + dc.DrawRectangle(GetSize().x - FromDIP(4), 0, FromDIP(4), GetSize().y); +#endif // __APPLE__ } AmsMapingTipPopup::AmsMapingTipPopup(wxWindow *parent) diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index c4abe83cc3..1e461710a3 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -41,6 +41,7 @@ namespace Slic3r { namespace GUI { #define MATERIAL_ITEM_SIZE wxSize(FromDIP(64), FromDIP(34)) #define MATERIAL_ITEM_REAL_SIZE wxSize(FromDIP(62), FromDIP(32)) +#define MAPPING_ITEM_REAL_SIZE wxSize(FromDIP(68), FromDIP(76)) #define AMS_TOTAL_COUNT 4 enum TrayType { @@ -95,8 +96,11 @@ public: MappingItem(wxWindow *parent); ~MappingItem(); - void update_data(TrayData data); - void send_event(int fliament_id); + void update_data(TrayData data); + void send_event(int fliament_id); + void set_tray_index(wxString t_index) {m_tray_index = t_index;}; + + wxString m_tray_index; wxColour m_coloul; wxString m_name; TrayData m_tray_data; @@ -118,7 +122,8 @@ public: wxStaticText * m_warning_text{nullptr}; std::vector m_materials_list; - std::vector m_amsmapping_sizer_list; + std::vector m_amsmapping_container_sizer_list; + std::vector m_amsmapping_container_list; std::vector m_mapping_item_list; bool m_has_unmatch_filament {false}; @@ -130,7 +135,7 @@ public: void update_materials_list(std::vector list); void set_tag_texture(std::string texture); void update_ams_data(std::map amsList); - void add_ams_mapping(std::vector tray_data); + void add_ams_mapping(std::vector tray_data, wxWindow* container, wxBoxSizer* sizer); void set_current_filament_id(int id){m_current_filament_id = id;}; int get_current_filament_id(){return m_current_filament_id;}; bool is_match_material(std::string material);