DeviceCaptureToolbar.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "DeviceCaptureToolbar.hpp"
  2. #include "ui_device-select-toolbar.h"
  3. #include "moc_DeviceCaptureToolbar.cpp"
  4. DeviceCaptureToolbar::DeviceCaptureToolbar(QWidget *parent, OBSSource source)
  5. : QWidget(parent),
  6. weakSource(OBSGetWeakRef(source)),
  7. ui(new Ui_DeviceSelectToolbar)
  8. {
  9. ui->setupUi(this);
  10. delete ui->deviceLabel;
  11. delete ui->device;
  12. ui->deviceLabel = nullptr;
  13. ui->device = nullptr;
  14. OBSDataAutoRelease settings = obs_source_get_settings(source);
  15. active = obs_data_get_bool(settings, "active");
  16. obs_module_t *mod = obs_get_module("win-dshow");
  17. if (!mod)
  18. return;
  19. activateText = obs_module_get_locale_text(mod, "Activate");
  20. deactivateText = obs_module_get_locale_text(mod, "Deactivate");
  21. ui->activateButton->setText(active ? deactivateText : activateText);
  22. }
  23. DeviceCaptureToolbar::~DeviceCaptureToolbar() {}
  24. void DeviceCaptureToolbar::on_activateButton_clicked()
  25. {
  26. OBSSource source = OBSGetStrongRef(weakSource);
  27. if (!source) {
  28. return;
  29. }
  30. OBSDataAutoRelease settings = obs_source_get_settings(source);
  31. bool now_active = obs_data_get_bool(settings, "active");
  32. bool desyncedSetting = now_active != active;
  33. active = !active;
  34. const char *text = active ? deactivateText : activateText;
  35. ui->activateButton->setText(text);
  36. if (desyncedSetting) {
  37. return;
  38. }
  39. calldata_t cd = {};
  40. calldata_set_bool(&cd, "active", active);
  41. proc_handler_t *ph = obs_source_get_proc_handler(source);
  42. proc_handler_call(ph, "activate", &cd);
  43. calldata_free(&cd);
  44. }