diff options
Diffstat (limited to 'gui/main-window.hpp')
-rw-r--r-- | gui/main-window.hpp | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/gui/main-window.hpp b/gui/main-window.hpp new file mode 100644 index 00000000..35973a15 --- /dev/null +++ b/gui/main-window.hpp @@ -0,0 +1,117 @@ +/* Copyright (c) 2013-2016, Stanislaw Halik <sthalik@misaki.pl> + + * Permission to use, copy, modify, and/or distribute this + * software for any purpose with or without fee is hereby granted, + * provided that the above copyright notice and this permission + * notice appear in all copies. + */ + +#pragma once + +#include <QMainWindow> +#include <QKeySequence> +#include <QShortcut> +#include <QPixmap> +#include <QTimer> +#include <QSystemTrayIcon> +#include <QString> +#include <QMenu> + +#include <vector> +#include <tuple> + +#include "ui_main-window.h" + +#include "opentrack-compat/options.hpp" +#include "opentrack-logic/main-settings.hpp" +#include "opentrack/plugin-support.hpp" +#include "opentrack-logic/tracker.h" +#include "opentrack-logic/shortcuts.h" +#include "opentrack-logic/work.hpp" +#include "opentrack-logic/state.hpp" +#include "curve-config.h" +#include "options-dialog.hpp" +#include "process_detector.h" + +using namespace options; + +class MainWindow : public QMainWindow, private State +{ + Q_OBJECT + + Ui::ui_main_window ui; + + Shortcuts global_shortcuts; + module_settings m; + mem<QSystemTrayIcon> tray; + QTimer pose_update_timer; + QTimer det_timer; + QTimer config_list_timer; + mem<OptionsDialog> options_widget; + mem<MapWidget> mapping_widget; + QShortcut kbd_quit; + mem<IFilterDialog> pFilterDialog; + mem<IProtocolDialog> pProtocolDialog; + mem<ITrackerDialog> pTrackerDialog; + process_detector_worker det; + QMenu profile_menu; + bool is_refreshing_profiles; + + mem<dylib> current_tracker() + { + return modules.trackers().value(ui.iconcomboTrackerSource->currentIndex(), nullptr); + } + mem<dylib> current_protocol() + { + return modules.protocols().value(ui.iconcomboProtocol->currentIndex(), nullptr); + } + mem<dylib> current_filter() + { + return modules.filters().value(ui.iconcomboFilter->currentIndex(), nullptr); + } + + void load_settings(); + void load_mappings(); + void updateButtonState(bool running, bool inertialp); + void display_pose(const double* mapped, const double* raw); + void ensure_tray(); + 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 register_shortcuts(); + void set_keys_enabled(bool flag); +private slots: + void save_modules(); + void exit(); + void profile_selected(const QString& name); + + void showTrackerSettings(); + void showProtocolSettings(); + void showFilterSettings(); + void show_options_dialog(); + void showCurveConfiguration(); + void showHeadPose(); + + 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(); + + void startTracker(); + void stopTracker(); + void reload_options(); + +signals: + void emit_start_tracker(); + void emit_stop_tracker(); + void emit_toggle_tracker(); + void emit_restart_tracker(); +public: + MainWindow(); + ~MainWindow(); + static void set_working_directory(); + void warn_on_config_not_writable(); +}; |