diff options
Diffstat (limited to 'opentrack-logic/work.hpp')
-rw-r--r-- | opentrack-logic/work.hpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/opentrack-logic/work.hpp b/opentrack-logic/work.hpp new file mode 100644 index 00000000..2377be5a --- /dev/null +++ b/opentrack-logic/work.hpp @@ -0,0 +1,63 @@ +/* Copyright (c) 2014-2015, 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 "main-settings.hpp" +#include "opentrack/plugin-support.hpp" +#include "tracker.h" +#include "shortcuts.h" + +#include <QObject> +#include <QFrame> +#include <memory> +#include <vector> +#include <functional> +#include <tuple> + +struct Work +{ + main_settings& s; + SelectedLibraries& libs; + mem<Tracker> tracker; + mem<Shortcuts> sc; + WId handle; + using fn = std::function<void(bool)>; + using tt = std::tuple<key_opts&, fn, bool>; + std::vector<tt> keys; + + Work(main_settings& s, Mappings& m, SelectedLibraries& libs, WId handle) : + s(s), libs(libs), + tracker(std::make_shared<Tracker>(s, m, libs)), + sc(std::make_shared<Shortcuts>()), + handle(handle), + keys { + tt(s.key_center, [&](bool) -> void { tracker->center(); }, true), + tt(s.key_toggle, [&](bool) -> void { tracker->toggle_enabled(); }, true), + tt(s.key_zero, [&](bool) -> void { tracker->zero(); }, true), + tt(s.key_toggle_press, [&](bool x) -> void { tracker->set_toggle(!x); }, false), + tt(s.key_zero_press, [&](bool x) -> void { tracker->set_zero(x); }, false), + } + { + reload_shortcuts(); + tracker->start(); + } + + void reload_shortcuts() + { + sc->reload(keys); + } + + ~Work() + { + sc = nullptr; + // order matters, otherwise use-after-free -sh + tracker = nullptr; + libs = SelectedLibraries(); + } +}; |