summaryrefslogtreecommitdiffhomepage
path: root/gui/process_detector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gui/process_detector.cpp')
-rw-r--r--gui/process_detector.cpp100
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;
}