From da9c3080111b0cd31b48696c3c67ac46e4843ee8 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Mon, 21 Nov 2016 11:09:37 +0100 Subject: tracker/qt-gamepad: add stub --- cmake/opentrack-qt.cmake | 2 +- tracker-qt-gamepad/CMakeLists.txt | 3 ++ tracker-qt-gamepad/test.cpp | 99 ++++++++++++++++++++++++++++++++++++++ tracker-qt-gamepad/test.h | 45 +++++++++++++++++ tracker-qt-gamepad/test.ui | 59 +++++++++++++++++++++++ tracker-qt-gamepad/test_dialog.cpp | 3 ++ 6 files changed, 210 insertions(+), 1 deletion(-) create mode 100644 tracker-qt-gamepad/CMakeLists.txt create mode 100644 tracker-qt-gamepad/test.cpp create mode 100644 tracker-qt-gamepad/test.h create mode 100644 tracker-qt-gamepad/test.ui create mode 100644 tracker-qt-gamepad/test_dialog.cpp diff --git a/cmake/opentrack-qt.cmake b/cmake/opentrack-qt.cmake index bb492eda..c6ab2673 100644 --- a/cmake/opentrack-qt.cmake +++ b/cmake/opentrack-qt.cmake @@ -1,5 +1,5 @@ find_package(Qt5 REQUIRED COMPONENTS Core Network Widgets Gui QUIET) -find_package(Qt5 COMPONENTS SerialPort QUIET) +find_package(Qt5 COMPONENTS SerialPort Gamepad QUIET) include_directories(SYSTEM ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS}) add_definitions(${Qt5Core_DEFINITIONS} ${Qt5Gui_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} ${Qt5Network_DEFINITIONS}) set(MY_QT_LIBS ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES}) diff --git a/tracker-qt-gamepad/CMakeLists.txt b/tracker-qt-gamepad/CMakeLists.txt new file mode 100644 index 00000000..c892c5c6 --- /dev/null +++ b/tracker-qt-gamepad/CMakeLists.txt @@ -0,0 +1,3 @@ +if(FALSE AND Qt5Gamepad_FOUND) + opentrack_boilerplate(opentrack-tracker-qt-gamepad) +endif() diff --git a/tracker-qt-gamepad/test.cpp b/tracker-qt-gamepad/test.cpp new file mode 100644 index 00000000..4f2c8daa --- /dev/null +++ b/tracker-qt-gamepad/test.cpp @@ -0,0 +1,99 @@ +/* Copyright (c) 2014, Stanislaw Halik + + * 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. + */ + +#include "test.h" +#include "api/plugin-api.hpp" +#include + +#include + +const double gamepad_tracker::incr[6] = +{ + 50, 40, 80, + 70, 5, 3 +}; + +gamepad_tracker::gamepad_tracker() : + last_x { 0, 0, 0, 0, 0, 0 } +{ +} + +gamepad_tracker::~gamepad_tracker() +{ +} + +void gamepad_tracker::start_tracker(QFrame*) +{ + t.start(); +} + +#ifdef EMIT_NAN +# include +#endif + +void gamepad_tracker::data(double *data) +{ + using std::fmod; + using std::sin; + using std::fabs; + using std::copysign; + + const double dt = t.elapsed_seconds(); + t.start(); + +#ifdef EMIT_NAN + if ((rand()%4) == 0) + { + for (int i = 0; i < 6; i++) + data[i] = 0./0.; + } + else +#endif + for (int i = 0; i < 6; i++) + { + double x = fmod(last_x[i] + incr[i] * d2r * dt, 2 * M_PI); + last_x[i] = x; + + if (i >= 3) + { +#ifdef DISCONTINUITY + if (x > pi + pi/2) + x -= M_PI; + else if (x > pi/2 && x < pi) + x += M_PI; +#endif + + data[i] = sin(x) * 180; + } + else + { + data[i] = sin(x) * 100; + } + } +} + +gamepad_dialog::gamepad_dialog() +{ + ui.setupUi(this); + + connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK())); + connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel())); +} + +void gamepad_dialog::doOK() +{ + //s.b->save(); + close(); +} + +void gamepad_dialog::doCancel() +{ + close(); +} + +OPENTRACK_DECLARE_TRACKER(gamepad_tracker, gamepad_dialog, gamepad_metadata) diff --git a/tracker-qt-gamepad/test.h b/tracker-qt-gamepad/test.h new file mode 100644 index 00000000..ffa9ac44 --- /dev/null +++ b/tracker-qt-gamepad/test.h @@ -0,0 +1,45 @@ +#pragma once +#include "ui_test.h" +#include "api/plugin-api.hpp" +#include "compat/timer.hpp" + +#include + +class gamepad_tracker : public ITracker +{ +public: + gamepad_tracker(); + ~gamepad_tracker() override; + void start_tracker(QFrame *) override; + void data(double *data) override; + +private: + static constexpr double r2d = 180 / M_PI; + static constexpr double d2r = M_PI / 180; + + static const double incr[6]; + double last_x[6]; + Timer t; +}; + +class gamepad_dialog : public ITrackerDialog +{ + Q_OBJECT + + Ui::test_ui ui; +public: + gamepad_dialog(); + void register_tracker(ITracker *) override {} + void unregister_tracker() override {} +private slots: + void doOK(); + void doCancel(); +}; + +class gamepad_metadata : public Metadata +{ +public: + QString name() { return QString(QCoreApplication::translate("gamepad_metadata", "Gamepad input")); } + QIcon icon() { return QIcon(":/images/facetracknoir.png"); } +}; + diff --git a/tracker-qt-gamepad/test.ui b/tracker-qt-gamepad/test.ui new file mode 100644 index 00000000..bdf2cd4e --- /dev/null +++ b/tracker-qt-gamepad/test.ui @@ -0,0 +1,59 @@ + + + test_ui + + + Qt::NonModal + + + + 0 + 0 + 352 + 224 + + + + Gamepad input + + + + ../gui/images/facetracknoir.png../gui/images/facetracknoir.png + + + Qt::LeftToRight + + + false + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + startEngineClicked() + stopEngineClicked() + cameraSettingsClicked() + + diff --git a/tracker-qt-gamepad/test_dialog.cpp b/tracker-qt-gamepad/test_dialog.cpp new file mode 100644 index 00000000..5d33555b --- /dev/null +++ b/tracker-qt-gamepad/test_dialog.cpp @@ -0,0 +1,3 @@ +#include "test.h" +#include "api/plugin-api.hpp" + -- cgit v1.2.3