diff options
Diffstat (limited to 'gui/process_detector.cpp')
| -rw-r--r-- | gui/process_detector.cpp | 100 |
1 files changed, 57 insertions, 43 deletions
diff --git a/gui/process_detector.cpp b/gui/process_detector.cpp index b29df7fb..74e8caac 100644 --- a/gui/process_detector.cpp +++ b/gui/process_detector.cpp @@ -18,55 +18,70 @@ #include <QHash> #include <QPushButton> #include <QSettings> +#include <QtEvents> -static constexpr inline auto RECORD_SEPARATOR = QChar(char(0x1e)); // RS ^] -static constexpr inline auto UNIT_SEPARATOR = QChar(char(0x1f)); // US ^_ +static constexpr auto RECORD_SEPARATOR = QChar(char(0x1e)); // RS ^] +static constexpr auto UNIT_SEPARATOR = QChar(char(0x1f)); // US ^_ using namespace options; +using namespace options::globals; void proc_detector_settings::set_game_list(const QString &game_list) { - group::with_global_settings_object([&](QSettings& settings) { + with_global_settings_object([&](QSettings& settings) { settings.setValue("executable-list", game_list); + mark_global_ini_modified(); }); } QString proc_detector_settings::get_game_list() { - return group::with_global_settings_object([&](QSettings& settings) { + return with_global_settings_object([&](QSettings& settings) { return settings.value("executable-list").toString(); }); } bool proc_detector_settings::is_enabled() { - return group::with_global_settings_object([&](QSettings& settings) { + return with_global_settings_object([&](QSettings& settings) { return settings.value("executable-detector-enabled", false).toBool(); }); } void proc_detector_settings::set_is_enabled(bool enabled) { - group::with_global_settings_object([&](QSettings& settings) { + with_global_settings_object([&](QSettings& settings) { settings.setValue("executable-detector-enabled", enabled); + mark_global_ini_modified(); }); } +#ifdef __GNUG__ +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +#endif + QHash<QString, QString> proc_detector_settings::split_process_names() { - QHash<QString, QString> ret; QString str = get_game_list(); - QStringList pairs = str.split(RECORD_SEPARATOR, QString::SkipEmptyParts); - for (auto pair : pairs) + constexpr auto split_flag = +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + Qt::SkipEmptyParts; +#else + QString::SkipEmptyParts; +#endif + QStringList pairs = str.split(RECORD_SEPARATOR, split_flag); + QHash<QString, QString> ret; + ret.reserve(pairs.size() * 2); + for (auto const& pair : pairs) { - QList<QString> tmp = pair.split(UNIT_SEPARATOR); + QStringList tmp = pair.split(UNIT_SEPARATOR); if (tmp.count() != 2) continue; if (tmp[0].contains(UNIT_SEPARATOR) || tmp[0].contains(RECORD_SEPARATOR)) continue; if (tmp[1].contains(UNIT_SEPARATOR) || tmp[1].contains(RECORD_SEPARATOR)) continue; - if (tmp[0] == QLatin1String("") || tmp[1] == QLatin1String("")) + if (tmp[0].isEmpty() || tmp[1].isEmpty()) continue; ret[tmp[0]] = tmp[1]; } @@ -75,29 +90,27 @@ QHash<QString, QString> proc_detector_settings::split_process_names() void BrowseButton::browse() { - QFileDialog dialog(this); - dialog.setFileMode(QFileDialog::ExistingFile); - QString dir_path = QFileInfo(group::ini_pathname()).absolutePath(); - QString filename = dialog.getOpenFileName( - this, - tr("Set executable name"), - dir_path, - tr("Executable (*.exe);;All Files (*)")); + QString dir_path = QFileInfo(ini_pathname()).absolutePath(); + QString filename = QFileDialog::getOpenFileName( + this, + tr("Set executable name"), + dir_path, + tr("Executable (*.exe);;All Files (*)")); QDir::setCurrent(OPENTRACK_BASE_PATH); filename = QFileInfo(filename).fileName(); if (!filename.isNull()) twi->setText(filename); } -int process_detector::add_row(QString exe_name, QString profile) +int process_detector::add_row(QString const& exe_name, QString const& profile) { int i = ui.tableWidget->rowCount(); ui.tableWidget->insertRow(i); QComboBox* cb = new QComboBox(); cb->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); - cb->addItem(""); - cb->addItems(group::ini_list()); + cb->addItems(ini_list()); + cb->setCurrentText(ini_filename()); ui.tableWidget->setCellWidget(i, 1, cb); QTableWidgetItem* twi = new QTableWidgetItem(exe_name); @@ -106,7 +119,7 @@ int process_detector::add_row(QString exe_name, QString profile) { BrowseButton* b = new BrowseButton(twi); b->setText("..."); - QObject::connect(b, SIGNAL(clicked()), b, SLOT(browse())); + QObject::connect(b, &BrowseButton::clicked, b, &BrowseButton::browse); ui.tableWidget->setCellWidget(i, 2, b); } @@ -115,13 +128,14 @@ int process_detector::add_row(QString exe_name, QString profile) return i; } -void process_detector::add_items() +void process_detector::load_rows() { + for (int k = ui.tableWidget->size().height() - 1; k >= 0; k--) + ui.tableWidget->removeRow(k); auto names = s.split_process_names(); - ui.tableWidget->clearContents(); auto keys = names.keys(); std::sort(keys.begin(), keys.end()); - for (auto n : keys) + for (auto const& n : keys) add_row(n, names[n]); } @@ -131,13 +145,10 @@ process_detector::process_detector(QWidget* parent) : QWidget(parent) connect(ui.add, SIGNAL(clicked()), this, SLOT(add())); connect(ui.remove, SIGNAL(clicked()), this, SLOT(remove())); - add_items(); + load_rows(); QResizeEvent e(ui.tableWidget->size(), ui.tableWidget->size()); ui.tableWidget->resizeEvent(&e); - - proc_detector_settings s; - ui.enabled->setChecked(s.is_enabled()); } @@ -148,7 +159,10 @@ void process_detector::save() for (int i = 0; i < ui.tableWidget->rowCount(); i++) { auto exe = ui.tableWidget->item(i, 0)->text(); - auto profile = reinterpret_cast<QComboBox*>(ui.tableWidget->cellWidget(i, 1))->currentText(); + auto widget = qobject_cast<QComboBox*>(ui.tableWidget->cellWidget(i, 1)); + if (!widget) + continue; + auto profile = widget->currentText(); str += RECORD_SEPARATOR + exe + UNIT_SEPARATOR + profile; } @@ -158,6 +172,8 @@ void process_detector::save() void process_detector::revert() { + load_rows(); + ui.enabled->setChecked(s.is_enabled()); } void process_detector::add() @@ -174,14 +190,14 @@ void process_detector::remove() bool process_detector_worker::should_stop() { - if (last_exe_name == "") + if (last_exe_name == QString()) return false; proc_detector_settings s; if (!s.is_enabled()) { - last_exe_name = ""; + last_exe_name = QString{}; return false; } @@ -190,17 +206,17 @@ bool process_detector_worker::should_stop() if (exe_list.contains(last_exe_name)) return false; - last_exe_name = ""; + last_exe_name = QString{}; return true; } -bool process_detector_worker::config_to_start(QString& str) +bool process_detector_worker::profile_to_start(QString& str) { proc_detector_settings s; if (!s.is_enabled()) { - last_exe_name = ""; + last_exe_name = QString{}; return false; } @@ -209,20 +225,18 @@ bool process_detector_worker::config_to_start(QString& str) // assuming manual stop by user button click. // don't automatically start again while the same process is running. - if (last_exe_name != "" && exe_list.contains(last_exe_name)) + if (!last_exe_name.isEmpty() && exe_list.contains(last_exe_name)) return false; // it's gone, we can start automatically again - last_exe_name = ""; + last_exe_name = QString(); - for (auto& name : exe_list) - { + for (auto&& name : exe_list) if (filenames.contains(name)) { - last_exe_name = name; str = filenames[name]; - return str != ""; + last_exe_name = name; + return str != QString{}; } - } return false; } |
