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