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