diff options
Diffstat (limited to 'variant/trackmouse')
| -rw-r--r-- | variant/trackmouse/_variant.cmake | 6 | ||||
| -rw-r--r-- | variant/trackmouse/lang/nl_NL.ts | 67 | ||||
| -rw-r--r-- | variant/trackmouse/lang/ru_RU.ts | 67 | ||||
| -rw-r--r-- | variant/trackmouse/lang/stub.ts | 67 | ||||
| -rw-r--r-- | variant/trackmouse/lang/zh_CN.ts | 71 | ||||
| -rw-r--r-- | variant/trackmouse/trackmouse-settings.cpp | 27 | ||||
| -rw-r--r-- | variant/trackmouse/window.cpp | 332 | ||||
| -rw-r--r-- | variant/trackmouse/window.hpp | 81 | ||||
| -rw-r--r-- | variant/trackmouse/window.ui | 79 | 
9 files changed, 754 insertions, 43 deletions
| diff --git a/variant/trackmouse/_variant.cmake b/variant/trackmouse/_variant.cmake index b54ecf52..404c28ec 100644 --- a/variant/trackmouse/_variant.cmake +++ b/variant/trackmouse/_variant.cmake @@ -11,9 +11,11 @@ function(otr_init_variant)          "logic"          "dinput"          "gui" -        "pose-widget"          "spline"          "cv" -        "migration") +        "migration" +        "executable" +        "pose-widget" +    )      set_property(GLOBAL PROPERTY opentrack-subprojects "${subprojects}")  endfunction() diff --git a/variant/trackmouse/lang/nl_NL.ts b/variant/trackmouse/lang/nl_NL.ts index 9e739505..572fd4e7 100644 --- a/variant/trackmouse/lang/nl_NL.ts +++ b/variant/trackmouse/lang/nl_NL.ts @@ -1,4 +1,71 @@  <?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE TS>  <TS version="2.1" language="nl_NL"> +<context> +    <name>main_window</name> +    <message> +        <source>The Octopus is sad</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source> :: </source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>trackmouse prototype</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Keyboard shortcuts</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>start/stop tracking</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F10</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>center</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F11</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>freeze</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F12</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Sensitivity</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>100%</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Start</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Stop</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Check permissions for your .ini directory: + +%1"%2 + +Exiting now.</source> +        <translation type="unfinished"></translation> +    </message> +</context>  </TS> diff --git a/variant/trackmouse/lang/ru_RU.ts b/variant/trackmouse/lang/ru_RU.ts index f62cf2e1..7b3b9d0b 100644 --- a/variant/trackmouse/lang/ru_RU.ts +++ b/variant/trackmouse/lang/ru_RU.ts @@ -1,4 +1,71 @@  <?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE TS>  <TS version="2.1" language="ru_RU"> +<context> +    <name>main_window</name> +    <message> +        <source>The Octopus is sad</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source> :: </source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>trackmouse prototype</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Keyboard shortcuts</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>start/stop tracking</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F10</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>center</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F11</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>freeze</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F12</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Sensitivity</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>100%</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Start</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Stop</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Check permissions for your .ini directory: + +%1"%2 + +Exiting now.</source> +        <translation type="unfinished"></translation> +    </message> +</context>  </TS> diff --git a/variant/trackmouse/lang/stub.ts b/variant/trackmouse/lang/stub.ts index 6401616d..ce91cd32 100644 --- a/variant/trackmouse/lang/stub.ts +++ b/variant/trackmouse/lang/stub.ts @@ -1,4 +1,71 @@  <?xml version="1.0" encoding="utf-8"?>  <!DOCTYPE TS>  <TS version="2.1"> +<context> +    <name>main_window</name> +    <message> +        <source>The Octopus is sad</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source> :: </source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>trackmouse prototype</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Keyboard shortcuts</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>start/stop tracking</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F10</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>center</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F11</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>freeze</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F12</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Sensitivity</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>100%</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Start</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Stop</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Check permissions for your .ini directory: + +%1"%2 + +Exiting now.</source> +        <translation type="unfinished"></translation> +    </message> +</context>  </TS> diff --git a/variant/trackmouse/lang/zh_CN.ts b/variant/trackmouse/lang/zh_CN.ts new file mode 100644 index 00000000..ce91cd32 --- /dev/null +++ b/variant/trackmouse/lang/zh_CN.ts @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1"> +<context> +    <name>main_window</name> +    <message> +        <source>The Octopus is sad</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source> :: </source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>trackmouse prototype</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Keyboard shortcuts</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>start/stop tracking</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F10</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>center</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F11</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>freeze</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Alt+F12</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Sensitivity</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>100%</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Start</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Stop</source> +        <translation type="unfinished"></translation> +    </message> +    <message> +        <source>Check permissions for your .ini directory: + +%1"%2 + +Exiting now.</source> +        <translation type="unfinished"></translation> +    </message> +</context> +</TS> diff --git a/variant/trackmouse/trackmouse-settings.cpp b/variant/trackmouse/trackmouse-settings.cpp index 1df88a2d..6d23438c 100644 --- a/variant/trackmouse/trackmouse-settings.cpp +++ b/variant/trackmouse/trackmouse-settings.cpp @@ -47,9 +47,9 @@ static void force_main_settings()      module_settings m; -    m.tracker_dll = "PointTracker 1.1"; -    m.protocol_dll = "Mouse"; -    m.filter_dll = "Accela"; +    m.tracker_dll = "pt"; +    m.protocol_dll = "win32-mouse"; +    m.filter_dll = "accela";      s.b->save();      s.b_map->save(); @@ -85,6 +85,7 @@ static void force_pt_settings()  static void force_mouse_settings()  { +      mouse_settings s;      s.Mouse_X = Yaw + 1; @@ -98,13 +99,29 @@ static void force_accela_settings()      // TODO  } +static void force_shortcut_settings() +{ +    main_settings s; +    s.key_toggle_tracking1.keycode = "Alt+F10"; +    s.key_center1.keycode = "Alt+F11"; +    s.key_toggle_press1.keycode = "Alt+F12"; + +    for (key_opts* k : { &s.key_toggle_tracking1, &s.key_center1, &s.key_toggle_press1 }) +    { +        k->button = -1; +        k->guid = {}; +    } +    s.b->save(); +} +  void force_trackmouse_settings()  { -    group::with_settings_object([](QSettings&) { // batch config save +   options::globals::with_settings_object([](QSettings&) {         force_main_settings();         force_spline_settings();         force_pt_settings();         force_mouse_settings();         force_accela_settings(); -    }); +       force_shortcut_settings(); +   });  } diff --git a/variant/trackmouse/window.cpp b/variant/trackmouse/window.cpp index 73f91c74..bb94f1da 100644 --- a/variant/trackmouse/window.cpp +++ b/variant/trackmouse/window.cpp @@ -1,22 +1,338 @@ +/* Copyright (c) 2013-2018, Stanislaw Halik <sthalik@misaki.pl> + + * Permission to use, copy, modify, and/or distribute this + * software for any purpose with or without fee is hereby granted, + * provided that the above copyright notice and this permission + * notice appear in all copies. + */ +  #include "window.hpp" +#include "options/options.hpp" +#include "migration/migration.hpp" +#include "compat/check-visible.hpp" +#include "compat/sleep.hpp" +#include "compat/macros.hpp" +#include "compat/library-path.hpp" +#include "compat/math.hpp" +#include <algorithm> +#include <iterator> +#include <utility> + +#include <QMessageBox> +#include <QDir> +#include <QFile> +#include <QString> +#include <QList> +#include <QEventLoop>  #include <QApplication> -void force_trackmouse_settings(); +extern "C" const char* const opentrack_version; -void window::closeEvent(QCloseEvent* e) -{ -    e->accept(); -    QApplication::exit(0); -} +using namespace options::globals; +using namespace options; + +#if !defined EXIT_SUCCESS +#   define EXIT_SUCCESS 0 +#endif -window::window() : QMainWindow() +#if !defined EXIT_FAILURE +#   define EXIT_FAILURE 1 +#endif + +/* FreeBSD sysexits(3) + * + * The input data was incorrect	in some	way.  This + * should only be used for user's data and not system + * files. + */ + +#if !defined EX_OSFILE +#   define EX_OSFILE 72 +#endif + +void force_trackmouse_settings(); + +main_window::main_window() : State(OPENTRACK_BASE_PATH + OPENTRACK_LIBRARY_PATH)  {      ui.setupUi(this); -    setAttribute(Qt::WA_QuitOnClose); + +    update_button_state(false, false); + +    // ctrl+q exits +    connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); + +    if (!set_profile()) +    { +        die_on_config_not_writable(); +        exit(EX_OSFILE); +        return; +    } + +    // only tie and connect main screen options after migrations are done +    // below is fine, set_profile() is called already + +    connect(this, &main_window::start_tracker, +            this, [&] { qDebug() << "start tracker"; start_tracker_(); }, +            Qt::QueuedConnection); + +    connect(this, &main_window::stop_tracker, +            this, [&] { qDebug() << "stop tracker"; stop_tracker_(); }, +            Qt::QueuedConnection); + +    connect(ui.btnStartTracker, SIGNAL(clicked()), this, SLOT(start_tracker_())); +    connect(ui.btnStopTracker, SIGNAL(clicked()), this, SLOT(stop_tracker_()));      force_trackmouse_settings(); +    register_shortcuts(); +    kbd_quit.setEnabled(true); + +    setWindowFlags(Qt::MSWindowsFixedSizeDialogHint | windowFlags()); +    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); +    adjustSize(); + +    setVisible(true);      show();  } +void main_window::register_shortcuts() +{ +    global_shortcuts.reload({ +        { s.key_toggle_tracking1, [this](bool) { main_window::toggle_tracker_(); }, true }, +    }); + +    if (work) +        work->reload_shortcuts(); +} + +void main_window::die_on_config_not_writable() +{ +    stop_tracker_(); + +    static const QString pad(16, QChar(' ')); + +    QMessageBox::critical(this, +                          tr("The Octopus is sad"), +                          tr("Check permissions for your .ini directory:\n\n%1\"%2\n\n" +                             "Exiting now." +                          ).arg(ini_directory(), pad), +                          QMessageBox::Close, QMessageBox::NoButton); + +    exit(EX_OSFILE); +} + +bool main_window::maybe_die_on_config_not_writable(const QString& current) +{ +    const bool writable = +        with_settings_object([&](QSettings& s) { +            return s.isWritable(); +        }); + +    if (writable) +        return false; + +    if (!QFile(ini_combine(current)).open(QFile::ReadWrite)) +    { +        die_on_config_not_writable(); +        return true; +    } + +    return false; +} + +main_window::~main_window() +{ +    // stupid ps3 eye has LED issues +    if (work) +    { +        stop_tracker_(); +        QEventLoop ev; +        ev.processEvents(); +        portable::sleep(2000); +    } + +    exit(); +} + +void main_window::set_working_directory() +{ +    QDir::setCurrent(OPENTRACK_BASE_PATH); +} + +void main_window::save_modules() +{ +    m.b->save(); +} + +std::tuple<main_window::dylib_ptr, int> +main_window::module_by_name(const QString& name, Modules::dylib_list& list) +{ +    auto it = std::find_if(list.cbegin(), list.cend(), [&name](const dylib_ptr& lib) { +        if (!lib) +            return name.isEmpty(); +        else +            return name == lib->module_name; +    }); + +    if (it == list.cend()) +        return { nullptr, -1 }; +    else +        return { *it, std::distance(list.cbegin(), it) }; +} + +main_window::dylib_ptr main_window::current_tracker() +{ +    auto [ptr, idx] = module_by_name(m.tracker_dll, modules.trackers()); +    return ptr; +} + +main_window::dylib_ptr main_window::current_protocol() +{ +    auto [ptr, idx] = module_by_name(m.protocol_dll, modules.protocols()); +    return ptr; +} + +main_window::dylib_ptr main_window::current_filter() +{ +    auto [ptr, idx] = module_by_name(m.filter_dll, modules.filters()); +    return ptr; +} + +void main_window::update_button_state(bool running, bool inertialp) +{ +    bool not_running = !running; +#if 0 +    ui.iconcomboProfile->setEnabled(not_running); +    ui.btnStartTracker->setEnabled(not_running); +    ui.btnStopTracker->setEnabled(running); +    ui.iconcomboProtocol->setEnabled(not_running); +    ui.iconcomboFilter->setEnabled(not_running); +    ui.iconcomboTrackerSource->setEnabled(not_running); +    ui.profile_button->setEnabled(not_running); +#endif +    ui.video_frame_label->setVisible(not_running || inertialp); +    if(not_running) +    { +        ui.video_frame_label->setPixmap(QPixmap(":/images/tracking-not-started.png")); +    } +    else { +        ui.video_frame_label->setPixmap(QPixmap(":/images/no-feed.png")); +    } +} + +void main_window::start_tracker_() +{ +    if (work) +        return; + +    work = std::make_shared<Work>(pose, ev, ui.video_frame, current_tracker(), current_protocol(), current_filter()); + +    if (!work->is_ok()) +    { +        work = nullptr; +        return; +    } + +    if (pTrackerDialog) +        pTrackerDialog->register_tracker(work->libs.pTracker.get()); + +    if (pFilterDialog) +        pFilterDialog->register_filter(work->libs.pFilter.get()); + +    if (pProtocolDialog) +        pProtocolDialog->register_protocol(work->libs.pProtocol.get()); + +    // NB check valid since SelectedLibraries ctor called +    // trackers take care of layout state updates +    const bool is_inertial = ui.video_frame->layout() == nullptr; +    update_button_state(true, is_inertial); + +    ui.btnStopTracker->setFocus(); +} + +void main_window::stop_tracker_() +{ +    if (!work) +        return; + +    with_tracker_teardown sentinel; + +    if (pTrackerDialog) +        pTrackerDialog->unregister_tracker(); + +    if (pProtocolDialog) +        pProtocolDialog->unregister_protocol(); + +    if (pFilterDialog) +        pFilterDialog->unregister_filter(); + +    work = nullptr; + +    update_button_state(false, false); +    set_title(); +    ui.btnStartTracker->setFocus(); + +    // ps3 eye issues +    portable::sleep(1000); +} + +void main_window::set_title(const QString& game_title) +{ +    static const QString version{opentrack_version}; +    static const QString sep { tr(" :: ") }; +    static const QString pat1{ version + sep + "%1" + sep + "%2" }; +    static const QString pat2{ version + sep + "%1" }; + +    const QString current = ini_filename(); + +    if (game_title.isEmpty()) +        setWindowTitle(pat2.arg(current)); +    else +        setWindowTitle(pat1.arg(current, game_title)); +} + +void main_window::exit(int status) +{ +    QApplication::setQuitOnLastWindowClosed(true); +    close(); +    QApplication::exit(status); +} + +bool main_window::set_profile() +{ +    if (maybe_die_on_config_not_writable(OPENTRACK_DEFAULT_CONFIG)) +        return false; + +    set_profile_in_registry(); + +    options::detail::bundler::refresh_all_bundles(); + +    // migrations are for config layout changes and other user-visible +    // incompatibilities in future versions +    run_migrations(); + +    set_title(); + +    return true; +} + +void main_window::closeEvent(QCloseEvent*) +{ +    exit(); +} + +void main_window::set_profile_in_registry() +{ +    with_global_settings_object([&](QSettings& s) { +        s.setValue(OPENTRACK_CONFIG_FILENAME_KEY, OPENTRACK_DEFAULT_CONFIG); +    }); +} + +void main_window::toggle_tracker_() +{ +    if (work) +        stop_tracker(); +    else +        start_tracker(); +} diff --git a/variant/trackmouse/window.hpp b/variant/trackmouse/window.hpp index e5c34410..af3a3043 100644 --- a/variant/trackmouse/window.hpp +++ b/variant/trackmouse/window.hpp @@ -1,17 +1,86 @@  #pragma once -#include "ui_window.h" +/* Copyright (c) 2013-2016, Stanislaw Halik <sthalik@misaki.pl> + + * Permission to use, copy, modify, and/or distribute this + * software for any purpose with or without fee is hereby granted, + * provided that the above copyright notice and this permission + * notice appear in all copies. + */ + +#pragma once + +#include "api/plugin-support.hpp" +#include "logic/main-settings.hpp" +#include "logic/pipeline.hpp" +#include "logic/shortcuts.h" +#include "logic/work.hpp" +#include "logic/state.hpp" +#include "options/options.hpp" +  #include <QMainWindow> -#include <QCloseEvent> +#include <QKeySequence> +#include <QShortcut> +#include <QPixmap> +#include <QTimer> +#include <QString> -class window : public QMainWindow +#include <tuple> +#include <memory> + +#include "ui_window.h" + +class main_window final : public QMainWindow, private State  {      Q_OBJECT      Ui::window ui; -    void closeEvent(QCloseEvent* e) override; -public: -    window(); +    Shortcuts global_shortcuts; +    module_settings m; + +    QShortcut kbd_quit { QKeySequence("Ctrl+Q"), this }; +    std::unique_ptr<IFilterDialog> pFilterDialog; +    std::unique_ptr<IProtocolDialog> pProtocolDialog; +    std::unique_ptr<ITrackerDialog> pTrackerDialog; + +    using dylib_ptr = Modules::dylib_ptr; +    using dylib_list = Modules::dylib_list; +    static std::tuple<dylib_ptr, int> module_by_name(const QString& name, Modules::dylib_list& list); + +    dylib_ptr current_tracker(); +    dylib_ptr current_protocol(); +    dylib_ptr current_filter(); + +    void update_button_state(bool running, bool inertialp); + +    void set_title(const QString& game_title = QString()); + +    void set_profile_in_registry(); +    void register_shortcuts(); + +    void closeEvent(QCloseEvent *event) override; + +    bool maybe_die_on_config_not_writable(const QString& current); +    void die_on_config_not_writable(); + +private slots: +    void save_modules(); +    void exit(int status = EXIT_SUCCESS); +    bool set_profile(); + +    void start_tracker_(); +    void stop_tracker_(); +    void toggle_tracker_(); + +    static void set_working_directory(); + +signals: +    void start_tracker(); +    void stop_tracker(); + +public: +    main_window(); +    ~main_window() override;  }; diff --git a/variant/trackmouse/window.ui b/variant/trackmouse/window.ui index 9501c5c2..f9a45daf 100644 --- a/variant/trackmouse/window.ui +++ b/variant/trackmouse/window.ui @@ -186,24 +186,6 @@            <string>Keyboard shortcuts</string>           </property>           <layout class="QGridLayout" name="gridLayout"> -          <property name="leftMargin"> -           <number>12</number> -          </property> -          <property name="topMargin"> -           <number>6</number> -          </property> -          <property name="rightMargin"> -           <number>40</number> -          </property> -          <property name="bottomMargin"> -           <number>6</number> -          </property> -          <property name="horizontalSpacing"> -           <number>30</number> -          </property> -          <property name="verticalSpacing"> -           <number>6</number> -          </property>            <item row="0" column="0">             <widget class="QLabel" name="label_2">              <property name="sizePolicy"> @@ -226,7 +208,7 @@              </property>             </widget>            </item> -          <item row="0" column="1" alignment="Qt::AlignRight"> +          <item row="0" column="1">             <widget class="QLabel" name="label_3">              <property name="sizePolicy">               <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> @@ -246,6 +228,9 @@              <property name="text">               <string>Alt+F10</string>              </property> +            <property name="alignment"> +             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +            </property>             </widget>            </item>            <item row="1" column="0"> @@ -270,7 +255,7 @@              </property>             </widget>            </item> -          <item row="1" column="1" alignment="Qt::AlignRight"> +          <item row="1" column="1">             <widget class="QLabel" name="label_5">              <property name="sizePolicy">               <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> @@ -288,8 +273,58 @@               </font>              </property>              <property name="text"> +             <string>Alt+F11</string> +            </property> +            <property name="alignment"> +             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +            </property> +           </widget> +          </item> +          <item row="2" column="0"> +           <widget class="QLabel" name="label_6"> +            <property name="sizePolicy"> +             <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="font"> +             <font> +              <pointsize>12</pointsize> +              <weight>75</weight> +              <bold>true</bold> +              <stylestrategy>PreferAntialias</stylestrategy> +              <kerning>false</kerning> +             </font> +            </property> +            <property name="text"> +             <string>freeze</string> +            </property> +           </widget> +          </item> +          <item row="2" column="1"> +           <widget class="QLabel" name="label_7"> +            <property name="sizePolicy"> +             <sizepolicy hsizetype="Preferred" vsizetype="Maximum"> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="font"> +             <font> +              <pointsize>12</pointsize> +              <weight>75</weight> +              <bold>true</bold> +              <stylestrategy>PreferAntialias</stylestrategy> +              <kerning>false</kerning> +             </font> +            </property> +            <property name="text">               <string>Alt+F12</string>              </property> +            <property name="alignment"> +             <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +            </property>             </widget>            </item>           </layout> @@ -364,7 +399,7 @@             <number>3</number>            </property>            <item> -           <widget class="QCommandLinkButton" name="start_button"> +           <widget class="QCommandLinkButton" name="btnStartTracker">              <property name="sizePolicy">               <sizepolicy hsizetype="Preferred" vsizetype="Maximum">                <horstretch>0</horstretch> @@ -387,7 +422,7 @@             </widget>            </item>            <item> -           <widget class="QCommandLinkButton" name="stop_button"> +           <widget class="QCommandLinkButton" name="btnStopTracker">              <property name="sizePolicy">               <sizepolicy hsizetype="Preferred" vsizetype="Maximum">                <horstretch>0</horstretch> | 
