diff options
Diffstat (limited to 'opentrack')
-rw-r--r-- | opentrack/defs.hpp | 17 | ||||
-rw-r--r-- | opentrack/lang/nl_NL.ts | 41 | ||||
-rw-r--r-- | opentrack/lang/ru_RU.ts | 75 | ||||
-rw-r--r-- | opentrack/lang/stub.ts | 41 | ||||
-rw-r--r-- | opentrack/lang/zh_CN.ts | 53 | ||||
-rw-r--r-- | opentrack/main-window.hpp | 7 | ||||
-rw-r--r-- | opentrack/main-window.ui | 1222 | ||||
-rw-r--r-- | opentrack/opentrack.ico | bin | 67134 -> 3758 bytes | |||
-rw-r--r-- | opentrack/software-update-dialog.cpp | 66 | ||||
-rw-r--r-- | opentrack/software-update-dialog.hpp | 34 | ||||
-rw-r--r-- | opentrack/software-update.ui | 118 |
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'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'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'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'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'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'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'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 Binary files differindex 5cac8da1..b5f34db3 100644 --- a/opentrack/opentrack.ico +++ b/opentrack/opentrack.ico 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> |