diff options
-rw-r--r-- | gui/ui.cpp | 57 | ||||
-rw-r--r-- | gui/ui.h | 8 | ||||
-rw-r--r-- | opentrack-compat/options.hpp | 26 | ||||
-rw-r--r-- | opentrack-logic/main-settings.hpp | 20 | ||||
-rw-r--r-- | opentrack-logic/state.hpp | 4 |
5 files changed, 63 insertions, 52 deletions
@@ -51,21 +51,21 @@ MainWindow::MainWindow() : 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); - tie_setting(s.filter_dll, ui.iconcomboFilter); + tie_setting(m.tracker_dll, ui.iconcomboTrackerSource); + tie_setting(m.protocol_dll, ui.iconcomboProtocol); + tie_setting(m.filter_dll, ui.iconcomboFilter); connect(ui.iconcomboTrackerSource, &QComboBox::currentTextChanged, - [&](QString) -> void { if (pTrackerDialog) pTrackerDialog = nullptr; save(); }); + [&](QString) -> void { if (pTrackerDialog) pTrackerDialog = nullptr; save_modules(); }); connect(ui.iconcomboProtocol, &QComboBox::currentTextChanged, - [&](QString) -> void { if (pProtocolDialog) pProtocolDialog = nullptr; save(); }); + [&](QString) -> void { if (pProtocolDialog) pProtocolDialog = nullptr; save_modules(); }); connect(ui.iconcomboFilter, &QComboBox::currentTextChanged, - [&](QString) -> void { if (pFilterDialog) pFilterDialog = nullptr; save(); }); + [&](QString) -> void { if (pFilterDialog) pFilterDialog = nullptr; save_modules(); }); connect(ui.btnStartTracker, SIGNAL(clicked()), this, SLOT(startTracker())); connect(ui.btnStopTracker, SIGNAL(clicked()), this, SLOT(stopTracker())); @@ -146,6 +146,20 @@ void MainWindow::register_shortcuts() work->reload_shortcuts(); } +void MainWindow::warn_on_config_not_writable() +{ +#if defined(__unix) || defined(__linux) + QString currentFile = group::ini_pathname(); + QByteArray bytes = QFile::encodeName(currentFile); + const char* filename_as_asciiz = bytes.constData(); + + if (access(filename_as_asciiz, R_OK | W_OK)) + { + QMessageBox::warning(this, "Something went wrong", "Check permissions and ownership for your .ini file!", QMessageBox::Ok, QMessageBox::NoButton); + } +#endif +} + bool MainWindow::get_new_config_name_from_dialog(QString& ret) { new_file_dialog dlg; @@ -158,7 +172,7 @@ MainWindow::~MainWindow() if (tray) tray->hide(); stopTracker(); - save(); + save_modules(); } void MainWindow::set_working_directory() @@ -166,26 +180,10 @@ void MainWindow::set_working_directory() QDir::setCurrent(QCoreApplication::applicationDirPath()); } -void MainWindow::save_mappings() +void MainWindow::save_modules() { - pose.save_mappings(); -} - -void MainWindow::save() -{ - s.b->save(); - //save_mappings(); - -#if defined(__unix) || defined(__linux) - QString currentFile = group::ini_pathname(); - QByteArray bytes = QFile::encodeName(currentFile); - const char* filename_as_asciiz = bytes.constData(); - - if (access(filename_as_asciiz, R_OK | W_OK)) - { - QMessageBox::warning(this, "Something went wrong", "Check permissions and ownership for your .ini file!", QMessageBox::Ok, QMessageBox::NoButton); - } -#endif + m.b->save(); + warn_on_config_not_writable(); } void MainWindow::load_mappings() @@ -197,6 +195,7 @@ void MainWindow::load_mappings() void MainWindow::load_settings() { + m.b->reload(); s.b->reload(); load_mappings(); } @@ -314,7 +313,7 @@ void MainWindow::startTracker() return; } - save(); + save_modules(); work = std::make_shared<Work>(pose, libs, winId()); @@ -358,7 +357,7 @@ void MainWindow::stopTracker() if (pFilterDialog) pFilterDialog->unregister_filter(); - save(); + save_modules(); work = nullptr; libs = SelectedLibraries(); @@ -522,7 +521,7 @@ void MainWindow::profile_selected(const QString& name) if (old_name != new_name) { - save(); + save_modules(); { QSettings settings(OPENTRACK_ORG); @@ -72,6 +72,7 @@ class MainWindow : public QMainWindow, private State void changeEvent(QEvent* e) override; void load_settings(); + void load_mappings(); void updateButtonState(bool running, bool inertialp); void display_pose(const double* mapped, const double* raw); void ensure_tray(); @@ -79,8 +80,9 @@ class MainWindow : public QMainWindow, private State static bool get_new_config_name_from_dialog(QString &ret); void set_profile(const QString& profile); void register_shortcuts(); + void set_keys_enabled(bool flag); private slots: - void save(); + void save_modules(); void exit(); void profile_selected(const QString& name); @@ -113,8 +115,6 @@ signals: public: MainWindow(); ~MainWindow(); - void save_mappings(); - void load_mappings(); static void set_working_directory(); - void set_keys_enabled(bool flag); + static void warn_on_config_not_writable(); }; diff --git a/opentrack-compat/options.hpp b/opentrack-compat/options.hpp index d7101674..d1173894 100644 --- a/opentrack-compat/options.hpp +++ b/opentrack-compat/options.hpp @@ -203,8 +203,8 @@ namespace options { return detail::singleton().bundle(name); } -#define DEFINE_SLOT(t) void setValue(t datum) { store(datum); } -#define DEFINE_SIGNAL(t) void valueChanged(t) +#define OPENTRACK_DEFINE_SLOT(t) void setValue(t datum) { store(datum); } +#define OPENTRACK_DEFINE_SIGNAL(t) void valueChanged(t) class OPENTRACK_COMPAT_EXPORT base_value : public QObject { @@ -213,12 +213,12 @@ namespace options { QString name() const { return self_name; } base_value(pbundle b, const QString& name); signals: - DEFINE_SIGNAL(double); - DEFINE_SIGNAL(float); - DEFINE_SIGNAL(int); - DEFINE_SIGNAL(bool); - DEFINE_SIGNAL(QString); - DEFINE_SIGNAL(slider_value); + OPENTRACK_DEFINE_SIGNAL(double); + OPENTRACK_DEFINE_SIGNAL(float); + OPENTRACK_DEFINE_SIGNAL(int); + OPENTRACK_DEFINE_SIGNAL(bool); + OPENTRACK_DEFINE_SIGNAL(const QString&); + OPENTRACK_DEFINE_SIGNAL(const slider_value&); protected: pbundle b; QString self_name; @@ -235,11 +235,11 @@ namespace options { } public slots: - DEFINE_SLOT(double) - DEFINE_SLOT(int) - DEFINE_SLOT(QString) - DEFINE_SLOT(bool) - DEFINE_SLOT(slider_value) + OPENTRACK_DEFINE_SLOT(double) + OPENTRACK_DEFINE_SLOT(int) + OPENTRACK_DEFINE_SLOT(QString) + OPENTRACK_DEFINE_SLOT(bool) + OPENTRACK_DEFINE_SLOT(slider_value) public slots: virtual void reload() = 0; }; diff --git a/opentrack-logic/main-settings.hpp b/opentrack-logic/main-settings.hpp index 34997ea0..1aa0d38c 100644 --- a/opentrack-logic/main-settings.hpp +++ b/opentrack-logic/main-settings.hpp @@ -47,9 +47,22 @@ struct key_opts {} }; -struct main_settings +struct module_settings { + pbundle b; value<QString> tracker_dll, filter_dll, protocol_dll; + module_settings() : + b(bundle("modules")), + tracker_dll(b, "tracker-dll", ""), + filter_dll(b, "filter-dll", "Accela"), + protocol_dll(b, "protocol-dll", "freetrack 2.0 Enhanced") + { + } +}; + +struct main_settings +{ + pbundle b; axis_opts a_x, a_y, a_z, a_yaw, a_pitch, a_roll; value<bool> tcomp_p, tcomp_tz; value<bool> tray_enabled; @@ -60,10 +73,7 @@ struct main_settings key_opts key_center, key_toggle, key_zero; key_opts key_toggle_press, key_zero_press; main_settings() : - opts("opentrack-ui"), - tracker_dll(b, "tracker-dll", ""), - filter_dll(b, "filter-dll", "Accela"), - protocol_dll(b, "protocol-dll", "freetrack 2.0 Enhanced"), + b(bundle("opentrack-ui")), a_x(b, "x", TX), a_y(b, "y", TY), a_z(b, "z", TZ), diff --git a/opentrack-logic/state.hpp b/opentrack-logic/state.hpp index ff46cc36..f9bb82c0 100644 --- a/opentrack-logic/state.hpp +++ b/opentrack-logic/state.hpp @@ -17,13 +17,15 @@ using namespace options; #include "selected-libraries.hpp" #include "work.hpp" -struct State { +struct State +{ State() : pose(std::vector<axis_opts*>{&s.a_x, &s.a_y, &s.a_z, &s.a_yaw, &s.a_pitch, &s.a_roll}) {} Modules modules; SelectedLibraries libs; main_settings s; + module_settings m; Mappings pose; mem<Work> work; }; |