FIX:fixed fan control will close after operation

Change-Id: Ic512dd7838bc843dc71f4bc75bdf719443b98124
This commit is contained in:
tao wang 2023-02-22 20:00:52 +08:00 committed by Lane.Wei
parent 0846c6b9fe
commit eefe65321f
2 changed files with 45 additions and 36 deletions

View file

@ -45,44 +45,26 @@ void Fan::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSi
//auto m_bitmap_pointer = ScalableBitmap(this, "fan_pointer", FromDIP(25)); //auto m_bitmap_pointer = ScalableBitmap(this, "fan_pointer", FromDIP(25));
//m_img_pointer = m_bitmap_pointer.bmp().ConvertToImage(); //m_img_pointer = m_bitmap_pointer.bmp().ConvertToImage();
/*m_bitmap_scale_0 = ScalableBitmap(this, "fan_dash_board_level_0", FromDIP(13));
m_bitmap_scale_1 = ScalableBitmap(this, "fan_dash_board_level_1", FromDIP(13));
m_bitmap_scale_2 = ScalableBitmap(this, "fan_dash_board_level_2", FromDIP(13));
m_bitmap_scale_3 = ScalableBitmap(this, "fan_dash_board_level_3", FromDIP(10));
m_bitmap_scale_4 = ScalableBitmap(this, "fan_dash_board_level_4", FromDIP(5));
m_bitmap_scale_5 = ScalableBitmap(this, "fan_dash_board_level_5", FromDIP(5));
m_bitmap_scale_6 = ScalableBitmap(this, "fan_dash_board_level_6", FromDIP(10));
m_bitmap_scale_7 = ScalableBitmap(this, "fan_dash_board_level_7", FromDIP(13));
m_bitmap_scale_8 = ScalableBitmap(this, "fan_dash_board_level_8", FromDIP(13));
m_bitmap_scale_9 = ScalableBitmap(this, "fan_dash_board_level_9", FromDIP(13));*/
m_bitmap_bk = ScalableBitmap(this, "fan_dash_bk", FromDIP(80)); m_bitmap_bk = ScalableBitmap(this, "fan_dash_bk", FromDIP(80));
for (auto i = 0; i <= 10; i++) { for (auto i = 0; i <= 10; i++) {
auto a = wxString::Format("fan_scale_%d", i); #ifdef __APPLE__
auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), FromDIP(60));
m_bitmap_scales.push_back(m_bitmap_scale);
#else
auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), FromDIP(46)); auto m_bitmap_scale = ScalableBitmap(this, wxString::Format("fan_scale_%d", i).ToStdString(), FromDIP(46));
m_bitmap_scales.push_back(m_bitmap_scale); m_bitmap_scales.push_back(m_bitmap_scale);
#endif
} }
/* m_bitmap_scale_0 = ScalableBitmap(this, "fan_scale_0", FromDIP(60)); //#ifdef __APPLE__
m_bitmap_scale_1 = ScalableBitmap(this, "fan_scale_1", FromDIP(60)); // SetMinSize(wxSize(FromDIP(100), FromDIP(100) + FromDIP(6)));
m_bitmap_scale_2 = ScalableBitmap(this, "fan_scale_2", FromDIP(60)); // SetMaxSize(wxSize(FromDIP(100), FromDIP(100) + FromDIP(6)));
m_bitmap_scale_3 = ScalableBitmap(this, "fan_scale_3", FromDIP(60)); //#else
m_bitmap_scale_4 = ScalableBitmap(this, "fan_scale_4", FromDIP(60));
m_bitmap_scale_5 = ScalableBitmap(this, "fan_scale_5", FromDIP(60));
m_bitmap_scale_6 = ScalableBitmap(this, "fan_scale_6", FromDIP(60));
m_bitmap_scale_7 = ScalableBitmap(this, "fan_scale_7", FromDIP(60));
m_bitmap_scale_8 = ScalableBitmap(this, "fan_scale_8", FromDIP(60));
m_bitmap_scale_9 = ScalableBitmap(this, "fan_scale_9", FromDIP(60));
m_bitmap_scale_10 = ScalableBitmap(this, "fan_scale_10", FromDIP(60));*/
#ifdef __APPLE__
SetMinSize(wxSize(FromDIP(94), FromDIP(81) + FromDIP(6)));
SetMaxSize(wxSize(FromDIP(94), FromDIP(81) + FromDIP(6)));
#else
SetMinSize(wxSize(m_bitmap_bk.GetBmpSize().x, m_bitmap_bk.GetBmpSize().y + FromDIP(6))); SetMinSize(wxSize(m_bitmap_bk.GetBmpSize().x, m_bitmap_bk.GetBmpSize().y + FromDIP(6)));
SetMaxSize(wxSize(m_bitmap_bk.GetBmpSize().x, m_bitmap_bk.GetBmpSize().y + FromDIP(6))); SetMaxSize(wxSize(m_bitmap_bk.GetBmpSize().x, m_bitmap_bk.GetBmpSize().y + FromDIP(6)));
#endif // __APPLE__ //#endif // __APPLE__
Bind(wxEVT_PAINT, &Fan::paintEvent, this); Bind(wxEVT_PAINT, &Fan::paintEvent, this);
} }
@ -412,15 +394,16 @@ void FanControl::command_control_fan()
{ {
if (m_current_speed < 0 || m_current_speed > 10) { return; } if (m_current_speed < 0 || m_current_speed > 10) { return; }
int speed = floor(m_current_speed * float(25.5)); int speed = floor(m_current_speed * float(25.5));
m_obj->command_control_fan_val(m_type, speed); if (m_update_already) {
post_event(wxCommandEvent(EVT_FAN_CHANGED)); m_obj->command_control_fan_val(m_type, speed);
post_event(wxCommandEvent(EVT_FAN_CHANGED));
}
} }
void FanControl::on_swith_fan(wxMouseEvent& evt) void FanControl::on_swith_fan(wxMouseEvent& evt)
{ {
int speed = 0; int speed = 0;
if (m_switch_fan) { if (m_switch_fan) {
speed = 0;
m_switch_button->SetBitmap(m_bitmap_toggle_off->bmp()); m_switch_button->SetBitmap(m_bitmap_toggle_off->bmp());
m_switch_fan = false; m_switch_fan = false;
} }
@ -428,7 +411,7 @@ void FanControl::on_swith_fan(wxMouseEvent& evt)
speed = 255; speed = 255;
m_switch_button->SetBitmap(m_bitmap_toggle_on->bmp()); m_switch_button->SetBitmap(m_bitmap_toggle_on->bmp());
m_switch_fan = true; m_switch_fan = true;
} }
set_fan_speed(speed); set_fan_speed(speed);
command_control_fan(); command_control_fan();
@ -447,6 +430,7 @@ void FanControl::on_swith_fan(bool on)
void FanControl::set_machine_obj(MachineObject* obj) void FanControl::set_machine_obj(MachineObject* obj)
{ {
m_update_already = true;
m_obj = obj; m_obj = obj;
} }
@ -543,6 +527,9 @@ FanControlPopup::FanControlPopup(wxWindow* parent)
Bind(wxEVT_LEFT_DOWN, &FanControlPopup::on_left_down, this); Bind(wxEVT_LEFT_DOWN, &FanControlPopup::on_left_down, this);
#endif #endif
#ifdef __WXOSX__
Bind(wxEVT_IDLE, [](wxIdleEvent& evt) {});
#endif
Bind(wxEVT_SHOW, &FanControlPopup::on_show, this); Bind(wxEVT_SHOW, &FanControlPopup::on_show, this);
SetBackgroundColour(*wxWHITE); SetBackgroundColour(*wxWHITE);
@ -596,7 +583,25 @@ void FanControlPopup::update_fan_data(MachineObject::FanType type, MachineObject
void FanControlPopup::on_left_down(wxMouseEvent& evt) void FanControlPopup::on_left_down(wxMouseEvent& evt)
{ {
auto mouse_pos = ClientToScreen(evt.GetPosition()); auto mouse_pos = ClientToScreen(evt.GetPosition());
auto win_pos = m_part_fan->m_switch_button->ClientToScreen(wxPoint(0, 0));
auto size = m_part_fan->m_switch_button->GetSize();
if (mouse_pos.x > win_pos.x && mouse_pos.x < (win_pos.x + m_part_fan->m_switch_button->GetSize().x) && mouse_pos.y > win_pos.y && mouse_pos.y < (win_pos.y + m_part_fan->m_switch_button->GetSize().y)) {
m_part_fan->on_swith_fan(evt);
}
win_pos = m_aux_fan->m_switch_button->ClientToScreen(wxPoint(0, 0));
size = m_aux_fan->m_switch_button->GetSize();
if (mouse_pos.x > win_pos.x && mouse_pos.x < (win_pos.x + m_aux_fan->m_switch_button->GetSize().x) && mouse_pos.y > win_pos.y && mouse_pos.y < (win_pos.y + m_aux_fan->m_switch_button->GetSize().y)) {
m_aux_fan->on_swith_fan(evt);
}
win_pos = m_cham_fan->m_switch_button->ClientToScreen(wxPoint(0, 0));
size = m_cham_fan->m_switch_button->GetSize();
if (mouse_pos.x > win_pos.x && mouse_pos.x < (win_pos.x + m_cham_fan->m_switch_button->GetSize().x) && mouse_pos.y > win_pos.y && mouse_pos.y < (win_pos.y + m_cham_fan->m_switch_button->GetSize().y)) {
m_cham_fan->on_swith_fan(evt);
}
auto part_tag_pos = m_part_fan->ScreenToClient(mouse_pos); auto part_tag_pos = m_part_fan->ScreenToClient(mouse_pos);
evt.SetPosition(part_tag_pos); evt.SetPosition(part_tag_pos);
m_part_fan->on_left_down(evt); m_part_fan->on_left_down(evt);
@ -613,7 +618,9 @@ void FanControlPopup::on_left_down(wxMouseEvent& evt)
void FanControlPopup::OnDismiss() void FanControlPopup::OnDismiss()
{ {
m_part_fan->update_obj_state(false);
m_aux_fan->update_obj_state(false);
m_cham_fan->update_obj_state(false);
} }
void FanControlPopup::post_event(int fan_type, wxString speed) void FanControlPopup::post_event(int fan_type, wxString speed)

View file

@ -113,15 +113,17 @@ protected:
MachineObject::FanType m_type; MachineObject::FanType m_type;
MachineObject* m_obj; MachineObject* m_obj;
wxStaticText* m_static_name{ nullptr }; wxStaticText* m_static_name{ nullptr };
wxStaticBitmap* m_switch_button{ nullptr };
ScalableBitmap* m_bitmap_toggle_off{ nullptr }; ScalableBitmap* m_bitmap_toggle_off{ nullptr };
ScalableBitmap* m_bitmap_toggle_on{ nullptr }; ScalableBitmap* m_bitmap_toggle_on{ nullptr };
Fan* m_fan{ nullptr }; Fan* m_fan{ nullptr };
FanOperate* m_fan_operate{ nullptr }; FanOperate* m_fan_operate{ nullptr };
bool m_switch_fan{ false }; bool m_switch_fan{ false };
bool m_update_already{false};
int m_current_speed{0}; int m_current_speed{0};
public: public:
wxStaticBitmap* m_switch_button{ nullptr };
void update_obj_state(bool stat) {m_update_already = stat;};
void command_control_fan(); void command_control_fan();
void set_machine_obj(MachineObject* obj); void set_machine_obj(MachineObject* obj);
void set_type(MachineObject::FanType type); void set_type(MachineObject::FanType type);