[Qt] UI improvements (#3558)

* Qt: Show tooltips in description box

* Qt: implement description subscription

* Qt: add gamelist resize for ctrl-+/-/wheel (simple zoom)

* Qt: handle strict mode in gui tab

* Qt: more highdpi stuff

* Qt: remove old tooltips from settings_dialog

* Qt: conform cpublit tooltip to new subscription model
This commit is contained in:
Megamouse 2017-10-19 13:29:48 +02:00 committed by kd-11
parent b90a7dc66a
commit b3efa75206
23 changed files with 374 additions and 230 deletions

View file

@ -29,8 +29,10 @@ inline std::string sstr(const QVariant& _in) { return sstr(_in.toString()); }
settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std::shared_ptr<emu_settings> emuSettings, const int& tabIndex, QWidget *parent, const GameInfo* game)
: QDialog(parent), xgui_settings(guiSettings), xemu_settings(emuSettings), ui(new Ui::settings_dialog), m_tab_Index(tabIndex)
{
setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
ui->setupUi(this);
ui->cancelButton->setDefault(true);
ui->cancelButton->setFocus();
ui->tabWidget->setUsesScrollButtons(false);
bool showDebugTab = xgui_settings->GetValue(GUI::m_showDebugTab).toBool();
@ -40,6 +42,16 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
ui->tabWidget->removeTab(7);
}
// Add description labels
SubscribeDescription(ui->description_cpu);
SubscribeDescription(ui->description_gpu);
SubscribeDescription(ui->description_audio);
SubscribeDescription(ui->description_io);
SubscribeDescription(ui->description_system);
SubscribeDescription(ui->description_network);
SubscribeDescription(ui->description_emulator);
SubscribeDescription(ui->description_debug);
// read tooltips from json
QFile json_file(":/Json/tooltips.json");
json_file.open(QIODevice::ReadOnly | QIODevice::Text);
@ -56,7 +68,6 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
QJsonObject json_gpu = json_obj.value("gpu").toObject();
QJsonObject json_gpu_cbo = json_gpu.value("comboboxes").toObject();
QJsonObject json_gpu_main = json_gpu.value("main").toObject();
QJsonObject json_gpu_deb = json_gpu.value("debug").toObject();
QJsonObject json_gpu_slid = json_gpu.value("sliders").toObject();
QJsonObject json_audio = json_obj.value("audio").toObject();
@ -116,27 +127,27 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
// Checkboxes
xemu_settings->EnhanceCheckBox(ui->hookStFunc, emu_settings::HookStaticFuncs);
ui->hookStFunc->setToolTip(json_cpu_cbs["hookStFunc"].toString());
SubscribeTooltip(ui->hookStFunc, json_cpu_cbs["hookStFunc"].toString());
xemu_settings->EnhanceCheckBox(ui->bindSPUThreads, emu_settings::BindSPUThreads);
ui->bindSPUThreads->setToolTip(json_cpu_cbs["bindSPUThreads"].toString());
SubscribeTooltip(ui->bindSPUThreads, json_cpu_cbs["bindSPUThreads"].toString());
xemu_settings->EnhanceCheckBox(ui->lowerSPUThrPrio, emu_settings::LowerSPUThreadPrio);
ui->lowerSPUThrPrio->setToolTip(json_cpu_cbs["lowerSPUThrPrio"].toString());
SubscribeTooltip(ui->lowerSPUThrPrio, json_cpu_cbs["lowerSPUThrPrio"].toString());
xemu_settings->EnhanceCheckBox(ui->spuLoopDetection, emu_settings::SPULoopDetection);
ui->spuLoopDetection->setToolTip(json_cpu_cbs["spuLoopDetection"].toString());
SubscribeTooltip(ui->spuLoopDetection, json_cpu_cbs["spuLoopDetection"].toString());
// Comboboxes
xemu_settings->EnhanceComboBox(ui->preferredSPUThreads, emu_settings::PreferredSPUThreads, true);
ui->preferredSPUThreads->setToolTip(json_cpu_cbo["preferredSPUThreads"].toString());
SubscribeTooltip(ui->preferredSPUThreads, json_cpu_cbo["preferredSPUThreads"].toString());
ui->preferredSPUThreads->setItemText(ui->preferredSPUThreads->findData("0"), tr("Auto"));
// PPU tool tips
ui->ppu_precise->setToolTip(json_cpu_ppu["precise"].toString());
ui->ppu_fast->setToolTip(json_cpu_ppu["fast"].toString());
ui->ppu_llvm->setToolTip(json_cpu_ppu["LLVM"].toString());
SubscribeTooltip(ui->ppu_precise, json_cpu_ppu["precise"].toString());
SubscribeTooltip(ui->ppu_fast, json_cpu_ppu["fast"].toString());
SubscribeTooltip(ui->ppu_llvm, json_cpu_ppu["LLVM"].toString());
QButtonGroup *ppuBG = new QButtonGroup(this);
ppuBG->addButton(ui->ppu_precise, (int)ppu_decoder_type::precise);
@ -171,10 +182,10 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
}
// SPU tool tips
ui->spu_precise->setToolTip(json_cpu_spu["precise"].toString());
ui->spu_fast->setToolTip(json_cpu_spu["fast"].toString());
ui->spu_asmjit->setToolTip(json_cpu_spu["ASMJIT"].toString());
ui->spu_llvm->setToolTip(json_cpu_spu["LLVM"].toString());
SubscribeTooltip(ui->spu_precise, json_cpu_spu["precise"].toString());
SubscribeTooltip(ui->spu_fast, json_cpu_spu["fast"].toString());
SubscribeTooltip(ui->spu_asmjit, json_cpu_spu["ASMJIT"].toString());
SubscribeTooltip(ui->spu_llvm, json_cpu_spu["LLVM"].toString());
QButtonGroup *spuBG = new QButtonGroup(this);
spuBG->addButton(ui->spu_precise, (int)spu_decoder_type::precise);
@ -203,10 +214,10 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
}
// lib options tool tips
ui->lib_auto->setToolTip(json_cpu_lib["auto"].toString());
ui->lib_manu->setToolTip(json_cpu_lib["manual"].toString());
ui->lib_both->setToolTip(json_cpu_lib["both"].toString());
ui->lib_lv2->setToolTip(json_cpu_lib["liblv2"].toString());
SubscribeTooltip(ui->lib_auto, json_cpu_lib["auto"].toString());
SubscribeTooltip(ui->lib_manu, json_cpu_lib["manual"].toString());
SubscribeTooltip(ui->lib_both, json_cpu_lib["both"].toString());
SubscribeTooltip(ui->lib_lv2, json_cpu_lib["liblv2"].toString());
// creating this in ui file keeps scrambling the order...
QButtonGroup *libModeBG = new QButtonGroup(this);
@ -350,32 +361,29 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
emu_settings::Render_Creator render_creator = xemu_settings.get()->m_render_creator;
// Comboboxes
ui->graphicsAdapterBox->setToolTip(json_gpu_cbo["graphicsAdapterBox"].toString());
SubscribeTooltip(ui->graphicsAdapterBox, json_gpu_cbo["graphicsAdapterBox"].toString());
xemu_settings->EnhanceComboBox(ui->renderBox, emu_settings::Renderer);
ui->renderBox->setToolTip(json_gpu_cbo["renderBox"].toString());
#ifdef WIN32
SubscribeTooltip(ui->renderBox, json_gpu_cbo["renderBox"].toString());
#else
SubscribeTooltip(ui->renderBox, json_gpu_cbo["renderBox_Linux"].toString());
#endif
//Change D3D12 to D3D12[DO NOT USE]
for (int i = 0; i < ui->renderBox->count(); i++)
{
if (ui->renderBox->itemText(i) == "D3D12")
{
ui->renderBox->setItemText(i, render_creator.name_D3D12);
break;
}
}
ui->renderBox->setItemText(ui->renderBox->findData("D3D12"), render_creator.name_D3D12);
xemu_settings->EnhanceComboBox(ui->resBox, emu_settings::Resolution);
ui->resBox->setToolTip(json_gpu_cbo["resBox"].toString());
ui->resBox->setItemText(ui->resBox->findData("1280x720"), "1280x720 (Recommended)");
ui->resBox->setItemText(ui->resBox->findData("1280x720"), tr("1280x720 (Recommended)"));
SubscribeTooltip(ui->resBox, json_gpu_cbo["resBox"].toString());
xemu_settings->EnhanceComboBox(ui->aspectBox, emu_settings::AspectRatio);
ui->aspectBox->setToolTip(json_gpu_cbo["aspectBox"].toString());
SubscribeTooltip(ui->aspectBox, json_gpu_cbo["aspectBox"].toString());
xemu_settings->EnhanceComboBox(ui->frameLimitBox, emu_settings::FrameLimit);
ui->frameLimitBox->setToolTip(json_gpu_cbo["frameLimitBox"].toString());
SubscribeTooltip(ui->frameLimitBox, json_gpu_cbo["frameLimitBox"].toString());
xemu_settings->EnhanceComboBox(ui->anisotropicFilterOverride, emu_settings::AnisotropicFilterOverride, true);
ui->anisotropicFilterOverride->setToolTip(json_gpu_cbo["anisotropicFilterOverride"].toString());
SubscribeTooltip(ui->anisotropicFilterOverride, json_gpu_cbo["anisotropicFilterOverride"].toString());
// only allow values 0,2,4,8,16
for (int i = ui->anisotropicFilterOverride->count() - 1; i >= 0; i--)
{
@ -401,19 +409,24 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
// Checkboxes: main options
xemu_settings->EnhanceCheckBox(ui->dumpColor, emu_settings::WriteColorBuffers);
ui->dumpColor->setToolTip(json_gpu_main["dumpColor"].toString());
SubscribeTooltip(ui->dumpColor, json_gpu_main["dumpColor"].toString());
xemu_settings->EnhanceCheckBox(ui->vsync, emu_settings::VSync);
ui->vsync->setToolTip(json_gpu_main["vsync"].toString());
SubscribeTooltip(ui->vsync, json_gpu_main["vsync"].toString());
xemu_settings->EnhanceCheckBox(ui->gpuTextureScaling, emu_settings::GPUTextureScaling);
ui->gpuTextureScaling->setToolTip(json_gpu_main["gpuTextureScaling"].toString());
SubscribeTooltip(ui->gpuTextureScaling, json_gpu_main["gpuTextureScaling"].toString());
xemu_settings->EnhanceCheckBox(ui->stretchToDisplayArea, emu_settings::StretchToDisplayArea);
ui->stretchToDisplayArea->setToolTip(json_gpu_main["stretchToDisplayArea"].toString());
SubscribeTooltip(ui->stretchToDisplayArea, json_gpu_main["stretchToDisplayArea"].toString());
xemu_settings->EnhanceCheckBox(ui->scrictModeRendering, emu_settings::StrictRenderingMode);
ui->scrictModeRendering->setToolTip(json_gpu_main["scrictModeRendering"].toString());
SubscribeTooltip(ui->scrictModeRendering, json_gpu_main["scrictModeRendering"].toString());
connect(ui->scrictModeRendering, &QCheckBox::clicked, [=](bool checked)
{
ui->gb_resolutionScale->setEnabled(!checked);
ui->gb_minimumScalableDimension->setEnabled(!checked);
});
// Sliders
static const auto& minmaxLabelWidth = [](const QString& sizer)
@ -422,12 +435,13 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
};
xemu_settings->EnhanceSlider(ui->resolutionScale, emu_settings::ResolutionScale, true);
ui->gb_resolutionScale->setToolTip(json_gpu_slid["resolutionScale"].toString());
SubscribeTooltip(ui->gb_resolutionScale, json_gpu_slid["resolutionScale"].toString());
ui->gb_resolutionScale->setEnabled(!ui->scrictModeRendering->isChecked());
// rename label texts to fit current state of Resolution Scale
int resolutionScaleDef = stoi(xemu_settings->GetSettingDefault(emu_settings::ResolutionScale));
auto ScaledResolution = [resolutionScaleDef](int percentage)
{
if (percentage == resolutionScaleDef) return QString("100% (Automatic)");
if (percentage == resolutionScaleDef) return QString(tr("100% (Default)"));
return QString("%1% (%2x%3)").arg(percentage).arg(1280 * percentage / 100).arg(720 * percentage / 100);
};
ui->resolutionScale->setPageStep(50);
@ -446,12 +460,13 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
});
xemu_settings->EnhanceSlider(ui->minimumScalableDimension, emu_settings::MinimumScalableDimension, true);
ui->gb_minimumScalableDimension->setToolTip(json_gpu_slid["minimumScalableDimension"].toString());
SubscribeTooltip(ui->gb_minimumScalableDimension, json_gpu_slid["minimumScalableDimension"].toString());
ui->gb_minimumScalableDimension->setEnabled(!ui->scrictModeRendering->isChecked());
// rename label texts to fit current state of Minimum Scalable Dimension
int minimumScalableDimensionDef = stoi(xemu_settings->GetSettingDefault(emu_settings::MinimumScalableDimension));
auto MinScalableDimension = [minimumScalableDimensionDef](int dim)
{
if (dim == minimumScalableDimensionDef) return QString("%1x%1 (Default)").arg(dim);
if (dim == minimumScalableDimensionDef) return tr("%1x%1 (Default)").arg(dim);
return QString("%1x%1").arg(dim);
};
ui->minimumScalableDimension->setPageStep(64);
@ -596,18 +611,22 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
// Comboboxes
xemu_settings->EnhanceComboBox(ui->audioOutBox, emu_settings::AudioRenderer);
ui->audioOutBox->setToolTip(json_audio["audioOutBox"].toString());
#ifdef WIN32
SubscribeTooltip(ui->audioOutBox, json_audio["audioOutBox"].toString());
#else
SubscribeTooltip(ui->audioOutBox, json_audio["audioOutBox_Linux"].toString());
#endif
// Checkboxes
xemu_settings->EnhanceCheckBox(ui->audioDump, emu_settings::DumpToFile);
ui->audioDump->setToolTip(json_audio["audioDump"].toString());
SubscribeTooltip(ui->audioDump, json_audio["audioDump"].toString());
xemu_settings->EnhanceCheckBox(ui->convert, emu_settings::ConvertTo16Bit);
ui->convert->setToolTip(json_audio["convert"].toString());
SubscribeTooltip(ui->convert, json_audio["convert"].toString());
xemu_settings->EnhanceCheckBox(ui->downmix, emu_settings::DownmixStereo);
ui->downmix->setToolTip(json_audio["downmix"].toString());
SubscribeTooltip(ui->downmix, json_audio["downmix"].toString());
// _____ __ ____ _______ _
// |_ _| / / / __ \ |__ __| | |
@ -619,16 +638,16 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
// Comboboxes
xemu_settings->EnhanceComboBox(ui->keyboardHandlerBox, emu_settings::KeyboardHandler);
ui->keyboardHandlerBox->setToolTip(json_input["keyboardHandlerBox"].toString());
SubscribeTooltip(ui->keyboardHandlerBox, json_input["keyboardHandlerBox"].toString());
xemu_settings->EnhanceComboBox(ui->mouseHandlerBox, emu_settings::MouseHandler);
ui->mouseHandlerBox->setToolTip(json_input["mouseHandlerBox"].toString());
SubscribeTooltip(ui->mouseHandlerBox, json_input["mouseHandlerBox"].toString());
xemu_settings->EnhanceComboBox(ui->cameraTypeBox, emu_settings::CameraType);
ui->cameraTypeBox->setToolTip(json_input["cameraTypeBox"].toString());
SubscribeTooltip(ui->cameraTypeBox, json_input["cameraTypeBox"].toString());
xemu_settings->EnhanceComboBox(ui->cameraBox, emu_settings::Camera);
ui->cameraBox->setToolTip(json_input["cameraBox"].toString());
SubscribeTooltip(ui->cameraBox, json_input["cameraBox"].toString());
// _____ _ _______ _
// / ____| | | |__ __| | |
@ -642,12 +661,12 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
// Comboboxes
xemu_settings->EnhanceComboBox(ui->sysLangBox, emu_settings::Language);
ui->sysLangBox->setToolTip(json_sys["sysLangBox"].toString());
SubscribeTooltip(ui->sysLangBox, json_sys["sysLangBox"].toString());
// Checkboxes
xemu_settings->EnhanceCheckBox(ui->enableHostRoot, emu_settings::EnableHostRoot);
ui->enableHostRoot->setToolTip(json_sys["enableHostRoot"].toString());
SubscribeTooltip(ui->enableHostRoot, json_sys["enableHostRoot"].toString());
// _ _ _ _ _______ _
// | \ | | | | | | |__ __| | |
@ -659,7 +678,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
// Comboboxes
xemu_settings->EnhanceComboBox(ui->netStatusBox, emu_settings::ConnectionStatus);
ui->netStatusBox->setToolTip(json_net["netStatusBox"].toString());
SubscribeTooltip(ui->netStatusBox, json_net["netStatusBox"].toString());
// ______ _ _ _______ _
// | ____| | | | | |__ __| | |
@ -670,30 +689,31 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
// Comboboxes
ui->combo_configs->setToolTip(json_emu_gui["configs"].toString());
ui->combo_stylesheets->setToolTip(json_emu_gui["stylesheets"].toString());
SubscribeTooltip(ui->combo_configs, json_emu_gui["configs"].toString());
SubscribeTooltip(ui->combo_stylesheets, json_emu_gui["stylesheets"].toString());
// Checkboxes
ui->gs_resizeOnBoot->setToolTip(json_emu_misc["gs_resizeOnBoot"].toString());
ui->gs_disableMouse->setToolTip(json_emu_misc["gs_disableMouse"].toString());
ui->cb_show_welcome->setToolTip(json_emu_gui["show_welcome"].toString());
SubscribeTooltip(ui->gs_resizeOnBoot, json_emu_misc["gs_resizeOnBoot"].toString());
ui->cb_custom_colors->setToolTip(json_emu_gui["custom_colors"].toString());
SubscribeTooltip(ui->gs_disableMouse, json_emu_misc["gs_disableMouse"].toString());
SubscribeTooltip(ui->cb_show_welcome, json_emu_gui["show_welcome"].toString());
SubscribeTooltip(ui->cb_custom_colors, json_emu_gui["custom_colors"].toString());
xemu_settings->EnhanceCheckBox(ui->exitOnStop, emu_settings::ExitRPCS3OnFinish);
ui->exitOnStop->setToolTip(json_emu_misc["exitOnStop"].toString());
SubscribeTooltip(ui->exitOnStop, json_emu_misc["exitOnStop"].toString());
xemu_settings->EnhanceCheckBox(ui->alwaysStart, emu_settings::StartOnBoot);
ui->alwaysStart->setToolTip(json_emu_misc["alwaysStart"].toString());
SubscribeTooltip(ui->alwaysStart, json_emu_misc["alwaysStart"].toString());
xemu_settings->EnhanceCheckBox(ui->startGameFullscreen, emu_settings::StartGameFullscreen);
ui->startGameFullscreen->setToolTip(json_emu_misc["startGameFullscreen"].toString());
SubscribeTooltip(ui->startGameFullscreen, json_emu_misc["startGameFullscreen"].toString());
xemu_settings->EnhanceCheckBox(ui->showFPSInTitle, emu_settings::ShowFPSInTitle);
ui->showFPSInTitle->setToolTip(json_emu_misc["showFPSInTitle"].toString());
SubscribeTooltip(ui->showFPSInTitle, json_emu_misc["showFPSInTitle"].toString());
if (game)
{
@ -754,8 +774,8 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
{
m_currentConfig = GUI::Default;
m_currentStylesheet = GUI::Default;
ui->combo_configs->setCurrentText(GUI::Default);
ui->combo_stylesheets->setCurrentText(GUI::Default);
ui->combo_configs->setCurrentIndex(0);
ui->combo_stylesheets->setCurrentIndex(0);
}
// Only attempt to load a config if changes occurred.
if (m_currentConfig != xgui_settings->GetValue(GUI::m_currentConfig).toString())
@ -861,13 +881,11 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
ui->gs_width->setEnabled(enableButtons);
ui->gs_height->setEnabled(enableButtons);
QRect rec = QApplication::desktop()->screenGeometry();
QRect screen = QApplication::desktop()->screenGeometry();
int width = xgui_settings->GetValue(GUI::gs_width).toInt();
int height = xgui_settings->GetValue(GUI::gs_height).toInt();
const int max_width = rec.width();
const int max_height = rec.height();
ui->gs_width->setValue(width < max_width ? width : max_width);
ui->gs_height->setValue(height < max_height ? height : max_height);
ui->gs_width->setValue(std::min(width, screen.width()));
ui->gs_height->setValue(std::min(height, screen.height()));
connect(ui->gs_resizeOnBoot, &QCheckBox::clicked, [=](bool val)
{
@ -875,19 +893,15 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
ui->gs_width->setEnabled(val);
ui->gs_height->setEnabled(val);
});
connect(ui->gs_width, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), [=](int w)
connect(ui->gs_width, &QSpinBox::editingFinished, [=]()
{
int width = QApplication::desktop()->screenGeometry().width();
w = w > width ? width : w;
ui->gs_width->setValue(w);
xgui_settings->SetValue(GUI::gs_width, w);
ui->gs_width->setValue(std::min(ui->gs_width->value(), QApplication::desktop()->screenGeometry().width()));
xgui_settings->SetValue(GUI::gs_width, ui->gs_width->value());
});
connect(ui->gs_height, static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged), [=](int h)
connect(ui->gs_height, &QSpinBox::editingFinished, [=]()
{
int height = QApplication::desktop()->screenGeometry().height();
h = h > height ? height : h;
ui->gs_height->setValue(h);
xgui_settings->SetValue(GUI::gs_height, h);
ui->gs_height->setValue(std::min(ui->gs_height->value(), QApplication::desktop()->screenGeometry().height()));
xgui_settings->SetValue(GUI::gs_height, ui->gs_height->value());
});
AddConfigs();
@ -905,46 +919,44 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> guiSettings, std:
// Checkboxes: gpu debug options
xemu_settings->EnhanceCheckBox(ui->glLegacyBuffers, emu_settings::LegacyBuffers);
ui->glLegacyBuffers->setToolTip(json_debug["glLegacyBuffers"].toString());
SubscribeTooltip(ui->glLegacyBuffers, json_debug["glLegacyBuffers"].toString());
xemu_settings->EnhanceCheckBox(ui->forceHighpZ, emu_settings::ForceHighpZ);
ui->forceHighpZ->setToolTip(json_debug["forceHighpZ"].toString());
SubscribeTooltip(ui->forceHighpZ, json_debug["forceHighpZ"].toString());
xemu_settings->EnhanceCheckBox(ui->debugOutput, emu_settings::DebugOutput);
ui->debugOutput->setToolTip(json_debug["debugOutput"].toString());
SubscribeTooltip(ui->debugOutput, json_debug["debugOutput"].toString());
xemu_settings->EnhanceCheckBox(ui->debugOverlay, emu_settings::DebugOverlay);
ui->debugOverlay->setToolTip(json_debug["debugOverlay"].toString());
SubscribeTooltip(ui->debugOverlay, json_debug["debugOverlay"].toString());
xemu_settings->EnhanceCheckBox(ui->logProg, emu_settings::LogShaderPrograms);
ui->logProg->setToolTip(json_debug["logProg"].toString());
SubscribeTooltip(ui->logProg, json_debug["logProg"].toString());
xemu_settings->EnhanceCheckBox(ui->readColor, emu_settings::ReadColorBuffers);
ui->readColor->setToolTip(json_debug["readColor"].toString());
SubscribeTooltip(ui->readColor, json_debug["readColor"].toString());
xemu_settings->EnhanceCheckBox(ui->dumpDepth, emu_settings::WriteDepthBuffer);
ui->dumpDepth->setToolTip(json_debug["dumpDepth"].toString());
SubscribeTooltip(ui->dumpDepth, json_debug["dumpDepth"].toString());
xemu_settings->EnhanceCheckBox(ui->readDepth, emu_settings::ReadDepthBuffer);
ui->readDepth->setToolTip(json_debug["readDepth"].toString());
SubscribeTooltip(ui->readDepth, json_debug["readDepth"].toString());
xemu_settings->EnhanceCheckBox(ui->disableVertexCache, emu_settings::DisableVertexCache);
ui->disableVertexCache->setToolTip(json_debug["disableVertexCache"].toString());
SubscribeTooltip(ui->disableVertexCache, json_debug["disableVertexCache"].toString());
xemu_settings->EnhanceCheckBox(ui->disableHwOcclusionQueries, emu_settings::DisableOcclusionQueries);
ui->disableHwOcclusionQueries->setToolTip(json_debug["disableOcclusionQueries"].toString());
SubscribeTooltip(ui->disableHwOcclusionQueries, json_debug["disableOcclusionQueries"].toString());
xemu_settings->EnhanceCheckBox(ui->forceCpuBlitEmulation, emu_settings::ForceCPUBlitEmulation);
ui->forceCpuBlitEmulation->setToolTip(json_debug["forceCpuBlitEmulation"].toString());
SubscribeTooltip(ui->forceCpuBlitEmulation, json_debug["forceCpuBlitEmulation"].toString());
// Checkboxes: core debug options
xemu_settings->EnhanceCheckBox(ui->ppuDebug, emu_settings::PPUDebug);
ui->ppuDebug->setToolTip(json_debug["ppuDebug"].toString());
//TODO: Subscribe
SubscribeTooltip(ui->ppuDebug, json_debug["ppuDebug"].toString());
xemu_settings->EnhanceCheckBox(ui->spuDebug, emu_settings::SPUDebug);
ui->spuDebug->setToolTip(json_debug["spuDebug"].toString());
//TODO: Subscribe
SubscribeTooltip(ui->spuDebug, json_debug["spuDebug"].toString());
//
// Layout fix for High Dpi
@ -988,19 +1000,19 @@ void settings_dialog::AddStylesheets()
{
ui->combo_stylesheets->clear();
ui->combo_stylesheets->addItem(GUI::Default);
ui->combo_stylesheets->addItem("Default (Bright)", GUI::Default);
for (QString entry : xgui_settings->GetStylesheetEntries())
for (const QString& entry : xgui_settings->GetStylesheetEntries())
{
if (entry != GUI::Default)
{
ui->combo_stylesheets->addItem(entry);
ui->combo_stylesheets->addItem(entry, entry);
}
}
m_currentStylesheet = xgui_settings->GetValue(GUI::m_currentStylesheet).toString();
int index = ui->combo_stylesheets->findText(m_currentStylesheet);
int index = ui->combo_stylesheets->findData(m_currentStylesheet);
if (index != -1)
{
ui->combo_stylesheets->setCurrentIndex(index);
@ -1055,7 +1067,7 @@ void settings_dialog::OnApplyConfig()
void settings_dialog::OnApplyStylesheet()
{
m_currentStylesheet = ui->combo_stylesheets->currentText();
m_currentStylesheet = ui->combo_stylesheets->currentData().toString();
xgui_settings->SetValue(GUI::m_currentStylesheet, m_currentStylesheet);
Q_EMIT GuiStylesheetRequest(xgui_settings->GetCurrentStylesheetPath());
}
@ -1069,3 +1081,42 @@ int settings_dialog::exec()
QTimer::singleShot(0, [=]{ ui->tabWidget->setCurrentIndex(m_tab_Index); });
return QDialog::exec();
}
void settings_dialog::SubscribeDescription(QLabel* description)
{
description->setFixedHeight(description->sizeHint().height());
m_description_labels.append(QPair<QLabel*, QString>(description, description->text()));
}
void settings_dialog::SubscribeTooltip(QObject* object, const QString& tooltip)
{
m_descriptions[object] = tooltip;
object->installEventFilter(this);
}
// Thanks Dolphin
bool settings_dialog::eventFilter(QObject* object, QEvent* event)
{
if (!m_descriptions.contains(object))
{
return QDialog::eventFilter(object, event);
}
int i = ui->tabWidget->currentIndex();
QLabel* label = m_description_labels[i].first;
if (event->type() == QEvent::Enter)
{
label->setText(m_descriptions[object]);
return QDialog::eventFilter(object, event);
}
QString description = m_description_labels[i].second;
if (event->type() == QEvent::Leave)
{
label->setText(description);
}
return QDialog::eventFilter(object, event);
}