diff --git a/src/slic3r/GUI/CameraPopup.cpp b/src/slic3r/GUI/CameraPopup.cpp index ed1c89ad5e..93c034bd23 100644 --- a/src/slic3r/GUI/CameraPopup.cpp +++ b/src/slic3r/GUI/CameraPopup.cpp @@ -133,7 +133,6 @@ void CameraPopup::on_switch_timelapse(wxCommandEvent& event) return; } bool value = m_switch_timelapse->GetValue(); - m_switch_timelapse->SetValue(!value); m_obj->command_ipcam_timelapse(!value); } @@ -145,7 +144,6 @@ void CameraPopup::on_switch_recording(wxCommandEvent& event) return; } bool value = m_switch_recording->GetValue(); - m_switch_recording->SetValue(!value); m_obj->command_ipcam_record(!value); } @@ -301,7 +299,6 @@ void CameraPopup::check_func_supported() void CameraPopup::update() { if (!m_obj) return; - check_func_supported(); m_switch_timelapse->SetValue(m_obj->camera_timelapse); m_switch_recording->SetValue(m_obj->camera_recording_when_printing); sync_resolution_setting(m_obj->camera_resolution); diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 13459b1ade..af5f52de51 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1605,6 +1605,7 @@ int MachineObject::command_ipcam_record(bool on_off) j["camera"]["command"] = "ipcam_record_set"; j["camera"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["camera"]["control"] = on_off ? "enable" : "disable"; + camera_recording_hold_count = HOLD_COUNT_MAX; return this->publish_json(j.dump()); } @@ -1614,6 +1615,7 @@ int MachineObject::command_ipcam_timelapse(bool on_off) j["camera"]["command"] = "ipcam_timelapse"; j["camera"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["camera"]["control"] = on_off ? "enable" : "disable"; + camera_timelapse_hold_count = HOLD_COUNT_MAX; return this->publish_json(j.dump()); } @@ -1624,6 +1626,8 @@ int MachineObject::command_ipcam_resolution_set(std::string resolution) j["camera"]["sequence_id"] = std::to_string(MachineObject::m_sequence_id++); j["camera"]["resolution"] = resolution; BOOST_LOG_TRIVIAL(info) << "command:ipcam_resolution_set" << ", resolution:" << resolution; + camera_resolution_hold_count = HOLD_COUNT_MAX; + camera_recording_hold_count = HOLD_COUNT_MAX; return this->publish_json(j.dump()); } @@ -2375,19 +2379,27 @@ int MachineObject::parse_json(std::string payload) try { if (jj.contains("ipcam")) { if (jj["ipcam"].contains("ipcam_record")) { - if (jj["ipcam"]["ipcam_record"].get() == "enable") { - camera_recording_when_printing = true; - } + if (camera_recording_hold_count > 0) + camera_recording_hold_count--; else { - camera_recording_when_printing = false; + if (jj["ipcam"]["ipcam_record"].get() == "enable") { + camera_recording_when_printing = true; + } + else { + camera_recording_when_printing = false; + } } } if (jj["ipcam"].contains("timelapse")) { - if (jj["ipcam"]["timelapse"].get() == "enable") { - camera_timelapse = true; - } + if (camera_timelapse_hold_count > 0) + camera_timelapse_hold_count--; else { - camera_timelapse = false; + if (jj["ipcam"]["timelapse"].get() == "enable") { + camera_timelapse = true; + } + else { + camera_timelapse = false; + } } } if (jj["ipcam"].contains("ipcam_dev")) { @@ -2398,7 +2410,11 @@ int MachineObject::parse_json(std::string payload) } } if (jj["ipcam"].contains("resolution")) { - camera_resolution = jj["ipcam"]["resolution"].get(); + if (camera_resolution_hold_count > 0) + camera_resolution_hold_count--; + else { + camera_resolution = jj["ipcam"]["resolution"].get(); + } } } } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index 47feb664dd..61e3f5a7dd 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -539,6 +539,9 @@ public: bool camera_recording { false }; bool camera_recording_when_printing { false }; bool camera_timelapse { false }; + int camera_recording_hold_count = 0; + int camera_timelapse_hold_count = 0; + int camera_resolution_hold_count = 0; std::string camera_resolution = ""; bool xcam_first_layer_inspector { false }; int xcam_first_layer_hold_count = 0; diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index 1ebceeb852..12bd7f629e 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -275,7 +275,7 @@ void MediaPlayCtrl::ToggleStream() std::string file_ff_cfg = data_dir() + "/cameratools/ffmpeg.cfg"; #endif if (!boost::filesystem::exists(file_source) || !boost::filesystem::exists(file_ffmpeg) || !boost::filesystem::exists(file_ff_cfg)) { - auto res = MessageDialog(this, _L("Virtual Camera Tools is required for this task!\nDo you want to install them?"), _L("Info"), + auto res = MessageDialog(this->GetParent(), _L("Virtual Camera Tools is required for this task!\nDo you want to install them?"), _L("Info"), wxOK | wxCANCEL).ShowModal(); if (res == wxID_OK) { // download tools @@ -321,7 +321,7 @@ void MediaPlayCtrl::ToggleStream() process_ffmpeg.detach(); } if (!url.empty() && wxGetApp().app_config->get("not_show_vcamera_stop_prev") != "1") { - MessageDialog dlg(this, _L("Another virtual camera is running.\nBambu Studio supports only a single virtual camera.\nDo you want to stop this virtual camera?"), _L("Warning"), + MessageDialog dlg(this->GetParent(), _L("Another virtual camera is running.\nBambu Studio supports only a single virtual camera.\nDo you want to stop this virtual camera?"), _L("Warning"), wxYES | wxCANCEL | wxICON_INFORMATION); dlg.show_dsa_button(); auto res = dlg.ShowModal(); @@ -336,7 +336,7 @@ void MediaPlayCtrl::ToggleStream() CallAfter([this, m, url] { if (m != m_machine) return; if (url.empty() || !boost::algorithm::starts_with(url, "bambu:///")) { - MessageDialog(this, wxString::Format(_L("Virtual camera initialize failed (%s)!"), url.empty() ? _L("Network unreachable") : from_u8(url)), _L("Information"), + MessageDialog(this->GetParent(), wxString::Format(_L("Virtual camera initialize failed (%s)!"), url.empty() ? _L("Network unreachable") : from_u8(url)), _L("Information"), wxICON_INFORMATION) .ShowModal(); return;