Skip to content

Commit

Permalink
Merge branch 'master' into debugger
Browse files Browse the repository at this point in the history
  • Loading branch information
elad335 committed Apr 17, 2020
2 parents 3446dbd + 7ba5f1f commit ec993c5
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 83 deletions.
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

0 comments on commit ec993c5

Please sign in to comment.