From 58dab90e534170c0e03571caf5c2259ecc3022e3 Mon Sep 17 00:00:00 2001 From: Stone Li Date: Fri, 9 Dec 2022 16:46:51 +0800 Subject: [PATCH] ENH: refine camera status and settings Change-Id: I2a8c23ca119ff5d38272dad46347704bf457dee0 Signed-off-by: Stone Li --- resources/images/monitor_recording_off.svg | 6 + resources/images/monitor_recording_on.svg | 7 + resources/images/monitor_timelapse_off.svg | 8 + resources/images/monitor_timelapse_on.svg | 9 ++ resources/images/monitor_vcamera_off.svg | 8 + resources/images/monitor_vcamera_on.svg | 8 + resources/images/recording.svg | 6 - resources/images/sdcard_state_no.svg | 10 ++ ...d_state_on.svg => sdcard_state_normal.svg} | 0 resources/images/timelapse.svg | 15 -- resources/images/vcamera.svg | 8 - src/slic3r/GUI/CameraPopup.cpp | 3 +- src/slic3r/GUI/CameraPopup.hpp | 2 +- src/slic3r/GUI/DeviceManager.cpp | 2 +- src/slic3r/GUI/DeviceManager.hpp | 2 +- src/slic3r/GUI/StatusPanel.cpp | 148 +++++++++++------- src/slic3r/GUI/StatusPanel.hpp | 24 ++- 17 files changed, 172 insertions(+), 94 deletions(-) create mode 100644 resources/images/monitor_recording_off.svg create mode 100644 resources/images/monitor_recording_on.svg create mode 100644 resources/images/monitor_timelapse_off.svg create mode 100644 resources/images/monitor_timelapse_on.svg create mode 100644 resources/images/monitor_vcamera_off.svg create mode 100644 resources/images/monitor_vcamera_on.svg delete mode 100644 resources/images/recording.svg create mode 100644 resources/images/sdcard_state_no.svg rename resources/images/{sdcard_state_on.svg => sdcard_state_normal.svg} (100%) delete mode 100644 resources/images/timelapse.svg delete mode 100644 resources/images/vcamera.svg diff --git a/resources/images/monitor_recording_off.svg b/resources/images/monitor_recording_off.svg new file mode 100644 index 000000000..0ec26d469 --- /dev/null +++ b/resources/images/monitor_recording_off.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/resources/images/monitor_recording_on.svg b/resources/images/monitor_recording_on.svg new file mode 100644 index 000000000..ed153d126 --- /dev/null +++ b/resources/images/monitor_recording_on.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/resources/images/monitor_timelapse_off.svg b/resources/images/monitor_timelapse_off.svg new file mode 100644 index 000000000..bfe6407f0 --- /dev/null +++ b/resources/images/monitor_timelapse_off.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/monitor_timelapse_on.svg b/resources/images/monitor_timelapse_on.svg new file mode 100644 index 000000000..5e1a44a7c --- /dev/null +++ b/resources/images/monitor_timelapse_on.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/resources/images/monitor_vcamera_off.svg b/resources/images/monitor_vcamera_off.svg new file mode 100644 index 000000000..1119224ef --- /dev/null +++ b/resources/images/monitor_vcamera_off.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/monitor_vcamera_on.svg b/resources/images/monitor_vcamera_on.svg new file mode 100644 index 000000000..be03d5239 --- /dev/null +++ b/resources/images/monitor_vcamera_on.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/resources/images/recording.svg b/resources/images/recording.svg deleted file mode 100644 index 76a7a59ef..000000000 --- a/resources/images/recording.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/resources/images/sdcard_state_no.svg b/resources/images/sdcard_state_no.svg new file mode 100644 index 000000000..6b1770140 --- /dev/null +++ b/resources/images/sdcard_state_no.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/resources/images/sdcard_state_on.svg b/resources/images/sdcard_state_normal.svg similarity index 100% rename from resources/images/sdcard_state_on.svg rename to resources/images/sdcard_state_normal.svg diff --git a/resources/images/timelapse.svg b/resources/images/timelapse.svg deleted file mode 100644 index 52548b05f..000000000 --- a/resources/images/timelapse.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/resources/images/vcamera.svg b/resources/images/vcamera.svg deleted file mode 100644 index e72c5dc76..000000000 --- a/resources/images/vcamera.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index fd3e28ce9..3beb03e9c 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -269,11 +269,12 @@ void CameraPopup::check_func_supported() } } -void CameraPopup::update() +void CameraPopup::update(bool vcamera_streaming) { if (!m_obj) return; m_switch_recording->SetValue(m_obj->camera_recording_when_printing); sync_resolution_setting(m_obj->camera_resolution); + sync_vcamera_state(vcamera_streaming); rescale(); } diff --git a/src/slic3r/GUI/CameraPopup.hpp b/src/slic3r/GUI/CameraPopup.hpp index 55c9c905f..f5a7833c9 100644 --- a/src/slic3r/GUI/CameraPopup.hpp +++ b/src/slic3r/GUI/CameraPopup.hpp @@ -34,7 +34,7 @@ public: void sync_vcamera_state(bool show_vcamera); void check_func_supported(); - void update(); + void update(bool vcamera_streaming); enum CameraResolution { diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 248cb1d19..5c26ecd5d 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1229,7 +1229,7 @@ MachineObject::SdcardState MachineObject::get_sdcard_state() return sdcard_state; } -bool MachineObject::has_timelapse() +bool MachineObject::is_timelapse() { return camera_timelapse; } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 1f1c91eb7..ef0f02877 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -606,7 +606,7 @@ public: std::string subtask_name; bool is_sdcard_printing(); bool has_sdcard(); - bool has_timelapse(); + bool is_timelapse(); bool is_recording_enable(); bool is_recording(); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index bbc972ef2..4ce3307b5 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -187,11 +187,15 @@ void StatusBasePanel::init_bitmaps() m_bitmap_extruder_filled_load = *cache.load_png("monitor_extruder_filled_load", FromDIP(28), FromDIP(70), false, false); m_bitmap_extruder_empty_unload = *cache.load_png("monitor_extruder_empty_unload", FromDIP(28), FromDIP(70), false, false); m_bitmap_extruder_filled_unload = *cache.load_png("monitor_extruder_filled_unload", FromDIP(28), FromDIP(70), false, false); - m_bitmap_sdcard_state_on = create_scaled_bitmap("sdcard_state_on", nullptr, 20); + m_bitmap_sdcard_state_no = create_scaled_bitmap("sdcard_state_no", nullptr, 20); m_bitmap_sdcard_state_abnormal = create_scaled_bitmap("sdcard_state_abnormal", nullptr, 20); - m_bitmap_recording = create_scaled_bitmap("recording", nullptr, 20); - m_bitmap_timelapse = create_scaled_bitmap("timelapse", nullptr, 20); - m_bitmap_vcamera = create_scaled_bitmap("vcamera", nullptr, 20); + m_bitmap_sdcard_state_normal = create_scaled_bitmap("sdcard_state_normal", nullptr, 20); + m_bitmap_recording_on = create_scaled_bitmap("monitor_recording_on", nullptr, 20); + m_bitmap_recording_off = create_scaled_bitmap("monitor_recording_off", nullptr, 20); + m_bitmap_timelapse_on = create_scaled_bitmap("monitor_timelapse_on", nullptr, 20); + m_bitmap_timelapse_off = create_scaled_bitmap("monitor_timelapse_off", nullptr, 20); + m_bitmap_vcamera_on = create_scaled_bitmap("monitor_vcamera_on", nullptr, 20); + m_bitmap_vcamera_off = create_scaled_bitmap("monitor_vcamera_off", nullptr, 20); } wxBoxSizer *StatusBasePanel::create_monitoring_page() @@ -228,22 +232,18 @@ wxBoxSizer *StatusBasePanel::create_monitoring_page() //m_bitmap_camera_img->SetMinSize(wxSize(FromDIP(32), FromDIP(18))); //bSizer_monitoring_title->Add(m_bitmap_camera_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - m_bitmap_sdcard_abnormal_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_sdcard_state_abnormal, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); - m_bitmap_sdcard_abnormal_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); - m_bitmap_sdcard_on_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_sdcard_state_on, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); - m_bitmap_sdcard_on_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); - m_bitmap_sdcard_on_img->Hide(); - m_bitmap_sdcard_abnormal_img->Hide(); + m_bitmap_sdcard_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); + m_bitmap_sdcard_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); - m_bitmap_timelapse_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_timelapse, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); + m_bitmap_timelapse_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); m_bitmap_timelapse_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); m_bitmap_timelapse_img->Hide(); - m_bitmap_recording_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_recording, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); + m_bitmap_recording_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); m_bitmap_recording_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); m_bitmap_timelapse_img->Hide(); - m_bitmap_vcamera_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, m_bitmap_vcamera, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); + m_bitmap_vcamera_img = new wxStaticBitmap(m_panel_monitoring_title, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxSize(FromDIP(38), FromDIP(24)), 0); m_bitmap_vcamera_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); m_bitmap_vcamera_img->Hide(); @@ -251,15 +251,13 @@ wxBoxSizer *StatusBasePanel::create_monitoring_page() m_setting_button->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); m_setting_button->SetBackgroundColour(STATUS_TITLE_BG); - m_bitmap_sdcard_on_img->SetToolTip(_L("SD Card")); - m_bitmap_sdcard_abnormal_img->SetToolTip(_L("SD Card Abnormal")); + m_bitmap_sdcard_img->SetToolTip(_L("SD Card")); m_bitmap_timelapse_img->SetToolTip(_L("Timelapse")); m_bitmap_recording_img->SetToolTip(_L("Video")); m_bitmap_vcamera_img->SetToolTip(_L("Virtual Camera")); m_setting_button->SetToolTip(_L("Camera Setting")); - bSizer_monitoring_title->Add(m_bitmap_sdcard_abnormal_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); - bSizer_monitoring_title->Add(m_bitmap_sdcard_on_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); + bSizer_monitoring_title->Add(m_bitmap_sdcard_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); bSizer_monitoring_title->Add(m_bitmap_timelapse_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); bSizer_monitoring_title->Add(m_bitmap_recording_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); bSizer_monitoring_title->Add(m_bitmap_vcamera_img, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5)); @@ -1041,45 +1039,86 @@ void StatusBasePanel::show_ams_group(bool show) m_show_ams_group = show; } -void StatusPanel::update_img_status(wxStaticBitmap* img, bool on_off) +void StatusPanel::update_camera_state(MachineObject* obj) { - if (on_off) - img->Show(); - else - img->Hide(); -} + if (!obj) return; -void StatusPanel::update_camera_state(bool recording, bool timelapse, MachineObject::SdcardState sdcard_state) -{ + //m_bitmap_sdcard_abnormal_img->SetToolTip(_L("SD Card Abnormal")); //sdcard - switch (sdcard_state) { - case MachineObject::SdcardState::NO_SDCARD: - m_bitmap_sdcard_on_img->Hide(); - m_bitmap_sdcard_abnormal_img->Hide(); - break; - case MachineObject::SdcardState::HAS_SDCARD_NORMAL: - m_bitmap_sdcard_on_img->Show(); - m_bitmap_sdcard_abnormal_img->Hide(); - break; - case MachineObject::SdcardState::HAS_SDCARD_ABNORMAL: - m_bitmap_sdcard_on_img->Hide(); - m_bitmap_sdcard_abnormal_img->Show(); - break; - default: - ; + if (m_last_sdcard != (int)obj->get_sdcard_state()) { + if (obj->get_sdcard_state() == MachineObject::SdcardState::NO_SDCARD) { + m_bitmap_sdcard_img->SetBitmap(m_bitmap_sdcard_state_no); + m_bitmap_sdcard_img->SetToolTip(_L("No SD Card")); + } else if (obj->get_sdcard_state() == MachineObject::SdcardState::HAS_SDCARD_NORMAL) { + m_bitmap_sdcard_img->SetBitmap(m_bitmap_sdcard_state_normal); + m_bitmap_sdcard_img->SetToolTip(_L("SD Card")); + } else if (obj->get_sdcard_state() == MachineObject::SdcardState::HAS_SDCARD_ABNORMAL) { + m_bitmap_sdcard_img->SetBitmap(m_bitmap_sdcard_state_abnormal); + m_bitmap_sdcard_img->SetToolTip(_L("SD Card Abnormal")); + } else { + m_bitmap_sdcard_img->SetBitmap(m_bitmap_sdcard_state_normal); + m_bitmap_sdcard_img->SetToolTip(_L("SD Card")); + } + m_last_sdcard = (int)obj->get_sdcard_state(); } + //recording - update_img_status(m_bitmap_recording_img, recording); + if (obj->is_function_supported(PrinterFunction::FUNC_RECORDING)) { + if (m_last_recording != (obj->is_recording() ? 1: 0)) { + if (obj->is_recording()) { + m_bitmap_recording_img->SetBitmap(m_bitmap_recording_on); + } else { + m_bitmap_recording_img->SetBitmap(m_bitmap_recording_off); + } + m_last_recording = obj->is_recording() ? 1 : 0; + } + if (!m_bitmap_recording_img->IsShown()) + m_bitmap_recording_img->Show(); + } else { + if (m_bitmap_recording_img->IsShown()) + m_bitmap_recording_img->Hide(); + } + //timelapse - update_img_status(m_bitmap_timelapse_img, timelapse); + if (obj->is_function_supported(PrinterFunction::FUNC_TIMELAPSE)) { + if (m_last_timelapse != (obj->is_timelapse() ? 1: 0)) { + if (obj->is_timelapse()) { + m_bitmap_timelapse_img->SetBitmap(m_bitmap_timelapse_on); + } else { + m_bitmap_timelapse_img->SetBitmap(m_bitmap_timelapse_off); + } + m_last_timelapse = obj->is_timelapse() ? 1 : 0; + } + if (!m_bitmap_timelapse_img->IsShown()) + m_bitmap_timelapse_img->Show(); + } else { + if (m_bitmap_timelapse_img->IsShown()) + m_bitmap_timelapse_img->Hide(); + } + //vcamera - update_img_status(m_bitmap_vcamera_img, m_media_play_ctrl->IsStreaming()); - show_vcamera = m_media_play_ctrl->IsStreaming(); + if (obj->is_function_supported(PrinterFunction::FUNC_VIRTUAL_CAMERA)) { + if (m_last_vcamera != (m_media_play_ctrl->IsStreaming() ? 1: 0)) { + if (m_media_play_ctrl->IsStreaming()) { + m_bitmap_vcamera_img->SetBitmap(m_bitmap_vcamera_on); + } else { + m_bitmap_vcamera_img->SetBitmap(m_bitmap_vcamera_off); + } + m_last_vcamera = m_media_play_ctrl->IsStreaming() ? 1 : 0; + } + if (!m_bitmap_vcamera_img->IsShown()) + m_bitmap_vcamera_img->Show(); + } else { + if (m_bitmap_vcamera_img->IsShown()) + m_bitmap_vcamera_img->Hide(); + } + //camera setting if (m_camera_popup) { - m_camera_popup->update(); - m_camera_popup->sync_vcamera_state(show_vcamera); + bool show_vcamera = m_media_play_ctrl->IsStreaming(); + m_camera_popup->update(show_vcamera); } + m_panel_monitoring_title->Layout(); } @@ -1455,7 +1494,7 @@ void StatusPanel::update(MachineObject *obj) update_error_message(); } - update_camera_state(obj->is_recording_enable(), obj->has_timelapse(), obj->get_sdcard_state()); + update_camera_state(obj); m_machine_ctrl_panel->Thaw(); } @@ -1684,16 +1723,19 @@ void StatusPanel::update_extruder_status(MachineObject* obj) { if (!obj) return; if (obj->is_filament_at_extruder()) { - if (obj->extruder_axis_status == MachineObject::ExtruderAxisStatus::LOAD) + if (obj->extruder_axis_status == MachineObject::ExtruderAxisStatus::LOAD) { m_bitmap_extruder_img->SetBitmap(m_bitmap_extruder_filled_load); - else + } + else { m_bitmap_extruder_img->SetBitmap(m_bitmap_extruder_filled_unload); + } } else { - if (obj->extruder_axis_status == MachineObject::ExtruderAxisStatus::LOAD) + if (obj->extruder_axis_status == MachineObject::ExtruderAxisStatus::LOAD) { m_bitmap_extruder_img->SetBitmap(m_bitmap_extruder_empty_load); - else + } else { m_bitmap_extruder_img->SetBitmap(m_bitmap_extruder_empty_unload); + } } } @@ -2677,6 +2719,7 @@ void StatusPanel::on_camera_enter(wxMouseEvent& event) wxPoint pos = ctrl->ClientToScreen(wxPoint(0, 0)); wxSize sz = ctrl->GetSize(); m_camera_popup->Position(pos, wxSize(sz.x, sz.y)); + m_camera_popup->update(m_media_play_ctrl->IsStreaming()); m_camera_popup->Popup(); } } @@ -2846,8 +2889,7 @@ void StatusPanel::msw_rescale() m_bitmap_recording_img->SetMinSize(wxSize(38, 24)); m_bitmap_vcamera_img->SetMinSize(wxSize(38, 24)); m_setting_button->SetMinSize(wxSize(38, 24)); - m_bitmap_sdcard_abnormal_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); - m_bitmap_sdcard_on_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); + m_bitmap_sdcard_img->SetMinSize(wxSize(FromDIP(38), FromDIP(24))); m_bpButton_xy->Rescale(); m_tempCtrl_nozzle->SetMinSize(TEMP_CTRL_MIN_SIZE); diff --git a/src/slic3r/GUI/StatusPanel.hpp b/src/slic3r/GUI/StatusPanel.hpp index 85ea8a7b5..716767231 100644 --- a/src/slic3r/GUI/StatusPanel.hpp +++ b/src/slic3r/GUI/StatusPanel.hpp @@ -94,11 +94,15 @@ protected: CameraItem *m_setting_button; wxBitmap m_bitmap_camera; - wxBitmap m_bitmap_sdcard_state_on; + wxBitmap m_bitmap_sdcard_state_normal; wxBitmap m_bitmap_sdcard_state_abnormal; - wxBitmap m_bitmap_recording; - wxBitmap m_bitmap_timelapse; - wxBitmap m_bitmap_vcamera; + wxBitmap m_bitmap_sdcard_state_no; + wxBitmap m_bitmap_recording_on; + wxBitmap m_bitmap_recording_off; + wxBitmap m_bitmap_timelapse_on; + wxBitmap m_bitmap_timelapse_off; + wxBitmap m_bitmap_vcamera_on; + wxBitmap m_bitmap_vcamera_off; /* title panel */ wxPanel * media_ctrl_panel; @@ -116,8 +120,7 @@ protected: wxStaticBitmap *m_bitmap_recording_img; wxStaticBitmap *m_bitmap_timelapse_img; wxStaticBitmap* m_bitmap_vcamera_img; - wxStaticBitmap *m_bitmap_sdcard_on_img; - wxStaticBitmap *m_bitmap_sdcard_abnormal_img; + wxStaticBitmap *m_bitmap_sdcard_img; wxStaticBitmap *m_bitmap_static_use_time; wxStaticBitmap *m_bitmap_static_use_weight; @@ -268,6 +271,12 @@ protected: wxString m_request_url; bool m_start_loading_thumbnail = false; bool m_load_sdcard_thumbnail = false; + int m_last_sdcard = -1; + int m_last_recording = -1; + int m_last_timelapse = -1; + int m_last_extrusion = -1; + int m_last_vcamera = -1; + wxWebRequest web_request; bool bed_temp_input = false; bool nozzle_temp_input = false; @@ -363,8 +372,7 @@ protected: bool is_task_changed(MachineObject* obj); /* camera */ - void update_camera_state(bool recording, bool timelapse, MachineObject::SdcardState sdcard_state); - void update_img_status(wxStaticBitmap* img, bool on_off); + void update_camera_state(MachineObject* obj); bool show_vcamera = false; public: