summaryrefslogtreecommitdiffhomepage
path: root/opentrack
diff options
context:
space:
mode:
Diffstat (limited to 'opentrack')
-rw-r--r--opentrack/defs.hpp17
-rw-r--r--opentrack/lang/nl_NL.ts41
-rw-r--r--opentrack/lang/ru_RU.ts75
-rw-r--r--opentrack/lang/stub.ts41
-rw-r--r--opentrack/lang/zh_CN.ts53
-rw-r--r--opentrack/main-window.hpp7
-rw-r--r--opentrack/main-window.ui1222
-rw-r--r--opentrack/opentrack.icobin67134 -> 3758 bytes
-rw-r--r--opentrack/software-update-dialog.cpp66
-rw-r--r--opentrack/software-update-dialog.hpp34
-rw-r--r--opentrack/software-update.ui118
11 files changed, 485 insertions, 1189 deletions
diff --git a/opentrack/defs.hpp b/opentrack/defs.hpp
index b2f0c467..f7ccc197 100644
--- a/opentrack/defs.hpp
+++ b/opentrack/defs.hpp
@@ -1,16 +1,17 @@
#pragma once
-//#define UI_FORCED_TRACKER "pt"
-//#define UI_FORCED_FILTER "accela"
+#define UI_FORCED_TRACKER "neuralnet"
+#define UI_FORCED_FILTER "accela"
-//#define UI_NO_TRACKER_COMBOBOX
-//#define UI_NO_FILTER_COMBOBOX
+#define UI_NO_TRACKER_COMBOBOX
+#define UI_NO_FILTER_COMBOBOX
-//#define UI_NO_TRACKER_SETTINGS_BUTTON
-//#define UI_NO_FILTER_SETTINGS_BUTTON
+#define UI_NO_TRACKER_SETTINGS_BUTTON
+#define UI_NO_FILTER_SETTINGS_BUTTON
-//#define UI_NO_RAW_DATA
-//#define UI_NO_GAME_DATA
+#define UI_NO_RAW_DATA
+#define UI_NO_GAME_DATA
//#define UI_NO_VIDEO_FEED
+#define UI_COMPACT_VIDEO_FEED
//define UI_ACCELA_OLD_STAIRCASE
diff --git a/opentrack/lang/nl_NL.ts b/opentrack/lang/nl_NL.ts
index 7a465820..aad3532b 100644
--- a/opentrack/lang/nl_NL.ts
+++ b/opentrack/lang/nl_NL.ts
@@ -13,39 +13,34 @@
</message>
</context>
<context>
- <name>main_window</name>
- <message>
- <source>Raw tracker data</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>UpdateDialog</name>
<message>
- <source>Z</source>
+ <source>Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pitch</source>
+ <source>Software update released</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Y</source>
+ <source>Current version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>X</source>
+ <source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Roll</source>
+ <source>Released version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yaw</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Game data</source>
+ <source>Don&apos;t remind me again about this version</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>main_window</name>
<message>
<source>Profile</source>
<translation type="unfinished"></translation>
@@ -71,22 +66,10 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Input</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>🔨</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Running as root is bad</source>
<translation type="unfinished"></translation>
</message>
@@ -174,6 +157,10 @@ Exiting now.</source>
<source>Don&apos;t run as root to remove these annoying messages.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>new_file_dialog</name>
diff --git a/opentrack/lang/ru_RU.ts b/opentrack/lang/ru_RU.ts
index 684a8212..3a0cad0d 100644
--- a/opentrack/lang/ru_RU.ts
+++ b/opentrack/lang/ru_RU.ts
@@ -13,6 +13,33 @@
</message>
</context>
<context>
+ <name>UpdateDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Software update released</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Current version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Released version:</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Don&apos;t remind me again about this version</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>main_window</name>
<message>
<source>Create new empty config</source>
@@ -87,38 +114,6 @@ Exiting now.</source>
<translation> :: </translation>
</message>
<message>
- <source>Raw tracker data</source>
- <translation>Исходные данные</translation>
- </message>
- <message>
- <source>Z</source>
- <translation>Z</translation>
- </message>
- <message>
- <source>Pitch</source>
- <translation>Pitch</translation>
- </message>
- <message>
- <source>Y</source>
- <translation>Y</translation>
- </message>
- <message>
- <source>X</source>
- <translation>X</translation>
- </message>
- <message>
- <source>Roll</source>
- <translation>Roll</translation>
- </message>
- <message>
- <source>Yaw</source>
- <translation>Yaw</translation>
- </message>
- <message>
- <source>Game data</source>
- <translation>Игровые данные</translation>
- </message>
- <message>
<source>Profile</source>
<translation>Профиль</translation>
</message>
@@ -139,22 +134,10 @@ Exiting now.</source>
<translation>Остановить</translation>
</message>
<message>
- <source>Input</source>
- <translation>Источник данных</translation>
- </message>
- <message>
- <source>🔨</source>
- <translation></translation>
- </message>
- <message>
<source>Output</source>
<translation>Выходной интерфейс</translation>
</message>
<message>
- <source>Filter</source>
- <translation>Фильтрация/сглаживание</translation>
- </message>
- <message>
<source>Running as root is bad</source>
<translation type="unfinished"></translation>
</message>
@@ -178,6 +161,10 @@ Exiting now.</source>
<source>Don&apos;t run as root to remove these annoying messages.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>new_file_dialog</name>
diff --git a/opentrack/lang/stub.ts b/opentrack/lang/stub.ts
index 04555dd0..de72e075 100644
--- a/opentrack/lang/stub.ts
+++ b/opentrack/lang/stub.ts
@@ -13,39 +13,34 @@
</message>
</context>
<context>
- <name>main_window</name>
- <message>
- <source>Raw tracker data</source>
- <translation type="unfinished"></translation>
- </message>
+ <name>UpdateDialog</name>
<message>
- <source>Z</source>
+ <source>Dialog</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Pitch</source>
+ <source>Software update released</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Y</source>
+ <source>Current version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>X</source>
+ <source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Roll</source>
+ <source>Released version:</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Yaw</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Game data</source>
+ <source>Don&apos;t remind me again about this version</source>
<translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>main_window</name>
<message>
<source>Profile</source>
<translation type="unfinished"></translation>
@@ -71,22 +66,10 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Input</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>🔨</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Output</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Filter</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Running as root is bad</source>
<translation type="unfinished"></translation>
</message>
@@ -174,6 +157,10 @@ Exiting now.</source>
<source>Don&apos;t run as root to remove these annoying messages.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>new_file_dialog</name>
diff --git a/opentrack/lang/zh_CN.ts b/opentrack/lang/zh_CN.ts
index 15609d70..bdd69ff8 100644
--- a/opentrack/lang/zh_CN.ts
+++ b/opentrack/lang/zh_CN.ts
@@ -13,39 +13,34 @@
</message>
</context>
<context>
- <name>main_window</name>
- <message>
- <source>Raw tracker data</source>
- <translation>跟踪器原始数据</translation>
- </message>
- <message>
- <source>Z</source>
- <translation></translation>
- </message>
+ <name>UpdateDialog</name>
<message>
- <source>Pitch</source>
- <translation>仰俯</translation>
+ <source>Dialog</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Y</source>
- <translation></translation>
+ <source>Software update released</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>X</source>
- <translation></translation>
+ <source>Current version:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Roll</source>
- <translation>横滚</translation>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Yaw</source>
- <translation>偏航</translation>
+ <source>Released version:</source>
+ <translation type="unfinished"></translation>
</message>
<message>
- <source>Game data</source>
- <translation>游戏得到的数据</translation>
+ <source>Don&apos;t remind me again about this version</source>
+ <translation type="unfinished"></translation>
</message>
+</context>
+<context>
+ <name>main_window</name>
<message>
<source>Profile</source>
<translation>配置文件</translation>
@@ -71,22 +66,10 @@
<translation>停止</translation>
</message>
<message>
- <source>Input</source>
- <translation>输入</translation>
- </message>
- <message>
- <source>🔨</source>
- <translation></translation>
- </message>
- <message>
<source>Output</source>
<translation>输出</translation>
</message>
<message>
- <source>Filter</source>
- <translation>过滤器</translation>
- </message>
- <message>
<source>Running as root is bad</source>
<translation>以管理员运行不是什么好主意</translation>
</message>
@@ -178,6 +161,10 @@ Exiting now.</source>
<source> :: </source>
<translation></translation>
</message>
+ <message>
+ <source>Preview</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>new_file_dialog</name>
diff --git a/opentrack/main-window.hpp b/opentrack/main-window.hpp
index 1dcbd0eb..c0724a35 100644
--- a/opentrack/main-window.hpp
+++ b/opentrack/main-window.hpp
@@ -35,6 +35,8 @@
#include "ui_main-window.h"
+class update_query;
+
class main_window final : public QMainWindow, private State
{
Q_DECLARE_TR_FUNCTIONS(main_window)
@@ -84,6 +86,8 @@ class main_window final : public QMainWindow, private State
qt_signal<void> toggle_tracker { this, &main_window::toggle_tracker_, Qt::QueuedConnection };
qt_signal<void> restart_tracker { this, &main_window::restart_tracker_, Qt::QueuedConnection };
+ std::unique_ptr<update_query> updater;
+
public:
void init_dylibs();
void init_tray_menu();
@@ -118,6 +122,9 @@ public:
void show_pose();
void show_pose_(const double* mapped, const double* raw);
void set_title(const QString& game_title = QString());
+#ifdef UI_COMPACT_VIDEO_FEED
+ void toggle_video_preview(bool value);
+#endif
void start_tracker_();
void stop_tracker_();
diff --git a/opentrack/main-window.ui b/opentrack/main-window.ui
index 32c9f57a..2452acd1 100644
--- a/opentrack/main-window.ui
+++ b/opentrack/main-window.ui
@@ -7,8 +7,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>655</width>
- <height>502</height>
+ <width>320</width>
+ <height>416</height>
</rect>
</property>
<property name="sizePolicy">
@@ -17,12 +17,6 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>500</height>
- </size>
- </property>
<property name="windowIcon">
<iconset resource="../gui/opentrack-res.qrc">
<normaloff>:/images/opentrack.png</normaloff>:/images/opentrack.png</iconset>
@@ -38,7 +32,7 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <layout class="QGridLayout" name="gridLayout_2">
+ <layout class="QVBoxLayout" name="verticalLayout">
<property name="leftMargin">
<number>0</number>
</property>
@@ -46,13 +40,13 @@
<number>0</number>
</property>
<property name="rightMargin">
- <number>9</number>
+ <number>0</number>
</property>
<property name="bottomMargin">
- <number>9</number>
+ <number>0</number>
</property>
- <item row="0" column="0">
- <widget class="QFrame" name="video_feed">
+ <item alignment="Qt::AlignHCenter|Qt::AlignVCenter">
+ <widget class="QWidget" name="frame_parent" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
@@ -65,16 +59,7 @@
<height>240</height>
</size>
</property>
- <property name="maximumSize">
- <size>
- <width>320</width>
- <height>240</height>
- </size>
- </property>
- <property name="lineWidth">
- <number>0</number>
- </property>
- <widget class="QFrame" name="video_frame">
+ <widget class="pose_widget" name="pose_display" native="true">
<property name="geometry">
<rect>
<x>0</x>
@@ -89,19 +74,29 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize">
- <size>
+ </widget>
+ <widget class="QWidget" name="video_frame_parent" native="true">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
<width>320</width>
<height>240</height>
- </size>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
- <property name="maximumSize">
+ <property name="minimumSize">
<size>
<width>320</width>
<height>240</height>
</size>
</property>
- <widget class="QLabel" name="video_frame_label">
+ <widget class="QFrame" name="video_frame">
<property name="geometry">
<rect>
<x>0</x>
@@ -116,884 +111,246 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize">
- <size>
- <width>320</width>
- <height>240</height>
- </size>
- </property>
- <property name="maximumSize">
- <size>
- <width>320</width>
- <height>240</height>
- </size>
- </property>
- <property name="font">
- <font>
- <family>Candara</family>
- <pointsize>37</pointsize>
- <weight>50</weight>
- <bold>false</bold>
- <kerning>true</kerning>
- </font>
- </property>
- <property name="text">
- <string/>
- </property>
- <property name="pixmap">
- <pixmap resource="../gui/opentrack-res.qrc">:/images/tracking-not-started.png</pixmap>
- </property>
- <property name="scaledContents">
- <bool>false</bool>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="wordWrap">
- <bool>true</bool>
+ <property name="frameShape">
+ <enum>QFrame::NoFrame</enum>
</property>
</widget>
</widget>
+ <widget class="QCheckBox" name="preview_checkbox">
+ <property name="geometry">
+ <rect>
+ <x>250</x>
+ <y>220</y>
+ <width>67</width>
+ <height>18</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Preview</string>
+ </property>
+ </widget>
+ <zorder>video_frame_parent</zorder>
+ <zorder>pose_display</zorder>
+ <zorder>preview_checkbox</zorder>
</widget>
</item>
- <item row="0" column="1">
- <widget class="pose_widget" name="pose_display" native="true">
+ <item>
+ <widget class="QWidget" name="widget" native="true">
<property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize">
- <size>
- <width>320</width>
- <height>240</height>
- </size>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QGroupBox" name="box_raw_headpose">
- <property name="minimumSize">
- <size>
- <width>316</width>
- <height>0</height>
- </size>
- </property>
- <property name="title">
- <string>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>
+ <layout class="QGridLayout" name="gridLayout">
<property name="bottomMargin">
<number>0</number>
</property>
- <property name="spacing">
- <number>0</number>
+ <property name="horizontalSpacing">
+ <number>9</number>
</property>
- <item row="0" column="3">
- <widget class="QLCDNumber" name="raw_yaw">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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="0">
- <widget class="QLabel" name="lblZ_4">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <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>Z</string>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QLabel" name="lblRotY_4">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <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="3">
- <widget class="QLCDNumber" name="raw_pitch">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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="1" column="0">
- <widget class="QLabel" name="lblY_4">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <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>Y</string>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="lblX_4">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <property name="text">
- <string>X</string>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QLCDNumber" name="raw_x">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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="2">
- <widget class="QLabel" name="lblRotZ_4">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <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="0" column="2">
- <widget class="QLabel" name="lblRotX_4">
+ <widget class="QPushButton" name="btnShortcuts">
<property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+ <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
<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="1" column="1">
- <widget class="QLCDNumber" name="raw_y">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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="raw_roll">
- <property name="enabled">
- <bool>true</bool>
+ <string>Options</string>
</property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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="raw_z">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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>
- <item row="1" column="1">
- <widget class="QGroupBox" name="box_mapped_headpose">
- <property name="minimumSize">
- <size>
- <width>316</width>
- <height>0</height>
- </size>
- </property>
- <property name="title">
- <string>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="spacing">
- <number>0</number>
- </property>
- <item row="1" column="3">
- <widget class="QLCDNumber" name="pose_pitch">
- <property name="enabled">
- <bool>true</bool>
+ <property name="icon">
+ <iconset resource="../gui/opentrack-res.qrc">
+ <normaloff>:/images/newcogicon.png</normaloff>:/images/newcogicon.png</iconset>
</property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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 name="iconSize">
+ <size>
+ <width>80</width>
+ <height>24</height>
+ </size>
</property>
</widget>
</item>
<item row="0" column="0">
- <widget class="QLabel" name="lblx">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="frameShadow">
- <enum>QFrame::Raised</enum>
- </property>
- <property name="text">
- <string>X</string>
- </property>
- </widget>
- </item>
- <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="Maximum">
- <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>Y</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="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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="1" column="2">
- <widget class="QLabel" name="lblRotY_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <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="2" column="2">
- <widget class="QLabel" name="lblRotZ_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <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="0" column="2">
- <widget class="QLabel" name="lblRotX_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <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="0">
- <widget class="QLabel" name="lblZ_2">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
- <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>Z</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="Maximum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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>
+ <widget class="QGroupBox" name="groupProto">
<property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+ <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="font">
- <font>
- <stylestrategy>NoAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </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>
- <item row="2" column="1">
- <widget class="QWidget" name="groupControls" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
- <horstretch>4</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>315</width>
- <height>0</height>
- </size>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout_3">
- <property name="spacing">
- <number>4</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="QWidget" name="groupProfile" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
+ <property name="title">
+ <string>Output</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
- <property name="spacing">
- <number>0</number>
- </property>
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>4</number>
</property>
<property name="rightMargin">
<number>4</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>6</number>
</property>
<item>
- <widget class="QToolButton" name="profile_button">
- <property name="enabled">
- <bool>true</bool>
- </property>
+ <widget class="QComboBox" name="iconcomboProtocol">
<property name="sizePolicy">
- <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="focusPolicy">
- <enum>Qt::StrongFocus</enum>
- </property>
- <property name="text">
- <string>Profile</string>
- </property>
- <property name="popupMode">
- <enum>QToolButton::InstantPopup</enum>
- </property>
- <property name="toolButtonStyle">
- <enum>Qt::ToolButtonTextBesideIcon</enum>
+ <enum>Qt::TabFocus</enum>
</property>
- <property name="autoRaise">
- <bool>true</bool>
- </property>
- <property name="arrowType">
- <enum>Qt::DownArrow</enum>
+ <property name="sizeAdjustPolicy">
+ <enum>QComboBox::AdjustToMinimumContentsLengthWithIcon</enum>
</property>
</widget>
</item>
<item>
- <widget class="QComboBox" name="iconcomboProfile">
+ <widget class="QToolButton" name="btnShowServerControls">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
<property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
+ <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize">
- <size>
- <width>245</width>
- <height>0</height>
- </size>
+ <property name="font">
+ <font>
+ <family>DejaVu Sans</family>
+ <stylestrategy>PreferAntialias</stylestrategy>
+ <kerning>false</kerning>
+ </font>
</property>
<property name="focusPolicy">
<enum>Qt::StrongFocus</enum>
</property>
- <property name="maxVisibleItems">
- <number>20</number>
+ <property name="text">
+ <string/>
+ </property>
+ <property name="icon">
+ <iconset resource="../gui/opentrack-res.qrc">
+ <normaloff>:/images/newsetticon.png</normaloff>:/images/newsetticon.png</iconset>
+ </property>
+ <property name="flat" stdset="0">
+ <bool>false</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
- <item>
- <widget class="QWidget" name="groupOptions" native="true">
- <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item row="0" column="1">
+ <widget class="QGroupBox" name="groupProfile">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="title">
+ <string>Profile</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="leftMargin">
<number>4</number>
</property>
<property name="topMargin">
- <number>0</number>
+ <number>4</number>
</property>
<property name="rightMargin">
<number>4</number>
</property>
<property name="bottomMargin">
- <number>0</number>
+ <number>6</number>
</property>
<item>
- <widget class="QPushButton" name="btnShortcuts">
+ <widget class="QToolButton" name="profile_button">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
<property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
+ <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
+ </property>
<property name="text">
- <string>Options</string>
+ <string/>
</property>
- <property name="icon">
- <iconset resource="../gui/opentrack-res.qrc">
- <normaloff>:/images/tools.png</normaloff>:/images/tools.png</iconset>
+ <property name="popupMode">
+ <enum>QToolButton::InstantPopup</enum>
</property>
- <property name="iconSize">
- <size>
- <width>80</width>
- <height>24</height>
- </size>
+ <property name="toolButtonStyle">
+ <enum>Qt::ToolButtonIconOnly</enum>
+ </property>
+ <property name="autoRaise">
+ <bool>true</bool>
+ </property>
+ <property name="arrowType">
+ <enum>Qt::DownArrow</enum>
</property>
</widget>
</item>
<item>
- <widget class="QPushButton" name="btnEditCurves">
+ <widget class="QComboBox" name="iconcomboProfile">
<property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
- <horstretch>0</horstretch>
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Maximum">
+ <horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="text">
- <string>Mapping</string>
- </property>
- <property name="icon">
- <iconset resource="../gui/opentrack-res.qrc">
- <normaloff>:/images/curves.png</normaloff>:/images/curves.png</iconset>
+ <property name="focusPolicy">
+ <enum>Qt::StrongFocus</enum>
</property>
- <property name="iconSize">
- <size>
- <width>80</width>
- <height>24</height>
- </size>
+ <property name="maxVisibleItems">
+ <number>20</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
+ <item row="1" column="1">
+ <widget class="QPushButton" name="btnEditCurves">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Mapping</string>
+ </property>
+ <property name="icon">
+ <iconset resource="../gui/opentrack-res.qrc">
+ <normaloff>:/images/newmapicon.png</normaloff>:/images/newmapicon.png</iconset>
+ </property>
+ <property name="iconSize">
+ <size>
+ <width>80</width>
+ <height>24</height>
+ </size>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QWidget" name="widget_2" native="true">
+ <layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QGroupBox" name="groupStartStop">
<property name="sizePolicy">
@@ -1002,16 +359,10 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
- <property name="minimumSize">
- <size>
- <width>0</width>
- <height>0</height>
- </size>
- </property>
<property name="title">
<string>Tracking</string>
</property>
- <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
<number>7</number>
</property>
@@ -1019,13 +370,13 @@
<number>4</number>
</property>
<property name="topMargin">
- <number>4</number>
+ <number>3</number>
</property>
<property name="rightMargin">
<number>4</number>
</property>
<property name="bottomMargin">
- <number>4</number>
+ <number>0</number>
</property>
<item>
<widget class="QToolButton" name="btnStartTracker">
@@ -1086,246 +437,6 @@
</layout>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QWidget" name="modules" native="true">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>310</width>
- <height>0</height>
- </size>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="spacing">
- <number>4</number>
- </property>
- <property name="leftMargin">
- <number>4</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="QGroupBox" name="groupTracker">
- <property name="title">
- <string>Input</string>
- </property>
- <layout class="QGridLayout" name="gridLayout">
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <property name="horizontalSpacing">
- <number>6</number>
- </property>
- <property name="verticalSpacing">
- <number>0</number>
- </property>
- <item row="0" column="0">
- <widget class="QComboBox" name="iconcomboTrackerSource">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QToolButton" name="btnShowEngineControls">
- <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="font">
- <font>
- <family>DejaVu Sans</family>
- <stylestrategy>PreferAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </property>
- <property name="focusPolicy">
- <enum>Qt::ClickFocus</enum>
- </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="groupProto">
- <property name="title">
- <string>Output</string>
- </property>
- <layout class="QGridLayout" name="gridLayout_4">
- <property name="leftMargin">
- <number>4</number>
- </property>
- <property name="topMargin">
- <number>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <property name="horizontalSpacing">
- <number>6</number>
- </property>
- <property name="verticalSpacing">
- <number>0</number>
- </property>
- <item row="0" column="0">
- <widget class="QComboBox" name="iconcomboProtocol">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QToolButton" name="btnShowServerControls">
- <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="font">
- <font>
- <family>DejaVu Sans</family>
- <stylestrategy>PreferAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </property>
- <property name="focusPolicy">
- <enum>Qt::ClickFocus</enum>
- </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>4</number>
- </property>
- <property name="rightMargin">
- <number>4</number>
- </property>
- <property name="bottomMargin">
- <number>4</number>
- </property>
- <property name="horizontalSpacing">
- <number>6</number>
- </property>
- <property name="verticalSpacing">
- <number>0</number>
- </property>
- <item row="0" column="0">
- <widget class="QComboBox" name="iconcomboFilter">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="focusPolicy">
- <enum>Qt::TabFocus</enum>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QToolButton" name="btnShowFilterControls">
- <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="font">
- <font>
- <family>DejaVu Sans</family>
- <stylestrategy>PreferAntialias</stylestrategy>
- <kerning>false</kerning>
- </font>
- </property>
- <property name="focusPolicy">
- <enum>Qt::ClickFocus</enum>
- </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>
</widget>
@@ -1336,6 +447,17 @@
<header>pose-widget/pose-widget.hpp</header>
</customwidget>
</customwidgets>
+ <tabstops>
+ <tabstop>btnStartTracker</tabstop>
+ <tabstop>btnStopTracker</tabstop>
+ <tabstop>btnShortcuts</tabstop>
+ <tabstop>btnEditCurves</tabstop>
+ <tabstop>iconcomboProtocol</tabstop>
+ <tabstop>btnShowServerControls</tabstop>
+ <tabstop>profile_button</tabstop>
+ <tabstop>iconcomboProfile</tabstop>
+ <tabstop>preview_checkbox</tabstop>
+ </tabstops>
<resources>
<include location="../gui/opentrack-res.qrc"/>
</resources>
diff --git a/opentrack/opentrack.ico b/opentrack/opentrack.ico
index 5cac8da1..b5f34db3 100644
--- a/opentrack/opentrack.ico
+++ b/opentrack/opentrack.ico
Binary files differ
diff --git a/opentrack/software-update-dialog.cpp b/opentrack/software-update-dialog.cpp
new file mode 100644
index 00000000..778814c3
--- /dev/null
+++ b/opentrack/software-update-dialog.cpp
@@ -0,0 +1,66 @@
+#include "software-update-dialog.hpp"
+#include "opentrack-org.hxx"
+
+update_dialog::update_dialog(QWidget* parent, update_query& q, const QString& new_version)
+ : QDialog(parent), q(q)
+{
+ ui.setupUi(this);
+ ui.ver_current->setText(const_cast<const char*>(opentrack_version));
+ ui.ver_new->setTextFormat(Qt::RichText);
+ ui.ver_new->setText("<a href='https://www.trackhat.org/trackhat-opentrack'>" + new_version + "</a>");
+ ui.ver_new->setOpenExternalLinks(true);
+ connect(ui.buttonBox, &QDialogButtonBox::clicked, this, &update_dialog::close);
+}
+
+void update_query::on_finished()
+{
+ if (!t.isActive())
+ return;
+ t.stop();
+ if (r->error() != QNetworkReply::NoError)
+ {
+ qDebug() << "updater: error" << r->error() << r->errorString();
+ return;
+ }
+ QString str(buf);
+ QRegExp re("SOFTWARE-UPDATE-V3: ([a-zA-Z0-9_.-+]+)");
+ int idx = re.indexIn(str);
+ if (idx != -1)
+ {
+ str = re.cap(1);
+ QSettings s(OPENTRACK_ORG);
+ QString quiet_version = s.value("quiet-update-version").toString();
+
+ if (!str.isEmpty() && str != opentrack_version && str != quiet_version)
+ {
+ qDebug() << "updater: new version" << str;
+ update_dialog dlg(qobject_cast<QWidget*>(parent()), *this, str);
+ dlg.show();
+ dlg.raise();
+ dlg.exec();
+ if (dlg.ui.disable_reminder->isChecked())
+ s.setValue("quiet-update-version", str);
+ }
+ }
+ else
+ {
+ if (buf.isEmpty())
+ qDebug() << "updater: empty response";
+ else
+ qDebug() << "updater: can't parse response";
+ }
+ buf.clear();
+ r->deleteLater();
+}
+
+void update_query::maybe_show_dialog()
+{
+ t.stop();
+ t.setSingleShot(true);
+ t.start(1000 * 10);
+
+ r = qnam.get(QNetworkRequest(QStringLiteral("https://www.trackhat.org/thotv3-version")));
+
+ QObject::connect(r, &QIODevice::readyRead, this, &update_query::on_ready);
+ QObject::connect(r, &QNetworkReply::finished, this, &update_query::on_finished);
+}
diff --git a/opentrack/software-update-dialog.hpp b/opentrack/software-update-dialog.hpp
new file mode 100644
index 00000000..1e150e62
--- /dev/null
+++ b/opentrack/software-update-dialog.hpp
@@ -0,0 +1,34 @@
+#pragma once
+
+#include <QtNetwork>
+#include <QDialog>
+#include <QTimer>
+#include "ui_software-update.h"
+
+extern "C" const char* const opentrack_version;
+
+class update_query final : public QObject
+{
+ Q_OBJECT
+public:
+ explicit update_query(QWidget* parent) : QObject{parent} {}
+
+ QNetworkReply* r = nullptr;
+ QNetworkAccessManager qnam{this};
+ QByteArray buf;
+ QTimer t{this};
+
+ void on_finished();
+ void on_ready() { buf.append(r->readAll()); }
+ void maybe_show_dialog();
+};
+
+class update_dialog : QDialog
+{
+ Q_OBJECT
+ friend class update_query;
+private:
+ Ui::UpdateDialog ui;
+ update_query& q;
+ update_dialog(QWidget* parent, update_query& q, const QString& new_version);
+};
diff --git a/opentrack/software-update.ui b/opentrack/software-update.ui
new file mode 100644
index 00000000..07edf66c
--- /dev/null
+++ b/opentrack/software-update.ui
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>UpdateDialog</class>
+ <widget class="QDialog" name="UpdateDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>385</width>
+ <height>187</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Dialog</string>
+ </property>
+ <layout class="QVBoxLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="font">
+ <font>
+ <pointsize>16</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Software update released</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="Line" name="line">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <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">
+ <property name="leftMargin">
+ <number>12</number>
+ </property>
+ <property name="topMargin">
+ <number>12</number>
+ </property>
+ <property name="rightMargin">
+ <number>12</number>
+ </property>
+ <property name="bottomMargin">
+ <number>12</number>
+ </property>
+ <property name="spacing">
+ <number>12</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Current version:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLabel" name="ver_current">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ <property name="openExternalLinks">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Released version:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="ver_new">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QCheckBox" name="disable_reminder">
+ <property name="text">
+ <string>Don't remind me again about this version</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Close</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>