diff options
Diffstat (limited to 'facetracknoir')
27 files changed, 0 insertions, 4398 deletions
diff --git a/facetracknoir/CMakeLists.txt b/facetracknoir/CMakeLists.txt deleted file mode 100644 index 51d0cea3..00000000 --- a/facetracknoir/CMakeLists.txt +++ /dev/null @@ -1,62 +0,0 @@ -opentrack_boilerplate(opentrack NO-LIBRARY) - -if(UNIX OR APPLE) - target_include_directories(opentrack "${CMAKE_SOURCE_DIR}/qxt-mini") - if(APPLE) - set(qxt-plat mac) - else() - set(qxt-plat x11) - endif() - file(GLOB qxt-mini-c - ${CMAKE_SOURCE_DIR}/qxt-mini/*.h - ${CMAKE_SOURCE_DIR}/qxt-mini/qxtglobalshortcut.cpp - ${CMAKE_SOURCE_DIR}/qxt-mini/plat/qxtglobalshortcut_${qxt-plat}.cpp - ) - opentrack_qt(qxt-mini) - add_library(opentrack-qxt-mini STATIC ${qxt-mini-all}) - target_link_libraries(opentrack-qxt-mini ${MY_QT_LIBS}) - if(NOT APPLE) - target_link_libraries(opentrack-qxt-mini X11) - endif() -endif() - -if(WIN32) - SET(SDK_CONSOLE_DEBUG FALSE CACHE BOOL "Console window visible at runtime") -endif() - -if(WIN32 AND NOT SDK_CONSOLE_DEBUG) - set(opentrack-win32-executable WIN32) -else() - set(opentrack-win32-executable "") -endif() - -if(UNIX OR APPLE) - list(APPEND opentrack-c ${CMAKE_SOURCE_DIR}/qxt-mini/qxtglobalshortcut.h) -endif() -opentrack_qt(opentrack) -add_executable(opentrack ${opentrack-win32-executable} ${opentrack-all}) -opentrack_compat(opentrack) -if(NOT WIN32) - set_target_properties(opentrack PROPERTIES SUFFIX ".bin") -endif() -target_link_libraries(opentrack opentrack-api opentrack-version opentrack-pose-widget opentrack-spline-widget) -if(APPLE) - SET_TARGET_PROPERTIES(opentrack-qxt-mini PROPERTIES LINK_FLAGS "-framework Carbon -framework CoreFoundation") -endif() -if(UNIX OR APPLE) - target_link_libraries(opentrack opentrack-qxt-mini) -endif() -link_with_dinput8(opentrack) -target_link_libraries(opentrack ${MY_QT_LIBS}) - -if(APPLE) - # for process detector - target_link_libraries(opentrack proc) -endif() - -if(LINUX) - # for process detector - target_link_libraries(opentrack procps) -endif() - -install(TARGETS opentrack DESTINATION .) diff --git a/facetracknoir/curve-config.cpp b/facetracknoir/curve-config.cpp deleted file mode 100644 index 2e9065b4..00000000 --- a/facetracknoir/curve-config.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/* 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. - */ - -#include "curve-config.h" -#include "opentrack/main-settings.hpp" -MapWidget::MapWidget(Mappings& m, main_settings& s) : - m(m) -{ - ui.setupUi( this ); - - // rest of mapping settings taken care of by options::value<t> - m.load_mappings(); - - { - struct { - QFunctionConfigurator* qfc; - Axis axis; - QCheckBox* checkbox; - bool altp; - } qfcs[] = - { - { ui.rxconfig, Yaw, nullptr, false }, - { ui.ryconfig, Pitch, nullptr, false }, - { ui.rzconfig, Roll, nullptr, false }, - { ui.txconfig, TX, nullptr, false }, - { ui.tyconfig, TY, nullptr, false }, - { ui.tzconfig, TZ, nullptr, false }, - - { ui.rxconfig_alt, Yaw, ui.rx_altp, true }, - { ui.ryconfig_alt, Pitch, ui.ry_altp, true }, - { ui.rzconfig_alt, Roll, ui.rz_altp, true }, - { ui.txconfig_alt, TX, ui.tx_altp, true }, - { ui.tyconfig_alt, TY, ui.ty_altp, true }, - { ui.tzconfig_alt, TZ, ui.tz_altp, true }, - { nullptr, Yaw, nullptr, false } - }; - - for (int i = 0; qfcs[i].qfc; i++) - { - const bool altp = qfcs[i].altp; - Mapping& axis = m(qfcs[i].axis); - Map* conf = altp ? &axis.curveAlt : &axis.curve; - const auto& name = qfcs[i].altp ? axis.name2 : axis.name1; - if (altp) - { - QFunctionConfigurator& qfc = *qfcs[i].qfc; - connect(qfcs[i].checkbox, &QCheckBox::toggled, - [&](bool f) -> void {qfc.setEnabled(f); qfc.force_redraw();}); - qfc.setEnabled(qfcs[i].checkbox->isChecked()); - qfc.force_redraw(); - } - qfcs[i].qfc->setConfig(conf, name); - } - } - - setFont(qApp->font()); - connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK())); - connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel())); - - tie_setting(s.a_x.altp, ui.tx_altp); - tie_setting(s.a_y.altp, ui.ty_altp); - tie_setting(s.a_z.altp, ui.tz_altp); - tie_setting(s.a_yaw.altp, ui.rx_altp); - tie_setting(s.a_pitch.altp, ui.ry_altp); - tie_setting(s.a_roll.altp, ui.rz_altp); -} - -void MapWidget::doOK() { - m.save_mappings(); - this->close(); -} - -void MapWidget::doCancel() { - m.invalidate_unsaved(); - this->close(); -} diff --git a/facetracknoir/curve-config.h b/facetracknoir/curve-config.h deleted file mode 100644 index 0cbc7055..00000000 --- a/facetracknoir/curve-config.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include <QWidget> -#include "opentrack/mappings.hpp" -#include "ui_mapping.h" - -class MapWidget: public QWidget -{ - Q_OBJECT -public: - MapWidget(Mappings &m, main_settings &s); -private: - Ui::UICCurveConfigurationDialog ui; - Mappings& m; - void closeEvent(QCloseEvent *) override { doCancel(); } -private slots: - void doOK(); - void doCancel(); -}; diff --git a/facetracknoir/facetracknoir.ico b/facetracknoir/facetracknoir.ico Binary files differdeleted file mode 100644 index 5cac8da1..00000000 --- a/facetracknoir/facetracknoir.ico +++ /dev/null diff --git a/facetracknoir/facetracknoir.rc b/facetracknoir/facetracknoir.rc deleted file mode 100644 index 020ffe97..00000000 --- a/facetracknoir/facetracknoir.rc +++ /dev/null @@ -1,2 +0,0 @@ -#include <windows.h> -IDI_ICON1 ICON "facetracknoir.ico" diff --git a/facetracknoir/images/curves.png b/facetracknoir/images/curves.png Binary files differdeleted file mode 100644 index 3f953a0a..00000000 --- a/facetracknoir/images/curves.png +++ /dev/null diff --git a/facetracknoir/images/facetracknoir.png b/facetracknoir/images/facetracknoir.png Binary files differdeleted file mode 100644 index 85c06df6..00000000 --- a/facetracknoir/images/facetracknoir.png +++ /dev/null diff --git a/facetracknoir/images/filter-16.png b/facetracknoir/images/filter-16.png Binary files differdeleted file mode 100644 index ecde6a10..00000000 --- a/facetracknoir/images/filter-16.png +++ /dev/null diff --git a/facetracknoir/images/no-feed.png b/facetracknoir/images/no-feed.png Binary files differdeleted file mode 100644 index 02aa227a..00000000 --- a/facetracknoir/images/no-feed.png +++ /dev/null diff --git a/facetracknoir/images/settings16.png b/facetracknoir/images/settings16.png Binary files differdeleted file mode 100644 index 3b31623b..00000000 --- a/facetracknoir/images/settings16.png +++ /dev/null diff --git a/facetracknoir/images/tools.png b/facetracknoir/images/tools.png Binary files differdeleted file mode 100644 index 2da8f9f5..00000000 --- a/facetracknoir/images/tools.png +++ /dev/null diff --git a/facetracknoir/keyboard.h b/facetracknoir/keyboard.h deleted file mode 100644 index 62a9ce20..00000000 --- a/facetracknoir/keyboard.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once -#include "ui_keyboard_listener.h" -#ifdef _WIN32 -#include "opentrack/win32-shortcuts.h" -#include "opentrack/shortcuts.h" -#endif -#include <QLabel> -#include <QKeyEvent> -#include <QDebug> - -class KeyboardListener : public QLabel -{ - Q_OBJECT - Ui_keyboard_listener ui; -#ifdef _WIN32 - KeybindingWorker w; -#endif -public: - KeyboardListener(QWidget* parent = nullptr) : QLabel(parent) -#ifdef _WIN32 - , w([&](Key& k) - { - Qt::KeyboardModifiers m; - QKeySequence k_; - if (win_key::to_qt(k, k_, m)) - key_pressed(static_cast<QVariant>(k_).toInt() | m); - }, this->winId()) -#endif - { - ui.setupUi(this); - setFocusPolicy(Qt::StrongFocus); -#ifdef _WIN32 - w.start(); -#endif - } -#ifndef _WIN32 - void keyPressEvent(QKeyEvent* event) override - { - //qDebug() << "k" << (event->key() | event->modifiers()); - switch (event->key() | event->modifiers()) - { - default: - emit key_pressed(QKeySequence(event->key() | event->modifiers())); - break; - } - } -#endif -signals: - void key_pressed(QKeySequence k); -}; diff --git a/facetracknoir/keyboard_listener.ui b/facetracknoir/keyboard_listener.ui deleted file mode 100644 index b6977df0..00000000 --- a/facetracknoir/keyboard_listener.ui +++ /dev/null @@ -1,37 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>keyboard_listener</class> - <widget class="QLabel" name="keyboard_listener"> - <property name="windowModality"> - <enum>Qt::ApplicationModal</enum> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>224</width> - <height>33</height> - </rect> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="windowTitle"> - <string>Bind a shortcut</string> - </property> - <property name="text"> - <string><html><head/><body><p>Press a key or close this window to remove the keybinding.</p></body></html></string> - </property> - <property name="textFormat"> - <enum>Qt::RichText</enum> - </property> - <property name="margin"> - <number>10</number> - </property> - </widget> - <resources/> - <connections/> -</ui> diff --git a/facetracknoir/main.cpp b/facetracknoir/main.cpp deleted file mode 100644 index a63fe54a..00000000 --- a/facetracknoir/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -#ifdef _WIN32 -# include <stdlib.h> -#endif - -#include "ui.h" -#include "opentrack/options.hpp" -using namespace options; -#include <QApplication> -#include <QCommandLineParser> -#include <QStyleFactory> -#include <QStringList> -#include <QMessageBox> -#include <memory> -#include <cstring> - -#ifdef _WIN32 -// workaround QTBUG-38598, allow for launching from another directory -static void add_program_library_path() -{ - char* p = _pgmptr; - char path[MAX_PATH+1]; - strcpy(path, p); - char* ptr = strrchr(path, '\\'); - if (ptr) - { - *ptr = '\0'; - QCoreApplication::addLibraryPath(path); - } -} -#endif - -int main(int argc, char** argv) -{ -#ifdef _WIN32 - add_program_library_path(); -#elif !defined(__linux) - // workaround QTBUG-38598 - QCoreApplication::addLibraryPath("."); -#endif - -#if defined(_WIN32) || defined(__APPLE__) - // qt5 designer-made controls look like shit on 'doze -sh 20140921 - // also our OSX look leaves a lot to be desired -sh 20150726 - { - const QStringList preferred { "fusion", "windowsvista", "macintosh", "windowsxp" }; - for (const auto& style_name : preferred) - { - QStyle* s = QStyleFactory::create(style_name); - if (s) - { - QApplication::setStyle(s); - break; - } - } - } -#endif - - QApplication::setAttribute(Qt::AA_X11InitThreads, true); - QApplication app(argc, argv); - - auto w = std::make_shared<MainWindow>(); - - w->show(); - app.exec(); - - // on MSVC crashes in atexit -#ifdef _MSC_VER - TerminateProcess(GetCurrentProcess(), 0); -#endif - return 0; -} diff --git a/facetracknoir/main.ui b/facetracknoir/main.ui deleted file mode 100644 index ab63e832..00000000 --- a/facetracknoir/main.ui +++ /dev/null @@ -1,1255 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <author>Lovecraftian Octopus</author> - <class>OpentrackUI</class> - <widget class="QMainWindow" name="OpentrackUI"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>707</width> - <height>494</height> - </rect> - </property> - <property name="windowIcon"> - <iconset resource="ui-res.qrc"> - <normaloff>:/images/facetracknoir.png</normaloff>:/images/facetracknoir.png</iconset> - </property> - <property name="styleSheet"> - <string notr="true">#video_feed { border: 0; } -</string> - </property> - <widget class="QWidget" name="content"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <property name="spacing"> - <number>0</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QFrame" name="frame"> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="lineWidth"> - <number>0</number> - </property> - <layout class="QGridLayout" name="gridLayout_5"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <property name="spacing"> - <number>0</number> - </property> - <item row="0" column="0"> - <widget class="QFrame" name="top"> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <property name="spacing"> - <number>0</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <item> - <widget class="QFrame" name="video_feed"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>480</width> - <height>360</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>480</width> - <height>360</height> - </size> - </property> - <widget class="QFrame" name="video_frame"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>480</width> - <height>360</height> - </rect> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <widget class="QLabel" name="video_frame_label"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>480</width> - <height>360</height> - </rect> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>480</width> - <height>360</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>480</width> - <height>360</height> - </size> - </property> - <property name="text"> - <string/> - </property> - </widget> - </widget> - </widget> - </item> - <item> - <widget class="QFrame" name="top_display"> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="lineWidth"> - <number>0</number> - </property> - <layout class="QVBoxLayout"> - <property name="spacing"> - <number>12</number> - </property> - <property name="leftMargin"> - <number>6</number> - </property> - <property name="topMargin"> - <number>12</number> - </property> - <property name="rightMargin"> - <number>8</number> - </property> - <property name="bottomMargin"> - <number>4</number> - </property> - <item> - <widget class="GLWidget" name="pose_display" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="maximumSize"> - <size> - <width>80</width> - <height>90</height> - </size> - </property> - </widget> - </item> - <item> - <widget class="QGroupBox" name="box_raw_headpose"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string notr="true">Raw tracker data</string> - </property> - <layout class="QGridLayout" name="gridLayout_12"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <property name="horizontalSpacing"> - <number>3</number> - </property> - <property name="verticalSpacing"> - <number>2</number> - </property> - <item row="0" column="1"> - <widget class="QLCDNumber" name="raw_x"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <property name="lineWidth"> - <number>1</number> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Outline</enum> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="lblRotX_4"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>yaw</string> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="QLabel" name="lblRotZ_4"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>roll</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="lblZ_4"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="autoFillBackground"> - <bool>false</bool> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>TZ</string> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QLabel" name="lblRotY_4"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>pitch</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLCDNumber" name="raw_y"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <property name="lineWidth"> - <number>1</number> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Outline</enum> - </property> - </widget> - </item> - <item row="0" column="3"> - <widget class="QLCDNumber" name="raw_yaw"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <property name="lineWidth"> - <number>1</number> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Outline</enum> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="QLCDNumber" name="raw_roll"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <property name="lineWidth"> - <number>1</number> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Outline</enum> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLCDNumber" name="raw_z"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <property name="lineWidth"> - <number>1</number> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Outline</enum> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="lblX_4"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>TX</string> - </property> - </widget> - </item> - <item row="1" column="3"> - <widget class="QLCDNumber" name="raw_pitch"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Plain</enum> - </property> - <property name="lineWidth"> - <number>1</number> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Outline</enum> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="lblY_4"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="autoFillBackground"> - <bool>false</bool> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>TY</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="box_mapped_headpose"> - <property name="sizePolicy"> - <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string notr="true">Game data</string> - </property> - <layout class="QGridLayout" name="gridLayout_14"> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <property name="horizontalSpacing"> - <number>3</number> - </property> - <property name="verticalSpacing"> - <number>2</number> - </property> - <item row="1" column="0"> - <widget class="QLabel" name="lblY_2"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="autoFillBackground"> - <bool>false</bool> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>TY</string> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QLabel" name="lblRotY_2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>pitch</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLCDNumber" name="pose_x"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Flat</enum> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="lblRotX_2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>yaw</string> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="QLabel" name="lblRotZ_2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>roll</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="lblZ_2"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="autoFillBackground"> - <bool>false</bool> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>TZ</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QLCDNumber" name="pose_y"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Flat</enum> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="QLCDNumber" name="pose_roll"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Flat</enum> - </property> - </widget> - </item> - <item row="0" column="3"> - <widget class="QLCDNumber" name="pose_yaw"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Flat</enum> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QLCDNumber" name="pose_z"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Flat</enum> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="lblx"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <property name="text"> - <string>TX</string> - </property> - </widget> - </item> - <item row="1" column="3"> - <widget class="QLCDNumber" name="pose_pitch"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="smallDecimalPoint"> - <bool>true</bool> - </property> - <property name="digitCount"> - <number>4</number> - </property> - <property name="segmentStyle"> - <enum>QLCDNumber::Flat</enum> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - <item row="1" column="0"> - <widget class="QFrame" name="bottom_controls"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <layout class="QGridLayout" name="gridLayout_2"> - <property name="leftMargin"> - <number>4</number> - </property> - <property name="topMargin"> - <number>8</number> - </property> - <property name="rightMargin"> - <number>10</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <property name="horizontalSpacing"> - <number>4</number> - </property> - <property name="verticalSpacing"> - <number>0</number> - </property> - <item row="1" column="2"> - <widget class="QGroupBox" name="groupWindows"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>4</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string>Settings</string> - </property> - <property name="flat"> - <bool>true</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <property name="spacing"> - <number>3</number> - </property> - <property name="leftMargin"> - <number>4</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>6</number> - </property> - <item> - <widget class="QFrame" name="groupProfile"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding"> - <horstretch>0</horstretch> - <verstretch>2</verstretch> - </sizepolicy> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="spacing"> - <number>0</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>2</number> - </property> - <property name="bottomMargin"> - <number>2</number> - </property> - <item> - <widget class="QToolButton" name="profile_button"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Profile</string> - </property> - <property name="popupMode"> - <enum>QToolButton::InstantPopup</enum> - </property> - <property name="toolButtonStyle"> - <enum>Qt::ToolButtonTextBesideIcon</enum> - </property> - <property name="autoRaise"> - <bool>true</bool> - </property> - <property name="arrowType"> - <enum>Qt::DownArrow</enum> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="iconcomboProfile"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="maxVisibleItems"> - <number>20</number> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QPushButton" name="btnEditCurves"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>3</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Mapping</string> - </property> - <property name="icon"> - <iconset resource="ui-res.qrc"> - <normaloff>:/images/curves.png</normaloff>:/images/curves.png</iconset> - </property> - <property name="iconSize"> - <size> - <width>80</width> - <height>24</height> - </size> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="btnShortcuts"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>3</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Options</string> - </property> - <property name="icon"> - <iconset resource="ui-res.qrc"> - <normaloff>:/images/tools.png</normaloff>:/images/tools.png</iconset> - </property> - <property name="iconSize"> - <size> - <width>80</width> - <height>24</height> - </size> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item row="1" column="1"> - <widget class="QGroupBox" name="groupStartStop"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>3</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title"> - <string notr="true">Controls</string> - </property> - <property name="flat"> - <bool>true</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <property name="spacing"> - <number>8</number> - </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>8</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> - <number>9</number> - </property> - <item> - <widget class="QToolButton" name="btnStartTracker"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Start</string> - </property> - </widget> - </item> - <item> - <widget class="QToolButton" name="btnStopTracker"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Stop</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item row="1" column="0"> - <widget class="QFrame" name="frame_2"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>4</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="frameShape"> - <enum>QFrame::NoFrame</enum> - </property> - <property name="frameShadow"> - <enum>QFrame::Raised</enum> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <property name="spacing"> - <number>2</number> - </property> - <property name="leftMargin"> - <number>3</number> - </property> - <property name="topMargin"> - <number>2</number> - </property> - <property name="rightMargin"> - <number>3</number> - </property> - <property name="bottomMargin"> - <number>8</number> - </property> - <item> - <widget class="QGroupBox" name="groupTrackerSource"> - <property name="title"> - <string>Tracker</string> - </property> - <layout class="QGridLayout" name="gridLayout"> - <property name="leftMargin"> - <number>4</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>4</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <property name="horizontalSpacing"> - <number>3</number> - </property> - <property name="verticalSpacing"> - <number>0</number> - </property> - <item row="0" column="0"> - <widget class="QComboBox" name="iconcomboTrackerSource"/> - </item> - <item row="0" column="1"> - <widget class="QToolButton" name="btnShowEngineControls"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="text"> - <string>...</string> - </property> - <property name="flat" stdset="0"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupGameProtocol"> - <property name="title"> - <string>Protocol</string> - </property> - <layout class="QGridLayout" name="gridLayout_4"> - <property name="leftMargin"> - <number>4</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>4</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <property name="horizontalSpacing"> - <number>3</number> - </property> - <property name="verticalSpacing"> - <number>0</number> - </property> - <item row="0" column="0"> - <widget class="QComboBox" name="iconcomboProtocol"/> - </item> - <item row="0" column="1"> - <widget class="QToolButton" name="btnShowServerControls"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="text"> - <string>...</string> - </property> - <property name="flat" stdset="0"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupFilter"> - <property name="title"> - <string>Filter</string> - </property> - <layout class="QGridLayout" name="gridLayout_3"> - <property name="leftMargin"> - <number>4</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>4</number> - </property> - <property name="bottomMargin"> - <number>0</number> - </property> - <property name="horizontalSpacing"> - <number>3</number> - </property> - <property name="verticalSpacing"> - <number>0</number> - </property> - <item row="0" column="0"> - <widget class="QComboBox" name="iconcomboFilter"/> - </item> - <item row="0" column="1"> - <widget class="QToolButton" name="btnShowFilterControls"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="text"> - <string>...</string> - </property> - <property name="flat" stdset="0"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </widget> - <customwidgets> - <customwidget> - <class>GLWidget</class> - <extends>QWidget</extends> - <header>pose-widget/glwidget.h</header> - </customwidget> - </customwidgets> - <tabstops> - <tabstop>btnStartTracker</tabstop> - <tabstop>btnStopTracker</tabstop> - <tabstop>iconcomboTrackerSource</tabstop> - <tabstop>btnShowEngineControls</tabstop> - <tabstop>iconcomboProtocol</tabstop> - <tabstop>btnShowServerControls</tabstop> - <tabstop>iconcomboFilter</tabstop> - <tabstop>btnShowFilterControls</tabstop> - <tabstop>profile_button</tabstop> - <tabstop>iconcomboProfile</tabstop> - <tabstop>btnEditCurves</tabstop> - <tabstop>btnShortcuts</tabstop> - </tabstops> - <resources> - <include location="ui-res.qrc"/> - </resources> - <connections/> -</ui> diff --git a/facetracknoir/mapping.ui b/facetracknoir/mapping.ui deleted file mode 100644 index 75c32e27..00000000 --- a/facetracknoir/mapping.ui +++ /dev/null @@ -1,391 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>UICCurveConfigurationDialog</class> - <widget class="QWidget" name="UICCurveConfigurationDialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>970</width> - <height>664</height> - </rect> - </property> - <property name="sizePolicy"> - <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>970</width> - <height>664</height> - </size> - </property> - <property name="maximumSize"> - <size> - <width>970</width> - <height>664</height> - </size> - </property> - <property name="windowTitle"> - <string>Mapping properties</string> - </property> - <property name="windowIcon"> - <iconset> - <normaloff>images/facetracknoir.png</normaloff>images/facetracknoir.png</iconset> - </property> - <property name="layoutDirection"> - <enum>Qt::LeftToRight</enum> - </property> - <property name="styleSheet"> - <string notr="true">background-color: #ccc;</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QTabWidget" name="tabWidget"> - <property name="styleSheet"> - <string notr="true"/> - </property> - <property name="tabPosition"> - <enum>QTabWidget::North</enum> - </property> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="tabWidgetPage1"> - <attribute name="title"> - <string>Yaw</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QFunctionConfigurator" name="rxconfig" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>255</red> - <green>0</green> - <blue>0</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="rx_altp"> - <property name="text"> - <string>Asymmetric mapping below</string> - </property> - </widget> - </item> - <item> - <widget class="QFunctionConfigurator" name="rxconfig_alt" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>255</red> - <green>0</green> - <blue>0</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>255</red> - <green>255</green> - <blue>255</blue> - </color> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tabWidgetPage2"> - <attribute name="title"> - <string>Pitch</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QFunctionConfigurator" name="ryconfig" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>0</red> - <green>255</green> - <blue>0</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="ry_altp"> - <property name="text"> - <string>Asymmetric mapping below</string> - </property> - </widget> - </item> - <item> - <widget class="QFunctionConfigurator" name="ryconfig_alt" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>0</red> - <green>255</green> - <blue>0</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tabWidgetPage3"> - <attribute name="title"> - <string>Roll</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <item> - <widget class="QFunctionConfigurator" name="rzconfig" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>0</red> - <green>0</green> - <blue>255</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="rz_altp"> - <property name="text"> - <string>Asymmetric mapping below</string> - </property> - </widget> - </item> - <item> - <widget class="QFunctionConfigurator" name="rzconfig_alt" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>0</red> - <green>0</green> - <blue>255</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tabWidgetPage4"> - <attribute name="title"> - <string>X</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_5"> - <item> - <widget class="QFunctionConfigurator" name="txconfig" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>255</red> - <green>0</green> - <blue>255</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="tx_altp"> - <property name="text"> - <string>Asymmetric mapping below</string> - </property> - </widget> - </item> - <item> - <widget class="QFunctionConfigurator" name="txconfig_alt" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>255</red> - <green>0</green> - <blue>255</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tabWidgetPage5"> - <attribute name="title"> - <string>Y</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_6"> - <item> - <widget class="QFunctionConfigurator" name="tyconfig" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>255</red> - <green>255</green> - <blue>0</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="ty_altp"> - <property name="text"> - <string>Asymmetric mapping below</string> - </property> - </widget> - </item> - <item> - <widget class="QFunctionConfigurator" name="tyconfig_alt" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>255</red> - <green>255</green> - <blue>0</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="tabWidgetPage6"> - <attribute name="title"> - <string>Z</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_7"> - <item> - <widget class="QFunctionConfigurator" name="tzconfig" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>0</red> - <green>255</green> - <blue>255</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="tz_altp"> - <property name="text"> - <string>Asymmetric mapping below</string> - </property> - </widget> - </item> - <item> - <widget class="QFunctionConfigurator" name="tzconfig_alt" native="true"> - <property name="colorBezier" stdset="0"> - <color> - <red>0</red> - <green>255</green> - <blue>255</blue> - </color> - </property> - <property name="colorBackground" stdset="0"> - <color> - <red>240</red> - <green>240</green> - <blue>240</blue> - </color> - </property> - </widget> - </item> - </layout> - </widget> - </widget> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>QFunctionConfigurator</class> - <extends>QWidget</extends> - <header>spline-widget/qfunctionconfigurator.h</header> - </customwidget> - </customwidgets> - <tabstops> - <tabstop>ry_altp</tabstop> - <tabstop>rz_altp</tabstop> - <tabstop>tx_altp</tabstop> - <tabstop>ty_altp</tabstop> - <tabstop>tz_altp</tabstop> - <tabstop>tabWidget</tabstop> - <tabstop>buttonBox</tabstop> - <tabstop>rx_altp</tabstop> - </tabstops> - <resources/> - <connections/> - <slots> - <slot>startEngineClicked()</slot> - <slot>stopEngineClicked()</slot> - <slot>cameraSettingsClicked()</slot> - </slots> -</ui> diff --git a/facetracknoir/new_config.ui b/facetracknoir/new_config.ui deleted file mode 100644 index 27dce0f8..00000000 --- a/facetracknoir/new_config.ui +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>UI_new_config</class> - <widget class="QDialog" name="UI_new_config"> - <property name="windowModality"> - <enum>Qt::ApplicationModal</enum> - </property> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>269</width> - <height>67</height> - </rect> - </property> - <property name="windowTitle"> - <string>Config filename</string> - </property> - <property name="windowIcon"> - <iconset> - <normaloff>images/facetracknoir.png</normaloff>images/facetracknoir.png</iconset> - </property> - <layout class="QFormLayout" name="formLayout"> - <item row="0" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>New file name:</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLineEdit" name="lineEdit"/> - </item> - <item row="1" column="1"> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/facetracknoir/new_file_dialog.h b/facetracknoir/new_file_dialog.h deleted file mode 100644 index 3a35cf71..00000000 --- a/facetracknoir/new_file_dialog.h +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "ui_new_config.h" -#include "opentrack/options.hpp" -#include <QFile> -#include <QRegExp> -#include <QString> -#include <QMessageBox> - -class new_file_dialog : public QDialog -{ - Q_OBJECT -public: - new_file_dialog(QWidget* parent = 0) : QDialog(parent), ok(false) - { - ui.setupUi(this); - connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(ok_clicked())); - connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(cancel_clicked())); - setFixedSize(size()); - } - bool is_ok(QString& name_) - { - name_ = name; - return ok; - } -private: - Ui::UI_new_config ui; - bool ok; - QString name; -private slots: - void cancel_clicked() { close(); } - void ok_clicked() - { - QString text = ui.lineEdit->text(); - text = text.replace('/', ""); - text = text.replace('\\', ""); - if (text != "" && !text.endsWith(".ini")) - text += ".ini"; - if (text == "" || text == ".ini" || QFile(options::group::ini_directory() + "/" + text).exists()) - { - QMessageBox::warning(this, - "File exists", "This file already exists. Pick another name.", - QMessageBox::Ok, QMessageBox::NoButton); - return; - } - ok = true; - close(); - name = text; - } -}; diff --git a/facetracknoir/options-dialog.cpp b/facetracknoir/options-dialog.cpp deleted file mode 100644 index fef2b0ca..00000000 --- a/facetracknoir/options-dialog.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (c) 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. - */ - -#include "options-dialog.hpp" -#include "keyboard.h" -#include <QPushButton> -#include <QLayout> - -OptionsDialog::OptionsDialog() -{ - ui.setupUi( this ); - - connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(doOK())); - connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(doCancel())); - - tie_setting(s.s_main.tray_enabled, ui.trayp); - - tie_setting(s.s_main.center_at_startup, ui.center_at_startup); - - tie_setting(s.s_main.tcomp_p, ui.tcomp_enable); - tie_setting(s.s_main.tcomp_tz, ui.tcomp_rz); - - tie_setting(s.s_main.a_x.zero, ui.pos_tx); - tie_setting(s.s_main.a_y.zero, ui.pos_ty); - tie_setting(s.s_main.a_z.zero, ui.pos_tz); - tie_setting(s.s_main.a_yaw.zero, ui.pos_rx); - tie_setting(s.s_main.a_pitch.zero, ui.pos_ry); - tie_setting(s.s_main.a_roll.zero, ui.pos_rz); - - tie_setting(s.s_main.a_yaw.invert, ui.invert_yaw); - tie_setting(s.s_main.a_pitch.invert, ui.invert_pitch); - tie_setting(s.s_main.a_roll.invert, ui.invert_roll); - tie_setting(s.s_main.a_x.invert, ui.invert_x); - tie_setting(s.s_main.a_y.invert, ui.invert_y); - tie_setting(s.s_main.a_z.invert, ui.invert_z); - - tie_setting(s.s_main.a_yaw.src, ui.src_yaw); - tie_setting(s.s_main.a_pitch.src, ui.src_pitch); - tie_setting(s.s_main.a_roll.src, ui.src_roll); - tie_setting(s.s_main.a_x.src, ui.src_x); - tie_setting(s.s_main.a_y.src, ui.src_y); - tie_setting(s.s_main.a_z.src, ui.src_z); - - tie_setting(s.s_main.camera_yaw, ui.camera_yaw); - tie_setting(s.s_main.camera_pitch, ui.camera_pitch); - tie_setting(s.s_main.camera_roll, ui.camera_roll); - - tie_setting(s.s_main.center_method, ui.center_method); - - connect(ui.bind_center, &QPushButton::pressed, [&]() -> void { bind_key(s.center.keycode, ui.center_text); }); - connect(ui.bind_zero, &QPushButton::pressed, [&]() -> void { bind_key(s.zero.keycode, ui.zero_text); }); - connect(ui.bind_toggle, &QPushButton::pressed, [&]() -> void { bind_key(s.toggle.keycode, ui.toggle_text); }); - - ui.center_text->setText(s.center.keycode == "" ? "None" : static_cast<QString>(s.center.keycode)); - ui.toggle_text->setText(s.toggle.keycode == "" ? "None" : static_cast<QString>(s.toggle.keycode)); - ui.zero_text->setText(s.zero.keycode == "" ? "None" : static_cast<QString>(s.zero.keycode)); -} - -void OptionsDialog::bind_key(value<QString>& ret, QLabel* label) -{ - ret = ""; - QDialog d; - auto l = new QHBoxLayout; - l->setMargin(0); - auto k = new KeyboardListener; - l->addWidget(k); - d.setLayout(l); - d.setFixedSize(QSize(500, 300)); - d.setWindowFlags(Qt::Dialog); - connect(k, &KeyboardListener::key_pressed, [&] (QKeySequence s) -> void { ret = s.toString(QKeySequence::PortableText); d.close(); }); - d.exec(); - label->setText(ret == "" ? "None" : static_cast<QString>(ret)); - delete k; - delete l; -} - -void OptionsDialog::doOK() { - s.b->save(); - s.s_main.b->save(); - ui.game_detector->save(); - this->close(); - emit reload(); -} - -void OptionsDialog::doCancel() { - s.b->reload(); - s.s_main.b->reload(); - ui.game_detector->revert(); - close(); -} - diff --git a/facetracknoir/options-dialog.hpp b/facetracknoir/options-dialog.hpp deleted file mode 100644 index 3ef99d06..00000000 --- a/facetracknoir/options-dialog.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include <QObject> -#include <QWidget> -#include "ui_settings.h" -#include "opentrack/shortcuts.h" - -class OptionsDialog: public QWidget -{ - Q_OBJECT -signals: - void reload(); -public: - OptionsDialog(); -private: - Ui::UI_Settings ui; - Shortcuts::settings s; - void closeEvent(QCloseEvent *) override { doCancel(); } -private slots: - void doOK(); - void doCancel(); - void bind_key(value<QString>& ret, QLabel* label); -}; diff --git a/facetracknoir/process_detector.cpp b/facetracknoir/process_detector.cpp deleted file mode 100644 index 59a40f03..00000000 --- a/facetracknoir/process_detector.cpp +++ /dev/null @@ -1,211 +0,0 @@ -/* Copyright (c) 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. - */ - -#include "process_detector.h" -#include "facetracknoir/ui.h" -#include "opentrack-compat/process-list.hpp" -#include <QList> -#include <QFileDialog> -#include <QComboBox> -#include <QString> -#include <QHash> -#include <QPushButton> - -void settings::set_game_list(const QString &game_list) -{ - QSettings settings(OPENTRACK_ORG); - settings.setValue("executable-list", game_list); -} - -QString settings::get_game_list() -{ - QSettings settings(OPENTRACK_ORG); - return settings.value("executable-list").toString(); -} - -bool settings::is_enabled() -{ - QSettings settings(OPENTRACK_ORG); - return settings.value("executable-detector-enabled", false).toBool(); -} - -void settings::set_is_enabled(bool enabled) -{ - QSettings settings(OPENTRACK_ORG); - settings.setValue("executable-detector-enabled", enabled); -} - -QHash<QString, QString> settings::split_process_names() -{ - QHash<QString, QString> ret; - QString str = get_game_list(); - QStringList pairs = str.split('|'); - for (auto pair : pairs) - { - QList<QString> tmp = pair.split(':'); - if (tmp.count() != 2) - continue; - ret[tmp[0]] = tmp[1]; - } - return ret; -} - -void BrowseButton::browse() -{ - QFileDialog dialog(this); - dialog.setFileMode(QFileDialog::ExistingFile); - QString dir_path = QFileInfo(group::ini_pathname()).absolutePath(); - QString filename = dialog.getOpenFileName( - this, - tr("Set executable name"), - dir_path, - tr("Executable (*.exe);;All Files (*)")); - MainWindow::set_working_directory(); - filename = QFileInfo(filename).fileName(); - if (!filename.isNull()) - twi->setText(filename); -} - -int process_detector::add_row(QString exe_name, QString profile) -{ - int i = ui.tableWidget->rowCount(); - ui.tableWidget->insertRow(i); - - QComboBox* cb = new QComboBox(); - cb->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum); - cb->addItem(""); - cb->addItems(group::ini_list()); - ui.tableWidget->setCellWidget(i, 1, cb); - - QTableWidgetItem* twi = new QTableWidgetItem(exe_name); - ui.tableWidget->setItem(i, 0, twi); - - { - BrowseButton* b = new BrowseButton(twi); - b->setText("..."); - QObject::connect(b, SIGNAL(pressed()), b, SLOT(browse())); - ui.tableWidget->setCellWidget(i, 2, b); - } - - cb->setCurrentText(profile); - - return i; -} - -void process_detector::add_items() -{ - auto names = s.split_process_names(); - ui.tableWidget->clearContents(); - auto keys = names.keys(); - qSort(keys); - for (auto n : keys) - add_row(n, names[n]); -} - -process_detector::process_detector(QWidget* parent) : QWidget(parent) -{ - ui.setupUi(this); - setFixedSize(size()); - connect(ui.add, SIGNAL(pressed()), this, SLOT(add())); - connect(ui.remove, SIGNAL(pressed()), this, SLOT(remove())); - - add_items(); - - QResizeEvent e(ui.tableWidget->size(), ui.tableWidget->size()); - ui.tableWidget->resizeEvent(&e); - - settings s; - - ui.enabled->setChecked(s.is_enabled()); -} - -void process_detector::save() -{ - QString str; - - for (int i = 0; i < ui.tableWidget->rowCount(); i++) - { - auto exe = ui.tableWidget->item(i, 0)->text(); - auto profile = reinterpret_cast<QComboBox*>(ui.tableWidget->cellWidget(i, 1))->currentText(); - str += "|" + exe + ":" + profile; - } - - s.set_game_list(str); - s.set_is_enabled(ui.enabled->isChecked()); -} - -void process_detector::revert() -{ -} - -void process_detector::add() -{ - add_row(); -} - -void process_detector::remove() -{ - int r = ui.tableWidget->currentRow(); - if (r != -1) - ui.tableWidget->removeRow(r); -} - -bool process_detector_worker::should_stop() -{ - if (last_exe_name == "") - return false; - - settings s; - - if (!s.is_enabled()) - { - last_exe_name = ""; - return false; - } - - QStringList exe_list = get_all_executable_names(); - - if (exe_list.contains(last_exe_name)) - return false; - - last_exe_name = ""; - - return true; -} - -bool process_detector_worker::config_to_start(QString& str) -{ - settings s; - if (!s.is_enabled()) - { - last_exe_name = ""; - return false; - } - - auto filenames = s.split_process_names(); - QStringList exe_list = get_all_executable_names(); - - // assuming manual stop by user button click. - // don't automatically start again while the same process is running. - if (last_exe_name != "" && exe_list.contains(last_exe_name)) - return false; - // it's gone, we can start automatically again - last_exe_name = ""; - - for (auto& name : exe_list) - { - if (filenames.contains(name)) - { - last_exe_name = name; - str = filenames[name]; - return str != ""; - } - } - - return false; -} diff --git a/facetracknoir/process_detector.h b/facetracknoir/process_detector.h deleted file mode 100644 index f6497c90..00000000 --- a/facetracknoir/process_detector.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (c) 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 <QObject> -#include <QWidget> -#include <QTableWidget> -#include <QResizeEvent> - -#include "opentrack/options.hpp" -using namespace options; - -class FancyTable : public QTableWidget -{ - Q_OBJECT -public: - void resizeEvent(QResizeEvent* e) override - { - QTableView::resizeEvent(e); - int w = width(); - setColumnWidth(2, 32); - w -= 48; - setColumnWidth(0, w / 2); - setColumnWidth(1, w / 2); - } -public: - FancyTable(QWidget* parent = nullptr) : QTableWidget(parent) {} -}; - -struct settings -{ - QHash<QString, QString> split_process_names(); - QString get_game_list(); - void set_game_list(const QString& game_list); - bool is_enabled(); - void set_is_enabled(bool enabled); -}; - -#include "ui_process_widget.h" - -class process_detector : public QWidget -{ - Q_OBJECT - - Ui_Dialog ui; - settings s; - - int add_row(QString exe_name = "...", QString profile = ""); - void add_items(); -public: - process_detector(QWidget* parent = nullptr); -public slots: - void save(); - void revert(); -private slots: - void add(); - void remove(); -}; - -class BrowseButton : public QPushButton -{ - Q_OBJECT - QTableWidgetItem* twi; -public: - BrowseButton(QTableWidgetItem* twi) : twi(twi) - {} -public slots: - void browse(); -}; - -class process_detector_worker : QObject -{ - Q_OBJECT - settings s; - QString last_exe_name; -public: - bool config_to_start(QString& s); - bool should_stop(); -}; - diff --git a/facetracknoir/process_widget.ui b/facetracknoir/process_widget.ui deleted file mode 100644 index 19fe39da..00000000 --- a/facetracknoir/process_widget.ui +++ /dev/null @@ -1,121 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>Dialog</class> - <widget class="QWidget" name="Dialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>302</width> - <height>325</height> - </rect> - </property> - <property name="windowTitle"> - <string>Game detector</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="FancyTable" name="tableWidget"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <column> - <property name="text"> - <string>Executable</string> - </property> - </column> - <column> - <property name="text"> - <string>Profile</string> - </property> - </column> - <column> - <property name="text"> - <string/> - </property> - </column> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="styleSheet"> - <string notr="true">border: 0;</string> - </property> - <property name="title"> - <string/> - </property> - <layout class="QHBoxLayout" name="horizontalLayout"> - <property name="topMargin"> - <number>5</number> - </property> - <item> - <widget class="QPushButton" name="add"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="font"> - <font> - <pointsize>14</pointsize> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="text"> - <string>+</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="remove"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="font"> - <font> - <pointsize>14</pointsize> - <weight>75</weight> - <bold>true</bold> - </font> - </property> - <property name="text"> - <string>-</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QCheckBox" name="enabled"> - <property name="text"> - <string>Start profiles from game executable names in this list</string> - </property> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>FancyTable</class> - <extends>QTableWidget</extends> - <header>facetracknoir/process_detector.h</header> - </customwidget> - </customwidgets> - <resources/> - <connections/> -</ui> diff --git a/facetracknoir/settings.ui b/facetracknoir/settings.ui deleted file mode 100644 index 92d275b6..00000000 --- a/facetracknoir/settings.ui +++ /dev/null @@ -1,1109 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>UI_Settings</class> - <widget class="QWidget" name="UI_Settings"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>348</width> - <height>548</height> - </rect> - </property> - <property name="windowTitle"> - <string>Options</string> - </property> - <property name="windowIcon"> - <iconset> - <normaloff>images/facetracknoir.png</normaloff>images/facetracknoir.png</iconset> - </property> - <property name="layoutDirection"> - <enum>Qt::LeftToRight</enum> - </property> - <property name="autoFillBackground"> - <bool>false</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout_5"> - <item> - <widget class="QTabWidget" name="tabWidget"> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="tab"> - <attribute name="title"> - <string>Shortcuts</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QGroupBox" name="groupBox_8"> - <property name="title"> - <string>Global shortcuts</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_8"> - <item> - <widget class="QLabel" name="label_23"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string><html><head/><body><p><span style=" font-weight:600;">Center</span> - use current pose as looking perfectly forward.<br/><span style=" font-weight:600;">Toggle</span> - keep looking at same spot until toggle keypress.<br/><span style=" font-weight:600;">Zero</span> - keep looking forward while the key is pressed.<br/></p></body></html></string> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox"> - <property name="styleSheet"> - <string notr="true">QGroupBox { border: 0; }</string> - </property> - <layout class="QGridLayout" name="gridLayout_8"> - <item row="0" column="1"> - <widget class="QLabel" name="center_text"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="textLabel2_3"> - <property name="text"> - <string>Center</string> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="6" column="1"> - <widget class="QLabel" name="zero_text"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="5" column="1"> - <widget class="QLabel" name="toggle_text"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="5" column="0"> - <widget class="QLabel" name="textLabel2_5"> - <property name="text"> - <string>Toggle</string> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="6" column="0"> - <widget class="QLabel" name="textLabel2_6"> - <property name="text"> - <string>Zero</string> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QPushButton" name="bind_center"> - <property name="text"> - <string>Bind</string> - </property> - </widget> - </item> - <item row="5" column="2"> - <widget class="QPushButton" name="bind_toggle"> - <property name="text"> - <string>Bind</string> - </property> - </widget> - </item> - <item row="6" column="2"> - <widget class="QPushButton" name="bind_zero"> - <property name="text"> - <string>Bind</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_9"> - <property name="title"> - <string>Centering method</string> - </property> - <layout class="QGridLayout" name="gridLayout"> - <item row="1" column="0"> - <widget class="QLabel" name="label_26"> - <property name="text"> - <string>Method</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QComboBox" name="center_method"> - <item> - <property name="text"> - <string>Relative (inertial device)</string> - </property> - </item> - <item> - <property name="text"> - <string>Absolute (camera device)</string> - </property> - </item> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="label_25"> - <property name="text"> - <string>Try changing this if centering doesn't perform correctly for your input device.</string> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QCheckBox" name="center_at_startup"> - <property name="text"> - <string>Center at startup</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="trayp"> - <property name="text"> - <string>Minimize to tray</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab_3"> - <attribute name="title"> - <string>Camera</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QGroupBox" name="groupBox_5"> - <property name="title"> - <string>Camera offset</string> - </property> - <layout class="QGridLayout" name="gridLayout_6"> - <item row="2" column="0"> - <widget class="QLabel" name="label_17"> - <property name="text"> - <string><html><head/><body><p>Specify an angle for off-center camera as a basis for which direction is which, avoiding axis interconnect. Also see <a href="https://github.com/opentrack/opentrack/wiki/choosing-camera-offset"><span style=" text-decoration: underline; color:#0000ff;">description on wiki</span></a>.</p></body></html></string> - </property> - <property name="alignment"> - <set>Qt::AlignJustify|Qt::AlignVCenter</set> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - <property name="margin"> - <number>2</number> - </property> - <property name="openExternalLinks"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="3" column="0" alignment="Qt::AlignLeft"> - <widget class="QGroupBox" name="groupBox_3"> - <property name="styleSheet"> - <string notr="true">QGroupBox -{ - border: 0; -}</string> - </property> - <layout class="QGridLayout" name="gridLayout_7"> - <item row="2" column="0"> - <widget class="QLabel" name="label_21"> - <property name="text"> - <string>Roll</string> - </property> - </widget> - </item> - <item row="2" column="1"> - <widget class="QSpinBox" name="camera_roll"> - <property name="minimumSize"> - <size> - <width>80</width> - <height>0</height> - </size> - </property> - <property name="minimum"> - <number>-180</number> - </property> - <property name="maximum"> - <number>180</number> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QSpinBox" name="camera_yaw"> - <property name="minimumSize"> - <size> - <width>80</width> - <height>0</height> - </size> - </property> - <property name="minimum"> - <number>-180</number> - </property> - <property name="maximum"> - <number>180</number> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label_19"> - <property name="text"> - <string>Pitch</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QSpinBox" name="camera_pitch"> - <property name="minimumSize"> - <size> - <width>80</width> - <height>0</height> - </size> - </property> - <property name="minimum"> - <number>-180</number> - </property> - <property name="maximum"> - <number>180</number> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_18"> - <property name="text"> - <string>Yaw</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_6"> - <property name="title"> - <string>Center pose offset</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_6"> - <item> - <widget class="QLabel" name="label_22"> - <property name="text"> - <string>Alter the centered position sent to games by a fixed amount.</string> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - <property name="margin"> - <number>2</number> - </property> - </widget> - </item> - <item> - <widget class="QGroupBox" name="groupBox_7"> - <property name="styleSheet"> - <string notr="true">QGroupBox { - border: 0; -}</string> - </property> - <property name="title"> - <string/> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - <property name="flat"> - <bool>false</bool> - </property> - <property name="checkable"> - <bool>false</bool> - </property> - <layout class="QGridLayout" name="gridLayout_3"> - <item row="2" column="1"> - <widget class="QDoubleSpinBox" name="pos_rz"> - <property name="suffix"> - <string> deg.</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - <property name="minimum"> - <double>-180.000000000000000</double> - </property> - <property name="maximum"> - <double>180.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="3"> - <widget class="QDoubleSpinBox" name="pos_tz"> - <property name="suffix"> - <string> cm</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - <property name="minimum"> - <double>-100.000000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="label_4"> - <property name="text"> - <string>TX</string> - </property> - </widget> - </item> - <item row="0" column="3"> - <widget class="QDoubleSpinBox" name="pos_tx"> - <property name="suffix"> - <string> cm</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - <property name="minimum"> - <double>-100.000000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QLabel" name="label"> - <property name="text"> - <string>RY</string> - </property> - </widget> - </item> - <item row="1" column="2"> - <widget class="QLabel" name="label_5"> - <property name="text"> - <string>TY</string> - </property> - </widget> - </item> - <item row="1" column="1"> - <widget class="QDoubleSpinBox" name="pos_ry"> - <property name="suffix"> - <string> deg.</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - <property name="minimum"> - <double>-180.000000000000000</double> - </property> - <property name="maximum"> - <double>180.000000000000000</double> - </property> - </widget> - </item> - <item row="2" column="2"> - <widget class="QLabel" name="label_6"> - <property name="text"> - <string>TZ</string> - </property> - </widget> - </item> - <item row="2" column="0"> - <widget class="QLabel" name="label_3"> - <property name="text"> - <string>RZ</string> - </property> - </widget> - </item> - <item row="1" column="3"> - <widget class="QDoubleSpinBox" name="pos_ty"> - <property name="suffix"> - <string> cm</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - <property name="minimum"> - <double>-100.000000000000000</double> - </property> - <property name="maximum"> - <double>100.000000000000000</double> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>RX</string> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QDoubleSpinBox" name="pos_rx"> - <property name="suffix"> - <string> deg.</string> - </property> - <property name="decimals"> - <number>3</number> - </property> - <property name="minimum"> - <double>-180.000000000000000</double> - </property> - <property name="maximum"> - <double>180.000000000000000</double> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab_4"> - <attribute name="title"> - <string>Output</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <item> - <widget class="QGroupBox" name="groupBox_"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="styleSheet"> - <string notr="true"/> - </property> - <property name="title"> - <string>Translation compensation</string> - </property> - <property name="flat"> - <bool>false</bool> - </property> - <layout class="QVBoxLayout" name="verticalLayout_7"> - <item> - <widget class="QLabel" name="label_16"> - <property name="text"> - <string>With compensation on, translation is applied after rotation. For example, rotating +180 degrees yaw and moving backwards results in moving forward as a result of that rotation.</string> - </property> - <property name="alignment"> - <set>Qt::AlignJustify|Qt::AlignVCenter</set> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - <property name="margin"> - <number>2</number> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="tcomp_enable"> - <property name="styleSheet"> - <string notr="true"/> - </property> - <property name="text"> - <string>Enable</string> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="tcomp_rz"> - <property name="styleSheet"> - <string notr="true"/> - </property> - <property name="text"> - <string>Disable Z axis compensation</string> - </property> - </widget> - </item> - </layout> - </widget> - </item> - <item alignment="Qt::AlignTop"> - <widget class="QGroupBox" name="groupBox_4"> - <property name="maximumSize"> - <size> - <width>65536</width> - <height>65536</height> - </size> - </property> - <property name="font"> - <font> - <kerning>true</kerning> - </font> - </property> - <property name="title"> - <string>Output remap</string> - </property> - <property name="alignment"> - <set>Qt::AlignCenter</set> - </property> - <property name="flat"> - <bool>false</bool> - </property> - <property name="checkable"> - <bool>false</bool> - </property> - <layout class="QGridLayout" name="gridLayout_4" rowstretch="0,0" columnstretch="0"> - <property name="sizeConstraint"> - <enum>QLayout::SetMinAndMaxSize</enum> - </property> - <property name="spacing"> - <number>6</number> - </property> - <item row="0" column="0"> - <widget class="QLabel" name="label_20"> - <property name="text"> - <string>Assign input axis to output axis.</string> - </property> - <property name="alignment"> - <set>Qt::AlignJustify|Qt::AlignVCenter</set> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - <item row="1" column="0"> - <widget class="QGroupBox" name="groupBox_2"> - <property name="styleSheet"> - <string notr="true">QGroupBox -{ - border: 0; -}</string> - </property> - <layout class="QGridLayout" name="gridLayout_5"> - <item row="7" column="2"> - <widget class="QCheckBox" name="invert_y"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="5" column="0"> - <widget class="QLabel" name="label_9"> - <property name="text"> - <string>Roll</string> - </property> - </widget> - </item> - <item row="6" column="0"> - <widget class="QLabel" name="label_10"> - <property name="text"> - <string>X</string> - </property> - </widget> - </item> - <item row="0" column="2"> - <widget class="QLabel" name="label_14"> - <property name="text"> - <string>Invert</string> - </property> - </widget> - </item> - <item row="6" column="1"> - <widget class="QComboBox" name="src_x"> - <item> - <property name="text"> - <string>X</string> - </property> - </item> - <item> - <property name="text"> - <string>Y</string> - </property> - </item> - <item> - <property name="text"> - <string>Z</string> - </property> - </item> - <item> - <property name="text"> - <string>Yaw</string> - </property> - </item> - <item> - <property name="text"> - <string>Pitch</string> - </property> - </item> - <item> - <property name="text"> - <string>Roll</string> - </property> - </item> - <item> - <property name="text"> - <string>Disabled</string> - </property> - </item> - </widget> - </item> - <item row="4" column="0"> - <widget class="QLabel" name="label_8"> - <property name="text"> - <string>Pitch</string> - </property> - </widget> - </item> - <item row="7" column="1"> - <widget class="QComboBox" name="src_y"> - <item> - <property name="text"> - <string>X</string> - </property> - </item> - <item> - <property name="text"> - <string>Y</string> - </property> - </item> - <item> - <property name="text"> - <string>Z</string> - </property> - </item> - <item> - <property name="text"> - <string>Yaw</string> - </property> - </item> - <item> - <property name="text"> - <string>Pitch</string> - </property> - </item> - <item> - <property name="text"> - <string>Roll</string> - </property> - </item> - <item> - <property name="text"> - <string>Disabled</string> - </property> - </item> - </widget> - </item> - <item row="3" column="1"> - <widget class="QComboBox" name="src_yaw"> - <item> - <property name="text"> - <string>X</string> - </property> - </item> - <item> - <property name="text"> - <string>Y</string> - </property> - </item> - <item> - <property name="text"> - <string>Z</string> - </property> - </item> - <item> - <property name="text"> - <string>Yaw</string> - </property> - </item> - <item> - <property name="text"> - <string>Pitch</string> - </property> - </item> - <item> - <property name="text"> - <string>Roll</string> - </property> - </item> - <item> - <property name="text"> - <string>Disabled</string> - </property> - </item> - </widget> - </item> - <item row="5" column="2"> - <widget class="QCheckBox" name="invert_roll"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="7" column="0"> - <widget class="QLabel" name="label_11"> - <property name="text"> - <string>Y</string> - </property> - </widget> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_15"> - <property name="text"> - <string>Destination</string> - </property> - </widget> - </item> - <item row="4" column="2"> - <widget class="QCheckBox" name="invert_pitch"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="3" column="0"> - <widget class="QLabel" name="label_7"> - <property name="text"> - <string>Yaw</string> - </property> - </widget> - </item> - <item row="6" column="2"> - <widget class="QCheckBox" name="invert_x"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="0" column="1"> - <widget class="QLabel" name="label_13"> - <property name="text"> - <string>Source</string> - </property> - </widget> - </item> - <item row="4" column="1"> - <widget class="QComboBox" name="src_pitch"> - <item> - <property name="text"> - <string>X</string> - </property> - </item> - <item> - <property name="text"> - <string>Y</string> - </property> - </item> - <item> - <property name="text"> - <string>Z</string> - </property> - </item> - <item> - <property name="text"> - <string>Yaw</string> - </property> - </item> - <item> - <property name="text"> - <string>Pitch</string> - </property> - </item> - <item> - <property name="text"> - <string>Roll</string> - </property> - </item> - <item> - <property name="text"> - <string>Disabled</string> - </property> - </item> - </widget> - </item> - <item row="3" column="2"> - <widget class="QCheckBox" name="invert_yaw"> - <property name="text"> - <string/> - </property> - </widget> - </item> - <item row="5" column="1"> - <widget class="QComboBox" name="src_roll"> - <item> - <property name="text"> - <string>X</string> - </property> - </item> - <item> - <property name="text"> - <string>Y</string> - </property> - </item> - <item> - <property name="text"> - <string>Z</string> - </property> - </item> - <item> - <property name="text"> - <string>Yaw</string> - </property> - </item> - <item> - <property name="text"> - <string>Pitch</string> - </property> - </item> - <item> - <property name="text"> - <string>Roll</string> - </property> - </item> - <item> - <property name="text"> - <string>Disabled</string> - </property> - </item> - </widget> - </item> - <item row="8" column="0"> - <widget class="QLabel" name="label_12"> - <property name="text"> - <string>Z</string> - </property> - </widget> - </item> - <item row="8" column="1"> - <widget class="QComboBox" name="src_z"> - <item> - <property name="text"> - <string>X</string> - </property> - </item> - <item> - <property name="text"> - <string>Y</string> - </property> - </item> - <item> - <property name="text"> - <string>Z</string> - </property> - </item> - <item> - <property name="text"> - <string>Yaw</string> - </property> - </item> - <item> - <property name="text"> - <string>Pitch</string> - </property> - </item> - <item> - <property name="text"> - <string>Roll</string> - </property> - </item> - <item> - <property name="text"> - <string>Disabled</string> - </property> - </item> - </widget> - </item> - <item row="8" column="2"> - <widget class="QCheckBox" name="invert_z"> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> - <zorder>label_15</zorder> - <zorder>label_13</zorder> - <zorder>label_14</zorder> - <zorder>src_yaw</zorder> - <zorder>invert_yaw</zorder> - <zorder>label_7</zorder> - <zorder>src_pitch</zorder> - <zorder>label_8</zorder> - <zorder>invert_pitch</zorder> - <zorder>label_9</zorder> - <zorder>src_roll</zorder> - <zorder>invert_roll</zorder> - <zorder>label_10</zorder> - <zorder>src_x</zorder> - <zorder>invert_x</zorder> - <zorder>label_11</zorder> - <zorder>src_y</zorder> - <zorder>invert_y</zorder> - <zorder>label_12</zorder> - <zorder>src_z</zorder> - <zorder>invert_z</zorder> - </widget> - </item> - </layout> - </widget> - </item> - <item> - <spacer name="verticalSpacer_3"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - </layout> - </widget> - <widget class="QWidget" name="tab_5"> - <attribute name="title"> - <string>Game detection</string> - </attribute> - <layout class="QVBoxLayout" name="verticalLayout_9"> - <item> - <widget class="QGroupBox" name="groupBox_1"> - <property name="title"> - <string>Game detection</string> - </property> - <layout class="QGridLayout" name="gridLayout_2"> - <item row="1" column="0"> - <widget class="process_detector" name="game_detector" native="true"/> - </item> - <item row="0" column="0"> - <widget class="QLabel" name="label_24"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>Start tracking automatically when a game starts with selected profile, and stop when the game exits.</string> - </property> - <property name="wordWrap"> - <bool>true</bool> - </property> - </widget> - </item> - </layout> - </widget> - </item> - </layout> - </widget> - </widget> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="standardButtons"> - <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> - </property> - </widget> - </item> - </layout> - </widget> - <customwidgets> - <customwidget> - <class>process_detector</class> - <extends>QWidget</extends> - <header>facetracknoir/process_detector.h</header> - </customwidget> - </customwidgets> - <tabstops> - <tabstop>tabWidget</tabstop> - <tabstop>center_at_startup</tabstop> - <tabstop>trayp</tabstop> - <tabstop>camera_yaw</tabstop> - <tabstop>camera_pitch</tabstop> - <tabstop>camera_roll</tabstop> - <tabstop>pos_rx</tabstop> - <tabstop>pos_ry</tabstop> - <tabstop>pos_rz</tabstop> - <tabstop>pos_tx</tabstop> - <tabstop>pos_ty</tabstop> - <tabstop>pos_tz</tabstop> - <tabstop>tcomp_enable</tabstop> - <tabstop>tcomp_rz</tabstop> - <tabstop>src_yaw</tabstop> - <tabstop>invert_yaw</tabstop> - <tabstop>src_pitch</tabstop> - <tabstop>invert_pitch</tabstop> - <tabstop>src_roll</tabstop> - <tabstop>invert_roll</tabstop> - <tabstop>src_x</tabstop> - <tabstop>invert_x</tabstop> - <tabstop>src_y</tabstop> - <tabstop>invert_y</tabstop> - <tabstop>src_z</tabstop> - <tabstop>invert_z</tabstop> - </tabstops> - <resources/> - <connections/> - <slots> - <slot>startEngineClicked()</slot> - <slot>stopEngineClicked()</slot> - <slot>cameraSettingsClicked()</slot> - </slots> -</ui> diff --git a/facetracknoir/ui-res.qrc b/facetracknoir/ui-res.qrc deleted file mode 100644 index 030a6153..00000000 --- a/facetracknoir/ui-res.qrc +++ /dev/null @@ -1,10 +0,0 @@ -<RCC> - <qresource prefix="/"> - <file>images/tools.png</file> - <file>images/settings16.png</file> - <file>images/curves.png</file> - <file>images/facetracknoir.png</file> - <file>images/no-feed.png</file> - <file>images/filter-16.png</file> - </qresource> -</RCC> diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp deleted file mode 100644 index d0a5e93c..00000000 --- a/facetracknoir/ui.cpp +++ /dev/null @@ -1,567 +0,0 @@ -/* Copyright (c) 2013-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. - */ - -#include "ui.h" -#include "opentrack/tracker.h" -#include "opentrack/options.hpp" -#include "facetracknoir/new_file_dialog.h" -#include <QFileDialog> -#include <QDesktopServices> - -#ifndef _WIN32 -# include <unistd.h> -#else -# include <windows.h> -#endif - -MainWindow::MainWindow() : - pose_update_timer(this), - kbd_quit(QKeySequence("Ctrl+Q"), this), - no_feed_pixmap(":/images/no-feed.png"), - is_refreshing_profiles(false) -{ - ui.setupUi(this); - - setFixedSize(size()); - - updateButtonState(false, false); - ui.video_frame_label->setPixmap(no_feed_pixmap); - - connect(ui.btnEditCurves, SIGNAL(clicked()), this, SLOT(showCurveConfiguration())); - connect(ui.btnShortcuts, SIGNAL(clicked()), this, SLOT(show_options_dialog())); - connect(ui.btnShowEngineControls, SIGNAL(clicked()), this, SLOT(showTrackerSettings())); - connect(ui.btnShowServerControls, SIGNAL(clicked()), this, SLOT(showProtocolSettings())); - connect(ui.btnShowFilterControls, SIGNAL(clicked()), this, SLOT(showFilterSettings())); - - modules.filters().push_front(std::make_shared<dylib>("", dylib::Filter)); - - for (auto x : modules.trackers()) - ui.iconcomboTrackerSource->addItem(x->icon, x->name); - - for (auto x : modules.protocols()) - ui.iconcomboProtocol->addItem(x->icon, x->name); - - for (auto x : modules.filters()) - ui.iconcomboFilter->addItem(x->icon, x->name); - - refresh_config_list(); - 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); - - connect(ui.iconcomboTrackerSource, - &QComboBox::currentTextChanged, - [&](QString) -> void { if (pTrackerDialog) pTrackerDialog = nullptr; save(); }); - - connect(ui.iconcomboProtocol, - &QComboBox::currentTextChanged, - [&](QString) -> void { if (pProtocolDialog) pProtocolDialog = nullptr; save(); }); - - connect(ui.iconcomboFilter, - &QComboBox::currentTextChanged, - [&](QString) -> void { if (pFilterDialog) pFilterDialog = nullptr; save(); }); - - connect(ui.btnStartTracker, SIGNAL(clicked()), this, SLOT(startTracker())); - connect(ui.btnStopTracker, SIGNAL(clicked()), this, SLOT(stopTracker())); - connect(ui.iconcomboProfile, SIGNAL(currentTextChanged(QString)), this, SLOT(profileSelected(QString))); - - connect(&pose_update_timer, SIGNAL(timeout()), this, SLOT(showHeadPose())); - connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); - - save_timer.setSingleShot(true); - connect(&save_timer, SIGNAL(timeout()), this, SLOT(_save())); - - profile_menu.addAction("Create new empty config", this, SLOT(make_empty_config())); - profile_menu.addAction("Create new copied config", this, SLOT(make_copied_config())); - profile_menu.addAction("Open configuration directory", this, SLOT(open_config_directory())); - ui.profile_button->setMenu(&profile_menu); - - kbd_quit.setEnabled(true); - - connect(&det_timer, SIGNAL(timeout()), this, SLOT(maybe_start_profile_from_executable())); - det_timer.start(1000); - - ensure_tray(); - set_working_directory(); - - if (!QFile(group::ini_pathname()).exists()) - { - set_profile(OPENTRACK_DEFAULT_CONFIG); - const auto pathname = group::ini_pathname(); - if (!QFile(pathname).exists()) - { - QFile file(pathname); - (void) file.open(QFile::ReadWrite); - } - } - - if (group::ini_directory() == "") - QMessageBox::warning(this, - "Configuration not saved.", - "Can't create configuration directory! Expect major malfunction.", - QMessageBox::Ok, QMessageBox::NoButton); - - ui.btnStartTracker->setFocus(); -} - -bool MainWindow::get_new_config_name_from_dialog(QString& ret) -{ - new_file_dialog dlg; - dlg.exec(); - return dlg.is_ok(ret); -} - -MainWindow::~MainWindow() -{ - maybe_save(); - - if (tray) - tray->hide(); - stopTracker(); -} - -void MainWindow::set_working_directory() -{ - QDir::setCurrent(QCoreApplication::applicationDirPath()); -} - -void MainWindow::save_mappings() { - pose.save_mappings(); -} - -void MainWindow::save() -{ - save_timer.stop(); - save_timer.start(5000); -} - -void MainWindow::maybe_save() -{ - if (save_timer.isActive()) - { - save_timer.stop(); - _save(); - } -} - -void MainWindow::_save() { - s.b->save(); - save_mappings(); - mem<QSettings> settings = group::ini_file(); - settings->sync(); - -#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 -} - -void MainWindow::load_mappings() { - pose.load_mappings(); -} - -void MainWindow::load_settings() { - s.b->reload(); - load_mappings(); -} - -void MainWindow::make_empty_config() -{ - QString name; - const QString dir = group::ini_directory(); - if (dir != "" && get_new_config_name_from_dialog(name)) - { - QFile filename(dir + "/" + name); - (void) filename.open(QFile::ReadWrite); - refresh_config_list(); - ui.iconcomboProfile->setCurrentText(name); - } -} - -void MainWindow::make_copied_config() -{ - const QString dir = group::ini_directory(); - const QString cur = group::ini_pathname(); - QString name; - if (cur != "" && dir != "" && get_new_config_name_from_dialog(name)) - { - const QString new_name = dir + "/" + name; - (void) QFile::remove(new_name); - (void) QFile::copy(cur, new_name); - refresh_config_list(); - ui.iconcomboProfile->setCurrentText(name); - } -} - -void MainWindow::open_config_directory() -{ - const QString path = group::ini_directory(); - if (path != "") - { - QDesktopServices::openUrl("file:///" + QDir::toNativeSeparators(path)); - } -} - -extern "C" const char* opentrack_version; - -void MainWindow::refresh_config_list() -{ - if (work) - return; - - if (group::ini_list().size() == 0) - { - QFile filename(group::ini_directory() + "/" OPENTRACK_DEFAULT_CONFIG); - (void) filename.open(QFile::ReadWrite); - } - - QStringList ini_list = group::ini_list(); - set_title(); - QString current = group::ini_filename(); - is_refreshing_profiles = true; - ui.iconcomboProfile->clear(); - for (auto x : ini_list) - ui.iconcomboProfile->addItem(QIcon(":/images/settings16.png"), x); - is_refreshing_profiles = false; - ui.iconcomboProfile->setCurrentText(current); -} - -void MainWindow::updateButtonState(bool running, bool inertialp) -{ - bool not_running = !running; - ui.iconcomboProfile->setEnabled ( not_running ); - ui.btnStartTracker->setEnabled ( not_running ); - ui.btnStopTracker->setEnabled ( running ); - ui.iconcomboProtocol->setEnabled ( not_running ); - ui.iconcomboFilter->setEnabled ( not_running ); - ui.iconcomboTrackerSource->setEnabled(not_running); - ui.video_frame_label->setVisible(not_running || inertialp); - ui.profile_button->setEnabled(not_running); -} - -void MainWindow::reload_options() -{ - if (work) - work->reload_shortcuts(); - ensure_tray(); -} - -void MainWindow::startTracker() { - // tracker dtor needs run first - work = nullptr; - - libs = SelectedLibraries(ui.video_frame, current_tracker(), current_protocol(), current_filter()); - - { - double p[6] = {0,0,0, 0,0,0}; - display_pose(p, p); - } - - if (!libs.correct) - { - QMessageBox::warning(this, "Library load error", - "One of libraries failed to load. Check installation.", - QMessageBox::Ok, - QMessageBox::NoButton); - libs = SelectedLibraries(); - return; - } - - work = std::make_shared<Work>(s, pose, libs, this, winId()); - - reload_options(); - - if (pTrackerDialog) - pTrackerDialog->register_tracker(libs.pTracker.get()); - - if (pFilterDialog) - pFilterDialog->register_filter(libs.pFilter.get()); - - if (pProtocolDialog) - pProtocolDialog->register_protocol(libs.pProtocol.get()); - - pose_update_timer.start(50); - - // NB check valid since SelectedLibraries ctor called - // trackers take care of layout state updates - const bool is_inertial = ui.video_frame->layout() == nullptr; - updateButtonState(true, is_inertial); - - maybe_save(); - - ui.btnStopTracker->setFocus(); -} - -void MainWindow::stopTracker( ) { - //ui.game_name->setText("Not connected"); - - pose_update_timer.stop(); - ui.pose_display->rotateBy(0, 0, 0, 0, 0, 0); - - if (pTrackerDialog) - pTrackerDialog->unregister_tracker(); - - if (pProtocolDialog) - pProtocolDialog->unregister_protocol(); - - if (pFilterDialog) - pFilterDialog->unregister_filter(); - - maybe_save(); - - work = nullptr; - libs = SelectedLibraries(); - - { - double p[6] = {0,0,0, 0,0,0}; - display_pose(p, p); - } - updateButtonState(false, false); - - set_title(); - - ui.btnStartTracker->setFocus(); -} - -void MainWindow::display_pose(const double *mapped, const double *raw) -{ - ui.pose_display->rotateBy(mapped[Yaw], mapped[Pitch], mapped[Roll], - mapped[TX], mapped[TY], mapped[TZ]); - - if (mapping_widget) - mapping_widget->update(); - - double mapped_[6], raw_[6]; - - for (int i = 0; i < 6; i++) - { - mapped_[i] = (int) mapped[i]; - raw_[i] = (int) raw[i]; - } - - ui.raw_x->display(raw_[TX]); - ui.raw_y->display(raw_[TY]); - ui.raw_z->display(raw_[TZ]); - ui.raw_yaw->display(raw_[Yaw]); - ui.raw_pitch->display(raw_[Pitch]); - ui.raw_roll->display(raw_[Roll]); - - ui.pose_x->display(mapped_[TX]); - ui.pose_y->display(mapped_[TY]); - ui.pose_z->display(mapped_[TZ]); - ui.pose_yaw->display(mapped_[Yaw]); - ui.pose_pitch->display(mapped_[Pitch]); - ui.pose_roll->display(mapped_[Roll]); - - QString game_title; - if (libs.pProtocol) - game_title = libs.pProtocol->game_name(); - set_title(game_title); -} - -void MainWindow::set_title(const QString& game_title_) -{ - QString game_title; - if (game_title_ != "") - game_title = " :: " + game_title_; - QString current = group::ini_filename(); - setWindowTitle(opentrack_version + QStringLiteral(" :: ") + current + game_title); -} - -void MainWindow::showHeadPose() -{ - double mapped[6], raw[6]; - - work->tracker->get_raw_and_mapped_poses(mapped, raw); - - display_pose(mapped, raw); -} - -template<typename t> -bool mk_dialog(mem<dylib> lib, mem<t>& orig) -{ - if (orig && orig->isVisible()) - { - orig->show(); - orig->raise(); - return false; - } - - if (lib && lib->Dialog) - { - auto dialog = mem<t>(reinterpret_cast<t*>(lib->Dialog())); - dialog->setWindowFlags(Qt::Dialog); - dialog->setFixedSize(dialog->size()); - - orig = dialog; - dialog->show(); - dialog->raise(); - - QObject::connect(dialog.get(), &BaseDialog::closing, [&]() -> void { orig = nullptr; }); - - return true; - } - - return false; -} - -void MainWindow::showTrackerSettings() -{ - if (mk_dialog(current_tracker(), pTrackerDialog) && libs.pTracker) - pTrackerDialog->register_tracker(libs.pTracker.get()); -} - -void MainWindow::showProtocolSettings() { - if (mk_dialog(current_protocol(), pProtocolDialog) && libs.pProtocol) - pProtocolDialog->register_protocol(libs.pProtocol.get()); -} - -void MainWindow::showFilterSettings() { - if (mk_dialog(current_filter(), pFilterDialog) && libs.pFilter) - pFilterDialog->register_filter(libs.pFilter.get()); -} - -template<typename t, typename... Args> -bool mk_window(mem<t>* place, Args... params) -{ - if (*place && (*place)->isVisible()) - { - (*place)->show(); - (*place)->raise(); - return false; - } - else - { - *place = std::make_shared<t>(params...); - (*place)->setWindowFlags(Qt::Dialog); - (*place)->show(); - (*place)->raise(); - return true; - } -} - -void MainWindow::show_options_dialog() { - if (mk_window(&options_widget)) - connect(options_widget.get(), SIGNAL(reload()), this, SLOT(reload_options())); -} - -void MainWindow::showCurveConfiguration() { - mk_window<MapWidget, Mappings&, main_settings&>(&mapping_widget, pose, s); -} - -void MainWindow::exit() { - QCoreApplication::exit(0); -} - -void MainWindow::profileSelected(QString name) -{ - if (name == "" || is_refreshing_profiles) - return; - - const auto old_name = group::ini_filename(); - const auto new_name = name; - - if (old_name != new_name) - { - save(); - - { - QSettings settings(OPENTRACK_ORG); - settings.setValue (OPENTRACK_CONFIG_FILENAME_KEY, new_name); - } - - set_title(); - load_settings(); - } -} - -void MainWindow::shortcutRecentered() -{ - qDebug() << "Center"; - if (work) - work->tracker->center(); -} - -void MainWindow::shortcutToggled() -{ - qDebug() << "Toggle"; - if (work) - work->tracker->toggle_enabled(); -} - -void MainWindow::shortcutZeroed() -{ - qDebug() << "Zero"; - if (work) - work->tracker->zero(); -} - -void MainWindow::ensure_tray() -{ - if (tray) - tray->hide(); - tray = nullptr; - if (s.tray_enabled) - { - tray = std::make_shared<QSystemTrayIcon>(this); - tray->setIcon(QIcon(":/images/facetracknoir.png")); - tray->show(); - connect(tray.get(), SIGNAL(activated(QSystemTrayIcon::ActivationReason)), - this, SLOT(restore_from_tray(QSystemTrayIcon::ActivationReason))); - } -} - -void MainWindow::restore_from_tray(QSystemTrayIcon::ActivationReason) -{ - show(); - setWindowState(Qt::WindowNoState); -} - -void MainWindow::changeEvent(QEvent* e) -{ - if (s.tray_enabled && e->type() == QEvent::WindowStateChange && (windowState() & Qt::WindowMinimized)) - { - if (!tray) - ensure_tray(); - hide(); - } - QMainWindow::changeEvent(e); -} - -void MainWindow::maybe_start_profile_from_executable() -{ - if (!work) - { - QString prof; - if (det.config_to_start(prof)) - { - ui.iconcomboProfile->setCurrentText(prof); - startTracker(); - } - } - else - { - if (det.should_stop()) - stopTracker(); - } -} - -void MainWindow::set_profile(const QString &profile) -{ - QSettings settings(OPENTRACK_ORG); - settings.setValue(OPENTRACK_CONFIG_FILENAME_KEY, profile); -} diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h deleted file mode 100644 index 91e4ebbf..00000000 --- a/facetracknoir/ui.h +++ /dev/null @@ -1,113 +0,0 @@ -/* 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 <QMainWindow> -#include <QKeySequence> -#include <QShortcut> -#include <QPixmap> -#include <QTimer> -#include <QSystemTrayIcon> -#include <QString> -#include <QMenu> - -#include "ui_main.h" - -#include "opentrack/options.hpp" -#include "opentrack/main-settings.hpp" -#include "opentrack/plugin-support.hpp" -#include "opentrack/tracker.h" -#include "opentrack/shortcuts.h" -#include "opentrack/work.hpp" -#include "opentrack/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::OpentrackUI ui; - 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; - QPixmap no_feed_pixmap; - mem<IFilterDialog> pFilterDialog; - mem<IProtocolDialog> pProtocolDialog; - mem<ITrackerDialog> pTrackerDialog; - process_detector_worker det; - QMenu profile_menu; - bool is_refreshing_profiles; - QTimer save_timer; - - 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 changeEvent(QEvent* e) override; - - void load_settings(); - 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 maybe_save(); -private slots: - void _save(); - void save(); - void exit(); - void profileSelected(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(); -public slots: - void shortcutRecentered(); - void shortcutToggled(); - void shortcutZeroed(); -public: - MainWindow(); - ~MainWindow(); - void save_mappings(); - void load_mappings(); - static void set_working_directory(); -}; |