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;  };  | 
