Qt: Move post processing to its own setting category

This commit is contained in:
Connor McLaughlin
2020-09-13 22:24:20 +10:00
parent 6ababf7e53
commit 441f26706e
24 changed files with 555 additions and 150 deletions

View File

@ -10,25 +10,26 @@ PostProcessingChainConfigWidget::PostProcessingChainConfigWidget(QWidget* parent
{
m_ui.setupUi(this);
connectUi();
updateButtonStates();
updateButtonStates(std::nullopt);
}
PostProcessingChainConfigWidget::~PostProcessingChainConfigWidget() = default;
void PostProcessingChainConfigWidget::connectUi()
{
connect(m_ui.add, &QPushButton::clicked, this, &PostProcessingChainConfigWidget::onAddButtonClicked);
connect(m_ui.remove, &QPushButton::clicked, this, &PostProcessingChainConfigWidget::onRemoveButtonClicked);
connect(m_ui.clear, &QPushButton::clicked, this, &PostProcessingChainConfigWidget::onClearButtonClicked);
connect(m_ui.moveUp, &QPushButton::clicked, this, &PostProcessingChainConfigWidget::onMoveUpButtonClicked);
connect(m_ui.moveDown, &QPushButton::clicked, this, &PostProcessingChainConfigWidget::onMoveDownButtonClicked);
connect(m_ui.reload, &QPushButton::clicked, this, &PostProcessingChainConfigWidget::onReloadButtonClicked);
connect(m_ui.shaderSettings, &QPushButton::clicked, this,
connect(m_ui.add, &QToolButton::clicked, this, &PostProcessingChainConfigWidget::onAddButtonClicked);
connect(m_ui.remove, &QToolButton::clicked, this, &PostProcessingChainConfigWidget::onRemoveButtonClicked);
connect(m_ui.clear, &QToolButton::clicked, this, &PostProcessingChainConfigWidget::onClearButtonClicked);
connect(m_ui.moveUp, &QToolButton::clicked, this, &PostProcessingChainConfigWidget::onMoveUpButtonClicked);
connect(m_ui.moveDown, &QToolButton::clicked, this, &PostProcessingChainConfigWidget::onMoveDownButtonClicked);
// connect(m_ui.reload, &QToolButton::clicked, this, &PostProcessingChainConfigWidget::onReloadButtonClicked);
connect(m_ui.shaderSettings, &QToolButton::clicked, this,
&PostProcessingChainConfigWidget::onShaderConfigButtonClicked);
connect(m_ui.shaders, &QListWidget::itemSelectionChanged, this, &PostProcessingChainConfigWidget::updateButtonStates);
connect(m_ui.shaders, &QListWidget::itemSelectionChanged, this,
&PostProcessingChainConfigWidget::onSelectedShaderChanged);
m_ui.loadPreset->setEnabled(false);
m_ui.savePreset->setEnabled(false);
// m_ui.loadPreset->setEnabled(false);
// m_ui.savePreset->setEnabled(false);
}
bool PostProcessingChainConfigWidget::setConfigString(const std::string_view& config_string)
@ -40,6 +41,20 @@ bool PostProcessingChainConfigWidget::setConfigString(const std::string_view& co
return true;
}
void PostProcessingChainConfigWidget::setOptionsButtonVisible(bool visible)
{
if (visible)
{
m_ui.shaderSettings->setVisible(true);
m_ui.horizontalLayout->addWidget(m_ui.shaderSettings);
}
else
{
m_ui.shaderSettings->setVisible(false);
m_ui.horizontalLayout->removeWidget(m_ui.shaderSettings);
}
}
std::optional<u32> PostProcessingChainConfigWidget::getSelectedIndex() const
{
QList<QListWidgetItem*> selected_items = m_ui.shaders->selectedItems();
@ -59,7 +74,7 @@ void PostProcessingChainConfigWidget::updateList()
item->setData(Qt::UserRole, QVariant(i));
}
updateButtonStates();
updateButtonStates(std::nullopt);
}
void PostProcessingChainConfigWidget::configChanged()
@ -70,12 +85,11 @@ void PostProcessingChainConfigWidget::configChanged()
chainConfigStringChanged(m_chain.GetConfigString());
}
void PostProcessingChainConfigWidget::updateButtonStates()
void PostProcessingChainConfigWidget::updateButtonStates(std::optional<u32> index)
{
std::optional<u32> index = getSelectedIndex();
m_ui.remove->setEnabled(index.has_value());
m_ui.clear->setEnabled(!m_chain.IsEmpty());
m_ui.reload->setEnabled(!m_chain.IsEmpty());
// m_ui.reload->setEnabled(!m_chain.IsEmpty());
m_ui.shaderSettings->setEnabled(index.has_value() && (index.value() < m_chain.GetStageCount()) &&
m_chain.GetShaderStage(index.value()).HasOptions());
@ -106,6 +120,8 @@ void PostProcessingChainConfigWidget::onAddButtonClicked()
{
QAction* action = menu.addAction(QString::fromStdString(shader));
connect(action, &QAction::triggered, [this, &shader]() {
chainAboutToChange();
if (!m_chain.AddStage(shader))
{
QMessageBox::critical(this, tr("Error"), tr("Failed to add shader. The log may contain more information."));
@ -131,6 +147,7 @@ void PostProcessingChainConfigWidget::onRemoveButtonClicked()
u32 index = item->data(Qt::UserRole).toUInt();
if (index < m_chain.GetStageCount())
{
chainAboutToChange();
m_chain.RemoveStage(index);
updateList();
configChanged();
@ -142,6 +159,7 @@ void PostProcessingChainConfigWidget::onClearButtonClicked()
if (QMessageBox::question(this, tr("Question"), tr("Are you sure you want to clear all shader stages?"),
QMessageBox::Yes, QMessageBox::No) == QMessageBox::Yes)
{
chainAboutToChange();
m_chain.ClearStages();
updateList();
configChanged();
@ -153,6 +171,7 @@ void PostProcessingChainConfigWidget::onMoveUpButtonClicked()
std::optional<u32> index = getSelectedIndex();
if (index.has_value())
{
chainAboutToChange();
m_chain.MoveStageUp(index.value());
updateList();
configChanged();
@ -164,6 +183,7 @@ void PostProcessingChainConfigWidget::onMoveDownButtonClicked()
std::optional<u32> index = getSelectedIndex();
if (index.has_value())
{
chainAboutToChange();
m_chain.MoveStageDown(index.value());
updateList();
configChanged();
@ -175,8 +195,8 @@ void PostProcessingChainConfigWidget::onShaderConfigButtonClicked()
std::optional<u32> index = getSelectedIndex();
if (index.has_value() && index.value() < m_chain.GetStageCount())
{
PostProcessingShaderConfigWidget shader_config(this, &m_chain.GetShaderStage(index.value()));
connect(&shader_config, &PostProcessingShaderConfigWidget::configChanged, [this]() { configChanged(); });
PostProcessingShaderConfigDialog shader_config(this, &m_chain.GetShaderStage(index.value()));
connect(&shader_config, &PostProcessingShaderConfigDialog::configChanged, [this]() { configChanged(); });
shader_config.exec();
}
}
@ -185,3 +205,10 @@ void PostProcessingChainConfigWidget::onReloadButtonClicked()
{
QtHostInterface::GetInstance()->reloadPostProcessingShaders();
}
void PostProcessingChainConfigWidget::onSelectedShaderChanged()
{
std::optional<u32> index = getSelectedIndex();
selectedShaderChanged(index.has_value() ? static_cast<s32>(index.value()) : -1);
updateButtonStates(index);
}