From 27843c1601ef4d753bfa6ac9645bf53d042a28fd Mon Sep 17 00:00:00 2001 From: tao wang Date: Wed, 31 Jan 2024 20:37:15 +0800 Subject: [PATCH] NEW:using new humidity display ui jira:[STUDIO-5967] Change-Id: I13be4212e6b97f646d21e0af64cbc5006753fdeb --- resources/images/hum_level1_dark.svg | 5 + resources/images/hum_level1_light.svg | 5 + resources/images/hum_level2_dark.svg | 5 + resources/images/hum_level2_light.svg | 5 + resources/images/hum_level3_dark.svg | 5 + resources/images/hum_level3_light.svg | 5 + resources/images/hum_level4_dark.svg | 5 + resources/images/hum_level4_light.svg | 5 + resources/images/hum_level5_dark.svg | 5 + resources/images/hum_level5_light.svg | 5 + resources/images/hum_popup_close.svg | 4 + resources/images/humidity_list_background.png | Bin 0 -> 44573 bytes src/slic3r/GUI/AmsMappingPopup.cpp | 251 ++++++++++++------ src/slic3r/GUI/AmsMappingPopup.hpp | 42 ++- src/slic3r/GUI/Widgets/AMSControl.cpp | 45 ++-- src/slic3r/GUI/Widgets/AMSControl.hpp | 6 +- 16 files changed, 280 insertions(+), 118 deletions(-) create mode 100644 resources/images/hum_level1_dark.svg create mode 100644 resources/images/hum_level1_light.svg create mode 100644 resources/images/hum_level2_dark.svg create mode 100644 resources/images/hum_level2_light.svg create mode 100644 resources/images/hum_level3_dark.svg create mode 100644 resources/images/hum_level3_light.svg create mode 100644 resources/images/hum_level4_dark.svg create mode 100644 resources/images/hum_level4_light.svg create mode 100644 resources/images/hum_level5_dark.svg create mode 100644 resources/images/hum_level5_light.svg create mode 100644 resources/images/hum_popup_close.svg create mode 100644 resources/images/humidity_list_background.png diff --git a/resources/images/hum_level1_dark.svg b/resources/images/hum_level1_dark.svg new file mode 100644 index 000000000..d7ef458e0 --- /dev/null +++ b/resources/images/hum_level1_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level1_light.svg b/resources/images/hum_level1_light.svg new file mode 100644 index 000000000..4121832f9 --- /dev/null +++ b/resources/images/hum_level1_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level2_dark.svg b/resources/images/hum_level2_dark.svg new file mode 100644 index 000000000..4dc749ccb --- /dev/null +++ b/resources/images/hum_level2_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level2_light.svg b/resources/images/hum_level2_light.svg new file mode 100644 index 000000000..299c1506c --- /dev/null +++ b/resources/images/hum_level2_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level3_dark.svg b/resources/images/hum_level3_dark.svg new file mode 100644 index 000000000..be9f85965 --- /dev/null +++ b/resources/images/hum_level3_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level3_light.svg b/resources/images/hum_level3_light.svg new file mode 100644 index 000000000..2c0334ee3 --- /dev/null +++ b/resources/images/hum_level3_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level4_dark.svg b/resources/images/hum_level4_dark.svg new file mode 100644 index 000000000..66951ad47 --- /dev/null +++ b/resources/images/hum_level4_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level4_light.svg b/resources/images/hum_level4_light.svg new file mode 100644 index 000000000..4d62440ae --- /dev/null +++ b/resources/images/hum_level4_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level5_dark.svg b/resources/images/hum_level5_dark.svg new file mode 100644 index 000000000..16511f4f5 --- /dev/null +++ b/resources/images/hum_level5_dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_level5_light.svg b/resources/images/hum_level5_light.svg new file mode 100644 index 000000000..37870888f --- /dev/null +++ b/resources/images/hum_level5_light.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/resources/images/hum_popup_close.svg b/resources/images/hum_popup_close.svg new file mode 100644 index 000000000..cf48700ee --- /dev/null +++ b/resources/images/hum_popup_close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/images/humidity_list_background.png b/resources/images/humidity_list_background.png new file mode 100644 index 0000000000000000000000000000000000000000..d482fb1b329fc69ce4b5e8c2e4efaae59a982043 GIT binary patch literal 44573 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, 0, 0, wxTOP, 28); + m_staticText = new Label(this, _L("Current Cabin humidity")); + m_staticText->SetFont(::Label::Head_24); - wxBoxSizer* m_sizer_body; - m_sizer_body = new wxBoxSizer(wxHORIZONTAL); + humidity_level_list = new AmsHumidityLevelList(this); + curr_humidity_img = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("hum_level1_light", this, FromDIP(132)), wxDefaultPosition, wxSize(FromDIP(132), FromDIP(132)), 0); - m_img = new wxStaticBitmap(this, wxID_ANY, create_scaled_bitmap("ams_humidity_tips", this, 125), wxDefaultPosition, wxSize(FromDIP(125), FromDIP(145)), 0); - - m_sizer_body->Add(m_img, 0, wxEXPAND | wxALL, 2); - - - m_sizer_body->Add(0, 0, 0, wxEXPAND | wxLEFT, FromDIP(18)); - - wxBoxSizer* m_sizer_tips = new wxBoxSizer(wxVERTICAL); - - m_staticText1 = new Label(this, _L("Cabin humidity")); - m_staticText1->SetFont(::Label::Head_13); + m_staticText_note = new Label(this, _L("Please change the desiccant when it is too wet. The indicator may not represent accurately in following cases : when the lid is open or the desiccant pack is changed. it take hours to absorb the moisture, low temperatures also slow down the process.")); + m_staticText_note->SetMinSize(wxSize(FromDIP(680), -1)); + m_staticText_note->SetMaxSize(wxSize(FromDIP(680), -1)); + m_staticText_note->Wrap(FromDIP(680)); - m_staticText2 = new Label(this, _L("Green means that AMS humidity is normal, orange represents humidity is high, red represents humidity is too high.(Hygrometer: lower the better.)")); - m_staticText2->SetFont(::Label::Body_13); - m_staticText2->SetSize(wxSize(FromDIP(357), -1)); - m_staticText2->SetMinSize(wxSize(FromDIP(357), -1)); - m_staticText2->SetMaxSize(wxSize(FromDIP(357), -1)); - m_staticText2->Wrap(FromDIP(357)); - - - m_staticText3 = new Label(this, _L("Desiccant status")); - m_staticText3->SetFont(::Label::Head_13); - - - m_staticText4 = new Label(this, _L("A desiccant status lower than two bars indicates that desiccant may be inactive. Please change the desiccant.(The bars: higher the better.)")); - m_staticText4->SetFont(::Label::Body_13); - m_staticText4->SetSize(wxSize(FromDIP(357), -1)); - m_staticText4->SetMinSize(wxSize(FromDIP(357), -1)); - m_staticText4->SetMaxSize(wxSize(FromDIP(357), -1)); - m_staticText4->Wrap(FromDIP(357)); - - m_sizer_tips->Add(m_staticText1, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,2); - m_sizer_tips->Add(m_staticText2, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,8); - m_sizer_tips->Add(m_staticText3, 0, wxLEFT|wxRIGHT, 3); - m_sizer_tips->Add(0,0,0,wxTOP,2); - m_sizer_tips->Add(m_staticText4, 0, wxLEFT|wxRIGHT, 3); - - - m_sizer_body->Add(m_sizer_tips, 0, wxEXPAND, 0); - - - main_sizer->Add(m_sizer_body, 0, wxEXPAND | wxLEFT | wxRIGHT, FromDIP(20)); - - m_staticText_note = new Label(this, _L("Note: When the lid is open or the desiccant pack is changed, it can take hours or a night to absorb the moisture. Low temperatures also slow down the process. During this time, the indicator may not represent the chamber accurately.")); - m_staticText4->SetFont(::Label::Body_13); - m_staticText_note->SetMinSize(wxSize(FromDIP(523), -1)); - m_staticText_note->SetMaxSize(wxSize(FromDIP(523), -1)); - m_staticText_note->Wrap(FromDIP(523)); - main_sizer->Add(m_staticText_note, 0, wxALL | wxLEFT | wxRIGHT, 22); - - m_button_confirm = new Button(this, _L("OK")); - StateColor btn_bg_green(std::pair(wxColour(0, 174, 66), StateColor::Pressed), std::pair(wxColour(0, 174, 66), StateColor::Normal)); - m_button_confirm->SetBackgroundColor(btn_bg_green); - m_button_confirm->SetBorderColor(wxColour(0, 174, 66)); - m_button_confirm->SetTextColor(wxColour(0xFFFFFE)); - m_button_confirm->SetSize(wxSize(FromDIP(72), FromDIP(24))); - m_button_confirm->SetMinSize(wxSize(FromDIP(72), FromDIP(24))); - m_button_confirm->SetCornerRadius(FromDIP(12)); - - - m_button_confirm->Bind(wxEVT_LEFT_DOWN, [this](auto& e) { - Dismiss(); - }); - Bind(wxEVT_LEFT_UP, [this](auto& e) { + + auto rect = ClientToScreen(wxPoint(0, 0)); + + auto close_left = rect.x + GetSize().x - close_img.GetBmpWidth() - FromDIP(38); + auto close_right = close_left + close_img.GetBmpWidth(); + auto close_top = rect.y + FromDIP(24); + auto close_bottom = close_top + close_img.GetBmpHeight(); + auto mouse_pos = ClientToScreen(e.GetPosition()); - auto rect = m_button_confirm->ClientToScreen(wxPoint(0, 0)); - if (mouse_pos.x > rect.x && mouse_pos.y > rect.y - && mouse_pos.x < (rect.x + m_button_confirm->GetSize().x) - && mouse_pos.y < (rect.y + m_button_confirm->GetSize().y)) + if (mouse_pos.x > close_left + && mouse_pos.y > close_top + && mouse_pos.x < close_right + && mouse_pos.y < close_bottom + ) { Dismiss(); } - }); - main_sizer->Add(m_button_confirm, 0, wxALIGN_CENTER | wxALL, 0); - - - main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, 18); - + }); + main_sizer->Add(0, 0, 0, wxTOP, FromDIP(24)); + main_sizer->Add(m_staticText, 0, wxALIGN_CENTER, 0); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(28)); + main_sizer->Add(curr_humidity_img, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(35)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(15)); + main_sizer->Add(humidity_level_list, 0, wxALIGN_CENTER|wxLEFT|wxRIGHT, FromDIP(35)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(6)); + main_sizer->Add(m_staticText_note, 0, wxALIGN_CENTER, 0); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(5)); + main_sizer->Add(0, 0, 0, wxEXPAND | wxTOP, FromDIP(25)); SetSizer(main_sizer); Layout(); Fit(); @@ -906,9 +860,7 @@ AmsHumidityTipPopup::AmsHumidityTipPopup(wxWindow* parent) void AmsHumidityTipPopup::paintEvent(wxPaintEvent& evt) { wxPaintDC dc(this); - dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); - dc.SetBrush(*wxTRANSPARENT_BRUSH); - dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); + render(dc); } void AmsHumidityTipPopup::OnDismiss() {} @@ -917,6 +869,50 @@ bool AmsHumidityTipPopup::ProcessLeftDown(wxMouseEvent& event) { return PopupWindow::ProcessLeftDown(event); } +void AmsHumidityTipPopup::set_humidity_level(int level) +{ + current_humidity_level = level; + if (current_humidity_level<= 0) {return;} + + std::string mode_string = wxGetApp().dark_mode()?"_dark":"_light"; + + curr_humidity_img->SetBitmap(create_scaled_bitmap("hum_level" + std::to_string(current_humidity_level) + mode_string, this, FromDIP(132))); + curr_humidity_img->Refresh(); + curr_humidity_img->Update(); +} + +void AmsHumidityTipPopup::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void AmsHumidityTipPopup::doRender(wxDC& dc) +{ + //close + dc.DrawBitmap(close_img.bmp(), GetSize().x - close_img.GetBmpWidth() - FromDIP(38), FromDIP(24)); + + //background + dc.SetPen(wxColour(0xAC, 0xAC, 0xAC)); + dc.SetBrush(*wxTRANSPARENT_BRUSH); + dc.DrawRoundedRectangle(0, 0, GetSize().x, GetSize().y, 0); +} + AmsTutorialPopup::AmsTutorialPopup(wxWindow* parent) :PopupWindow(parent, wxBORDER_NONE) { @@ -1590,4 +1586,93 @@ void AmsRMGroup::doRender(wxDC& dc) dc.DrawText(m_group_index, (size.x - text_size.x) / 2, (size.y - text_size.y) / 2 + FromDIP(10)); } +AmsHumidityLevelList::AmsHumidityLevelList(wxWindow* parent) + : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize) +{ +#ifdef __WINDOWS__ + SetDoubleBuffered(true); +#endif //__WINDOWS__ + + SetSize(wxSize(FromDIP(680), FromDIP(104))); + SetMinSize(wxSize(FromDIP(680), FromDIP(104))); + SetMaxSize(wxSize(FromDIP(680), FromDIP(104))); + SetBackgroundColour(*wxWHITE); + + background_img = ScalableBitmap(this, "humidity_list_background", FromDIP(104)); + + for (int i = 1; i <= 5; i++) { + hum_level_img_light.push_back(ScalableBitmap(this, ("hum_level" + std::to_string(i) + "_light"), FromDIP(54))); + } + + for (int i = 1; i <= 5; i++) { + hum_level_img_dark.push_back(ScalableBitmap(this, ("hum_level" + std::to_string(i) + "_dark"), FromDIP(54))); + } + + Bind(wxEVT_PAINT, &AmsHumidityLevelList::paintEvent, this); + wxGetApp().UpdateDarkUI(this); +} + +void AmsHumidityLevelList::msw_rescale() +{ + +} + +void AmsHumidityLevelList::paintEvent(wxPaintEvent& evt) +{ + wxPaintDC dc(this); + render(dc); +} + +void AmsHumidityLevelList::render(wxDC& dc) +{ +#ifdef __WXMSW__ + wxSize size = GetSize(); + wxMemoryDC memdc; + wxBitmap bmp(size.x, size.y); + memdc.SelectObject(bmp); + memdc.Blit({ 0, 0 }, size, &dc, { 0, 0 }); + + { + wxGCDC dc2(memdc); + doRender(dc2); + } + + memdc.SelectObject(wxNullBitmap); + dc.DrawBitmap(bmp, 0, 0); +#else + doRender(dc); +#endif +} + +void AmsHumidityLevelList::doRender(wxDC& dc) +{ + dc.DrawBitmap(background_img.bmp(), 0,0); + + auto width_center = GetSize().x / 2; + auto left = width_center - FromDIP(27) - FromDIP(46) * 2 - FromDIP(54) * 2; + + + //dry / wet + dc.SetTextForeground(wxColour(0x989898)); + dc.SetFont(::Label::Head_20); + + auto font_top = GetSize().y - dc.GetTextExtent(_L("DRY")).GetHeight(); + dc.DrawText(_L("DRY"), wxPoint(FromDIP(38), font_top / 2)); + dc.DrawText(_L("WET"), wxPoint(( GetSize().x - FromDIP(38) - dc.GetTextExtent(_L("DRY")).GetWidth()), font_top / 2)); + + + //level list + + for (int i = 0; i < hum_level_img_light.size(); i++) { + if (wxGetApp().dark_mode()) { + dc.DrawBitmap(hum_level_img_dark[i].bmp(), left, (GetSize().y - FromDIP(54)) / 2); + } + else { + dc.DrawBitmap(hum_level_img_light[i].bmp(), left, (GetSize().y - FromDIP(54)) / 2); + } + + left += FromDIP(46) + FromDIP(54); + } +} + }} // namespace Slic3r::GUI diff --git a/src/slic3r/GUI/AmsMappingPopup.hpp b/src/slic3r/GUI/AmsMappingPopup.hpp index acfc8cd3e..c5170b006 100644 --- a/src/slic3r/GUI/AmsMappingPopup.hpp +++ b/src/slic3r/GUI/AmsMappingPopup.hpp @@ -185,6 +185,33 @@ public: wxStaticText * m_tip_disable_ams; }; +class AmsHumidityLevelList : public wxPanel +{ +public: + AmsHumidityLevelList(wxWindow* parent); + ~AmsHumidityLevelList() {}; + + ScalableBitmap background_img; + ScalableBitmap hum_level1_img; + ScalableBitmap hum_level2_img; + ScalableBitmap hum_level3_img; + ScalableBitmap hum_level4_img; + + std::vector hum_level_img_light; + std::vector hum_level_img_dark; + + wxStaticBitmap* hum_level1_bitmap; + wxStaticBitmap* hum_level2_bitmap; + wxStaticBitmap* hum_level3_bitmap; + wxStaticBitmap* hum_level4_bitmap; + wxStaticBitmap* hum_level5_bitmap; + + void msw_rescale(); + void paintEvent(wxPaintEvent& evt); + void render(wxDC& dc); + void doRender(wxDC& dc); +}; + class AmsHumidityTipPopup : public PopupWindow { public: @@ -195,14 +222,19 @@ public: virtual void OnDismiss() wxOVERRIDE; virtual bool ProcessLeftDown(wxMouseEvent& event) wxOVERRIDE; + void set_humidity_level(int level); + void render(wxDC& dc); + void doRender(wxDC& dc); + public: + int current_humidity_level; + + ScalableBitmap close_img; + wxStaticBitmap* curr_humidity_img; + AmsHumidityLevelList* humidity_level_list{nullptr}; wxStaticBitmap* m_img; - Label* m_staticText1; - Label* m_staticText2; - Label* m_staticText3; - Label* m_staticText4; + Label* m_staticText;; Label* m_staticText_note; - Button* m_button_confirm; }; class AmsTutorialPopup : public PopupWindow diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index f170d9fed..94a183bf6 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -1388,11 +1388,13 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_NONE_ANY_ROAD; } - ams_humidity_0 = ScalableBitmap(this, "ams_humidity_0", 20); - ams_humidity_1 = ScalableBitmap(this, "ams_humidity_1", 20); - ams_humidity_2 = ScalableBitmap(this, "ams_humidity_2", 20); - ams_humidity_3 = ScalableBitmap(this, "ams_humidity_3", 20); - ams_humidity_4 = ScalableBitmap(this, "ams_humidity_4", 20); + for (int i = 1; i <= 5; i++) { + ams_humidity_img.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_light", FromDIP(32))); + } + + for (int i = 1; i <= 5; i++) { + ams_humidity_img.push_back(ScalableBitmap(this, "hum_level" + std::to_string(i) + "_dark", FromDIP(32))); + } create(parent, id, pos, size); Bind(wxEVT_PAINT, &AMSRoad::paintEvent, this); @@ -1403,8 +1405,8 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in auto mouse_pos = ClientToScreen(e.GetPosition()); auto rect = ClientToScreen(wxPoint(0, 0)); - if (mouse_pos.x > rect.x + GetSize().x - FromDIP(25) && - mouse_pos.y > rect.y + GetSize().y - FromDIP(25)) { + if (mouse_pos.x > rect.x + GetSize().x - FromDIP(40) && + mouse_pos.y > rect.y + GetSize().y - FromDIP(40)) { wxCommandEvent show_event(EVT_AMS_SHOW_HUMIDITY_TIPS); wxPostEvent(GetParent()->GetParent(), show_event); @@ -1565,24 +1567,15 @@ void AMSRoad::doRender(wxDC &dc) if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) {m_show_humidity = true;} else {m_show_humidity = false;} - if (m_amsinfo.ams_humidity == 5) { - dc.DrawBitmap(ams_humidity_4.bmp(), wxPoint(size.x - ams_humidity_4.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_4.GetBmpSize().y - FromDIP(8))); - } - else if (m_amsinfo.ams_humidity == 4) { - dc.DrawBitmap(ams_humidity_3.bmp(), wxPoint(size.x - ams_humidity_3.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_3.GetBmpSize().y - FromDIP(8))); - } - else if (m_amsinfo.ams_humidity == 3) { - - dc.DrawBitmap(ams_humidity_2.bmp(), wxPoint(size.x - ams_humidity_2.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_2.GetBmpSize().y - FromDIP(8))); - } - else if (m_amsinfo.ams_humidity == 2) { - dc.DrawBitmap(ams_humidity_1.bmp(), wxPoint(size.x - ams_humidity_1.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_1.GetBmpSize().y - FromDIP(8))); - } - else if (m_amsinfo.ams_humidity == 1) { - dc.DrawBitmap(ams_humidity_0.bmp(), wxPoint(size.x - ams_humidity_0.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_0.GetBmpSize().y - FromDIP(8))); + if (m_amsinfo.ams_humidity >= 1 && m_amsinfo.ams_humidity <= 5) { + + int hum_index = m_amsinfo.ams_humidity - 1; + if (wxGetApp().dark_mode()) { + hum_index += 5; + } + dc.DrawBitmap(ams_humidity_img[hum_index].bmp(), wxPoint(size.x - FromDIP(28), size.y - FromDIP(35))); } else { - /*dc.DrawBitmap(ams_humidity_4.bmp(), wxPoint(size.x - ams_humidity_4.GetBmpSize().x - FromDIP(4), size.y - ams_humidity_4.GetBmpSize().y - FromDIP(8)));*/ //to do ... } } @@ -2904,8 +2897,11 @@ AMSControl::AMSControl(wxWindow *parent, wxWindowID id, const wxPoint &pos, cons Bind(EVT_AMS_SHOW_HUMIDITY_TIPS, [this](wxCommandEvent& evt) { wxPoint img_pos = ClientToScreen(wxPoint(0, 0)); - wxPoint popup_pos(img_pos.x - m_Humidity_tip_popup.GetSize().GetWidth() + FromDIP(150), img_pos.y); + wxPoint popup_pos(img_pos.x - m_Humidity_tip_popup.GetSize().GetWidth() + FromDIP(150), img_pos.y - FromDIP(80)); m_Humidity_tip_popup.Position(popup_pos, wxSize(0, 0)); + if (m_ams_info.size() > 0) { + m_Humidity_tip_popup.set_humidity_level(m_ams_info[0].ams_humidity); + } m_Humidity_tip_popup.Popup(); }); @@ -3481,7 +3477,6 @@ void AMSControl::SwitchAms(std::string ams_id) } else { item->amsItem->UnSelected(); - //item->amsItem->HideHumidity(); } m_sizer_top->Layout(); m_panel_top->Fit(); diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 411eff71d..6d018053e 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -383,11 +383,7 @@ public: wxColour m_road_color; void Update(AMSinfo amsinfo, Caninfo info, int canindex, int maxcan); - ScalableBitmap ams_humidity_0; - ScalableBitmap ams_humidity_1; - ScalableBitmap ams_humidity_2; - ScalableBitmap ams_humidity_3; - ScalableBitmap ams_humidity_4; + std::vector ams_humidity_img; int m_humidity = { 0 };