Play-/Source/ui_qt/settingsdialog.cpp

206 lines
7.6 KiB
C++
Raw Permalink Normal View History

2016-08-23 00:54:10 +01:00
#include "settingsdialog.h"
2023-08-28 09:44:51 -04:00
#include <cassert>
#include <cmath>
#include <QFileDialog>
#include <QMessageBox>
2016-08-23 00:54:10 +01:00
#include "ui_settingsdialog.h"
#include "PS2VM_Preferences.h"
2016-08-23 00:54:10 +01:00
#include "PreferenceDefs.h"
#include "../gs/GSH_OpenGL/GSH_OpenGL.h"
#include "QStringUtils.h"
#ifdef HAS_GSH_VULKAN
#include "gs/GSH_Vulkan/GSH_VulkanDeviceInfo.h"
Q_DECLARE_METATYPE(GSH_Vulkan::VULKAN_DEVICE);
#endif
2016-08-23 00:54:10 +01:00
2018-04-30 21:01:23 +01:00
SettingsDialog::SettingsDialog(QWidget* parent)
: QDialog(parent)
, ui(new Ui::SettingsDialog)
2016-08-23 00:54:10 +01:00
{
2018-04-30 21:01:23 +01:00
ui->setupUi(this);
2016-08-23 00:54:10 +01:00
2018-04-30 21:01:23 +01:00
//Not needed, as it can be set in the ui editor, but left for ease of ui edit.
ui->stackedWidget->setCurrentIndex(0);
2016-08-23 00:54:10 +01:00
2024-02-12 17:27:10 -05:00
ui->lineEdit_arcadeIOServerPort->setValidator(new QIntValidator(0, 65535, this));
// this assert is to ensure no one adds an item to the combobox through qt creator by accident
assert(ui->comboBox_gs_selection->count() == 0);
assert(ui->comboBox_vulkan_device->count() == 0);
ui->comboBox_gs_selection->blockSignals(true);
ui->comboBox_vulkan_device->blockSignals(true);
2020-02-11 07:53:35 +00:00
ui->comboBox_gs_selection->insertItem(SettingsDialog::GS_HANDLERS::OPENGL, "OpenGL");
#ifdef HAS_GSH_VULKAN
2020-04-26 16:53:27 -04:00
auto devices = GSH_Vulkan::CDeviceInfo::GetInstance().GetAvailableDevices();
if(!devices.empty())
{
ui->comboBox_gs_selection->insertItem(SettingsDialog::GS_HANDLERS::VULKAN, "Vulkan");
auto selectedDevice = GSH_Vulkan::CDeviceInfo::GetInstance().GetSelectedDevice();
2020-04-26 16:53:27 -04:00
for(const auto& device : devices)
{
ui->comboBox_vulkan_device->addItem(QString::fromUtf8(device.deviceName.c_str()), QVariant::fromValue(device));
if(
(selectedDevice.deviceId == device.deviceId) &&
(selectedDevice.vendorId == device.vendorId))
{
auto selectedIndex = ui->comboBox_vulkan_device->count() - 1;
ui->comboBox_vulkan_device->setCurrentIndex(selectedIndex);
}
2020-04-26 16:53:27 -04:00
}
}
2020-02-11 07:53:35 +00:00
#else
2020-04-26 11:01:31 -04:00
ui->button_vulkanDeviceInfo->hide();
#endif
if(ui->comboBox_gs_selection->count() <= 1)
{
ui->gs_option_widget->hide();
}
ui->comboBox_vulkan_device->blockSignals(false);
ui->comboBox_gs_selection->blockSignals(false);
2020-02-11 07:53:35 +00:00
2018-04-30 21:01:23 +01:00
LoadPreferences();
connect(ui->listWidget, &QListWidget::currentItemChanged, this, &SettingsDialog::changePage);
2016-08-23 00:54:10 +01:00
}
SettingsDialog::~SettingsDialog()
{
2018-04-30 21:01:23 +01:00
CAppConfig::GetInstance().Save();
delete ui;
2016-08-23 00:54:10 +01:00
}
2018-04-30 21:01:23 +01:00
void SettingsDialog::changePage(QListWidgetItem* current, QListWidgetItem* previous)
2016-08-23 00:54:10 +01:00
{
2018-04-30 21:01:23 +01:00
if(!current)
current = previous;
2016-08-23 00:54:10 +01:00
2018-04-30 21:01:23 +01:00
ui->stackedWidget->setCurrentIndex(ui->listWidget->row(current));
2016-08-23 00:54:10 +01:00
}
void SettingsDialog::LoadPreferences()
{
ui->comboBox_system_language->setCurrentIndex(CAppConfig::GetInstance().GetPreferenceInteger(PREF_SYSTEM_LANGUAGE));
2021-02-24 11:55:09 -05:00
ui->checkBox_limitFrameRate->setChecked(CAppConfig::GetInstance().GetPreferenceBoolean(PREF_PS2_LIMIT_FRAMERATE));
ui->checkBox_showEECPUUsage->setChecked(CAppConfig::GetInstance().GetPreferenceBoolean(PREF_UI_SHOWEECPUUSAGE));
2024-02-12 17:27:10 -05:00
ui->edit_arcadeRoms_dir->setText(PathToQString(CAppConfig::GetInstance().GetPreferencePath(PREF_PS2_ARCADEROMS_DIRECTORY)));
ui->checkBox_enableArcadeIOServer->setChecked(CAppConfig::GetInstance().GetPreferenceBoolean(PREF_PS2_ARCADE_IO_SERVER_ENABLED));
ui->lineEdit_arcadeIOServerPort->setText(QString::number(CAppConfig::GetInstance().GetPreferenceInteger(PREF_PS2_ARCADE_IO_SERVER_PORT)));
int factor = CAppConfig::GetInstance().GetPreferenceInteger(PREF_CGSH_OPENGL_RESOLUTION_FACTOR);
int factor_index = std::log2(factor);
ui->comboBox_res_multiplyer->setCurrentIndex(factor_index);
2020-12-17 17:46:02 -05:00
ui->checkBox_widescreenOutput->setChecked(CAppConfig::GetInstance().GetPreferenceBoolean(PREF_CGSHANDLER_WIDESCREEN));
ui->checkBox_enable_gs_ram_reads->setChecked(CAppConfig::GetInstance().GetPreferenceBoolean(PREF_CGSHANDLER_GS_RAM_READS_ENABLED));
2018-04-30 21:01:23 +01:00
ui->checkBox_force_bilinear_filtering->setChecked(CAppConfig::GetInstance().GetPreferenceBoolean(PREF_CGSH_OPENGL_FORCEBILINEARTEXTURES));
2020-02-10 22:11:18 +00:00
ui->comboBox_gs_selection->setCurrentIndex(CAppConfig::GetInstance().GetPreferenceInteger(PREF_VIDEO_GS_HANDLER));
2016-08-23 00:54:10 +01:00
2018-04-30 21:01:23 +01:00
ui->checkBox_enable_audio->setChecked(CAppConfig::GetInstance().GetPreferenceBoolean(PREFERENCE_AUDIO_ENABLEOUTPUT));
ui->spinBox_spuBlockCount->setValue(CAppConfig::GetInstance().GetPreferenceInteger(PREF_AUDIO_SPUBLOCKCOUNT));
2018-04-30 21:01:23 +01:00
ui->comboBox_presentation_mode->setCurrentIndex(CAppConfig::GetInstance().GetPreferenceInteger(PREF_CGSHANDLER_PRESENTATION_MODE));
2016-08-23 00:54:10 +01:00
}
2021-03-09 11:45:13 -05:00
//General Page ---------------------------------
void SettingsDialog::on_comboBox_system_language_currentIndexChanged(int index)
{
CAppConfig::GetInstance().SetPreferenceInteger(PREF_SYSTEM_LANGUAGE, index);
}
2024-02-12 17:27:10 -05:00
void SettingsDialog::on_checkBox_limitFrameRate_clicked(bool checked)
{
CAppConfig::GetInstance().SetPreferenceBoolean(PREF_PS2_LIMIT_FRAMERATE, checked);
}
void SettingsDialog::on_checkBox_showEECPUUsage_clicked(bool checked)
{
CAppConfig::GetInstance().SetPreferenceBoolean(PREF_UI_SHOWEECPUUSAGE, checked);
}
void SettingsDialog::on_button_browseArcadeRomsDir_clicked()
{
auto prevDir = PathToQString(CAppConfig::GetInstance().GetPreferencePath(PREF_PS2_ARCADEROMS_DIRECTORY));
auto newDir = QFileDialog::getExistingDirectory(this, tr("Select Arcade ROMs Directory"), prevDir,
QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
if(newDir.isEmpty())
{
return;
}
CAppConfig::GetInstance().SetPreferencePath(PREF_PS2_ARCADEROMS_DIRECTORY, QStringToPath(newDir));
ui->edit_arcadeRoms_dir->setText(newDir);
}
2024-02-12 17:27:10 -05:00
void SettingsDialog::on_checkBox_enableArcadeIOServer_clicked(bool checked)
2021-02-24 11:55:09 -05:00
{
2024-02-12 17:27:10 -05:00
CAppConfig::GetInstance().SetPreferenceBoolean(PREF_PS2_ARCADE_IO_SERVER_ENABLED, checked);
2021-02-24 11:55:09 -05:00
}
2024-02-12 17:27:10 -05:00
void SettingsDialog::on_lineEdit_arcadeIOServerPort_textChanged(const QString& value)
{
2024-02-12 17:27:10 -05:00
CAppConfig::GetInstance().SetPreferenceInteger(PREF_PS2_ARCADE_IO_SERVER_PORT, value.toInt());
}
2021-03-09 11:45:13 -05:00
//Video Page ---------------------------------
2020-12-17 17:46:02 -05:00
void SettingsDialog::on_checkBox_widescreenOutput_clicked(bool checked)
{
CAppConfig::GetInstance().SetPreferenceBoolean(PREF_CGSHANDLER_WIDESCREEN, checked);
}
void SettingsDialog::on_checkBox_enable_gs_ram_reads_clicked(bool checked)
{
CAppConfig::GetInstance().SetPreferenceBoolean(PREF_CGSHANDLER_GS_RAM_READS_ENABLED, checked);
}
void SettingsDialog::on_checkBox_force_bilinear_filtering_clicked(bool checked)
2016-08-23 00:54:10 +01:00
{
2018-04-30 21:01:23 +01:00
CAppConfig::GetInstance().SetPreferenceBoolean(PREF_CGSH_OPENGL_FORCEBILINEARTEXTURES, checked);
2016-08-23 00:54:10 +01:00
}
2020-02-10 22:11:18 +00:00
void SettingsDialog::on_comboBox_gs_selection_currentIndexChanged(int index)
{
2020-02-10 22:11:18 +00:00
CAppConfig::GetInstance().SetPreferenceInteger(PREF_VIDEO_GS_HANDLER, index);
}
void SettingsDialog::on_comboBox_vulkan_device_currentIndexChanged(int index)
{
#if HAS_GSH_VULKAN
auto deviceVariant = ui->comboBox_vulkan_device->itemData(index);
auto device = deviceVariant.value<GSH_Vulkan::VULKAN_DEVICE>();
GSH_Vulkan::CDeviceInfo::GetInstance().SetSelectedDevice(device);
#endif
}
void SettingsDialog::on_button_vulkanDeviceInfo_clicked()
{
#if HAS_GSH_VULKAN
auto log = GSH_Vulkan::CDeviceInfo::GetInstance().GetLog();
QMessageBox::information(this, "Vulkan Device Info", log.c_str());
#endif
}
2016-08-23 00:54:10 +01:00
void SettingsDialog::on_comboBox_presentation_mode_currentIndexChanged(int index)
{
2018-04-30 21:01:23 +01:00
CAppConfig::GetInstance().SetPreferenceInteger(PREF_CGSHANDLER_PRESENTATION_MODE, index);
2016-08-23 00:54:10 +01:00
}
void SettingsDialog::on_comboBox_res_multiplyer_currentIndexChanged(int index)
{
int factor = pow(2, index);
CAppConfig::GetInstance().SetPreferenceInteger(PREF_CGSH_OPENGL_RESOLUTION_FACTOR, factor);
}
2021-03-09 11:45:13 -05:00
//Audio Page ---------------------------------
void SettingsDialog::on_checkBox_enable_audio_clicked(bool checked)
{
CAppConfig::GetInstance().SetPreferenceBoolean(PREFERENCE_AUDIO_ENABLEOUTPUT, checked);
}
void SettingsDialog::on_spinBox_spuBlockCount_valueChanged(int value)
{
CAppConfig::GetInstance().SetPreferenceInteger(PREF_AUDIO_SPUBLOCKCOUNT, value);
}