mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2026-02-24 21:35:03 -07:00
193 lines
No EOL
6.3 KiB
C++
193 lines
No EOL
6.3 KiB
C++
//**********************************************************/
|
|
/* File: uiAmsHumidityPopup.cpp
|
|
* Description: The popup with DevAms Humidity
|
|
*
|
|
* \n class uiAmsHumidityPopup
|
|
//**********************************************************/
|
|
|
|
#include "uiAmsHumidityPopup.h"
|
|
|
|
#include "slic3r/Utils/WxFontUtils.hpp"
|
|
|
|
#include "slic3r/GUI/GUI_App.hpp"
|
|
#include "slic3r/GUI/I18N.hpp"
|
|
#include "slic3r/GUI/Widgets/StateColor.hpp"
|
|
|
|
|
|
#include <wx/dcgraph.h>
|
|
#include <wx/grid.h>
|
|
|
|
namespace Slic3r { namespace GUI {
|
|
|
|
uiAmsPercentHumidityDryPopup::uiAmsPercentHumidityDryPopup(wxWindow *parent)
|
|
: wxDialog(parent, wxID_ANY, "")
|
|
{
|
|
Create();
|
|
wxGetApp().UpdateDlgDarkUI(this);
|
|
}
|
|
|
|
void uiAmsPercentHumidityDryPopup::Create()
|
|
{
|
|
// create images
|
|
idle_img = ScalableBitmap(this, "ams_drying", 16);
|
|
drying_img = ScalableBitmap(this, "ams_is_drying", 16);
|
|
|
|
// background
|
|
SetBackgroundColour(*wxWHITE);
|
|
|
|
// create title sizer
|
|
wxSizer* title_sizer = new wxBoxSizer(wxHORIZONTAL);
|
|
|
|
Label* title = new Label(this, _L("Current AMS humidity"));
|
|
title->SetForegroundColour(*wxBLACK);
|
|
title->SetBackgroundColour(*wxWHITE);
|
|
title->SetFont(Label::Head_18);
|
|
|
|
title_sizer->AddStretchSpacer();
|
|
title_sizer->Add(title, 0);
|
|
title_sizer->AddStretchSpacer();
|
|
|
|
// create humidity image
|
|
m_humidity_img = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap);
|
|
|
|
// create dry state sizer
|
|
wxGridSizer* dry_state_sizer = new wxGridSizer(2, FromDIP(5), FromDIP(5));
|
|
m_dry_state_img = new wxStaticBitmap(this, wxID_ANY, wxNullBitmap);
|
|
m_dry_state_img->SetMinSize(wxSize(FromDIP(16), FromDIP(16)));
|
|
m_dry_state_img->SetMaxSize(wxSize(FromDIP(16), FromDIP(16)));
|
|
m_dry_state = new Label(this);
|
|
m_dry_state->SetForegroundColour(*wxBLACK);
|
|
m_dry_state->SetBackgroundColour(*wxWHITE);
|
|
m_dry_state->SetFont(Label::Body_14);
|
|
dry_state_sizer->Add(m_dry_state_img, 1, wxALIGN_RIGHT);
|
|
dry_state_sizer->Add(m_dry_state, 1, wxALIGN_LEFT);
|
|
|
|
// create table grid sizer
|
|
wxGridSizer* grid_sizer = new wxGridSizer(2, 3, FromDIP(10), FromDIP(10));
|
|
m_humidity_header = new Label(this, _L("Humidity"));
|
|
m_temperature_header = new Label(this, _L("Temperature"));
|
|
left_dry_time_header = new Label(this, _L("Left Time"));
|
|
m_humidity_label = new Label(this);
|
|
m_temperature_label = new Label(this);
|
|
left_dry_time_label = new Label(this);
|
|
|
|
grid_sizer->Add(m_humidity_header, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL);
|
|
grid_sizer->Add(m_temperature_header, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL);
|
|
grid_sizer->Add(left_dry_time_header, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL);
|
|
grid_sizer->Add(m_humidity_label, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL);
|
|
grid_sizer->Add(m_temperature_label, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL);
|
|
grid_sizer->Add(left_dry_time_label, 0, wxALIGN_CENTER_HORIZONTAL | wxALIGN_CENTER_VERTICAL);
|
|
|
|
// complete main sizer
|
|
m_sizer = new wxBoxSizer(wxVERTICAL);
|
|
m_sizer->AddSpacer(FromDIP(10));
|
|
m_sizer->Add(title_sizer, 1, wxEXPAND | wxHORIZONTAL);
|
|
m_sizer->Add(m_humidity_img, 1, wxALIGN_CENTER_HORIZONTAL, 0);
|
|
m_sizer->AddSpacer(FromDIP(10));
|
|
m_sizer->Add(dry_state_sizer, 1 ,wxEXPAND | wxHORIZONTAL);
|
|
m_sizer->Add(grid_sizer, 1, wxEXPAND | wxHORIZONTAL, FromDIP(15));
|
|
m_sizer->AddSpacer(FromDIP(10));
|
|
SetSizer(m_sizer);
|
|
|
|
SetSize(wxSize(FromDIP(400), FromDIP(270)));
|
|
SetMinSize(wxSize(FromDIP(400), FromDIP(270)));
|
|
SetMaxSize(wxSize(FromDIP(400), FromDIP(270)));
|
|
|
|
Fit();
|
|
Layout();
|
|
Refresh();
|
|
}
|
|
|
|
void uiAmsPercentHumidityDryPopup::Update(int humidiy_level, int humidity_percent, int left_dry_time, float current_temperature)
|
|
{
|
|
if (m_humidity_level != humidiy_level || m_humidity_percent != humidity_percent ||
|
|
m_left_dry_time != left_dry_time || m_current_temperature != current_temperature)
|
|
{
|
|
m_humidity_level = humidiy_level;
|
|
m_humidity_percent = humidity_percent;
|
|
m_left_dry_time = left_dry_time;
|
|
m_current_temperature = current_temperature;
|
|
|
|
UpdateContents();
|
|
}
|
|
}
|
|
|
|
void uiAmsPercentHumidityDryPopup::UpdateContents()
|
|
{
|
|
// humitidy image
|
|
if (0 < m_humidity_level && m_humidity_level < 6)
|
|
{
|
|
ScalableBitmap humitidy_image;
|
|
if (wxGetApp().dark_mode())
|
|
{
|
|
humitidy_image = ScalableBitmap(this, "hum_level" + std::to_string(m_humidity_level) + "_no_num_light", 64);
|
|
}
|
|
else
|
|
{
|
|
humitidy_image = ScalableBitmap(this, "hum_level" + std::to_string(m_humidity_level) + "_no_num_light", 64);
|
|
}
|
|
|
|
m_humidity_img->SetBitmap(humitidy_image.bmp());
|
|
}
|
|
|
|
// dry state
|
|
if (m_left_dry_time > 0)
|
|
{
|
|
m_dry_state_img->SetBitmap(drying_img.bmp());
|
|
m_dry_state->SetLabel(_L("Drying"));
|
|
m_dry_state->Fit();
|
|
}
|
|
else
|
|
{
|
|
m_dry_state_img->SetBitmap(idle_img.bmp());
|
|
m_dry_state->SetLabel(_L("Idle"));
|
|
m_dry_state->Fit();
|
|
}
|
|
|
|
// table grid
|
|
const wxString& humidity_str = wxString::Format("%d%%", m_humidity_percent);
|
|
m_humidity_label->SetLabel(humidity_str);
|
|
const wxString& temp_str = wxString::Format(_L("%d \u2103"), (int)std::round(m_current_temperature));
|
|
m_temperature_label->SetLabel(temp_str);
|
|
|
|
if (m_left_dry_time > 0)
|
|
{
|
|
wxString display_hour_str;
|
|
int left_hours = m_left_dry_time / 60;
|
|
if (left_hours < 10) {
|
|
display_hour_str = wxString::Format("0%d", left_hours);
|
|
} else {
|
|
display_hour_str = wxString::Format("%d", left_hours);
|
|
}
|
|
|
|
wxString display_min_str;
|
|
int left_minutes = m_left_dry_time % 60;
|
|
if (left_minutes < 10) {
|
|
display_min_str = wxString::Format("0%d", left_minutes);
|
|
} else {
|
|
display_min_str = wxString::Format("%d", left_minutes);
|
|
}
|
|
|
|
const wxString& time_str = wxString::Format("%s : %s", display_hour_str, display_min_str);
|
|
left_dry_time_label->SetLabel(time_str);
|
|
}
|
|
else
|
|
{
|
|
left_dry_time_label->SetLabel(_L("Idle"));
|
|
}
|
|
|
|
Fit();
|
|
Layout();
|
|
Refresh();
|
|
}
|
|
|
|
void uiAmsPercentHumidityDryPopup::msw_rescale()
|
|
{
|
|
idle_img.msw_rescale();
|
|
drying_img.msw_rescale();
|
|
UpdateContents();
|
|
}
|
|
|
|
} // namespace GUI
|
|
|
|
} // namespace Slic3r
|