Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GUI maintenance #8057

Merged
merged 4 commits into from
Apr 17, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
61 changes: 52 additions & 9 deletions rpcs3/rpcs3qt/emu_settings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ namespace cfg_adapter
}

/** Returns possible options for values for some particular setting.*/
static QStringList getOptions(cfg_location location)
static QStringList get_options(cfg_location location)
{
QStringList values;
auto begin = location.cbegin();
Expand All @@ -105,6 +105,14 @@ static QStringList getOptions(cfg_location location)
return values;
}

/** Returns dynamic property for some particular setting.*/
static bool get_is_dynamic(cfg_location location)
{
auto begin = location.cbegin();
auto end = location.cend();
return cfg_adapter::get_cfg(g_cfg, begin, end).get_is_dynamic();
}

emu_settings::emu_settings()
: QObject()
, m_render_creator(new render_creator(this))
Expand Down Expand Up @@ -212,17 +220,17 @@ void emu_settings::EnhanceComboBox(QComboBox* combobox, emu_settings_type type,

for (int i = range.first().toInt(); i <= max_item; i++)
{
combobox->addItem(QString::number(i), QVariant(QString::number(i)));
combobox->addItem(QString::number(i), i);
}
}
else
{
const QStringList settings = GetSettingOptions(type);

for (const QString& setting : settings)
for (int i = 0; i < settings.count(); i++)
{
const QString localized_setting = GetLocalizedSetting(setting, type, combobox->count());
combobox->addItem(localized_setting, QVariant(setting));
const QString localized_setting = GetLocalizedSetting(settings[i], type, combobox->count());
combobox->addItem(localized_setting, QVariant({settings[i], i}));
}

if (sorted)
Expand All @@ -232,7 +240,27 @@ void emu_settings::EnhanceComboBox(QComboBox* combobox, emu_settings_type type,
}

const std::string selected = GetSetting(type);
const int index = combobox->findData(qstr(selected));
const QString selected_q = qstr(selected);
int index = -1;

if (is_ranged)
{
index = combobox->findData(selected_q);
}
else
{
for (int i = 0; i < combobox->count(); i++)
{
const QVariantList var_list = combobox->itemData(i).toList();
ASSERT(var_list.size() == 2 && var_list[0].canConvert<QString>());

if (selected_q == var_list[0].toString())
{
index = i;
break;
}
}
}

if (index == -1)
{
Expand All @@ -248,7 +276,16 @@ void emu_settings::EnhanceComboBox(QComboBox* combobox, emu_settings_type type,

connect(combobox, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [=, this](int index)
{
SetSetting(type, sstr(combobox->itemData(index)));
if (is_ranged)
{
SetSetting(type, sstr(combobox->itemData(index)));
}
else
{
const QVariantList var_list = combobox->itemData(index).toList();
ASSERT(var_list.size() == 2 && var_list[0].canConvert<QString>());
SetSetting(type, sstr(var_list[0]));
}
});
}

Expand Down Expand Up @@ -414,7 +451,7 @@ void emu_settings::EnhanceDoubleSpinBox(QDoubleSpinBox* spinbox, emu_settings_ty
});
}

void emu_settings::EnhanceEdit(QLineEdit* edit, emu_settings_type type)
void emu_settings::EnhanceLineEdit(QLineEdit* edit, emu_settings_type type)
{
if (!edit)
{
Expand Down Expand Up @@ -478,7 +515,7 @@ void emu_settings::SaveSelectedLibraries(const std::vector<std::string>& libs)

QStringList emu_settings::GetSettingOptions(emu_settings_type type) const
{
return getOptions(const_cast<cfg_location&&>(m_settings_location[type]));
return get_options(const_cast<cfg_location&&>(m_settings_location[type]));
}

std::string emu_settings::GetSettingName(emu_settings_type type) const
Expand Down Expand Up @@ -721,3 +758,9 @@ QString emu_settings::GetLocalizedSetting(const QString& original, emu_settings_

return original;
}

bool emu_settings::GetIsDynamicConfig(emu_settings_type type)
{
const cfg_location loc = m_settings_location[type];
return get_is_dynamic(loc);
}
4 changes: 3 additions & 1 deletion rpcs3/rpcs3qt/emu_settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ class emu_settings : public QObject
void EnhanceDoubleSpinBox(QDoubleSpinBox* slider, emu_settings_type type, const QString& prefix = "", const QString& suffix = "");

/** Connects a line edit with the target settings type*/
void EnhanceEdit(QLineEdit* edit, emu_settings_type type);
void EnhanceLineEdit(QLineEdit* edit, emu_settings_type type);

/** Connects a button group with the target settings type*/
void EnhanceRadioButton(QButtonGroup* button_group, emu_settings_type type);
Expand Down Expand Up @@ -89,6 +89,8 @@ class emu_settings : public QObject
/** Get a localized and therefore freely adjustable version of the string used in config.yml.*/
QString GetLocalizedSetting(const QString& original, emu_settings_type type, int index) const;

bool GetIsDynamicConfig(emu_settings_type type);

public Q_SLOTS:
/** Writes the unsaved settings to file. Used in settings dialog on accept.*/
void SaveSettings();
Expand Down
5 changes: 5 additions & 0 deletions rpcs3/rpcs3qt/qt_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,11 @@ namespace gui
return dummy_font.font();
}

int get_label_width(const QString& text)
{
return QLabel(text).sizeHint().width();
}

QImage get_opaque_image_area(const QString& path)
{
QImage image = QImage(path);
Expand Down
3 changes: 3 additions & 0 deletions rpcs3/rpcs3qt/qt_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,9 @@ namespace gui
// Returns the font of the QLabels with object_name
QFont get_label_font(const QString& object_name);

// Returns the width of the text
int get_label_width(const QString& text);

// Returns the part of the image loaded from path that is inside the bounding box of its opaque areas
QImage get_opaque_image_area(const QString& path);

Expand Down
108 changes: 46 additions & 62 deletions rpcs3/rpcs3qt/settings_dialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std

m_emu_settings->EnhanceComboBox(ui->preferredSPUThreads, emu_settings_type::PreferredSPUThreads, true);
SubscribeTooltip(ui->gb_spu_threads, tooltips.settings.preferred_spu_threads);
ui->preferredSPUThreads->setItemText(ui->preferredSPUThreads->findData("0"), tr("Auto", "Preferred SPU threads"));
ui->preferredSPUThreads->setItemText(ui->preferredSPUThreads->findData(0), tr("Auto", "Preferred SPU threads"));

if (utils::has_rtm())
{
Expand Down Expand Up @@ -420,10 +420,6 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
});

// Sliders
static const auto& minmax_label_width = [](const QString& sizer)
{
return QLabel(sizer).sizeHint().width();
};

m_emu_settings->EnhanceSlider(ui->resolutionScale, emu_settings_type::ResolutionScale);
SubscribeTooltip(ui->gb_resolutionScale, tooltips.settings.resolution_scale);
Expand All @@ -440,11 +436,11 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
};
ui->resolutionScale->setPageStep(50);
ui->resolutionScaleMin->setText(QString::number(ui->resolutionScale->minimum()));
ui->resolutionScaleMin->setFixedWidth(minmax_label_width("00"));
ui->resolutionScaleMin->setFixedWidth(gui::utils::get_label_width(QStringLiteral("00")));
ui->resolutionScaleMax->setText(QString::number(ui->resolutionScale->maximum()));
ui->resolutionScaleMax->setFixedWidth(minmax_label_width("0000"));
ui->resolutionScaleMax->setFixedWidth(gui::utils::get_label_width(QStringLiteral("0000")));
ui->resolutionScaleVal->setText(scaled_resolution(ui->resolutionScale->value()));
connect(ui->resolutionScale, &QSlider::valueChanged, [=, this](int value)
connect(ui->resolutionScale, &QSlider::valueChanged, [scaled_resolution, this](int value)
{
ui->resolutionScaleVal->setText(scaled_resolution(value));
});
Expand All @@ -469,9 +465,9 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
};
ui->minimumScalableDimension->setPageStep(64);
ui->minimumScalableDimensionMin->setText(QString::number(ui->minimumScalableDimension->minimum()));
ui->minimumScalableDimensionMin->setFixedWidth(minmax_label_width("00"));
ui->minimumScalableDimensionMin->setFixedWidth(gui::utils::get_label_width(QStringLiteral("00")));
ui->minimumScalableDimensionMax->setText(QString::number(ui->minimumScalableDimension->maximum()));
ui->minimumScalableDimensionMax->setFixedWidth(minmax_label_width("0000"));
ui->minimumScalableDimensionMax->setFixedWidth(gui::utils::get_label_width(QStringLiteral("0000")));
ui->minimumScalableDimensionVal->setText(min_scalable_dimension(ui->minimumScalableDimension->value()));
connect(ui->minimumScalableDimension, &QSlider::valueChanged, [=, this](int value)
{
Expand Down Expand Up @@ -633,63 +629,51 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
enable_time_stretching_options(enabled && ui->enableTimeStretching->isChecked());
};

auto enable_buffering = [this, enable_buffering_options](const QString& text)
auto enable_buffering = [this, enable_buffering_options](int index)
{
const QVariantList var_list = ui->audioOutBox->itemData(index).toList();
ASSERT(var_list.size() == 2 && var_list[0].canConvert<QString>());
const QString text = var_list[0].toString();
const bool enabled = text == "XAudio2" || text == "OpenAL" || text == "FAudio";
ui->enableBuffering->setEnabled(enabled);
enable_buffering_options(enabled && ui->enableBuffering->isChecked());
};

const QString mic_none = m_emu_settings->m_microphone_creator.get_none();

auto change_microphone_type = [=, this](QString text)
auto change_microphone_type = [mic_none, this](int index)
{
std::string s_standard, s_singstar, s_realsingstar, s_rocksmith;

auto enable_mics_combo = [=, this](u32 max)
{
ui->microphone1Box->setEnabled(true);

if (max == 1 || ui->microphone1Box->currentText() == mic_none)
return;

ui->microphone2Box->setEnabled(true);

if (max > 2 && ui->microphone2Box->currentText() != mic_none)
{
ui->microphone3Box->setEnabled(true);
if (ui->microphone3Box->currentText() != mic_none)
{
ui->microphone4Box->setEnabled(true);
}
}
};

ui->microphone1Box->setEnabled(false);
ui->microphone2Box->setEnabled(false);
ui->microphone3Box->setEnabled(false);
ui->microphone4Box->setEnabled(false);

fmt_class_string<microphone_handler>::format(s_standard, static_cast<u64>(microphone_handler::standard));
fmt_class_string<microphone_handler>::format(s_singstar, static_cast<u64>(microphone_handler::singstar));
fmt_class_string<microphone_handler>::format(s_realsingstar, static_cast<u64>(microphone_handler::real_singstar));
fmt_class_string<microphone_handler>::format(s_rocksmith, static_cast<u64>(microphone_handler::rocksmith));

if (text == s_standard.c_str())
if (index < 0)
{
enable_mics_combo(4);
return;
}
if (text == s_singstar.c_str())
{
enable_mics_combo(2);
return;
}
if (text == s_realsingstar.c_str() || text == s_rocksmith.c_str())

const QVariantList var_list = ui->microphoneBox->itemData(index).toList();
ASSERT(var_list.size() == 2 && var_list[1].canConvert<int>());
const int handler_id = var_list[1].toInt();
int max = 0;

switch (static_cast<microphone_handler>(handler_id))
{
enable_mics_combo(1);
return;
case microphone_handler::standard:
max = 4;
break;
case microphone_handler::singstar:
max = 2;
break;
case microphone_handler::real_singstar:
case microphone_handler::rocksmith:
max = 1;
break;
case microphone_handler::null:
default:
break;
}

ui->microphone1Box->setEnabled(max > 0);
ui->microphone2Box->setEnabled(max > 1 && ui->microphone1Box->currentText() != mic_none);
ui->microphone3Box->setEnabled(max > 2 && ui->microphone2Box->currentText() != mic_none);
ui->microphone4Box->setEnabled(ui->microphone3Box->isEnabled() && ui->microphone3Box->currentText() != mic_none);
};

auto propagate_used_devices = [=, this]()
Expand All @@ -709,7 +693,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
mics_combo[index]->setCurrentText(cur_item);
mics_combo[index]->blockSignals(false);
}
change_microphone_type(ui->microphoneBox->currentText());
change_microphone_type(ui->microphoneBox->currentIndex());
};

auto change_microphone_device = [=, this](u32 next_index, QString text)
Expand All @@ -728,7 +712,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
#else
SubscribeTooltip(ui->gb_audio_out, tooltips.settings.audio_out_linux);
#endif
connect(ui->audioOutBox, &QComboBox::currentTextChanged, enable_buffering);
connect(ui->audioOutBox, QOverload<int>::of(&QComboBox::currentIndexChanged), enable_buffering);

// Microphone Comboboxes
mics_combo[0] = ui->microphone1Box;
Expand Down Expand Up @@ -764,7 +748,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std

m_emu_settings->EnhanceComboBox(ui->microphoneBox, emu_settings_type::MicrophoneType);
SubscribeTooltip(ui->microphoneBox, tooltips.settings.microphone);
connect(ui->microphoneBox, &QComboBox::currentTextChanged, change_microphone_type);
connect(ui->microphoneBox, QOverload<int>::of(&QComboBox::currentIndexChanged), change_microphone_type);
propagate_used_devices(); // Enables/Disables comboboxes and checks values from config for sanity

// Checkboxes
Expand All @@ -786,7 +770,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
SubscribeTooltip(ui->enableTimeStretching, tooltips.settings.enable_time_stretching);
connect(ui->enableTimeStretching, &QCheckBox::clicked, enable_time_stretching_options);

enable_buffering(ui->audioOutBox->currentText());
enable_buffering(ui->audioOutBox->currentIndex());

// Sliders

Expand Down Expand Up @@ -873,13 +857,13 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std

// Edits

m_emu_settings->EnhanceEdit(ui->edit_dns, emu_settings_type::DNSAddress);
m_emu_settings->EnhanceLineEdit(ui->edit_dns, emu_settings_type::DNSAddress);
SubscribeTooltip(ui->gb_edit_dns, tooltips.settings.dns);

m_emu_settings->EnhanceEdit(ui->edit_npid, emu_settings_type::PSNNPID);
m_emu_settings->EnhanceLineEdit(ui->edit_npid, emu_settings_type::PSNNPID);
SubscribeTooltip(ui->gb_edit_npid, tooltips.settings.psn_npid);

m_emu_settings->EnhanceEdit(ui->edit_swaps, emu_settings_type::IpSwapList);
m_emu_settings->EnhanceLineEdit(ui->edit_swaps, emu_settings_type::IpSwapList);
SubscribeTooltip(ui->gb_edit_swaps, tooltips.settings.dns_swap);

// Comboboxes
Expand Down Expand Up @@ -956,7 +940,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std
// Comboboxes

m_emu_settings->EnhanceComboBox(ui->maxSPURSThreads, emu_settings_type::MaxSPURSThreads, true);
ui->maxSPURSThreads->setItemText(ui->maxSPURSThreads->findData("6"), tr("Unlimited (Default)", "Max SPURS threads"));
ui->maxSPURSThreads->setItemText(ui->maxSPURSThreads->findData(6), tr("Unlimited (Default)", "Max SPURS threads"));
SubscribeTooltip(ui->gb_max_spurs_threads, tooltips.settings.max_spurs_threads);

m_emu_settings->EnhanceComboBox(ui->sleepTimersAccuracy, emu_settings_type::SleepTimersAccuracy);
Expand Down Expand Up @@ -1148,7 +1132,7 @@ settings_dialog::settings_dialog(std::shared_ptr<gui_settings> gui_settings, std

m_emu_settings->EnhanceComboBox(ui->maxLLVMThreads, emu_settings_type::MaxLLVMThreads, true, true, std::thread::hardware_concurrency());
SubscribeTooltip(ui->gb_max_llvm, tooltips.settings.max_llvm_threads);
ui->maxLLVMThreads->setItemText(ui->maxLLVMThreads->findData("0"), tr("All (%1)", "Max LLVM threads").arg(std::thread::hardware_concurrency()));
ui->maxLLVMThreads->setItemText(ui->maxLLVMThreads->findData(0), tr("All (%1)", "Max LLVM threads").arg(std::thread::hardware_concurrency()));

m_emu_settings->EnhanceComboBox(ui->perfOverlayDetailLevel, emu_settings_type::PerfOverlayDetailLevel);
SubscribeTooltip(ui->perf_overlay_detail_level, tooltips.settings.perf_overlay_detail_level);
Expand Down