| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270 |
- /******************************************************************************
- Copyright (C) 2013 by Hugh Bailey <[email protected]>
- Philippe Groarke <[email protected]>
- 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
- the Free Software Foundation, either version 2 of the License, or
- (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
- #include <util/util.hpp>
- #include <QDialog>
- #include <memory>
- #include <string>
- #include <libff/ff-util.h>
- #include <obs.h>
- class OBSBasic;
- class QAbstractButton;
- class QComboBox;
- class QCheckBox;
- class QLabel;
- class OBSPropertiesView;
- class OBSHotkeyWidget;
- #include "ui_OBSBasicSettings.h"
- class SilentUpdateCheckBox : public QCheckBox {
- Q_OBJECT
- public slots:
- void setCheckedSilently(bool checked)
- {
- bool blocked = blockSignals(true);
- setChecked(checked);
- blockSignals(blocked);
- }
- };
- class SilentUpdateSpinBox : public QSpinBox {
- Q_OBJECT
- public slots:
- void setValueSilently(int val)
- {
- bool blocked = blockSignals(true);
- setValue(val);
- blockSignals(blocked);
- }
- };
- class OBSFFDeleter
- {
- public:
- void operator()(const ff_format_desc *format)
- {
- ff_format_desc_free(format);
- }
- void operator()(const ff_codec_desc *codec)
- {
- ff_codec_desc_free(codec);
- }
- };
- using OBSFFCodecDesc = std::unique_ptr<const ff_codec_desc,
- OBSFFDeleter>;
- using OBSFFFormatDesc = std::unique_ptr<const ff_format_desc,
- OBSFFDeleter>;
- class OBSBasicSettings : public QDialog {
- Q_OBJECT
- private:
- OBSBasic *main;
- std::unique_ptr<Ui::OBSBasicSettings> ui;
- bool generalChanged = false;
- bool stream1Changed = false;
- bool outputsChanged = false;
- bool audioChanged = false;
- bool videoChanged = false;
- bool hotkeysChanged = false;
- bool advancedChanged = false;
- int pageIndex = 0;
- bool loading = true;
- std::string savedTheme;
- OBSFFFormatDesc formats;
- OBSPropertiesView *streamProperties = nullptr;
- OBSPropertiesView *streamEncoderProps = nullptr;
- OBSPropertiesView *recordEncoderProps = nullptr;
- QPointer<QLabel> advOutRecWarning;
- using AudioSource_t =
- std::tuple<OBSWeakSource,
- QPointer<QCheckBox>, QPointer<QSpinBox>,
- QPointer<QCheckBox>, QPointer<QSpinBox>>;
- std::vector<AudioSource_t> audioSources;
- std::vector<OBSSignal> audioSourceSignals;
- OBSSignal sourceCreated;
- OBSSignal channelChanged;
- std::vector<std::pair<bool, QPointer<OBSHotkeyWidget>>> hotkeys;
- OBSSignal hotkeyRegistered;
- OBSSignal hotkeyUnregistered;
- void SaveCombo(QComboBox *widget, const char *section,
- const char *value);
- void SaveComboData(QComboBox *widget, const char *section,
- const char *value);
- void SaveCheckBox(QAbstractButton *widget, const char *section,
- const char *value, bool invert = false);
- void SaveEdit(QLineEdit *widget, const char *section,
- const char *value);
- void SaveSpinBox(QSpinBox *widget, const char *section,
- const char *value);
- void SaveFormat(QComboBox *combo);
- void SaveEncoder(QComboBox *combo, const char *section,
- const char *value);
- inline bool Changed() const
- {
- return generalChanged || outputsChanged || stream1Changed ||
- audioChanged || videoChanged || advancedChanged ||
- hotkeysChanged;
- }
- inline void EnableApplyButton(bool en)
- {
- ui->buttonBox->button(QDialogButtonBox::Apply)->setEnabled(en);
- }
- inline void ClearChanged()
- {
- generalChanged = false;
- stream1Changed = false;
- outputsChanged = false;
- audioChanged = false;
- videoChanged = false;
- hotkeysChanged = false;
- advancedChanged= false;
- EnableApplyButton(false);
- }
- #ifdef _WIN32
- bool aeroWasDisabled = false;
- QCheckBox *toggleAero = nullptr;
- void ToggleDisableAero(bool checked);
- #endif
- void HookWidget(QWidget *widget, const char *signal, const char *slot);
- bool QueryChanges();
- void LoadServiceTypes();
- void LoadEncoderTypes();
- void LoadColorRanges();
- void LoadFormats();
- void ReloadCodecs(const ff_format_desc *formatDesc);
- void LoadGeneralSettings();
- void LoadStream1Settings();
- void LoadOutputSettings();
- void LoadAudioSettings();
- void LoadVideoSettings();
- void LoadHotkeySettings(obs_hotkey_id ignoreKey=OBS_INVALID_HOTKEY_ID);
- void LoadAdvancedSettings();
- void LoadSettings(bool changedOnly);
- OBSPropertiesView *CreateEncoderPropertyView(const char *encoder,
- const char *path, bool changed = false);
- /* general */
- void LoadLanguageList();
- void LoadThemeList();
- /* output */
- void LoadSimpleOutputSettings();
- void LoadAdvOutputStreamingSettings();
- void LoadAdvOutputStreamingEncoderProperties();
- void LoadAdvOutputRecordingSettings();
- void LoadAdvOutputRecordingEncoderProperties();
- void LoadAdvOutputFFmpegSettings();
- void LoadAdvOutputAudioSettings();
- void SetAdvOutputFFmpegEnablement(
- ff_codec_type encoderType, bool enabled,
- bool enableEncode = false);
- /* audio */
- void LoadListValues(QComboBox *widget, obs_property_t *prop,
- const char *configName);
- void LoadAudioDevices();
- void LoadAudioSources();
- /* video */
- void LoadRendererList();
- void ResetDownscales(uint32_t cx, uint32_t cy,
- uint32_t out_cx, uint32_t out_cy);
- void LoadDownscaleFilters();
- void LoadResolutionLists();
- void LoadFPSData();
- void SaveGeneralSettings();
- void SaveStream1Settings();
- void SaveOutputSettings();
- void SaveAudioSettings();
- void SaveVideoSettings();
- void SaveHotkeySettings();
- void SaveAdvancedSettings();
- void SaveSettings();
- private slots:
- void on_theme_activated(int idx);
- void on_simpleOutUseBufsize_toggled(bool checked);
- void on_simpleOutputVBitrate_valueChanged(int val);
- void on_listWidget_itemSelectionChanged();
- void on_buttonBox_clicked(QAbstractButton *button);
- void on_streamType_currentIndexChanged(int idx);
- void on_simpleOutputBrowse_clicked();
- void on_advOutRecPathBrowse_clicked();
- void on_advOutFFPathBrowse_clicked();
- void on_advOutEncoder_currentIndexChanged(int idx);
- void on_advOutRecEncoder_currentIndexChanged(int idx);
- void on_advOutFFFormat_currentIndexChanged(int idx);
- void on_advOutFFAEncoder_currentIndexChanged(int idx);
- void on_advOutFFVEncoder_currentIndexChanged(int idx);
- void on_colorFormat_currentIndexChanged(const QString &text);
- void on_baseResolution_editTextChanged(const QString &text);
- void GeneralChanged();
- void AudioChanged();
- void AudioChangedRestart();
- void ReloadAudioSources();
- void OutputsChanged();
- void Stream1Changed();
- void VideoChanged();
- void VideoChangedResolution();
- void VideoChangedRestart();
- void HotkeysChanged();
- void ReloadHotkeys(obs_hotkey_id ignoreKey=OBS_INVALID_HOTKEY_ID);
- void AdvancedChanged();
- void AdvancedChangedRestart();
- void AdvOutRecCheckWarnings();
- protected:
- virtual void closeEvent(QCloseEvent *event);
- public:
- OBSBasicSettings(QWidget *parent);
- };
|