ENH: page faults when device page idle

jira: [none]
Change-Id: I4dc95ae6332b81e571fb5ef09c75dcf01e77170e
(cherry picked from commit cefe973772c7f7045713470d61cc85221574d9c5)
This commit is contained in:
xin.zhang
2025-09-19 18:02:08 +08:00
committed by Noisyfox
parent 16a6138263
commit 420bdc8907
9 changed files with 91 additions and 40 deletions

View File

@@ -1004,7 +1004,7 @@ void PrintingTaskPanel::show_error_msg(wxString msg)
void PrintingTaskPanel::reset_printing_value() void PrintingTaskPanel::reset_printing_value()
{ {
this->set_thumbnail_img(m_thumbnail_placeholder.bmp()); this->set_thumbnail_img(m_thumbnail_placeholder.bmp(), m_thumbnail_placeholder.name());
this->set_plate_index(-1); this->set_plate_index(-1);
} }
@@ -1182,8 +1182,15 @@ void PrintingTaskPanel::show_profile_info(bool show, wxString profile /*= wxEmpt
} }
} }
void PrintingTaskPanel::set_thumbnail_img(const wxBitmap& bmp) // the API will buff the bmp and bmp_name
// when bmp_name is empty, the API will replace the image on force
void PrintingTaskPanel::set_thumbnail_img(const wxBitmap& bmp, const std::string& bmp_name)
{ {
if (!bmp_name.empty() && m_thumbnail_bmp_display_name == bmp_name) {
return;
}
m_thumbnail_bmp_display_name = bmp_name;
m_thumbnail_bmp_display = bmp; m_thumbnail_bmp_display = bmp;
Refresh(); Refresh();
} }
@@ -2156,7 +2163,6 @@ void StatusBasePanel::show_ams_group(bool show)
m_ams_control->Fit(); m_ams_control->Fit();
Layout(); Layout();
Fit(); Fit();
wxGetApp().mainframe->m_monitor->get_status_panel()->Layout();
wxGetApp().mainframe->m_monitor->Layout(); wxGetApp().mainframe->m_monitor->Layout();
} }
@@ -2166,7 +2172,6 @@ void StatusBasePanel::show_ams_group(bool show)
m_ams_control->Fit(); m_ams_control->Fit();
Layout(); Layout();
Fit(); Fit();
wxGetApp().mainframe->m_monitor->get_status_panel()->Layout();
wxGetApp().mainframe->m_monitor->Layout(); wxGetApp().mainframe->m_monitor->Layout();
} }
} }
@@ -2217,6 +2222,7 @@ void StatusPanel::update_camera_state(MachineObject* obj)
m_bitmap_sdcard_img->SetToolTip(_L("Storage")); m_bitmap_sdcard_img->SetToolTip(_L("Storage"));
} }
m_last_sdcard = sdcard_state; m_last_sdcard = sdcard_state;
m_panel_monitoring_title->Layout();
} }
//recording //recording
@@ -2229,8 +2235,11 @@ void StatusPanel::update_camera_state(MachineObject* obj)
} }
m_last_recording = obj->is_recording() ? 1 : 0; m_last_recording = obj->is_recording() ? 1 : 0;
} }
if (!m_bitmap_recording_img->IsShown())
if (!m_bitmap_recording_img->IsShown()) {
m_bitmap_recording_img->Show(); m_bitmap_recording_img->Show();
m_panel_monitoring_title->Layout();
}
/*if (m_bitmap_recording_img->IsShown()) /*if (m_bitmap_recording_img->IsShown())
m_bitmap_recording_img->Hide();*/ m_bitmap_recording_img->Hide();*/
@@ -2245,11 +2254,16 @@ void StatusPanel::update_camera_state(MachineObject* obj)
} }
m_last_timelapse = obj->is_timelapse() ? 1 : 0; m_last_timelapse = obj->is_timelapse() ? 1 : 0;
} }
if (!m_bitmap_timelapse_img->IsShown())
if (!m_bitmap_timelapse_img->IsShown()) {
m_bitmap_timelapse_img->Show(); m_bitmap_timelapse_img->Show();
m_panel_monitoring_title->Layout();
}
} else { } else {
if (m_bitmap_timelapse_img->IsShown()) if (m_bitmap_timelapse_img->IsShown()) {
m_bitmap_timelapse_img->Hide(); m_bitmap_timelapse_img->Hide();
m_panel_monitoring_title->Layout();
}
} }
//vcamera //vcamera
@@ -2262,11 +2276,16 @@ void StatusPanel::update_camera_state(MachineObject* obj)
} }
m_last_vcamera = m_media_play_ctrl->IsStreaming() ? 1 : 0; m_last_vcamera = m_media_play_ctrl->IsStreaming() ? 1 : 0;
} }
if (!m_bitmap_vcamera_img->IsShown())
if (!m_bitmap_vcamera_img->IsShown()) {
m_bitmap_vcamera_img->Show(); m_bitmap_vcamera_img->Show();
m_panel_monitoring_title->Layout();
}
} else { } else {
if (m_bitmap_vcamera_img->IsShown()) if (m_bitmap_vcamera_img->IsShown()) {
m_bitmap_vcamera_img->Hide(); m_bitmap_vcamera_img->Hide();
m_panel_monitoring_title->Layout();
}
} }
//camera setting //camera setting
@@ -2274,8 +2293,6 @@ void StatusPanel::update_camera_state(MachineObject* obj)
bool show_vcamera = m_media_play_ctrl->IsStreaming(); bool show_vcamera = m_media_play_ctrl->IsStreaming();
m_camera_popup->update(show_vcamera); m_camera_popup->update(show_vcamera);
} }
m_panel_monitoring_title->Layout();
} }
StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style, const wxString &name) StatusPanel::StatusPanel(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size, long style, const wxString &name)
@@ -2614,7 +2631,7 @@ void StatusPanel::on_webrequest_state(wxWebRequestEvent &evt)
wxImage img(*evt.GetResponse().GetStream()); wxImage img(*evt.GetResponse().GetStream());
img_list.insert(std::make_pair(m_request_url, img)); img_list.insert(std::make_pair(m_request_url, img));
wxImage resize_img = img.Scale(m_project_task_panel->get_bitmap_thumbnail()->GetSize().x, m_project_task_panel->get_bitmap_thumbnail()->GetSize().y, wxIMAGE_QUALITY_HIGH); wxImage resize_img = img.Scale(m_project_task_panel->get_bitmap_thumbnail()->GetSize().x, m_project_task_panel->get_bitmap_thumbnail()->GetSize().y, wxIMAGE_QUALITY_HIGH);
m_project_task_panel->set_thumbnail_img(resize_img); m_project_task_panel->set_thumbnail_img(resize_img, "");
m_project_task_panel->set_brightness_value(get_brightness_value(resize_img)); m_project_task_panel->set_brightness_value(get_brightness_value(resize_img));
} }
if (obj) { if (obj) {
@@ -2628,7 +2645,7 @@ void StatusPanel::on_webrequest_state(wxWebRequestEvent &evt)
case wxWebRequest::State_Failed: case wxWebRequest::State_Failed:
case wxWebRequest::State_Cancelled: case wxWebRequest::State_Cancelled:
case wxWebRequest::State_Unauthorized: { case wxWebRequest::State_Unauthorized: {
m_project_task_panel->set_thumbnail_img(m_thumbnail_brokenimg.bmp()); m_project_task_panel->set_thumbnail_img(m_thumbnail_brokenimg.bmp(), m_thumbnail_brokenimg.name());
m_project_task_panel->set_plate_index(-1); m_project_task_panel->set_plate_index(-1);
task_thumbnail_state = ThumbnailState::BROKEN_IMG; task_thumbnail_state = ThumbnailState::BROKEN_IMG;
break; break;
@@ -2787,7 +2804,6 @@ void StatusPanel::update(MachineObject *obj)
if (m_panel_control_title) { if (m_panel_control_title) {
m_panel_control_title->Layout(); m_panel_control_title->Layout();
m_panel_control_title->Refresh();
} }
if (!obj->dev_connection_type.empty()) { if (!obj->dev_connection_type.empty()) {
@@ -3620,7 +3636,7 @@ void StatusPanel::update_subtask(MachineObject *obj)
} }
} }
if (calib_bitmap != nullptr) if (calib_bitmap != nullptr)
m_project_task_panel->set_thumbnail_img(*calib_bitmap); m_project_task_panel->set_thumbnail_img(*calib_bitmap, "");
} }
m_project_task_panel->show_layers_num(obj->is_support_layer_num); m_project_task_panel->show_layers_num(obj->is_support_layer_num);
@@ -3760,8 +3776,6 @@ void StatusPanel::update_subtask(MachineObject *obj)
} else { } else {
reset_printing_values(); reset_printing_values();
} }
Layout();
} }
void StatusPanel::update_partskip_subtask(MachineObject *obj){ void StatusPanel::update_partskip_subtask(MachineObject *obj){
@@ -3818,7 +3832,7 @@ void StatusPanel::update_cloud_subtask(MachineObject *obj)
if (m_current_print_mode != PrintingTaskType::CALIBRATION ||(m_calib_mode == CalibMode::Calib_Flow_Rate && m_calib_method == CalibrationMethod::CALI_METHOD_MANUAL)) { if (m_current_print_mode != PrintingTaskType::CALIBRATION ||(m_calib_mode == CalibMode::Calib_Flow_Rate && m_calib_method == CalibrationMethod::CALI_METHOD_MANUAL)) {
img = it->second; img = it->second;
wxImage resize_img = img.Scale(m_project_task_panel->get_bitmap_thumbnail()->GetSize().x, m_project_task_panel->get_bitmap_thumbnail()->GetSize().y); wxImage resize_img = img.Scale(m_project_task_panel->get_bitmap_thumbnail()->GetSize().x, m_project_task_panel->get_bitmap_thumbnail()->GetSize().y);
m_project_task_panel->set_thumbnail_img(resize_img); m_project_task_panel->set_thumbnail_img(resize_img, "");
m_project_task_panel->set_brightness_value(get_brightness_value(resize_img)); m_project_task_panel->set_brightness_value(get_brightness_value(resize_img));
} }
if (this->obj) { if (this->obj) {
@@ -3847,7 +3861,7 @@ void StatusPanel::update_sdcard_subtask(MachineObject *obj)
update_calib_bitmap(); update_calib_bitmap();
if (m_current_print_mode != PrintingTaskType::CALIBRATION) { if (m_current_print_mode != PrintingTaskType::CALIBRATION) {
m_project_task_panel->get_bitmap_thumbnail()->SetBitmap(m_thumbnail_sdcard.bmp()); m_project_task_panel->get_bitmap_thumbnail()->SetBitmap(m_thumbnail_sdcard.bmp());
m_project_task_panel->set_thumbnail_img(m_thumbnail_sdcard.bmp()); m_project_task_panel->set_thumbnail_img(m_thumbnail_sdcard.bmp(), m_thumbnail_sdcard.name());
} }
task_thumbnail_state = ThumbnailState::SDCARD_THUMBNAIL; task_thumbnail_state = ThumbnailState::SDCARD_THUMBNAIL;
m_load_sdcard_thumbnail = true; m_load_sdcard_thumbnail = true;

View File

@@ -264,6 +264,7 @@ public:
private: private:
MachineObject* m_obj{nullptr}; MachineObject* m_obj{nullptr};
ScalableBitmap m_thumbnail_placeholder; ScalableBitmap m_thumbnail_placeholder;
std::string m_thumbnail_bmp_display_name;
wxBitmap m_thumbnail_bmp_display; wxBitmap m_thumbnail_bmp_display;
ScalableBitmap m_bitmap_use_time; ScalableBitmap m_bitmap_use_time;
ScalableBitmap m_bitmap_use_weight; ScalableBitmap m_bitmap_use_weight;
@@ -336,7 +337,7 @@ public:
void update_layers_num(bool show, wxString num = wxEmptyString); void update_layers_num(bool show, wxString num = wxEmptyString);
void show_priting_use_info(bool show, wxString time = wxEmptyString, wxString weight = wxEmptyString); void show_priting_use_info(bool show, wxString time = wxEmptyString, wxString weight = wxEmptyString);
void show_profile_info(bool show, wxString profile = wxEmptyString); void show_profile_info(bool show, wxString profile = wxEmptyString);
void set_thumbnail_img(const wxBitmap& bmp); void set_thumbnail_img(const wxBitmap& bmp, const std::string& bmp_name);
void set_brightness_value(int value) { m_brightness_value = value; } void set_brightness_value(int value) { m_brightness_value = value; }
void set_plate_index(int plate_idx = -1); void set_plate_index(int plate_idx = -1);
void market_scoring_show(); void market_scoring_show();

View File

@@ -63,9 +63,11 @@ bool Button::Create(wxWindow* parent, wxString text, wxString icon, long style,
void Button::SetLabel(const wxString& label) void Button::SetLabel(const wxString& label)
{ {
wxWindow::SetLabel(label); if (label != wxWindow::GetLabel()) {
messureSize(); wxWindow::SetLabel(label);
Refresh(); messureSize();
Refresh();
}
} }
bool Button::SetFont(const wxFont& font) bool Button::SetFont(const wxFont& font)

View File

@@ -31,8 +31,10 @@ CheckBox::CheckBox(wxWindow *parent, int id)
void CheckBox::SetValue(bool value) void CheckBox::SetValue(bool value)
{ {
wxBitmapToggleButton::SetValue(value); if (wxBitmapToggleButton::GetValue() != value) {
update(); wxBitmapToggleButton::SetValue(value);
update();
}
} }
void CheckBox::SetHalfChecked(bool value) void CheckBox::SetHalfChecked(bool value)

View File

@@ -51,6 +51,16 @@ public:
// single color // single color
StateColor(unsigned long color); StateColor(unsigned long color);
// operator==
bool operator==(StateColor const& other) const{
return statesList_ == other.statesList_ && colors_ == other.colors_ && takeFocusedAsHovered_ == other.takeFocusedAsHovered_;
};
// operator!=
bool operator!=(StateColor const& other) const{
return !(*this == other);
};
public: public:
void append(wxColour const & color, int states); void append(wxColour const & color, int states);

View File

@@ -66,9 +66,11 @@ void StaticBox::SetBorderWidth(int width)
void StaticBox::SetBorderColor(StateColor const &color) void StaticBox::SetBorderColor(StateColor const &color)
{ {
border_color = color; if (border_color != color) {
state_handler.update_binds(); border_color = color;
Refresh(); state_handler.update_binds();
Refresh();
}
} }
void StaticBox::SetBorderColorNormal(wxColor const &color) void StaticBox::SetBorderColorNormal(wxColor const &color)
@@ -118,11 +120,13 @@ wxColor StaticBox::GetParentBackgroundColor(wxWindow* parent)
void StaticBox::ShowBadge(bool show) void StaticBox::ShowBadge(bool show)
{ {
if (show) if (show && badge.name() != "badge") {
badge = ScalableBitmap(this, "badge", 18); badge = ScalableBitmap(this, "badge", 18);
else Refresh();
} else if (!show && !badge.name().empty()) {
badge = ScalableBitmap {}; badge = ScalableBitmap {};
Refresh(); Refresh();
}
} }
void StaticBox::eraseEvent(wxEraseEvent& evt) void StaticBox::eraseEvent(wxEraseEvent& evt)

View File

@@ -9,11 +9,13 @@ StaticGroup::StaticGroup(wxWindow *parent, wxWindowID id, const wxString &label)
void StaticGroup::ShowBadge(bool show) void StaticGroup::ShowBadge(bool show)
{ {
if (show) if (show && badge.name() != "badge") {
badge = ScalableBitmap(this, "badge", 18); badge = ScalableBitmap(this, "badge", 18);
else Refresh();
} else if (!show && !badge.name().empty()) {
badge = ScalableBitmap{}; badge = ScalableBitmap{};
Refresh(); Refresh();
}
} }
void StaticGroup::DrawBorderAndLabel(wxDC& dc) void StaticGroup::DrawBorderAndLabel(wxDC& dc)

View File

@@ -51,9 +51,11 @@ void StepCtrlBase::SelectItem(int item)
void StepCtrlBase::Idle() void StepCtrlBase::Idle()
{ {
step = -1; if (step != -1) {
sendStepCtrlEvent(); step = -1;
Refresh(); sendStepCtrlEvent();
Refresh();
}
} }
bool StepCtrlBase::SetTipFont(wxFont const& font) bool StepCtrlBase::SetTipFont(wxFont const& font)

View File

@@ -62,9 +62,10 @@ void SwitchButton::SetThumbColor(StateColor const& color)
void SwitchButton::SetValue(bool value) void SwitchButton::SetValue(bool value)
{ {
if (value != GetValue()) if (value != GetValue()) {
wxBitmapToggleButton::SetValue(value); wxBitmapToggleButton::SetValue(value);
update(); update();
}
} }
bool SwitchButton::SetBackgroundColour(const wxColour& colour) bool SwitchButton::SetBackgroundColour(const wxColour& colour)
@@ -212,17 +213,30 @@ SwitchBoard::SwitchBoard(wxWindow *parent, wxString leftL, wxString right, wxSiz
void SwitchBoard::updateState(wxString target) void SwitchBoard::updateState(wxString target)
{ {
if (target.empty()) { if (target.empty()) {
if (!switch_left && !switch_right) {
return;
}
switch_left = false; switch_left = false;
switch_right = false; switch_right = false;
} else { } else {
if (target == "left") { if (target == "left") {
if (switch_left && !switch_right) {
return;
}
switch_left = true; switch_left = true;
switch_right = false; switch_right = false;
} else if (target == "right") { } else if (target == "right") {
if (!switch_left && switch_right) {
return;
}
switch_left = false; switch_left = false;
switch_right = true; switch_right = true;
} }
} }
Refresh(); Refresh();
} }