summaryrefslogtreecommitdiffhomepage
path: root/variant
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2019-02-03 12:12:35 +0100
committerStanislaw Halik <sthalik@misaki.pl>2019-02-09 12:13:25 +0100
commitf5662b59896917512f0d4e5f1e853ba6c6b20d38 (patch)
tree1d10c499cba7ca2d2ca3a16bcb86d5c2ab35acf5 /variant
parent195767619e7a7aeeeb33b13420538f687bef0104 (diff)
opentrack: fix profile list storage
The authoritative source for profile names is now a vector rather than a user interface element. Add some sanity checks to `main_window::set_profile'. Remove the `config_listed' abomination.
Diffstat (limited to 'variant')
-rw-r--r--variant/default/main-window.cpp97
-rw-r--r--variant/default/main-window.hpp6
2 files changed, 46 insertions, 57 deletions
diff --git a/variant/default/main-window.cpp b/variant/default/main-window.cpp
index 7f8b3bb8..bf272429 100644
--- a/variant/default/main-window.cpp
+++ b/variant/default/main-window.cpp
@@ -143,8 +143,8 @@ void main_window::init_dylibs()
void main_window::init_profiles()
{
- refresh_config_list();
- // config directory should be implicitly created by `refresh_config_list'
+ refresh_profile_list();
+ // implicitly created by `ini_directory()'
if (ini_directory().isEmpty() || !QDir(ini_directory()).isReadable())
die_on_config_not_writable();
@@ -156,7 +156,7 @@ void main_window::init_profiles()
profile_menu.addAction(tr("Open configuration directory"), this, &main_window::open_config_directory);
ui.profile_button->setMenu(&profile_menu);
- connect(&config_list_timer, &QTimer::timeout, this, &main_window::refresh_config_list);
+ connect(&config_list_timer, &QTimer::timeout, this, &main_window::refresh_profile_list);
config_list_timer.start(1000 * 5);
connect(ui.iconcomboProfile, &QComboBox::currentTextChanged,
@@ -287,7 +287,7 @@ main_window::~main_window()
stop_tracker_();
close();
- constexpr int inc = 100, max = 2000;
+ constexpr int inc = 25, max = 1000;
for (int k = 0; k < max; k += inc)
{
@@ -311,13 +311,15 @@ void main_window::make_empty_config()
if (get_new_config_name_from_dialog(name))
{
QFile(ini_combine(name)).open(QFile::ReadWrite);
- refresh_config_list();
+ refresh_profile_list();
- QSignalBlocker q(ui.iconcomboProfile);
+ if (profile_list.contains(name))
+ {
+ QSignalBlocker q(ui.iconcomboProfile);
- set_profile(name, false);
- if (config_listed(name))
+ set_profile(name, false);
mark_config_as_not_needing_migration();
+ }
}
}
@@ -331,13 +333,15 @@ void main_window::make_copied_config()
(void) QFile::remove(new_name);
QFile::copy(cur, new_name);
- refresh_config_list();
+ refresh_profile_list();
- QSignalBlocker q(ui.iconcomboProfile);
+ if (profile_list.contains(name))
+ {
+ QSignalBlocker q(ui.iconcomboProfile);
- set_profile(name, false);
- if (config_listed(name))
+ set_profile(name, false);
mark_config_as_not_needing_migration();
+ }
}
}
@@ -347,7 +351,7 @@ void main_window::open_config_directory()
QDesktopServices::openUrl("file:///" + QDir::toNativeSeparators(ini_directory()));
}
-void main_window::refresh_config_list()
+void main_window::refresh_profile_list()
{
if (work)
return;
@@ -355,28 +359,13 @@ void main_window::refresh_config_list()
QStringList list = ini_list();
QString current = ini_filename();
+ if (list == profile_list)
+ return;
+
if (!list.contains(current))
current = OPENTRACK_DEFAULT_CONFIG;
- else
- {
- const bool exact_same = progn(
- if (list.size() == ui.iconcomboProfile->count())
- {
- const int sz = list.size();
- for (int i = 0; i < sz; i++)
- {
- if (list[i] != ui.iconcomboProfile->itemText(i))
- return false;
- }
- return true;
- }
-
- return false;
- );
- if (exact_same)
- return;
- }
+ profile_list = list;
static const QIcon icon(":/images/settings16.png");
@@ -473,7 +462,7 @@ void main_window::stop_tracker_()
work = nullptr;
{
- double p[6] = {0,0,0, 0,0,0};
+ double p[6] {};
show_pose_(p, p);
}
@@ -663,28 +652,36 @@ void main_window::set_profile(const QString& new_name_, bool migrate)
{
QString new_name = new_name_;
- if (!config_listed(new_name))
+ QSignalBlocker b(ui.iconcomboProfile);
+
+ if (!profile_list.contains(new_name))
{
new_name = OPENTRACK_DEFAULT_CONFIG;
- refresh_config_list();
- if (!config_listed(new_name))
+ refresh_profile_list();
+ if (!profile_list.contains(new_name))
migrate = false;
}
- ui.iconcomboProfile->setCurrentText(new_name);
- set_profile_in_registry(new_name);
-
- // XXX workaround migration breakage -sh 20180428
- QSignalBlocker b1(ui.iconcomboTrackerSource);
- QSignalBlocker b2(ui.iconcomboProtocol);
- QSignalBlocker b3(ui.iconcomboFilter);
+ if (new_name != ini_filename())
+ {
+ ui.iconcomboProfile->setCurrentText(new_name);
+ set_profile_in_registry(new_name);
- options::detail::bundler::refresh_all_bundles();
+ options::detail::bundler::refresh_all_bundles();
+ }
+ // this needs to run on app start -sh 20190203
if (migrate)
+ {
+ // workaround migration breakage -sh 20180428
+ QSignalBlocker b1(ui.iconcomboTrackerSource);
+ QSignalBlocker b2(ui.iconcomboProtocol);
+ QSignalBlocker b3(ui.iconcomboFilter);
+
// migrations are for config layout changes and other user-visible
// incompatibilities in future versions
run_migrations();
+ }
else
mark_config_as_not_needing_migration();
@@ -797,7 +794,7 @@ void main_window::maybe_start_profile_from_executable()
if (!work)
{
QString profile;
- if (det.config_to_start(profile) && config_listed(profile))
+ if (det.config_to_start(profile) && profile_list.contains(profile))
{
set_profile(profile);
start_tracker_();
@@ -822,16 +819,6 @@ void main_window::set_keys_enabled(bool flag)
register_shortcuts();
}
-bool main_window::config_listed(const QString& name)
-{
- // XXX TODO store profile list outside this widget as an authoritative source -sh 20190123
- const int sz = ui.iconcomboProfile->count();
- for (int i = 0; i < sz; i++)
- if (ui.iconcomboProfile->itemText(i) == name)
- return true;
- return false;
-}
-
void main_window::changeEvent(QEvent* e)
{
if (!maybe_hide_to_tray(e))
diff --git a/variant/default/main-window.hpp b/variant/default/main-window.hpp
index e6b2ed2e..49dda590 100644
--- a/variant/default/main-window.hpp
+++ b/variant/default/main-window.hpp
@@ -32,6 +32,7 @@
#include <QAction>
#include <QEvent>
#include <QCloseEvent>
+#include <QList>
#include <tuple>
#include <memory>
@@ -64,6 +65,8 @@ class main_window final : public QMainWindow, private State
process_detector_worker det;
QMenu profile_menu;
+ QList<QString> profile_list;
+
QAction menu_action_header { &tray_menu },
menu_action_show { &tray_menu },
menu_action_exit { &tray_menu },
@@ -118,8 +121,7 @@ class main_window final : public QMainWindow, private State
void set_profile(const QString& new_name, bool migrate = true);
void set_profile_in_registry(const QString& profile);
- void refresh_config_list();
- bool config_listed(const QString& name);
+ void refresh_profile_list();
void die_on_config_not_writable();
void maybe_start_profile_from_executable();
[[nodiscard]] static bool get_new_config_name_from_dialog(QString &ret);