window-basic-main.hpp 17.3 KB
Newer Older
1
/******************************************************************************
2
    Copyright (C) 2013-2014 by Hugh Bailey <obs.jim@gmail.com>
3 4 5

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
6
    the Free Software Foundation, either version 2 of the License, or
7 8 9 10 11 12 13 14 15 16 17 18 19
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
******************************************************************************/

#pragma once

J
jp9000 已提交
20
#include <QBuffer>
J
jp9000 已提交
21
#include <QAction>
C
cg2121 已提交
22
#include <QSystemTrayIcon>
J
jp9000 已提交
23
#include <obs.hpp>
24
#include <vector>
J
jp9000 已提交
25
#include <memory>
26
#include "window-main.hpp"
J
John Bradley 已提交
27
#include "window-basic-interaction.hpp"
28
#include "window-basic-properties.hpp"
J
jp9000 已提交
29
#include "window-basic-transform.hpp"
J
jp9000 已提交
30
#include "window-basic-adv-audio.hpp"
J
jp9000 已提交
31
#include "window-basic-filters.hpp"
J
jp9000 已提交
32

J
jp9000 已提交
33 34
#include <obs-frontend-internal.hpp>

35
#include <util/platform.h>
36
#include <util/threading.h>
37 38
#include <util/util.hpp>

39 40
#include <QPointer>

J
jp9000 已提交
41
class QListWidgetItem;
42
class VolControl;
J
jp9000 已提交
43
class QNetworkReply;
J
jp9000 已提交
44

B
BtbN 已提交
45
#include "ui_OBSBasic.h"
J
jp9000 已提交
46

47 48 49 50 51 52
#define DESKTOP_AUDIO_1 Str("DesktopAudioDevice1")
#define DESKTOP_AUDIO_2 Str("DesktopAudioDevice2")
#define AUX_AUDIO_1     Str("AuxAudioDevice1")
#define AUX_AUDIO_2     Str("AuxAudioDevice2")
#define AUX_AUDIO_3     Str("AuxAudioDevice3")

53 54
#define SIMPLE_ENCODER_X264                    "x264"
#define SIMPLE_ENCODER_X264_LOWCPU             "x264_lowcpu"
55
#define SIMPLE_ENCODER_QSV                     "qsv"
J
jp9000 已提交
56
#define SIMPLE_ENCODER_NVENC                   "nvenc"
57
#define SIMPLE_ENCODER_AMD                     "amd"
58

59 60
#define PREVIEW_EDGE_SIZE 10

J
jp9000 已提交
61 62
struct BasicOutputHandler;

P
Palana 已提交
63 64 65 66 67
enum class QtDataRole {
	OBSRef = Qt::UserRole,
	OBSSignals,
};

68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
struct QuickTransition {
	QPushButton *button = nullptr;
	OBSSource source;
	obs_hotkey_id hotkey = 0;
	int duration = 0;
	int id = 0;

	inline QuickTransition() {}
	inline QuickTransition(OBSSource source_, int duration_, int id_)
		: source   (source_),
		  duration (duration_),
		  id       (id_)
	{}
};

83
class OBSBasic : public OBSMainWindow {
J
jp9000 已提交
84 85
	Q_OBJECT

J
jp9000 已提交
86
	friend class OBSBasicPreview;
J
jp9000 已提交
87
	friend class OBSBasicStatusBar;
J
jp9000 已提交
88
	friend class OBSBasicSourceSelect;
89
	friend class OBSBasicSettings;
J
jp9000 已提交
90
	friend struct OBSStudioAPI;
J
jp9000 已提交
91

92 93 94 95 96 97 98
	enum class MoveDir {
		Up,
		Down,
		Left,
		Right
	};

99 100 101 102 103 104 105
	enum DropType {
		DropType_RawText,
		DropType_Text,
		DropType_Image,
		DropType_Media
	};

J
jp9000 已提交
106
private:
J
jp9000 已提交
107 108
	obs_frontend_callbacks *api = nullptr;

109 110
	std::vector<VolControl*> volumes;

P
Palana 已提交
111 112
	std::vector<OBSSignal> signalHandlers;

113
	bool loaded = false;
J
jp9000 已提交
114
	long disableSaving = 1;
J
jp9000 已提交
115
	bool projectChanged = false;
116
	bool previewEnabled = true;
117

118 119 120
	QPointer<QThread> updateCheckThread;
	QPointer<QThread> logUploadThread;

J
John Bradley 已提交
121
	QPointer<OBSBasicInteraction> interaction;
122
	QPointer<OBSBasicProperties> properties;
J
jp9000 已提交
123
	QPointer<OBSBasicTransform> transformWindow;
J
jp9000 已提交
124
	QPointer<OBSBasicAdvAudio> advAudioWindow;
J
jp9000 已提交
125
	QPointer<OBSBasicFilters> filters;
126

J
jp9000 已提交
127
	QPointer<QTimer>    cpuUsageTimer;
128
	os_cpu_usage_info_t *cpuUsageInfo = nullptr;
129

130
	OBSService service;
J
jp9000 已提交
131
	std::unique_ptr<BasicOutputHandler> outputHandler;
132 133
	bool streamingStopping = false;
	bool recordingStopping = false;
J
jp9000 已提交
134
	bool replayBufferStopping = false;
J
jp9000 已提交
135

136
	gs_vertbuffer_t *box = nullptr;
137 138 139 140
	gs_vertbuffer_t *boxLeft = nullptr;
	gs_vertbuffer_t *boxTop = nullptr;
	gs_vertbuffer_t *boxRight = nullptr;
	gs_vertbuffer_t *boxBottom = nullptr;
141
	gs_vertbuffer_t *circle = nullptr;
J
jp9000 已提交
142

J
jp9000 已提交
143
	bool          sceneChanging = false;
144
	bool          ignoreSelectionUpdate = false;
145

J
jp9000 已提交
146 147 148
	int           previewX = 0,  previewY = 0;
	int           previewCX = 0, previewCY = 0;
	float         previewScale = 0.0f;
J
jp9000 已提交
149

150
	ConfigFile    basicConfig;
151

J
jp9000 已提交
152 153
	QPointer<QWidget> projectors[10];

J
jp9000 已提交
154 155
	QPointer<QMenu> startStreamMenu;

J
jp9000 已提交
156 157
	QPointer<QPushButton> replayBufferButton;

158 159 160
	QPointer<QSystemTrayIcon> trayIcon;
	QPointer<QAction>         sysTrayStream;
	QPointer<QAction>         sysTrayRecord;
J
jp9000 已提交
161
	QPointer<QAction>         sysTrayReplayBuffer;
162 163 164
	QPointer<QAction>         showHide;
	QPointer<QAction>         exit;
	QPointer<QMenu>           trayMenu;
J
jp9000 已提交
165
	bool          disableHiding = false;
C
cg2121 已提交
166

167 168
	void          DrawBackdrop(float cx, float cy);

169 170
	void          SetupEncoders();

171
	void          CreateFirstRunSources();
172
	void          CreateDefaultScene(bool firstStart);
173 174

	void          ClearVolumeControls();
175

J
jp9000 已提交
176 177
	void          UploadLog(const char *file);

178 179 180
	void          Save(const char *file);
	void          Load(const char *file);

P
Palana 已提交
181
	void          InitHotkeys();
182
	void          CreateHotkeys();
J
jp9000 已提交
183
	void          ClearHotkeys();
P
Palana 已提交
184

185 186 187 188 189
	bool          InitService();

	bool          InitBasicConfigDefaults();
	bool          InitBasicConfig();

190 191
	void          InitOBSCallbacks();

J
jp9000 已提交
192 193
	void          InitPrimitives();

194
	OBSSceneItem  GetSceneItem(QListWidgetItem *item);
195 196
	OBSSceneItem  GetCurrentSceneItem();

197
	bool          QueryRemoveSource(obs_source_t *source);
198

J
jp9000 已提交
199 200 201
	void          TimedCheckForUpdates();
	void          CheckForUpdates();

202 203 204 205 206 207
	void GetFPSCommon(uint32_t &num, uint32_t &den) const;
	void GetFPSInteger(uint32_t &num, uint32_t &den) const;
	void GetFPSFraction(uint32_t &num, uint32_t &den) const;
	void GetFPSNanoseconds(uint32_t &num, uint32_t &den) const;
	void GetConfigFPS(uint32_t &num, uint32_t &den) const;

J
Joseph El-Khouri 已提交
208 209
	void UpdatePreviewScalingMenu();

210
	void UpdateSources(OBSScene scene);
211
	void InsertSceneItem(obs_sceneitem_t *item);
212

J
jp9000 已提交
213 214 215 216
	void LoadSceneListOrder(obs_data_array_t *array);
	obs_data_array_t *SaveSceneListOrder();
	void ChangeSceneIndex(bool relative, int idx, int invalidIdx);

J
jp9000 已提交
217 218 219 220
	void TempFileOutput(const char *path, int vBitrate, int aBitrate);
	void TempStreamOutput(const char *url, const char *key,
			int vBitrate, int aBitrate);

221 222
	void CreateInteractionWindow(obs_source_t *source);
	void CreatePropertiesWindow(obs_source_t *source);
J
jp9000 已提交
223
	void CreateFiltersWindow(obs_source_t *source);
224

225 226 227
	void CloseDialogs();
	void ClearSceneData();

228
	void Nudge(int dist, MoveDir dir);
J
jp9000 已提交
229
	void OpenProjector(obs_source_t *source, int monitor);
230

231 232 233 234
	void GetAudioSourceFilters();
	void GetAudioSourceProperties();
	void VolControlContextMenu();

J
jp9000 已提交
235 236 237
	void AddSceneCollection(bool create_new);
	void RefreshSceneCollections();
	void ChangeSceneCollection();
238
	void LogScenes();
J
jp9000 已提交
239

J
jp9000 已提交
240 241 242 243 244 245 246 247
	void LoadProfile();
	void ResetProfileData();
	bool AddProfile(bool create_new, const char *title, const char *text,
			const char *init_text = nullptr);
	void DeleteProfile(const char *profile_name, const char *profile_dir);
	void RefreshProfiles();
	void ChangeProfile();

J
jp9000 已提交
248 249
	void SaveProjectNow();

250 251
	QListWidgetItem *GetTopSelectedSourceItem();

J
jp9000 已提交
252 253
	obs_hotkey_pair_id streamingHotkeys, recordingHotkeys,
	                   replayBufHotkeys;
J
jp9000 已提交
254
	obs_hotkey_id forceStreamingStopHotkey;
255

256 257 258 259
	void InitDefaultTransitions();
	void InitTransition(obs_source_t *transition);
	obs_source_t *FindTransition(const char *name);
	OBSSource GetCurrentTransition();
J
jp9000 已提交
260 261
	obs_data_array_t *SaveTransitions();
	void LoadTransitions(obs_data_array_t *transitions);
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312

	obs_source_t *fadeTransition;

	void CreateProgramDisplay();
	void CreateProgramOptions();
	void AddQuickTransitionId(int id);
	void AddQuickTransition();
	void AddQuickTransitionHotkey(QuickTransition *qt);
	void RemoveQuickTransitionHotkey(QuickTransition *qt);
	void LoadQuickTransitions(obs_data_array_t *array);
	obs_data_array_t *SaveQuickTransitions();
	void RefreshQuickTransitions();
	void CreateDefaultQuickTransitions();

	QuickTransition *GetQuickTransition(int id);
	int GetQuickTransitionIdx(int id);
	QMenu *CreateTransitionMenu(QWidget *parent, QuickTransition *qt);
	void ClearQuickTransitions();
	void QuickTransitionClicked();
	void QuickTransitionChange();
	void QuickTransitionChangeDuration(int value);
	void QuickTransitionRemoveClicked();

	void SetPreviewProgramMode(bool enabled);
	void ResizeProgram(uint32_t cx, uint32_t cy);
	void SetCurrentScene(obs_scene_t *scene, bool force = false);
	static void RenderProgram(void *data, uint32_t cx, uint32_t cy);

	std::vector<QuickTransition> quickTransitions;
	QPointer<QWidget> programOptions;
	QPointer<OBSQTDisplay> program;
	OBSWeakSource lastScene;
	OBSWeakSource swapScene;
	OBSWeakSource programScene;
	bool editPropertiesMode = false;
	bool sceneDuplicationMode = true;
	bool swapScenesMode = true;
	volatile bool previewProgramMode = false;
	obs_hotkey_id togglePreviewProgramHotkey = 0;
	obs_hotkey_id transitionHotkey = 0;
	int quickTransitionIdCounter = 1;

	int   programX = 0,  programY = 0;
	int   programCX = 0, programCY = 0;
	float programScale = 0.0f;

	inline bool IsPreviewProgramMode() const
	{
		return os_atomic_load_bool(&previewProgramMode);
	}

313 314 315
	inline void OnActivate();
	inline void OnDeactivate();

316
	void AddDropSource(const char *file, DropType image);
J
jp9000 已提交
317 318 319 320 321
	void dragEnterEvent(QDragEnterEvent *event) override;
	void dragLeaveEvent(QDragLeaveEvent *event) override;
	void dragMoveEvent(QDragMoveEvent *event) override;
	void dropEvent(QDropEvent *event) override;

J
jp9000 已提交
322 323
	void ReplayBufferClicked();

324
public slots:
325 326
	void StartStreaming();
	void StopStreaming();
J
jp9000 已提交
327 328 329 330
	void ForceStopStreaming();

	void StreamDelayStarting(int sec);
	void StreamDelayStopping(int sec);
331

332
	void StreamingStart();
333
	void StreamStopping();
334
	void StreamingStop(int errorcode);
335

336 337 338
	void StartRecording();
	void StopRecording();

P
Palana 已提交
339
	void RecordingStart();
340
	void RecordStopping();
341
	void RecordingStop(int code);
342

J
jp9000 已提交
343 344 345 346 347 348 349
	void StartReplayBuffer();
	void StopReplayBuffer();

	void ReplayBufferStart();
	void ReplayBufferStopping();
	void ReplayBufferStop(int code);

J
jp9000 已提交
350
	void SaveProjectDeferred();
J
jp9000 已提交
351 352
	void SaveProject();

353 354 355 356 357
	void SetTransition(OBSSource transition);
	void TransitionToScene(OBSScene scene, bool force = false);
	void TransitionToScene(OBSSource scene, bool force = false);
	void SetCurrentScene(OBSSource scene, bool force = false);

358 359 360 361 362
private slots:
	void AddSceneItem(OBSSceneItem item);
	void RemoveSceneItem(OBSSceneItem item);
	void AddScene(OBSSource source);
	void RemoveScene(OBSSource source);
J
jp9000 已提交
363
	void RenameSources(QString newName, QString prevName);
364

365
	void SelectSceneItem(OBSScene scene, OBSSceneItem item, bool select);
J
jp9000 已提交
366

367 368 369
	void ActivateAudioSource(OBSSource source);
	void DeactivateAudioSource(OBSSource source);

370
	void DuplicateSelectedScene();
371 372
	void RemoveSelectedScene();
	void RemoveSelectedSceneItem();
J
jp9000 已提交
373

374 375
	void ToggleAlwaysOnTop();

376 377
	void ReorderSources(OBSScene scene);

P
Palana 已提交
378 379
	void ProcessHotkey(obs_hotkey_id id, bool pressed);

J
jp9000 已提交
380 381
	void AddTransition();
	void RenameTransition();
382 383 384 385
	void TransitionClicked();
	void TransitionStopped();
	void TriggerQuickTransition(int id);

J
jp9000 已提交
386 387 388
	void SetDeinterlacingMode();
	void SetDeinterlacingOrder();

389 390
	void SetScaleFilter();

C
cg2121 已提交
391 392 393 394 395
	void IconActivated(QSystemTrayIcon::ActivationReason reason);
	void SetShowing(bool showing);

	inline void ToggleShowHide()
	{
J
jp9000 已提交
396 397 398
		bool showing = isVisible();
		if (disableHiding && showing)
			return;
399 400
		if (showing)
			CloseDialogs();
J
jp9000 已提交
401
		SetShowing(!showing);
C
cg2121 已提交
402 403
	}

404
private:
405
	/* OBS Callbacks */
406
	static void SceneReordered(void *data, calldata_t *params);
407 408
	static void SceneItemAdded(void *data, calldata_t *params);
	static void SceneItemRemoved(void *data, calldata_t *params);
409 410
	static void SceneItemSelected(void *data, calldata_t *params);
	static void SceneItemDeselected(void *data, calldata_t *params);
411
	static void SourceLoaded(void *data, obs_source_t *source);
412 413 414 415
	static void SourceRemoved(void *data, calldata_t *params);
	static void SourceActivated(void *data, calldata_t *params);
	static void SourceDeactivated(void *data, calldata_t *params);
	static void SourceRenamed(void *data, calldata_t *params);
416
	static void RenderMain(void *data, uint32_t cx, uint32_t cy);
417

J
jp9000 已提交
418 419
	void ResizePreview(uint32_t cx, uint32_t cy);

J
jp9000 已提交
420
	void AddSource(const char *id);
421
	QMenu *CreateAddSourcePopupMenu();
J
jp9000 已提交
422
	void AddSourcePopupMenu(const QPoint &pos);
S
Socapex 已提交
423
	void copyActionsDynamicProperties();
424

P
Palana 已提交
425 426
	static void HotkeyTriggered(void *data, obs_hotkey_id id, bool pressed);

427
public:
J
jp9000 已提交
428 429
	OBSScene      GetCurrentScene();

C
cg2121 已提交
430 431
	void SysTrayNotify(const QString &text, QSystemTrayIcon::MessageIcon n);

432 433 434 435 436 437
	inline OBSSource GetCurrentSceneSource()
	{
		OBSScene curScene = GetCurrentScene();
		return OBSSource(obs_scene_get_source(curScene));
	}

438 439
	obs_service_t *GetService();
	void          SetService(obs_service_t *service);
440

441 442
	bool StreamingActive() const;
	bool Active() const;
443

444
	int  ResetVideo();
445
	bool ResetAudio();
J
jp9000 已提交
446 447

	void ResetOutputs();
J
jp9000 已提交
448

449
	void ResetAudioDevice(const char *sourceId, const char *deviceId,
450
			const char *deviceDesc, int channel);
J
jp9000 已提交
451

452 453 454
	void NewProject();
	void LoadProject();

J
jp9000 已提交
455 456 457 458 459 460 461 462
	inline void GetDisplayRect(int &x, int &y, int &cx, int &cy)
	{
		x  = previewX;
		y  = previewY;
		cx = previewCX;
		cy = previewCY;
	}

463 464 465 466 467
	inline double GetCPUUsage() const
	{
		return os_cpu_usage_info_query(cpuUsageInfo);
	}

468 469 470
	void SaveService();
	bool LoadService();

471 472
	void ReorderSceneItem(obs_sceneitem_t *item, size_t idx);

J
jp9000 已提交
473
	QMenu *AddDeinterlacingMenu(obs_source_t *source);
474
	QMenu *AddScaleFilteringMenu(obs_sceneitem_t *item);
J
jp9000 已提交
475 476
	void CreateSourcePopupMenu(QListWidgetItem *item, bool preview);

477
	void UpdateTitleBar();
478
	void UpdateSceneSelection(OBSSource source);
479

C
cg2121 已提交
480 481 482
	void SystemTrayInit();
	void SystemTray(bool firstStarted);

483
protected:
484 485
	virtual void closeEvent(QCloseEvent *event) override;
	virtual void changeEvent(QEvent *event) override;
J
jp9000 已提交
486 487

private slots:
488
	void on_actionShow_Recordings_triggered();
P
Palana 已提交
489
	void on_actionRemux_triggered();
P
Palana 已提交
490
	void on_action_Settings_triggered();
J
jp9000 已提交
491
	void on_actionAdvAudioProperties_triggered();
492
	void on_advAudioProps_clicked();
493
	void on_advAudioProps_destroyed();
P
Palana 已提交
494
	void on_actionShowLogs_triggered();
J
jp9000 已提交
495 496
	void on_actionUploadCurrentLog_triggered();
	void on_actionUploadLastLog_triggered();
497
	void on_actionViewCurrentLog_triggered();
J
jp9000 已提交
498
	void on_actionCheckForUpdates_triggered();
J
jp9000 已提交
499 500

	void on_actionEditTransform_triggered();
501 502
	void on_actionCopyTransform_triggered();
	void on_actionPasteTransform_triggered();
J
jp9000 已提交
503 504 505 506 507 508 509 510 511
	void on_actionRotate90CW_triggered();
	void on_actionRotate90CCW_triggered();
	void on_actionRotate180_triggered();
	void on_actionFlipHorizontal_triggered();
	void on_actionFlipVertical_triggered();
	void on_actionFitToScreen_triggered();
	void on_actionStretchToScreen_triggered();
	void on_actionCenterToScreen_triggered();

512 513
	void on_scenes_currentItemChanged(QListWidgetItem *current,
			QListWidgetItem *prev);
J
jp9000 已提交
514 515 516 517 518
	void on_scenes_customContextMenuRequested(const QPoint &pos);
	void on_actionAddScene_triggered();
	void on_actionRemoveScene_triggered();
	void on_actionSceneUp_triggered();
	void on_actionSceneDown_triggered();
J
jp9000 已提交
519
	void on_sources_itemSelectionChanged();
J
jp9000 已提交
520
	void on_sources_customContextMenuRequested(const QPoint &pos);
P
Palana 已提交
521
	void on_sources_itemDoubleClicked(QListWidgetItem *item);
J
jp9000 已提交
522 523
	void on_actionAddSource_triggered();
	void on_actionRemoveSource_triggered();
J
John Bradley 已提交
524
	void on_actionInteract_triggered();
J
jp9000 已提交
525 526 527
	void on_actionSourceProperties_triggered();
	void on_actionSourceUp_triggered();
	void on_actionSourceDown_triggered();
J
jp9000 已提交
528

J
jp9000 已提交
529 530 531 532 533
	void on_actionMoveUp_triggered();
	void on_actionMoveDown_triggered();
	void on_actionMoveToTop_triggered();
	void on_actionMoveToBottom_triggered();

J
jp9000 已提交
534 535
	void on_actionLockPreview_triggered();

J
Joseph El-Khouri 已提交
536 537 538 539 540
	void on_scalingMenu_aboutToShow();
	void on_actionScaleWindow_triggered();
	void on_actionScaleCanvas_triggered();
	void on_actionScaleOutput_triggered();

541
	void on_streamButton_clicked();
542
	void on_recordButton_clicked();
J
jp9000 已提交
543
	void on_settingsButton_clicked();
544

545 546
	void on_actionWebsite_triggered();

J
jp9000 已提交
547 548 549 550
	void on_preview_customContextMenuRequested(const QPoint &pos);
	void on_previewDisabledLabel_customContextMenuRequested(
			const QPoint &pos);

J
jp9000 已提交
551 552 553 554 555
	void on_actionNewSceneCollection_triggered();
	void on_actionDupSceneCollection_triggered();
	void on_actionRenameSceneCollection_triggered();
	void on_actionRemoveSceneCollection_triggered();

J
jp9000 已提交
556 557 558 559 560
	void on_actionNewProfile_triggered();
	void on_actionDupProfile_triggered();
	void on_actionRenameProfile_triggered();
	void on_actionRemoveProfile_triggered();

561 562 563
	void on_actionShowSettingsFolder_triggered();
	void on_actionShowProfileFolder_triggered();

564 565
	void on_actionAlwaysOnTop_triggered();

566 567 568 569
	void on_toggleSceneTransitions_toggled(bool visible);
	void on_toggleListboxToolbars_toggled(bool visible);
	void on_toggleStatusBar_toggled(bool visible);

570
	void on_transitions_currentIndexChanged(int index);
J
jp9000 已提交
571 572
	void on_transitionAdd_clicked();
	void on_transitionRemove_clicked();
573 574 575 576
	void on_transitionProps_clicked();

	void on_modeSwitch_clicked();

577
	void logUploadFinished(const QString &text, const QString &error);
J
jp9000 已提交
578

579
	void updateFileFinished(const QString &text, const QString &error);
J
jp9000 已提交
580

J
jp9000 已提交
581 582
	void AddSourceFromAction();

J
jp9000 已提交
583 584 585
	void MoveSceneToTop();
	void MoveSceneToBottom();

J
jp9000 已提交
586 587 588
	void EditSceneName();
	void EditSceneItemName();

J
jp9000 已提交
589 590 591 592 593
	void SceneNameEdited(QWidget *editor,
			QAbstractItemDelegate::EndEditHint endHint);
	void SceneItemNameEdited(QWidget *editor,
			QAbstractItemDelegate::EndEditHint endHint);

J
jp9000 已提交
594
	void OpenSceneFilters();
J
jp9000 已提交
595 596
	void OpenFilters();

597
	void EnablePreviewDisplay(bool enable);
J
jp9000 已提交
598 599
	void TogglePreview();

600 601 602 603 604
	void NudgeUp();
	void NudgeDown();
	void NudgeLeft();
	void NudgeRight();

J
jp9000 已提交
605 606 607 608
	void OpenPreviewProjector();
	void OpenSourceProjector();
	void OpenSceneProjector();

609 610 611
public slots:
	void on_actionResetTransform_triggered();

612
public:
J
jp9000 已提交
613
	explicit OBSBasic(QWidget *parent = 0);
J
jp9000 已提交
614
	virtual ~OBSBasic();
J
jp9000 已提交
615

616 617
	virtual void OBSInit() override;

618
	virtual config_t *Config() const override;
619

J
jp9000 已提交
620
	virtual int GetProfilePath(char *path, size_t size, const char *file)
P
Palana 已提交
621
		const override;
J
jp9000 已提交
622

J
jp9000 已提交
623 624
private:
	std::unique_ptr<Ui::OBSBasic> ui;
625
};