context-bar-controls.hpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #pragma once
  2. #include <memory>
  3. #include <obs.hpp>
  4. #include <QWidget>
  5. class Ui_BrowserSourceToolbar;
  6. class Ui_DeviceSelectToolbar;
  7. class Ui_GameCaptureToolbar;
  8. class Ui_ImageSourceToolbar;
  9. class Ui_ColorSourceToolbar;
  10. class Ui_TextSourceToolbar;
  11. class SourceToolbar : public QWidget {
  12. Q_OBJECT
  13. OBSWeakSource weakSource;
  14. protected:
  15. using properties_delete_t = decltype(&obs_properties_destroy);
  16. using properties_t =
  17. std::unique_ptr<obs_properties_t, properties_delete_t>;
  18. properties_t props;
  19. OBSDataAutoRelease oldData;
  20. void SaveOldProperties(obs_source_t *source);
  21. void SetUndoProperties(obs_source_t *source, bool repeatable = false);
  22. public:
  23. SourceToolbar(QWidget *parent, OBSSource source);
  24. OBSSource GetSource() { return OBSGetStrongRef(weakSource); }
  25. public slots:
  26. virtual void Update() {}
  27. };
  28. class BrowserToolbar : public SourceToolbar {
  29. Q_OBJECT
  30. std::unique_ptr<Ui_BrowserSourceToolbar> ui;
  31. public:
  32. BrowserToolbar(QWidget *parent, OBSSource source);
  33. ~BrowserToolbar();
  34. public slots:
  35. void on_refresh_clicked();
  36. };
  37. class ComboSelectToolbar : public SourceToolbar {
  38. Q_OBJECT
  39. protected:
  40. std::unique_ptr<Ui_DeviceSelectToolbar> ui;
  41. const char *prop_name;
  42. bool is_int = false;
  43. public:
  44. ComboSelectToolbar(QWidget *parent, OBSSource source);
  45. ~ComboSelectToolbar();
  46. virtual void Init();
  47. public slots:
  48. void on_device_currentIndexChanged(int idx);
  49. };
  50. class AudioCaptureToolbar : public ComboSelectToolbar {
  51. Q_OBJECT
  52. public:
  53. AudioCaptureToolbar(QWidget *parent, OBSSource source);
  54. void Init() override;
  55. };
  56. class WindowCaptureToolbar : public ComboSelectToolbar {
  57. Q_OBJECT
  58. public:
  59. WindowCaptureToolbar(QWidget *parent, OBSSource source);
  60. void Init() override;
  61. };
  62. class DisplayCaptureToolbar : public ComboSelectToolbar {
  63. Q_OBJECT
  64. public:
  65. DisplayCaptureToolbar(QWidget *parent, OBSSource source);
  66. void Init() override;
  67. };
  68. class DeviceCaptureToolbar : public QWidget {
  69. Q_OBJECT
  70. OBSWeakSource weakSource;
  71. std::unique_ptr<Ui_DeviceSelectToolbar> ui;
  72. const char *activateText;
  73. const char *deactivateText;
  74. bool active;
  75. public:
  76. DeviceCaptureToolbar(QWidget *parent, OBSSource source);
  77. ~DeviceCaptureToolbar();
  78. public slots:
  79. void on_activateButton_clicked();
  80. };
  81. class GameCaptureToolbar : public SourceToolbar {
  82. Q_OBJECT
  83. std::unique_ptr<Ui_GameCaptureToolbar> ui;
  84. void UpdateWindowVisibility();
  85. public:
  86. GameCaptureToolbar(QWidget *parent, OBSSource source);
  87. ~GameCaptureToolbar();
  88. public slots:
  89. void on_mode_currentIndexChanged(int idx);
  90. void on_window_currentIndexChanged(int idx);
  91. };
  92. class ImageSourceToolbar : public SourceToolbar {
  93. Q_OBJECT
  94. std::unique_ptr<Ui_ImageSourceToolbar> ui;
  95. public:
  96. ImageSourceToolbar(QWidget *parent, OBSSource source);
  97. ~ImageSourceToolbar();
  98. public slots:
  99. void on_browse_clicked();
  100. };
  101. class ColorSourceToolbar : public SourceToolbar {
  102. Q_OBJECT
  103. std::unique_ptr<Ui_ColorSourceToolbar> ui;
  104. QColor color;
  105. void UpdateColor();
  106. public:
  107. ColorSourceToolbar(QWidget *parent, OBSSource source);
  108. ~ColorSourceToolbar();
  109. public slots:
  110. void on_choose_clicked();
  111. };
  112. class TextSourceToolbar : public SourceToolbar {
  113. Q_OBJECT
  114. std::unique_ptr<Ui_TextSourceToolbar> ui;
  115. QFont font;
  116. QColor color;
  117. public:
  118. TextSourceToolbar(QWidget *parent, OBSSource source);
  119. ~TextSourceToolbar();
  120. public slots:
  121. void on_selectFont_clicked();
  122. void on_selectColor_clicked();
  123. void on_text_textChanged();
  124. };