GameCaptureToolbar.cpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "GameCaptureToolbar.hpp"
  2. #include "ui_game-capture-toolbar.h"
  3. #include <qt-wrappers.hpp>
  4. #include "moc_GameCaptureToolbar.cpp"
  5. extern int FillPropertyCombo(QComboBox *c, obs_property_t *p, const std::string &cur_id, bool is_int = false);
  6. GameCaptureToolbar::GameCaptureToolbar(QWidget *parent, OBSSource source)
  7. : SourceToolbar(parent, source),
  8. ui(new Ui_GameCaptureToolbar)
  9. {
  10. obs_property_t *p;
  11. int cur_idx;
  12. ui->setupUi(this);
  13. obs_module_t *mod = obs_get_module("win-capture");
  14. if (!mod)
  15. return;
  16. ui->modeLabel->setText(obs_module_get_locale_text(mod, "Mode"));
  17. ui->windowLabel->setText(obs_module_get_locale_text(mod, "WindowCapture.Window"));
  18. OBSDataAutoRelease settings = obs_source_get_settings(source);
  19. std::string cur_mode = obs_data_get_string(settings, "capture_mode");
  20. std::string cur_window = obs_data_get_string(settings, "window");
  21. ui->mode->blockSignals(true);
  22. p = obs_properties_get(props.get(), "capture_mode");
  23. cur_idx = FillPropertyCombo(ui->mode, p, cur_mode);
  24. ui->mode->setCurrentIndex(cur_idx);
  25. ui->mode->blockSignals(false);
  26. ui->window->blockSignals(true);
  27. p = obs_properties_get(props.get(), "window");
  28. cur_idx = FillPropertyCombo(ui->window, p, cur_window);
  29. ui->window->setCurrentIndex(cur_idx);
  30. ui->window->blockSignals(false);
  31. if (cur_idx != -1 && obs_property_list_item_disabled(p, cur_idx)) {
  32. SetComboItemEnabled(ui->window, cur_idx, false);
  33. }
  34. UpdateWindowVisibility();
  35. }
  36. GameCaptureToolbar::~GameCaptureToolbar() {}
  37. void GameCaptureToolbar::UpdateWindowVisibility()
  38. {
  39. QString mode = ui->mode->currentData().toString();
  40. bool is_window = (mode == "window");
  41. ui->windowLabel->setVisible(is_window);
  42. ui->window->setVisible(is_window);
  43. }
  44. void GameCaptureToolbar::on_mode_currentIndexChanged(int idx)
  45. {
  46. OBSSource source = GetSource();
  47. if (idx == -1 || !source) {
  48. return;
  49. }
  50. QString id = ui->mode->itemData(idx).toString();
  51. SaveOldProperties(source);
  52. OBSDataAutoRelease settings = obs_data_create();
  53. obs_data_set_string(settings, "capture_mode", QT_TO_UTF8(id));
  54. obs_source_update(source, settings);
  55. SetUndoProperties(source);
  56. UpdateWindowVisibility();
  57. }
  58. void GameCaptureToolbar::on_window_currentIndexChanged(int idx)
  59. {
  60. OBSSource source = GetSource();
  61. if (idx == -1 || !source) {
  62. return;
  63. }
  64. QString id = ui->window->itemData(idx).toString();
  65. SaveOldProperties(source);
  66. OBSDataAutoRelease settings = obs_data_create();
  67. obs_data_set_string(settings, "window", QT_TO_UTF8(id));
  68. obs_source_update(source, settings);
  69. SetUndoProperties(source);
  70. }