postprocessingsettingswidget.h (2238B)
1 // SPDX-FileCopyrightText: 2019-2024 Connor McLaughlin <stenzek@gmail.com> 2 // SPDX-License-Identifier: (GPL-3.0 OR CC-BY-NC-ND-4.0) 3 4 #pragma once 5 6 #include "ui_postprocessingchainconfigwidget.h" 7 8 #include "util/postprocessing.h" 9 10 #include <QtWidgets/QTableWidget> 11 #include <QtWidgets/QWidget> 12 13 class SettingsWindow; 14 class PostProcessingShaderConfigWidget; 15 16 class PostProcessingSettingsWidget : public QTabWidget 17 { 18 Q_OBJECT 19 20 public: 21 PostProcessingSettingsWidget(SettingsWindow* dialog, QWidget* parent); 22 ~PostProcessingSettingsWidget(); 23 }; 24 25 class PostProcessingChainConfigWidget : public QWidget 26 { 27 Q_OBJECT 28 29 friend PostProcessingShaderConfigWidget; 30 31 public: 32 PostProcessingChainConfigWidget(SettingsWindow* dialog, QWidget* parent, const char* section); 33 ~PostProcessingChainConfigWidget(); 34 35 private Q_SLOTS: 36 void onAddButtonClicked(); 37 void onRemoveButtonClicked(); 38 void onClearButtonClicked(); 39 void onMoveUpButtonClicked(); 40 void onMoveDownButtonClicked(); 41 void onReloadButtonClicked(); 42 void onSelectedShaderChanged(); 43 44 private: 45 SettingsInterface& getSettingsInterfaceToUpdate(); 46 void commitSettingsUpdate(); 47 48 void connectUi(); 49 void updateButtonsAndConfigPane(std::optional<u32> index); 50 std::optional<u32> getSelectedIndex() const; 51 void selectIndex(s32 index); 52 void updateList(const SettingsInterface& si); 53 void updateList(); 54 55 SettingsWindow* m_dialog; 56 57 Ui::PostProcessingChainConfigWidget m_ui; 58 59 const char* m_section; 60 61 PostProcessingShaderConfigWidget* m_shader_config = nullptr; 62 }; 63 64 class PostProcessingShaderConfigWidget : public QWidget 65 { 66 Q_OBJECT 67 68 public: 69 PostProcessingShaderConfigWidget(QWidget* parent, PostProcessingChainConfigWidget* widget, const char* section, 70 u32 stage_index, std::vector<PostProcessing::ShaderOption> options); 71 ~PostProcessingShaderConfigWidget(); 72 73 private Q_SLOTS: 74 void onResetDefaultsClicked(); 75 76 protected: 77 void createUi(); 78 void updateConfigForOption(const PostProcessing::ShaderOption& option); 79 80 QGridLayout* m_layout; 81 82 PostProcessingChainConfigWidget* m_widget; 83 std::vector<QWidget*> m_widgets; 84 85 const char* m_section; 86 u32 m_stage_index; 87 std::vector<PostProcessing::ShaderOption> m_options; 88 };