From 4ab33fdfbb23fdfed5327d402989fd53d79f5380 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 22 Aug 2015 19:02:25 +0200 Subject: main, ui: store config files in a predefined directory Settings files are now stored in Documents/opentrack-version. The transition path is to copy all .ini files into that directory, accessible through the "Profile" menu dropdown. Issue: #179 --- facetracknoir/ui.h | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 097b2439..0c3063d4 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -93,22 +93,20 @@ class MainWindow : public QMainWindow, private State void changeEvent(QEvent* e) override; - void createIconGroupBox(); void load_settings(); void updateButtonState(bool running, bool inertialp); - void fill_profile_combobox(); void display_pose(const double* mapped, const double* raw); void ensure_tray(); void set_title(const QString& game_title = QStringLiteral("")); + void save(); + static bool get_new_config_name_from_dialog(QString &ret); + static void set_profile(const QString& profile); public slots: void shortcutRecentered(); void shortcutToggled(); void shortcutZeroed(); void bindKeyboardShortcuts(); private slots: - void open(); - void save(); - void saveAs(); void exit(); void profileSelected(int index); @@ -121,6 +119,11 @@ private slots: void restore_from_tray(QSystemTrayIcon::ActivationReason); void maybe_start_profile_from_executable(); + + void make_empty_config(); + void make_copied_config(); + void open_config_directory(); + void refresh_config_list(); public slots: void startTracker(); void stopTracker(); @@ -129,7 +132,5 @@ public: ~MainWindow(); void save_mappings(); void load_mappings(); - static QString remove_app_path(const QString full_path); static void set_working_directory(); - static void set_profile(const QString& profile); }; -- cgit v1.2.3 From 8833ef44c0c359812299d5be25ecdd41d7c1b4e4 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 22 Aug 2015 19:14:13 +0200 Subject: ui: remove GNU GPL Nothing copyrightable under GNU GPL remains. We can FINALLY remove previous copyright statement and GNU GPL terms. Issue: #226 --- facetracknoir/ui.cpp | 24 ------------------------ facetracknoir/ui.h | 24 ------------------------ 2 files changed, 48 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index 258a0e15..a204f36d 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -1,27 +1,3 @@ -/******************************************************************************* -* FaceTrackNoIR This program is a private project of the some enthusiastic -* gamers from Holland, who don't like to pay much for -* head-tracking. -* -* Copyright (C) 2011 Wim Vriend (Developing) -* Ron Hendriks (Researching and Testing) -* -* Homepage -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License as published by the -* Free Software Foundation; either version 3 of the License, or (at your -* option) any later version. -* -* This program is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along -* with this program; if not, see . -*********************************************************************************/ - /* Copyright (c) 2013-2015, Stanislaw Halik * Permission to use, copy, modify, and/or distribute this diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 0c3063d4..94b52491 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -1,27 +1,3 @@ -/******************************************************************************* -* MainWindow This program is a private project of the some enthusiastic -* gamers from Holland, who don't like to pay much for -* head-tracking. -* -* Copyright (C) 2010 Wim Vriend (Developing) -* Ron Hendriks (Researching and Testing) -* -* Homepage -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of the GNU General Public License as published by the -* Free Software Foundation; either version 3 of the License, or (at your -* option) any later version. -* -* This program is distributed in the hope that it will be useful, but -* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along -* with this program; if not, see . -*********************************************************************************/ - /* Copyright (c) 2014-2015, Stanislaw Halik * Permission to use, copy, modify, and/or distribute this -- cgit v1.2.3 From dbefcb3910665cb9a896c7073ae79200ceb67085 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 22 Aug 2015 19:17:34 +0200 Subject: ui: nix wrong headers --- facetracknoir/ui.h | 6 ------ 1 file changed, 6 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 94b52491..9fefa2f4 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -16,12 +16,6 @@ #include #include -#if !defined(_WIN32) -# include "qxt-mini/QxtGlobalShortcut" -#else -# include -#endif - #include "ui_main.h" #include "opentrack/options.hpp" -- cgit v1.2.3 From b531e71bb9f86990eaa4a01bc6b51c0079f7db3e Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sat, 22 Aug 2015 19:19:55 +0200 Subject: ui: these aren't qt slots --- facetracknoir/ui.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 9fefa2f4..4e89b143 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -69,13 +69,12 @@ class MainWindow : public QMainWindow, private State void ensure_tray(); void set_title(const QString& game_title = QStringLiteral("")); void save(); - static bool get_new_config_name_from_dialog(QString &ret); - static void set_profile(const QString& profile); -public slots: void shortcutRecentered(); void shortcutToggled(); void shortcutZeroed(); void bindKeyboardShortcuts(); + static bool get_new_config_name_from_dialog(QString &ret); + static void set_profile(const QString& profile); private slots: void exit(); void profileSelected(int index); -- cgit v1.2.3 From 6319cc457adf63c55920963a7a7cbb1398b8bbac Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 24 Aug 2015 08:44:48 +0200 Subject: ui: avoid potential memory leak While not having tested with valgrind, setMenu() doesn't seem to take ownership of QMenu. Ensure it's not leaked. --- facetracknoir/ui.cpp | 12 +++++------- facetracknoir/ui.h | 2 ++ 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index e22fee7a..bd1b88f7 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -12,7 +12,6 @@ #include "facetracknoir/new_file_dialog.h" #include #include -#include #ifndef _WIN32 # include @@ -74,12 +73,11 @@ MainWindow::MainWindow() : connect(&pose_update_timer, SIGNAL(timeout()), this, SLOT(showHeadPose())); connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); - auto menu = new QMenu; - menu->addAction("Create new empty config", this, SLOT(make_empty_config())); - menu->addAction("Create new copied config", this, SLOT(make_copied_config())); - menu->addAction("Open configuration directory", this, SLOT(open_config_directory())); - menu->addAction("Refresh configuration list", this, SLOT(refresh_config_list())); - ui.profile_button->setMenu(menu); + profile_menu.addAction("Create new empty config", this, SLOT(make_empty_config())); + profile_menu.addAction("Create new copied config", this, SLOT(make_copied_config())); + profile_menu.addAction("Open configuration directory", this, SLOT(open_config_directory())); + profile_menu.addAction("Refresh configuration list", this, SLOT(refresh_config_list())); + ui.profile_button->setMenu(&profile_menu); kbd_quit.setEnabled(true); diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 4e89b143..9ecc0db9 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -15,6 +15,7 @@ #include #include #include +#include #include "ui_main.h" @@ -47,6 +48,7 @@ class MainWindow : public QMainWindow, private State mem pProtocolDialog; mem pTrackerDialog; process_detector_worker det; + QMenu profile_menu; mem current_tracker() { -- cgit v1.2.3 From 588231e71f08df223a54d15391d8263b4bbf5fea Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 24 Aug 2015 08:56:53 +0200 Subject: ui, shortcuts: these are slots, actually --- facetracknoir/ui.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 9ecc0db9..f5ce6980 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -71,10 +71,6 @@ class MainWindow : public QMainWindow, private State void ensure_tray(); void set_title(const QString& game_title = QStringLiteral("")); void save(); - void shortcutRecentered(); - void shortcutToggled(); - void shortcutZeroed(); - void bindKeyboardShortcuts(); static bool get_new_config_name_from_dialog(QString &ret); static void set_profile(const QString& profile); private slots: @@ -96,6 +92,10 @@ private slots: void open_config_directory(); void refresh_config_list(); public slots: + void shortcutRecentered(); + void shortcutToggled(); + void shortcutZeroed(); + void bindKeyboardShortcuts(); void startTracker(); void stopTracker(); public: -- cgit v1.2.3 From 3390f15bfafc5f6021856fe822abb49f97acd0f7 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 24 Aug 2015 09:01:50 +0200 Subject: ui: move some slots to private --- facetracknoir/ui.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index f5ce6980..b05fa81b 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -91,13 +91,14 @@ private slots: void make_copied_config(); void open_config_directory(); void refresh_config_list(); + + void startTracker(); + void stopTracker(); + void bindKeyboardShortcuts(); public slots: void shortcutRecentered(); void shortcutToggled(); void shortcutZeroed(); - void bindKeyboardShortcuts(); - void startTracker(); - void stopTracker(); public: MainWindow(); ~MainWindow(); -- cgit v1.2.3 From 872acf11a851a3250f2c668af5f30dc3d48ef477 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 24 Aug 2015 09:58:07 +0200 Subject: ui: rename symbol to reflect current usage --- facetracknoir/ui.cpp | 14 +++++++------- facetracknoir/ui.h | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index c77c35b6..d13fff1c 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -32,7 +32,7 @@ MainWindow::MainWindow() : ui.video_frame_label->setPixmap(no_feed_pixmap); connect(ui.btnEditCurves, SIGNAL(clicked()), this, SLOT(showCurveConfiguration())); - connect(ui.btnShortcuts, SIGNAL(clicked()), this, SLOT(showKeyboardShortcuts())); + connect(ui.btnShortcuts, SIGNAL(clicked()), this, SLOT(show_options_dialog())); connect(ui.btnShowEngineControls, SIGNAL(clicked()), this, SLOT(showTrackerSettings())); connect(ui.btnShowServerControls, SIGNAL(clicked()), this, SLOT(showProtocolSettings())); connect(ui.btnShowFilterControls, SIGNAL(clicked()), this, SLOT(showFilterSettings())); @@ -233,7 +233,7 @@ void MainWindow::updateButtonState(bool running, bool inertialp) ui.profile_button->setEnabled(not_running); } -void MainWindow::bindKeyboardShortcuts() +void MainWindow::reload_options() { if (work) work->reload_shortcuts(); @@ -266,8 +266,8 @@ void MainWindow::startTracker() { work = std::make_shared(s, pose, libs, this, winId()); - bindKeyboardShortcuts(); - + reload_options(); + if (pTrackerDialog) pTrackerDialog->register_tracker(libs.pTracker.get()); @@ -437,9 +437,9 @@ bool mk_window(mem* place, Args... params) } } -void MainWindow::showKeyboardShortcuts() { - if (mk_window(&shortcuts_widget)) - connect(shortcuts_widget.get(), SIGNAL(reload()), this, SLOT(bindKeyboardShortcuts())); +void MainWindow::show_options_dialog() { + if (mk_window(&options_widget)) + connect(options_widget.get(), SIGNAL(reload()), this, SLOT(reload_options())); } void MainWindow::showCurveConfiguration() { diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index b05fa81b..6d15e496 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -40,7 +40,7 @@ class MainWindow : public QMainWindow, private State mem tray; QTimer pose_update_timer; QTimer det_timer; - mem shortcuts_widget; + mem options_widget; mem mapping_widget; QShortcut kbd_quit; QPixmap no_feed_pixmap; @@ -80,7 +80,7 @@ private slots: void showTrackerSettings(); void showProtocolSettings(); void showFilterSettings(); - void showKeyboardShortcuts(); + void show_options_dialog(); void showCurveConfiguration(); void showHeadPose(); @@ -94,7 +94,7 @@ private slots: void startTracker(); void stopTracker(); - void bindKeyboardShortcuts(); + void reload_options(); public slots: void shortcutRecentered(); void shortcutToggled(); -- cgit v1.2.3 From 4559bdb44ef9b48d74cbc2e38ecdccd5e92d48e3 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 26 Aug 2015 08:39:41 +0200 Subject: ui: auto-refresh config list --- facetracknoir/ui.cpp | 6 +++++- facetracknoir/ui.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index 9fd4a91d..3d768d8b 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -49,6 +49,8 @@ MainWindow::MainWindow() : ui.iconcomboFilter->addItem(x->icon, x->name); refresh_config_list(); + connect(&config_list_timer, SIGNAL(timeout()), this, SLOT(refresh_config_list())); + config_list_timer.start(1000 * 3); tie_setting(s.tracker_dll, ui.iconcomboTrackerSource); tie_setting(s.protocol_dll, ui.iconcomboProtocol); @@ -76,7 +78,6 @@ MainWindow::MainWindow() : profile_menu.addAction("Create new empty config", this, SLOT(make_empty_config())); profile_menu.addAction("Create new copied config", this, SLOT(make_copied_config())); profile_menu.addAction("Open configuration directory", this, SLOT(open_config_directory())); - profile_menu.addAction("Refresh configuration list", this, SLOT(refresh_config_list())); ui.profile_button->setMenu(&profile_menu); kbd_quit.setEnabled(true); @@ -201,6 +202,9 @@ extern "C" volatile const char* opentrack_version; void MainWindow::refresh_config_list() { + if (work) + return; + if (group::ini_list().size() == 0) { QFile filename(group::ini_directory() + "/" OPENTRACK_DEFAULT_CONFIG); diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 6d15e496..46a97b3f 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -40,6 +40,7 @@ class MainWindow : public QMainWindow, private State mem tray; QTimer pose_update_timer; QTimer det_timer; + QTimer config_list_timer; mem options_widget; mem mapping_widget; QShortcut kbd_quit; -- cgit v1.2.3 From 844d9a6f4d62227fbf22e65614c84693438080bf Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Wed, 26 Aug 2015 19:55:01 +0200 Subject: ui: don't reload settings if config wasn't changed Since combobox is reloaded on a timer, the "current" config changes all the time. --- facetracknoir/ui.cpp | 21 +++++++++++++-------- facetracknoir/ui.h | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index 0befd813..3c2d8db6 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -70,7 +70,7 @@ MainWindow::MainWindow() : connect(ui.btnStartTracker, SIGNAL(clicked()), this, SLOT(startTracker())); connect(ui.btnStopTracker, SIGNAL(clicked()), this, SLOT(stopTracker())); - connect(ui.iconcomboProfile, SIGNAL(currentIndexChanged(int)), this, SLOT(profileSelected(int))); + connect(ui.iconcomboProfile, SIGNAL(currentIndexChanged(int)), this, SLOT(profileSelected(int)), Qt::QueuedConnection); connect(&pose_update_timer, SIGNAL(timeout()), this, SLOT(showHeadPose())); connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); @@ -438,15 +438,20 @@ void MainWindow::profileSelected(int index) { if (index == -1) return; - - { - QSettings settings(OPENTRACK_ORG); - settings.setValue (OPENTRACK_CONFIG_FILENAME_KEY, ui.iconcomboProfile->itemText(index)); - } - set_title(); + const auto old_name = group::ini_filename(); + const auto new_name = ui.iconcomboProfile->itemText(index); - load_settings(); + if (old_name != new_name) + { + { + QSettings settings(OPENTRACK_ORG); + settings.setValue (OPENTRACK_CONFIG_FILENAME_KEY, new_name); + } + + set_title(); + load_settings(); + } } void MainWindow::shortcutRecentered() diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 46a97b3f..021f327d 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -73,7 +73,7 @@ class MainWindow : public QMainWindow, private State void set_title(const QString& game_title = QStringLiteral("")); void save(); static bool get_new_config_name_from_dialog(QString &ret); - static void set_profile(const QString& profile); + void set_profile(const QString& profile); private slots: void exit(); void profileSelected(int index); -- cgit v1.2.3 From 5dd01a9a8ba94a61462340446031904629d12792 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Fri, 28 Aug 2015 09:04:43 +0200 Subject: ui: really don't switch profiles while refreshing combobox --- facetracknoir/ui.cpp | 9 ++++++--- facetracknoir/ui.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index 04baaf5a..89b25fe4 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -22,7 +22,8 @@ MainWindow::MainWindow() : pose_update_timer(this), kbd_quit(QKeySequence("Ctrl+Q"), this), - no_feed_pixmap(":/images/no-feed.png") + no_feed_pixmap(":/images/no-feed.png"), + is_refreshing_profiles(false) { ui.setupUi(this); @@ -70,7 +71,7 @@ MainWindow::MainWindow() : connect(ui.btnStartTracker, SIGNAL(clicked()), this, SLOT(startTracker())); connect(ui.btnStopTracker, SIGNAL(clicked()), this, SLOT(stopTracker())); - connect(ui.iconcomboProfile, SIGNAL(currentIndexChanged(int)), this, SLOT(profileSelected(int)), Qt::QueuedConnection); + connect(ui.iconcomboProfile, SIGNAL(currentIndexChanged(int)), this, SLOT(profileSelected(int))); connect(&pose_update_timer, SIGNAL(timeout()), this, SLOT(showHeadPose())); connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); @@ -204,9 +205,11 @@ void MainWindow::refresh_config_list() QStringList ini_list = group::ini_list(); set_title(); QString current = group::ini_filename(); + is_refreshing_profiles = true; ui.iconcomboProfile->clear(); for (auto x : ini_list) ui.iconcomboProfile->addItem(QIcon(":/images/settings16.png"), x); + is_refreshing_profiles = false; ui.iconcomboProfile->setCurrentText(current); } @@ -434,7 +437,7 @@ void MainWindow::exit() { void MainWindow::profileSelected(int index) { - if (index == -1) + if (index == -1 || is_refreshing_profiles) return; const auto old_name = group::ini_filename(); diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 021f327d..5d81507f 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -50,6 +50,7 @@ class MainWindow : public QMainWindow, private State mem pTrackerDialog; process_detector_worker det; QMenu profile_menu; + bool is_refreshing_profiles; mem current_tracker() { -- cgit v1.2.3 From 8b08d5800354a5dcedfd7811447ea76e09c31d03 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 30 Aug 2015 08:48:24 +0200 Subject: ui: save profile when combobox text changes, not merely index --- facetracknoir/ui.cpp | 8 ++++---- facetracknoir/ui.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index 7b84de72..0c104553 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -71,7 +71,7 @@ MainWindow::MainWindow() : connect(ui.btnStartTracker, SIGNAL(clicked()), this, SLOT(startTracker())); connect(ui.btnStopTracker, SIGNAL(clicked()), this, SLOT(stopTracker())); - connect(ui.iconcomboProfile, SIGNAL(currentIndexChanged(int)), this, SLOT(profileSelected(int))); + connect(ui.iconcomboProfile, SIGNAL(currentTextChanged(QString)), this, SLOT(profileSelected(QString))); connect(&pose_update_timer, SIGNAL(timeout()), this, SLOT(showHeadPose())); connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); @@ -434,13 +434,13 @@ void MainWindow::exit() { QCoreApplication::exit(0); } -void MainWindow::profileSelected(int index) +void MainWindow::profileSelected(QString name) { - if (index == -1 || is_refreshing_profiles) + if (name == "" || is_refreshing_profiles) return; const auto old_name = group::ini_filename(); - const auto new_name = ui.iconcomboProfile->itemText(index); + const auto new_name = name; if (old_name != new_name) { diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 5d81507f..65a7647a 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -77,7 +77,7 @@ class MainWindow : public QMainWindow, private State void set_profile(const QString& profile); private slots: void exit(); - void profileSelected(int index); + void profileSelected(QString name); void showTrackerSettings(); void showProtocolSettings(); -- cgit v1.2.3 From 77542be46d3b56c48735f72d7345a1f1034a0a90 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 30 Aug 2015 09:28:22 +0200 Subject: ui: save settings on a timer The QSettings IO is damn slow on Windows. Save only after five seconds have elapsed with nothing being changed. --- facetracknoir/ui.cpp | 15 +++++++++++++-- facetracknoir/ui.h | 4 +++- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index 0876c848..6437b9d1 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -76,6 +76,9 @@ MainWindow::MainWindow() : connect(&pose_update_timer, SIGNAL(timeout()), this, SLOT(showHeadPose())); connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); + save_timer.setSingleShot(true); + connect(&save_timer, SIGNAL(timeout()), this, SLOT(_save())); + profile_menu.addAction("Create new empty config", this, SLOT(make_empty_config())); profile_menu.addAction("Create new copied config", this, SLOT(make_copied_config())); profile_menu.addAction("Open configuration directory", this, SLOT(open_config_directory())); @@ -116,10 +119,12 @@ bool MainWindow::get_new_config_name_from_dialog(QString& ret) MainWindow::~MainWindow() { + save_timer.stop(); + if (tray) tray->hide(); stopTracker(); - save(); + _save(); } void MainWindow::set_working_directory() @@ -131,7 +136,13 @@ void MainWindow::save_mappings() { pose.save_mappings(); } -void MainWindow::save() { +void MainWindow::save() +{ + save_timer.stop(); + save_timer.start(5000); +} + +void MainWindow::_save() { s.b->save(); save_mappings(); mem settings = group::ini_file(); diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 65a7647a..cfaf47cb 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -51,6 +51,7 @@ class MainWindow : public QMainWindow, private State process_detector_worker det; QMenu profile_menu; bool is_refreshing_profiles; + QTimer save_timer; mem current_tracker() { @@ -72,10 +73,11 @@ class MainWindow : public QMainWindow, private State void display_pose(const double* mapped, const double* raw); void ensure_tray(); void set_title(const QString& game_title = QStringLiteral("")); - void save(); static bool get_new_config_name_from_dialog(QString &ret); void set_profile(const QString& profile); private slots: + void _save(); + void save(); void exit(); void profileSelected(QString name); -- cgit v1.2.3 From 66054ee6ccd0e86534c42167d9e93704f7995db8 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Thu, 3 Sep 2015 09:33:19 +0200 Subject: ui: force saving if saving timer is pending Force saving when tracking is stopping at least. Due to "struct work" being destroyed, unsaved settings revert to last saved. So before "struct work" destruction need to save if save is pending. Issue: #179 --- facetracknoir/ui.cpp | 13 ++++++++++++- facetracknoir/ui.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'facetracknoir/ui.h') diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index 6437b9d1..4d93f3b2 100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -124,7 +124,7 @@ MainWindow::~MainWindow() if (tray) tray->hide(); stopTracker(); - _save(); + maybe_save(); } void MainWindow::set_working_directory() @@ -142,6 +142,15 @@ void MainWindow::save() save_timer.start(5000); } +void MainWindow::maybe_save() +{ + if (save_timer.isActive()) + { + save_timer.stop(); + _save(); + } +} + void MainWindow::_save() { s.b->save(); save_mappings(); @@ -307,6 +316,8 @@ void MainWindow::stopTracker( ) { if (pFilterDialog) pFilterDialog->unregister_filter(); + maybe_save(); + work = nullptr; libs = SelectedLibraries(); diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index cfaf47cb..91e4ebbf 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -75,6 +75,7 @@ class MainWindow : public QMainWindow, private State void set_title(const QString& game_title = QStringLiteral("")); static bool get_new_config_name_from_dialog(QString &ret); void set_profile(const QString& profile); + void maybe_save(); private slots: void _save(); void save(); -- cgit v1.2.3