diff options
| -rw-r--r-- | facetracknoir/clientfiles/FlightGear/readme.txt | 16 | ||||
| -rw-r--r-- | facetracknoir/ftnoir_curves.ui | 2354 | ||||
| -rw-r--r-- | facetracknoir/ftnoir_keyboardshortcuts.ui | 434 | ||||
| -rw-r--r-- | ftnoir_filter_accela/ftnoir_filter_accela.h | 158 | ||||
| -rw-r--r-- | ftnoir_protocol_fg/ftnoir_fgcontrols.ui | 286 | ||||
| -rw-r--r-- | ftnoir_protocol_fsuipc/ftnoir_fsuipccontrols.ui | 268 | ||||
| -rw-r--r-- | ftnoir_protocol_ft/ftnoir_ftcontrols.ui | 446 | ||||
| -rw-r--r-- | ftnoir_protocol_ftn/ftnoir_ftncontrols.ui | 532 | ||||
| -rw-r--r-- | ftnoir_protocol_mouse/ftnoir_mousecontrols.ui | 410 | ||||
| -rw-r--r-- | ftnoir_protocol_sc/ftnoir_sccontrols.ui | 144 | ||||
| -rw-r--r-- | ftnoir_tracker_aruco/trans_calib.cpp | 88 | ||||
| -rw-r--r-- | ftnoir_tracker_aruco/trans_calib.h | 76 | ||||
| -rw-r--r-- | ftnoir_tracker_freepie-udp/freepie-udp-controls.ui | 138 | ||||
| -rw-r--r-- | ftnoir_tracker_udp/ftnoir_ftnclientcontrols.ui | 132 | ||||
| -rw-r--r-- | qxt-mini/plat/qxtglobalshortcut_mac.cpp | 456 | ||||
| -rw-r--r-- | qxt-mini/plat/qxtglobalshortcut_x11.cpp | 470 | ||||
| -rw-r--r-- | qxt-mini/qxtglobalshortcut.cpp | 448 | ||||
| -rw-r--r-- | qxt-mini/qxtglobalshortcut.h | 128 | 
18 files changed, 3492 insertions, 3492 deletions
| diff --git a/facetracknoir/clientfiles/FlightGear/readme.txt b/facetracknoir/clientfiles/FlightGear/readme.txt index 0b3d9dfe..48cee837 100644 --- a/facetracknoir/clientfiles/FlightGear/readme.txt +++ b/facetracknoir/clientfiles/FlightGear/readme.txt @@ -1,8 +1,8 @@ -Copy Protocol/headtracker.xml to fgdata/Protocol/headtracker.xml
 -
 -$ fgfs --generic=socket,in,25,localhost,5542,udp,headtracker
 -
 -Adjust paths as necessary.
 -
 -cheers,
 --sh 20131008
 +Copy Protocol/headtracker.xml to fgdata/Protocol/headtracker.xml + +$ fgfs --generic=socket,in,25,localhost,5542,udp,headtracker + +Adjust paths as necessary. + +cheers, +-sh 20131008 diff --git a/facetracknoir/ftnoir_curves.ui b/facetracknoir/ftnoir_curves.ui index f98bf884..7d6671aa 100644 --- a/facetracknoir/ftnoir_curves.ui +++ b/facetracknoir/ftnoir_curves.ui @@ -1,1177 +1,1177 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICCurveConfigurationDialog</class>
 - <widget class="QWidget" name="UICCurveConfigurationDialog">
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>970</width>
 -    <height>655</height>
 -   </rect>
 -  </property>
 -  <property name="sizePolicy">
 -   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 -    <horstretch>0</horstretch>
 -    <verstretch>0</verstretch>
 -   </sizepolicy>
 -  </property>
 -  <property name="windowTitle">
 -   <string>Mapping properties</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset>
 -    <normaloff>images/facetracknoir.png</normaloff>images/facetracknoir.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="styleSheet">
 -   <string notr="true">background-color: #ccc;</string>
 -  </property>
 -  <layout class="QVBoxLayout" name="verticalLayout">
 -   <item>
 -    <widget class="QTabWidget" name="tabWidget">
 -     <property name="styleSheet">
 -      <string notr="true"/>
 -     </property>
 -     <property name="tabPosition">
 -      <enum>QTabWidget::North</enum>
 -     </property>
 -     <property name="currentIndex">
 -      <number>6</number>
 -     </property>
 -     <widget class="QWidget" name="tabWidgetPage1">
 -      <attribute name="title">
 -       <string>Yaw</string>
 -      </attribute>
 -      <widget class="QFunctionConfigurator" name="rxconfig" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>0</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>180</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>180</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>5</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>255</red>
 -         <green>0</green>
 -         <blue>0</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -      <widget class="QCheckBox" name="rx_altp">
 -       <property name="geometry">
 -        <rect>
 -         <x>10</x>
 -         <y>260</y>
 -         <width>166</width>
 -         <height>21</height>
 -        </rect>
 -       </property>
 -       <property name="text">
 -        <string>Asymmetric mapping below</string>
 -       </property>
 -      </widget>
 -      <widget class="QFunctionConfigurator" name="rxconfig_alt" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>300</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>180</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>180</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>5</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>255</red>
 -         <green>0</green>
 -         <blue>0</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>255</red>
 -         <green>255</green>
 -         <blue>255</blue>
 -        </color>
 -       </property>
 -      </widget>
 -     </widget>
 -     <widget class="QWidget" name="tabWidgetPage2">
 -      <attribute name="title">
 -       <string>Pitch</string>
 -      </attribute>
 -      <widget class="QFunctionConfigurator" name="ryconfig" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>0</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>90</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>90</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>10</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>2</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>0</red>
 -         <green>255</green>
 -         <blue>0</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -      <widget class="QCheckBox" name="ry_altp">
 -       <property name="geometry">
 -        <rect>
 -         <x>10</x>
 -         <y>260</y>
 -         <width>199</width>
 -         <height>21</height>
 -        </rect>
 -       </property>
 -       <property name="text">
 -        <string>Asymmetric mapping below</string>
 -       </property>
 -      </widget>
 -      <widget class="QFunctionConfigurator" name="ryconfig_alt" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>300</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>90</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>90</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>10</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>2</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>0</red>
 -         <green>255</green>
 -         <blue>0</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -     </widget>
 -     <widget class="QWidget" name="tabWidgetPage3">
 -      <attribute name="title">
 -       <string>Roll</string>
 -      </attribute>
 -      <widget class="QFunctionConfigurator" name="rzconfig" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>0</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>180</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>180</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>5</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>1</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>0</red>
 -         <green>0</green>
 -         <blue>255</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -      <widget class="QCheckBox" name="rz_altp">
 -       <property name="geometry">
 -        <rect>
 -         <x>10</x>
 -         <y>260</y>
 -         <width>271</width>
 -         <height>21</height>
 -        </rect>
 -       </property>
 -       <property name="text">
 -        <string>Asymmetric mapping below</string>
 -       </property>
 -      </widget>
 -      <widget class="QFunctionConfigurator" name="rzconfig_alt" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>300</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>180</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>180</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>5</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>1</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>0</red>
 -         <green>0</green>
 -         <blue>255</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -     </widget>
 -     <widget class="QWidget" name="tabWidgetPage4">
 -      <attribute name="title">
 -       <string>X</string>
 -      </attribute>
 -      <widget class="QFunctionConfigurator" name="txconfig" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>0</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>28</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>2</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>255</red>
 -         <green>0</green>
 -         <blue>255</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -      <widget class="QCheckBox" name="tx_altp">
 -       <property name="geometry">
 -        <rect>
 -         <x>10</x>
 -         <y>270</y>
 -         <width>228</width>
 -         <height>21</height>
 -        </rect>
 -       </property>
 -       <property name="text">
 -        <string>Asymmetric mapping below</string>
 -       </property>
 -      </widget>
 -      <widget class="QFunctionConfigurator" name="txconfig_alt" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>300</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>28</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>2</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>255</red>
 -         <green>0</green>
 -         <blue>255</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -     </widget>
 -     <widget class="QWidget" name="tabWidgetPage5">
 -      <attribute name="title">
 -       <string>Y</string>
 -      </attribute>
 -      <widget class="QFunctionConfigurator" name="tyconfig" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>0</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>28</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>2</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>255</red>
 -         <green>255</green>
 -         <blue>0</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -      <widget class="QCheckBox" name="ty_altp">
 -       <property name="geometry">
 -        <rect>
 -         <x>10</x>
 -         <y>270</y>
 -         <width>229</width>
 -         <height>21</height>
 -        </rect>
 -       </property>
 -       <property name="text">
 -        <string>Asymmetric mapping below</string>
 -       </property>
 -      </widget>
 -      <widget class="QFunctionConfigurator" name="tyconfig_alt" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>300</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>28</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>2</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>255</red>
 -         <green>255</green>
 -         <blue>0</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -     </widget>
 -     <widget class="QWidget" name="tabWidgetPage6">
 -      <attribute name="title">
 -       <string>Z</string>
 -      </attribute>
 -      <widget class="QFunctionConfigurator" name="tzconfig" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>0</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>28</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>2</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>0</red>
 -         <green>255</green>
 -         <blue>255</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -      <widget class="QCheckBox" name="tz_altp">
 -       <property name="geometry">
 -        <rect>
 -         <x>10</x>
 -         <y>270</y>
 -         <width>263</width>
 -         <height>21</height>
 -        </rect>
 -       </property>
 -       <property name="text">
 -        <string>Asymmetric mapping below</string>
 -       </property>
 -      </widget>
 -      <widget class="QFunctionConfigurator" name="tzconfig_alt" native="true">
 -       <property name="geometry">
 -        <rect>
 -         <x>0</x>
 -         <y>300</y>
 -         <width>930</width>
 -         <height>260</height>
 -        </rect>
 -       </property>
 -       <property name="maxInputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="maxOutputEGU" stdset="0">
 -        <number>100</number>
 -       </property>
 -       <property name="pixPerEGU_Input" stdset="0">
 -        <number>28</number>
 -       </property>
 -       <property name="pixPerEGU_Output" stdset="0">
 -        <number>2</number>
 -       </property>
 -       <property name="colorBezier" stdset="0">
 -        <color>
 -         <red>0</red>
 -         <green>255</green>
 -         <blue>255</blue>
 -        </color>
 -       </property>
 -       <property name="colorBackground" stdset="0">
 -        <color>
 -         <red>240</red>
 -         <green>240</green>
 -         <blue>240</blue>
 -        </color>
 -       </property>
 -      </widget>
 -     </widget>
 -     <widget class="QWidget" name="tabWidgetPage7">
 -      <attribute name="title">
 -       <string>Options</string>
 -      </attribute>
 -      <layout class="QFormLayout" name="formLayout">
 -       <property name="fieldGrowthPolicy">
 -        <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
 -       </property>
 -       <item row="0" column="0">
 -        <widget class="QGroupBox" name="groupBox">
 -         <property name="title">
 -          <string>Center pose</string>
 -         </property>
 -         <property name="alignment">
 -          <set>Qt::AlignCenter</set>
 -         </property>
 -         <property name="flat">
 -          <bool>true</bool>
 -         </property>
 -         <property name="checkable">
 -          <bool>false</bool>
 -         </property>
 -         <layout class="QGridLayout" name="gridLayout">
 -          <item row="2" column="1">
 -           <widget class="QDoubleSpinBox" name="pos_rz">
 -            <property name="suffix">
 -             <string> deg.</string>
 -            </property>
 -            <property name="decimals">
 -             <number>3</number>
 -            </property>
 -            <property name="minimum">
 -             <double>-180.000000000000000</double>
 -            </property>
 -            <property name="maximum">
 -             <double>180.000000000000000</double>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="2" column="3">
 -           <widget class="QDoubleSpinBox" name="pos_tz">
 -            <property name="suffix">
 -             <string> cm</string>
 -            </property>
 -            <property name="decimals">
 -             <number>3</number>
 -            </property>
 -            <property name="minimum">
 -             <double>-100.000000000000000</double>
 -            </property>
 -            <property name="maximum">
 -             <double>100.000000000000000</double>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="0" column="2">
 -           <widget class="QLabel" name="label_4">
 -            <property name="text">
 -             <string>TX</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="0" column="3">
 -           <widget class="QDoubleSpinBox" name="pos_tx">
 -            <property name="suffix">
 -             <string> cm</string>
 -            </property>
 -            <property name="decimals">
 -             <number>3</number>
 -            </property>
 -            <property name="minimum">
 -             <double>-100.000000000000000</double>
 -            </property>
 -            <property name="maximum">
 -             <double>100.000000000000000</double>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="1" column="0">
 -           <widget class="QLabel" name="label">
 -            <property name="text">
 -             <string>RY</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="1" column="2">
 -           <widget class="QLabel" name="label_5">
 -            <property name="text">
 -             <string>TY</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="1" column="1">
 -           <widget class="QDoubleSpinBox" name="pos_ry">
 -            <property name="suffix">
 -             <string> deg.</string>
 -            </property>
 -            <property name="decimals">
 -             <number>3</number>
 -            </property>
 -            <property name="minimum">
 -             <double>-180.000000000000000</double>
 -            </property>
 -            <property name="maximum">
 -             <double>180.000000000000000</double>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="2" column="2">
 -           <widget class="QLabel" name="label_6">
 -            <property name="text">
 -             <string>TZ</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="2" column="0">
 -           <widget class="QLabel" name="label_3">
 -            <property name="text">
 -             <string>RZ</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="1" column="3">
 -           <widget class="QDoubleSpinBox" name="pos_ty">
 -            <property name="suffix">
 -             <string> cm</string>
 -            </property>
 -            <property name="decimals">
 -             <number>3</number>
 -            </property>
 -            <property name="minimum">
 -             <double>-100.000000000000000</double>
 -            </property>
 -            <property name="maximum">
 -             <double>100.000000000000000</double>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="0" column="0">
 -           <widget class="QLabel" name="label_2">
 -            <property name="text">
 -             <string>RX</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="0" column="1">
 -           <widget class="QDoubleSpinBox" name="pos_rx">
 -            <property name="suffix">
 -             <string> deg.</string>
 -            </property>
 -            <property name="decimals">
 -             <number>3</number>
 -            </property>
 -            <property name="minimum">
 -             <double>-180.000000000000000</double>
 -            </property>
 -            <property name="maximum">
 -             <double>180.000000000000000</double>
 -            </property>
 -           </widget>
 -          </item>
 -         </layout>
 -        </widget>
 -       </item>
 -       <item row="1" column="0">
 -        <widget class="QGroupBox" name="groupBox_4">
 -         <property name="maximumSize">
 -          <size>
 -           <width>65536</width>
 -           <height>65536</height>
 -          </size>
 -         </property>
 -         <property name="font">
 -          <font>
 -           <kerning>true</kerning>
 -          </font>
 -         </property>
 -         <property name="title">
 -          <string>Output remap</string>
 -         </property>
 -         <property name="alignment">
 -          <set>Qt::AlignCenter</set>
 -         </property>
 -         <property name="flat">
 -          <bool>true</bool>
 -         </property>
 -         <property name="checkable">
 -          <bool>false</bool>
 -         </property>
 -         <layout class="QGridLayout" name="gridLayout_4" rowstretch="0,0,0,0,0,0,0" columnstretch="0,0,0">
 -          <property name="sizeConstraint">
 -           <enum>QLayout::SetMinAndMaxSize</enum>
 -          </property>
 -          <property name="spacing">
 -           <number>6</number>
 -          </property>
 -          <item row="4" column="0">
 -           <widget class="QLabel" name="label_10">
 -            <property name="text">
 -             <string>X</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="1" column="0">
 -           <widget class="QLabel" name="label_7">
 -            <property name="text">
 -             <string>Yaw</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="2" column="0">
 -           <widget class="QLabel" name="label_8">
 -            <property name="text">
 -             <string>Pitch</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="5" column="0">
 -           <widget class="QLabel" name="label_11">
 -            <property name="text">
 -             <string>Y</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="6" column="0">
 -           <widget class="QLabel" name="label_12">
 -            <property name="text">
 -             <string>Z</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="3" column="0">
 -           <widget class="QLabel" name="label_9">
 -            <property name="text">
 -             <string>Roll</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="1" column="2">
 -           <widget class="QCheckBox" name="invert_yaw">
 -            <property name="text">
 -             <string/>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="2" column="2">
 -           <widget class="QCheckBox" name="invert_pitch">
 -            <property name="text">
 -             <string/>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="4" column="2">
 -           <widget class="QCheckBox" name="invert_x">
 -            <property name="text">
 -             <string/>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="3" column="2">
 -           <widget class="QCheckBox" name="invert_roll">
 -            <property name="text">
 -             <string/>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="5" column="2">
 -           <widget class="QCheckBox" name="invert_y">
 -            <property name="text">
 -             <string/>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="6" column="2">
 -           <widget class="QCheckBox" name="invert_z">
 -            <property name="text">
 -             <string/>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="1" column="1">
 -           <widget class="QComboBox" name="src_yaw">
 -            <item>
 -             <property name="text">
 -              <string>X</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Y</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Z</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Yaw</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Pitch</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Roll</string>
 -             </property>
 -            </item>
 -           </widget>
 -          </item>
 -          <item row="2" column="1">
 -           <widget class="QComboBox" name="src_pitch">
 -            <item>
 -             <property name="text">
 -              <string>X</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Y</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Z</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Yaw</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Pitch</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Roll</string>
 -             </property>
 -            </item>
 -           </widget>
 -          </item>
 -          <item row="3" column="1">
 -           <widget class="QComboBox" name="src_roll">
 -            <item>
 -             <property name="text">
 -              <string>X</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Y</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Z</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Yaw</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Pitch</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Roll</string>
 -             </property>
 -            </item>
 -           </widget>
 -          </item>
 -          <item row="4" column="1">
 -           <widget class="QComboBox" name="src_x">
 -            <item>
 -             <property name="text">
 -              <string>X</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Y</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Z</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Yaw</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Pitch</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Roll</string>
 -             </property>
 -            </item>
 -           </widget>
 -          </item>
 -          <item row="5" column="1">
 -           <widget class="QComboBox" name="src_y">
 -            <item>
 -             <property name="text">
 -              <string>X</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Y</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Z</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Yaw</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Pitch</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Roll</string>
 -             </property>
 -            </item>
 -           </widget>
 -          </item>
 -          <item row="6" column="1">
 -           <widget class="QComboBox" name="src_z">
 -            <item>
 -             <property name="text">
 -              <string>X</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Y</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Z</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Yaw</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Pitch</string>
 -             </property>
 -            </item>
 -            <item>
 -             <property name="text">
 -              <string>Roll</string>
 -             </property>
 -            </item>
 -           </widget>
 -          </item>
 -          <item row="0" column="1">
 -           <widget class="QLabel" name="label_13">
 -            <property name="text">
 -             <string>Source</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="0" column="2">
 -           <widget class="QLabel" name="label_14">
 -            <property name="text">
 -             <string>Invert</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="0" column="0">
 -           <widget class="QLabel" name="label_15">
 -            <property name="text">
 -             <string>Destination</string>
 -            </property>
 -           </widget>
 -          </item>
 -         </layout>
 -        </widget>
 -       </item>
 -       <item row="0" column="1">
 -        <widget class="QGroupBox" name="groupBox_2">
 -         <property name="sizePolicy">
 -          <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
 -           <horstretch>0</horstretch>
 -           <verstretch>0</verstretch>
 -          </sizepolicy>
 -         </property>
 -         <property name="styleSheet">
 -          <string notr="true"/>
 -         </property>
 -         <property name="title">
 -          <string>Translation compensation</string>
 -         </property>
 -         <property name="flat">
 -          <bool>true</bool>
 -         </property>
 -         <layout class="QFormLayout" name="formLayout_2">
 -          <item row="0" column="0">
 -           <widget class="QCheckBox" name="tcomp_enable">
 -            <property name="sizePolicy">
 -             <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
 -              <horstretch>0</horstretch>
 -              <verstretch>0</verstretch>
 -             </sizepolicy>
 -            </property>
 -            <property name="styleSheet">
 -             <string notr="true"/>
 -            </property>
 -            <property name="text">
 -             <string>Enable</string>
 -            </property>
 -           </widget>
 -          </item>
 -          <item row="1" column="0">
 -           <widget class="QCheckBox" name="tcomp_rz">
 -            <property name="styleSheet">
 -             <string notr="true"/>
 -            </property>
 -            <property name="text">
 -             <string>Disable Z axis compensation</string>
 -            </property>
 -           </widget>
 -          </item>
 -         </layout>
 -        </widget>
 -       </item>
 -      </layout>
 -     </widget>
 -    </widget>
 -   </item>
 -   <item>
 -    <widget class="QDialogButtonBox" name="buttonBox">
 -     <property name="standardButtons">
 -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
 -     </property>
 -    </widget>
 -   </item>
 -  </layout>
 - </widget>
 - <customwidgets>
 -  <customwidget>
 -   <class>QFunctionConfigurator</class>
 -   <extends>QWidget</extends>
 -   <header>qfunctionconfigurator.h</header>
 -  </customwidget>
 - </customwidgets>
 - <tabstops>
 -  <tabstop>pos_rx</tabstop>
 -  <tabstop>pos_ry</tabstop>
 -  <tabstop>pos_rz</tabstop>
 -  <tabstop>ry_altp</tabstop>
 -  <tabstop>rz_altp</tabstop>
 -  <tabstop>tx_altp</tabstop>
 -  <tabstop>ty_altp</tabstop>
 -  <tabstop>tz_altp</tabstop>
 -  <tabstop>tcomp_enable</tabstop>
 -  <tabstop>tabWidget</tabstop>
 -  <tabstop>pos_tx</tabstop>
 -  <tabstop>buttonBox</tabstop>
 -  <tabstop>pos_ty</tabstop>
 -  <tabstop>rx_altp</tabstop>
 -  <tabstop>pos_tz</tabstop>
 - </tabstops>
 - <resources/>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICCurveConfigurationDialog</class> + <widget class="QWidget" name="UICCurveConfigurationDialog"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>970</width> +    <height>655</height> +   </rect> +  </property> +  <property name="sizePolicy"> +   <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +    <horstretch>0</horstretch> +    <verstretch>0</verstretch> +   </sizepolicy> +  </property> +  <property name="windowTitle"> +   <string>Mapping properties</string> +  </property> +  <property name="windowIcon"> +   <iconset> +    <normaloff>images/facetracknoir.png</normaloff>images/facetracknoir.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="styleSheet"> +   <string notr="true">background-color: #ccc;</string> +  </property> +  <layout class="QVBoxLayout" name="verticalLayout"> +   <item> +    <widget class="QTabWidget" name="tabWidget"> +     <property name="styleSheet"> +      <string notr="true"/> +     </property> +     <property name="tabPosition"> +      <enum>QTabWidget::North</enum> +     </property> +     <property name="currentIndex"> +      <number>6</number> +     </property> +     <widget class="QWidget" name="tabWidgetPage1"> +      <attribute name="title"> +       <string>Yaw</string> +      </attribute> +      <widget class="QFunctionConfigurator" name="rxconfig" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>0</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>180</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>180</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>5</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>255</red> +         <green>0</green> +         <blue>0</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +      <widget class="QCheckBox" name="rx_altp"> +       <property name="geometry"> +        <rect> +         <x>10</x> +         <y>260</y> +         <width>166</width> +         <height>21</height> +        </rect> +       </property> +       <property name="text"> +        <string>Asymmetric mapping below</string> +       </property> +      </widget> +      <widget class="QFunctionConfigurator" name="rxconfig_alt" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>300</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>180</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>180</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>5</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>255</red> +         <green>0</green> +         <blue>0</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>255</red> +         <green>255</green> +         <blue>255</blue> +        </color> +       </property> +      </widget> +     </widget> +     <widget class="QWidget" name="tabWidgetPage2"> +      <attribute name="title"> +       <string>Pitch</string> +      </attribute> +      <widget class="QFunctionConfigurator" name="ryconfig" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>0</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>90</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>90</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>10</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>2</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>0</red> +         <green>255</green> +         <blue>0</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +      <widget class="QCheckBox" name="ry_altp"> +       <property name="geometry"> +        <rect> +         <x>10</x> +         <y>260</y> +         <width>199</width> +         <height>21</height> +        </rect> +       </property> +       <property name="text"> +        <string>Asymmetric mapping below</string> +       </property> +      </widget> +      <widget class="QFunctionConfigurator" name="ryconfig_alt" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>300</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>90</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>90</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>10</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>2</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>0</red> +         <green>255</green> +         <blue>0</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +     </widget> +     <widget class="QWidget" name="tabWidgetPage3"> +      <attribute name="title"> +       <string>Roll</string> +      </attribute> +      <widget class="QFunctionConfigurator" name="rzconfig" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>0</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>180</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>180</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>5</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>1</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>0</red> +         <green>0</green> +         <blue>255</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +      <widget class="QCheckBox" name="rz_altp"> +       <property name="geometry"> +        <rect> +         <x>10</x> +         <y>260</y> +         <width>271</width> +         <height>21</height> +        </rect> +       </property> +       <property name="text"> +        <string>Asymmetric mapping below</string> +       </property> +      </widget> +      <widget class="QFunctionConfigurator" name="rzconfig_alt" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>300</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>180</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>180</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>5</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>1</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>0</red> +         <green>0</green> +         <blue>255</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +     </widget> +     <widget class="QWidget" name="tabWidgetPage4"> +      <attribute name="title"> +       <string>X</string> +      </attribute> +      <widget class="QFunctionConfigurator" name="txconfig" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>0</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>28</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>2</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>255</red> +         <green>0</green> +         <blue>255</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +      <widget class="QCheckBox" name="tx_altp"> +       <property name="geometry"> +        <rect> +         <x>10</x> +         <y>270</y> +         <width>228</width> +         <height>21</height> +        </rect> +       </property> +       <property name="text"> +        <string>Asymmetric mapping below</string> +       </property> +      </widget> +      <widget class="QFunctionConfigurator" name="txconfig_alt" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>300</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>28</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>2</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>255</red> +         <green>0</green> +         <blue>255</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +     </widget> +     <widget class="QWidget" name="tabWidgetPage5"> +      <attribute name="title"> +       <string>Y</string> +      </attribute> +      <widget class="QFunctionConfigurator" name="tyconfig" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>0</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>28</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>2</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>255</red> +         <green>255</green> +         <blue>0</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +      <widget class="QCheckBox" name="ty_altp"> +       <property name="geometry"> +        <rect> +         <x>10</x> +         <y>270</y> +         <width>229</width> +         <height>21</height> +        </rect> +       </property> +       <property name="text"> +        <string>Asymmetric mapping below</string> +       </property> +      </widget> +      <widget class="QFunctionConfigurator" name="tyconfig_alt" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>300</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>28</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>2</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>255</red> +         <green>255</green> +         <blue>0</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +     </widget> +     <widget class="QWidget" name="tabWidgetPage6"> +      <attribute name="title"> +       <string>Z</string> +      </attribute> +      <widget class="QFunctionConfigurator" name="tzconfig" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>0</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>28</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>2</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>0</red> +         <green>255</green> +         <blue>255</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +      <widget class="QCheckBox" name="tz_altp"> +       <property name="geometry"> +        <rect> +         <x>10</x> +         <y>270</y> +         <width>263</width> +         <height>21</height> +        </rect> +       </property> +       <property name="text"> +        <string>Asymmetric mapping below</string> +       </property> +      </widget> +      <widget class="QFunctionConfigurator" name="tzconfig_alt" native="true"> +       <property name="geometry"> +        <rect> +         <x>0</x> +         <y>300</y> +         <width>930</width> +         <height>260</height> +        </rect> +       </property> +       <property name="maxInputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="maxOutputEGU" stdset="0"> +        <number>100</number> +       </property> +       <property name="pixPerEGU_Input" stdset="0"> +        <number>28</number> +       </property> +       <property name="pixPerEGU_Output" stdset="0"> +        <number>2</number> +       </property> +       <property name="colorBezier" stdset="0"> +        <color> +         <red>0</red> +         <green>255</green> +         <blue>255</blue> +        </color> +       </property> +       <property name="colorBackground" stdset="0"> +        <color> +         <red>240</red> +         <green>240</green> +         <blue>240</blue> +        </color> +       </property> +      </widget> +     </widget> +     <widget class="QWidget" name="tabWidgetPage7"> +      <attribute name="title"> +       <string>Options</string> +      </attribute> +      <layout class="QFormLayout" name="formLayout"> +       <property name="fieldGrowthPolicy"> +        <enum>QFormLayout::AllNonFixedFieldsGrow</enum> +       </property> +       <item row="0" column="0"> +        <widget class="QGroupBox" name="groupBox"> +         <property name="title"> +          <string>Center pose</string> +         </property> +         <property name="alignment"> +          <set>Qt::AlignCenter</set> +         </property> +         <property name="flat"> +          <bool>true</bool> +         </property> +         <property name="checkable"> +          <bool>false</bool> +         </property> +         <layout class="QGridLayout" name="gridLayout"> +          <item row="2" column="1"> +           <widget class="QDoubleSpinBox" name="pos_rz"> +            <property name="suffix"> +             <string> deg.</string> +            </property> +            <property name="decimals"> +             <number>3</number> +            </property> +            <property name="minimum"> +             <double>-180.000000000000000</double> +            </property> +            <property name="maximum"> +             <double>180.000000000000000</double> +            </property> +           </widget> +          </item> +          <item row="2" column="3"> +           <widget class="QDoubleSpinBox" name="pos_tz"> +            <property name="suffix"> +             <string> cm</string> +            </property> +            <property name="decimals"> +             <number>3</number> +            </property> +            <property name="minimum"> +             <double>-100.000000000000000</double> +            </property> +            <property name="maximum"> +             <double>100.000000000000000</double> +            </property> +           </widget> +          </item> +          <item row="0" column="2"> +           <widget class="QLabel" name="label_4"> +            <property name="text"> +             <string>TX</string> +            </property> +           </widget> +          </item> +          <item row="0" column="3"> +           <widget class="QDoubleSpinBox" name="pos_tx"> +            <property name="suffix"> +             <string> cm</string> +            </property> +            <property name="decimals"> +             <number>3</number> +            </property> +            <property name="minimum"> +             <double>-100.000000000000000</double> +            </property> +            <property name="maximum"> +             <double>100.000000000000000</double> +            </property> +           </widget> +          </item> +          <item row="1" column="0"> +           <widget class="QLabel" name="label"> +            <property name="text"> +             <string>RY</string> +            </property> +           </widget> +          </item> +          <item row="1" column="2"> +           <widget class="QLabel" name="label_5"> +            <property name="text"> +             <string>TY</string> +            </property> +           </widget> +          </item> +          <item row="1" column="1"> +           <widget class="QDoubleSpinBox" name="pos_ry"> +            <property name="suffix"> +             <string> deg.</string> +            </property> +            <property name="decimals"> +             <number>3</number> +            </property> +            <property name="minimum"> +             <double>-180.000000000000000</double> +            </property> +            <property name="maximum"> +             <double>180.000000000000000</double> +            </property> +           </widget> +          </item> +          <item row="2" column="2"> +           <widget class="QLabel" name="label_6"> +            <property name="text"> +             <string>TZ</string> +            </property> +           </widget> +          </item> +          <item row="2" column="0"> +           <widget class="QLabel" name="label_3"> +            <property name="text"> +             <string>RZ</string> +            </property> +           </widget> +          </item> +          <item row="1" column="3"> +           <widget class="QDoubleSpinBox" name="pos_ty"> +            <property name="suffix"> +             <string> cm</string> +            </property> +            <property name="decimals"> +             <number>3</number> +            </property> +            <property name="minimum"> +             <double>-100.000000000000000</double> +            </property> +            <property name="maximum"> +             <double>100.000000000000000</double> +            </property> +           </widget> +          </item> +          <item row="0" column="0"> +           <widget class="QLabel" name="label_2"> +            <property name="text"> +             <string>RX</string> +            </property> +           </widget> +          </item> +          <item row="0" column="1"> +           <widget class="QDoubleSpinBox" name="pos_rx"> +            <property name="suffix"> +             <string> deg.</string> +            </property> +            <property name="decimals"> +             <number>3</number> +            </property> +            <property name="minimum"> +             <double>-180.000000000000000</double> +            </property> +            <property name="maximum"> +             <double>180.000000000000000</double> +            </property> +           </widget> +          </item> +         </layout> +        </widget> +       </item> +       <item row="1" column="0"> +        <widget class="QGroupBox" name="groupBox_4"> +         <property name="maximumSize"> +          <size> +           <width>65536</width> +           <height>65536</height> +          </size> +         </property> +         <property name="font"> +          <font> +           <kerning>true</kerning> +          </font> +         </property> +         <property name="title"> +          <string>Output remap</string> +         </property> +         <property name="alignment"> +          <set>Qt::AlignCenter</set> +         </property> +         <property name="flat"> +          <bool>true</bool> +         </property> +         <property name="checkable"> +          <bool>false</bool> +         </property> +         <layout class="QGridLayout" name="gridLayout_4" rowstretch="0,0,0,0,0,0,0" columnstretch="0,0,0"> +          <property name="sizeConstraint"> +           <enum>QLayout::SetMinAndMaxSize</enum> +          </property> +          <property name="spacing"> +           <number>6</number> +          </property> +          <item row="4" column="0"> +           <widget class="QLabel" name="label_10"> +            <property name="text"> +             <string>X</string> +            </property> +           </widget> +          </item> +          <item row="1" column="0"> +           <widget class="QLabel" name="label_7"> +            <property name="text"> +             <string>Yaw</string> +            </property> +           </widget> +          </item> +          <item row="2" column="0"> +           <widget class="QLabel" name="label_8"> +            <property name="text"> +             <string>Pitch</string> +            </property> +           </widget> +          </item> +          <item row="5" column="0"> +           <widget class="QLabel" name="label_11"> +            <property name="text"> +             <string>Y</string> +            </property> +           </widget> +          </item> +          <item row="6" column="0"> +           <widget class="QLabel" name="label_12"> +            <property name="text"> +             <string>Z</string> +            </property> +           </widget> +          </item> +          <item row="3" column="0"> +           <widget class="QLabel" name="label_9"> +            <property name="text"> +             <string>Roll</string> +            </property> +           </widget> +          </item> +          <item row="1" column="2"> +           <widget class="QCheckBox" name="invert_yaw"> +            <property name="text"> +             <string/> +            </property> +           </widget> +          </item> +          <item row="2" column="2"> +           <widget class="QCheckBox" name="invert_pitch"> +            <property name="text"> +             <string/> +            </property> +           </widget> +          </item> +          <item row="4" column="2"> +           <widget class="QCheckBox" name="invert_x"> +            <property name="text"> +             <string/> +            </property> +           </widget> +          </item> +          <item row="3" column="2"> +           <widget class="QCheckBox" name="invert_roll"> +            <property name="text"> +             <string/> +            </property> +           </widget> +          </item> +          <item row="5" column="2"> +           <widget class="QCheckBox" name="invert_y"> +            <property name="text"> +             <string/> +            </property> +           </widget> +          </item> +          <item row="6" column="2"> +           <widget class="QCheckBox" name="invert_z"> +            <property name="text"> +             <string/> +            </property> +           </widget> +          </item> +          <item row="1" column="1"> +           <widget class="QComboBox" name="src_yaw"> +            <item> +             <property name="text"> +              <string>X</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Y</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Z</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Yaw</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Pitch</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Roll</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="2" column="1"> +           <widget class="QComboBox" name="src_pitch"> +            <item> +             <property name="text"> +              <string>X</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Y</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Z</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Yaw</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Pitch</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Roll</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="3" column="1"> +           <widget class="QComboBox" name="src_roll"> +            <item> +             <property name="text"> +              <string>X</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Y</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Z</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Yaw</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Pitch</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Roll</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="4" column="1"> +           <widget class="QComboBox" name="src_x"> +            <item> +             <property name="text"> +              <string>X</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Y</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Z</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Yaw</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Pitch</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Roll</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="5" column="1"> +           <widget class="QComboBox" name="src_y"> +            <item> +             <property name="text"> +              <string>X</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Y</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Z</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Yaw</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Pitch</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Roll</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="6" column="1"> +           <widget class="QComboBox" name="src_z"> +            <item> +             <property name="text"> +              <string>X</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Y</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Z</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Yaw</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Pitch</string> +             </property> +            </item> +            <item> +             <property name="text"> +              <string>Roll</string> +             </property> +            </item> +           </widget> +          </item> +          <item row="0" column="1"> +           <widget class="QLabel" name="label_13"> +            <property name="text"> +             <string>Source</string> +            </property> +           </widget> +          </item> +          <item row="0" column="2"> +           <widget class="QLabel" name="label_14"> +            <property name="text"> +             <string>Invert</string> +            </property> +           </widget> +          </item> +          <item row="0" column="0"> +           <widget class="QLabel" name="label_15"> +            <property name="text"> +             <string>Destination</string> +            </property> +           </widget> +          </item> +         </layout> +        </widget> +       </item> +       <item row="0" column="1"> +        <widget class="QGroupBox" name="groupBox_2"> +         <property name="sizePolicy"> +          <sizepolicy hsizetype="Maximum" vsizetype="Maximum"> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy> +         </property> +         <property name="styleSheet"> +          <string notr="true"/> +         </property> +         <property name="title"> +          <string>Translation compensation</string> +         </property> +         <property name="flat"> +          <bool>true</bool> +         </property> +         <layout class="QFormLayout" name="formLayout_2"> +          <item row="0" column="0"> +           <widget class="QCheckBox" name="tcomp_enable"> +            <property name="sizePolicy"> +             <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +              <horstretch>0</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property> +            <property name="styleSheet"> +             <string notr="true"/> +            </property> +            <property name="text"> +             <string>Enable</string> +            </property> +           </widget> +          </item> +          <item row="1" column="0"> +           <widget class="QCheckBox" name="tcomp_rz"> +            <property name="styleSheet"> +             <string notr="true"/> +            </property> +            <property name="text"> +             <string>Disable Z axis compensation</string> +            </property> +           </widget> +          </item> +         </layout> +        </widget> +       </item> +      </layout> +     </widget> +    </widget> +   </item> +   <item> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <customwidgets> +  <customwidget> +   <class>QFunctionConfigurator</class> +   <extends>QWidget</extends> +   <header>qfunctionconfigurator.h</header> +  </customwidget> + </customwidgets> + <tabstops> +  <tabstop>pos_rx</tabstop> +  <tabstop>pos_ry</tabstop> +  <tabstop>pos_rz</tabstop> +  <tabstop>ry_altp</tabstop> +  <tabstop>rz_altp</tabstop> +  <tabstop>tx_altp</tabstop> +  <tabstop>ty_altp</tabstop> +  <tabstop>tz_altp</tabstop> +  <tabstop>tcomp_enable</tabstop> +  <tabstop>tabWidget</tabstop> +  <tabstop>pos_tx</tabstop> +  <tabstop>buttonBox</tabstop> +  <tabstop>pos_ty</tabstop> +  <tabstop>rx_altp</tabstop> +  <tabstop>pos_tz</tabstop> + </tabstops> + <resources/> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/facetracknoir/ftnoir_keyboardshortcuts.ui b/facetracknoir/ftnoir_keyboardshortcuts.ui index 5bdc3334..245b503a 100644 --- a/facetracknoir/ftnoir_keyboardshortcuts.ui +++ b/facetracknoir/ftnoir_keyboardshortcuts.ui @@ -1,217 +1,217 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICKeyboardShortcutDialog</class>
 - <widget class="QWidget" name="UICKeyboardShortcutDialog">
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>371</width>
 -    <height>125</height>
 -   </rect>
 -  </property>
 -  <property name="sizePolicy">
 -   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 -    <horstretch>0</horstretch>
 -    <verstretch>0</verstretch>
 -   </sizepolicy>
 -  </property>
 -  <property name="windowTitle">
 -   <string>Keyboard shortcuts</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset>
 -    <normaloff>images/facetracknoir.png</normaloff>images/facetracknoir.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QGridLayout" name="gridLayout">
 -   <item row="2" column="1">
 -    <widget class="QCheckBox" name="chkToggleShift">
 -     <property name="maximumSize">
 -      <size>
 -       <width>50</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>Shift</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="2" column="4">
 -    <widget class="QComboBox" name="cbxToggleKey">
 -     <property name="minimumSize">
 -      <size>
 -       <width>90</width>
 -       <height>0</height>
 -      </size>
 -     </property>
 -     <property name="toolTip">
 -      <string>Select Number</string>
 -     </property>
 -     <property name="insertPolicy">
 -      <enum>QComboBox::InsertAlphabetically</enum>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="2" column="0">
 -    <widget class="QLabel" name="textLabel2_5">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="text">
 -      <string>Toggle</string>
 -     </property>
 -     <property name="wordWrap">
 -      <bool>false</bool>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="3">
 -    <widget class="QCheckBox" name="chkCenterAlt">
 -     <property name="maximumSize">
 -      <size>
 -       <width>50</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>Alt</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="2">
 -    <widget class="QCheckBox" name="chkCenterCtrl">
 -     <property name="maximumSize">
 -      <size>
 -       <width>50</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>Ctrl</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="4">
 -    <widget class="QComboBox" name="cbxCenterKey">
 -     <property name="minimumSize">
 -      <size>
 -       <width>90</width>
 -       <height>0</height>
 -      </size>
 -     </property>
 -     <property name="toolTip">
 -      <string>Select Number</string>
 -     </property>
 -     <property name="insertPolicy">
 -      <enum>QComboBox::InsertAlphabetically</enum>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="4">
 -    <widget class="QLabel" name="textLabel2_4">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="text">
 -      <string>Keyboard</string>
 -     </property>
 -     <property name="alignment">
 -      <set>Qt::AlignCenter</set>
 -     </property>
 -     <property name="wordWrap">
 -      <bool>false</bool>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="4" column="3" colspan="2">
 -    <widget class="QDialogButtonBox" name="buttonBox">
 -     <property name="standardButtons">
 -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="2" column="2">
 -    <widget class="QCheckBox" name="chkToggleCtrl">
 -     <property name="maximumSize">
 -      <size>
 -       <width>50</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>Ctrl</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="0">
 -    <widget class="QLabel" name="textLabel2_3">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="text">
 -      <string>Center</string>
 -     </property>
 -     <property name="wordWrap">
 -      <bool>false</bool>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="2" column="3">
 -    <widget class="QCheckBox" name="chkToggleAlt">
 -     <property name="maximumSize">
 -      <size>
 -       <width>50</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>Alt</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="1">
 -    <widget class="QCheckBox" name="chkCenterShift">
 -     <property name="maximumSize">
 -      <size>
 -       <width>50</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>Shift</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="3" column="0" colspan="2">
 -    <widget class="QCheckBox" name="ding">
 -     <property name="text">
 -      <string>Ding!</string>
 -     </property>
 -    </widget>
 -   </item>
 -  </layout>
 - </widget>
 - <resources/>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICKeyboardShortcutDialog</class> + <widget class="QWidget" name="UICKeyboardShortcutDialog"> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>371</width> +    <height>125</height> +   </rect> +  </property> +  <property name="sizePolicy"> +   <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +    <horstretch>0</horstretch> +    <verstretch>0</verstretch> +   </sizepolicy> +  </property> +  <property name="windowTitle"> +   <string>Keyboard shortcuts</string> +  </property> +  <property name="windowIcon"> +   <iconset> +    <normaloff>images/facetracknoir.png</normaloff>images/facetracknoir.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QGridLayout" name="gridLayout"> +   <item row="2" column="1"> +    <widget class="QCheckBox" name="chkToggleShift"> +     <property name="maximumSize"> +      <size> +       <width>50</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>Shift</string> +     </property> +    </widget> +   </item> +   <item row="2" column="4"> +    <widget class="QComboBox" name="cbxToggleKey"> +     <property name="minimumSize"> +      <size> +       <width>90</width> +       <height>0</height> +      </size> +     </property> +     <property name="toolTip"> +      <string>Select Number</string> +     </property> +     <property name="insertPolicy"> +      <enum>QComboBox::InsertAlphabetically</enum> +     </property> +    </widget> +   </item> +   <item row="2" column="0"> +    <widget class="QLabel" name="textLabel2_5"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="text"> +      <string>Toggle</string> +     </property> +     <property name="wordWrap"> +      <bool>false</bool> +     </property> +    </widget> +   </item> +   <item row="1" column="3"> +    <widget class="QCheckBox" name="chkCenterAlt"> +     <property name="maximumSize"> +      <size> +       <width>50</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>Alt</string> +     </property> +    </widget> +   </item> +   <item row="1" column="2"> +    <widget class="QCheckBox" name="chkCenterCtrl"> +     <property name="maximumSize"> +      <size> +       <width>50</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>Ctrl</string> +     </property> +    </widget> +   </item> +   <item row="1" column="4"> +    <widget class="QComboBox" name="cbxCenterKey"> +     <property name="minimumSize"> +      <size> +       <width>90</width> +       <height>0</height> +      </size> +     </property> +     <property name="toolTip"> +      <string>Select Number</string> +     </property> +     <property name="insertPolicy"> +      <enum>QComboBox::InsertAlphabetically</enum> +     </property> +    </widget> +   </item> +   <item row="0" column="4"> +    <widget class="QLabel" name="textLabel2_4"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="text"> +      <string>Keyboard</string> +     </property> +     <property name="alignment"> +      <set>Qt::AlignCenter</set> +     </property> +     <property name="wordWrap"> +      <bool>false</bool> +     </property> +    </widget> +   </item> +   <item row="4" column="3" colspan="2"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +   <item row="2" column="2"> +    <widget class="QCheckBox" name="chkToggleCtrl"> +     <property name="maximumSize"> +      <size> +       <width>50</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>Ctrl</string> +     </property> +    </widget> +   </item> +   <item row="1" column="0"> +    <widget class="QLabel" name="textLabel2_3"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="text"> +      <string>Center</string> +     </property> +     <property name="wordWrap"> +      <bool>false</bool> +     </property> +    </widget> +   </item> +   <item row="2" column="3"> +    <widget class="QCheckBox" name="chkToggleAlt"> +     <property name="maximumSize"> +      <size> +       <width>50</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>Alt</string> +     </property> +    </widget> +   </item> +   <item row="1" column="1"> +    <widget class="QCheckBox" name="chkCenterShift"> +     <property name="maximumSize"> +      <size> +       <width>50</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>Shift</string> +     </property> +    </widget> +   </item> +   <item row="3" column="0" colspan="2"> +    <widget class="QCheckBox" name="ding"> +     <property name="text"> +      <string>Ding!</string> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources/> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/ftnoir_filter_accela/ftnoir_filter_accela.h b/ftnoir_filter_accela/ftnoir_filter_accela.h index c9a434e7..0a736042 100644 --- a/ftnoir_filter_accela/ftnoir_filter_accela.h +++ b/ftnoir_filter_accela/ftnoir_filter_accela.h @@ -1,79 +1,79 @@ -#pragma once
 -#include "ui_ftnoir_accela_filtercontrols.h"
 -#include "facetracknoir/plugin-api.hpp"
 -#include <QMutex>
 -
 -#define ACCELA_SMOOTHING_ROTATION 60.0
 -#define ACCELA_SMOOTHING_TRANSLATION 40.0
 -#define ACCELA_SECOND_ORDER_ALPHA 100.0
 -#define ACCELA_THIRD_ORDER_ALPHA 180.0
 -
 -#include <facetracknoir/options.h>
 -using namespace options;
 -
 -struct settings {
 -    pbundle b;
 -    value<double> rotation_alpha,
 -                  translation_alpha,
 -                  second_order_alpha,
 -                  third_order_alpha,
 -                  rot_deadzone,
 -                  trans_deadzone,
 -                  expt;
 -    settings() :
 -        b(bundle("Accela")),
 -        rotation_alpha(b, "rotation-alpha", ACCELA_SMOOTHING_ROTATION),
 -        translation_alpha(b, "translation-alpha", ACCELA_SMOOTHING_TRANSLATION),
 -        second_order_alpha(b, "second-order-alpha", ACCELA_SECOND_ORDER_ALPHA),
 -        third_order_alpha(b, "third-order-alpha", ACCELA_THIRD_ORDER_ALPHA),
 -        rot_deadzone(b, "rotation-deadband", 0),
 -        trans_deadzone(b, "translation-deadband", 0),
 -        expt(b, "exponent", 2)
 -    {}
 -};
 -
 -class FTNoIR_Filter : public IFilter
 -{
 -public:
 -	FTNoIR_Filter();
 -    void FilterHeadPoseData(const double* target_camera_position, double *new_camera_position);
 -    void reset() {
 -        first_run = true;
 -    }
 -    void receiveSettings() {
 -        s.b->reload();
 -    }
 -
 -private:
 -    settings s;
 -	bool first_run;
 -    double last_output[3][6];
 -};
 -
 -class FilterControls: public QWidget, public IFilterDialog
 -{
 -    Q_OBJECT
 -public:
 -    FilterControls();
 -    void registerFilter(IFilter* filter);
 -    void unregisterFilter();
 -private:
 -    Ui::AccelaUICFilterControls ui;
 -    void discard();
 -	void save();
 -    FTNoIR_Filter* accela_filter;
 -    settings s;
 -private slots:
 -	void doOK();
 -	void doCancel();
 -};
 -
 -class FTNoIR_FilterDll : public Metadata
 -{
 -public:
 -    void getFullName(QString *strToBeFilled) { *strToBeFilled = QString("Accela Filter Mk4"); }
 -    void getShortName(QString *strToBeFilled) { *strToBeFilled = QString("Accela Mk4"); }
 -    void getDescription(QString *strToBeFilled) { *strToBeFilled = QString("Accela filter Mk4"); }
 -
 -    void getIcon(QIcon *icon){ *icon = QIcon(":/images/filter-16.png");	}
 -};
 +#pragma once +#include "ui_ftnoir_accela_filtercontrols.h" +#include "facetracknoir/plugin-api.hpp" +#include <QMutex> + +#define ACCELA_SMOOTHING_ROTATION 60.0 +#define ACCELA_SMOOTHING_TRANSLATION 40.0 +#define ACCELA_SECOND_ORDER_ALPHA 100.0 +#define ACCELA_THIRD_ORDER_ALPHA 180.0 + +#include <facetracknoir/options.h> +using namespace options; + +struct settings { +    pbundle b; +    value<double> rotation_alpha, +                  translation_alpha, +                  second_order_alpha, +                  third_order_alpha, +                  rot_deadzone, +                  trans_deadzone, +                  expt; +    settings() : +        b(bundle("Accela")), +        rotation_alpha(b, "rotation-alpha", ACCELA_SMOOTHING_ROTATION), +        translation_alpha(b, "translation-alpha", ACCELA_SMOOTHING_TRANSLATION), +        second_order_alpha(b, "second-order-alpha", ACCELA_SECOND_ORDER_ALPHA), +        third_order_alpha(b, "third-order-alpha", ACCELA_THIRD_ORDER_ALPHA), +        rot_deadzone(b, "rotation-deadband", 0), +        trans_deadzone(b, "translation-deadband", 0), +        expt(b, "exponent", 2) +    {} +}; + +class FTNoIR_Filter : public IFilter +{ +public: +	FTNoIR_Filter(); +    void FilterHeadPoseData(const double* target_camera_position, double *new_camera_position); +    void reset() { +        first_run = true; +    } +    void receiveSettings() { +        s.b->reload(); +    } + +private: +    settings s; +	bool first_run; +    double last_output[3][6]; +}; + +class FilterControls: public QWidget, public IFilterDialog +{ +    Q_OBJECT +public: +    FilterControls(); +    void registerFilter(IFilter* filter); +    void unregisterFilter(); +private: +    Ui::AccelaUICFilterControls ui; +    void discard(); +	void save(); +    FTNoIR_Filter* accela_filter; +    settings s; +private slots: +	void doOK(); +	void doCancel(); +}; + +class FTNoIR_FilterDll : public Metadata +{ +public: +    void getFullName(QString *strToBeFilled) { *strToBeFilled = QString("Accela Filter Mk4"); } +    void getShortName(QString *strToBeFilled) { *strToBeFilled = QString("Accela Mk4"); } +    void getDescription(QString *strToBeFilled) { *strToBeFilled = QString("Accela filter Mk4"); } + +    void getIcon(QIcon *icon){ *icon = QIcon(":/images/filter-16.png");	} +}; diff --git a/ftnoir_protocol_fg/ftnoir_fgcontrols.ui b/ftnoir_protocol_fg/ftnoir_fgcontrols.ui index a4092c05..575549d6 100644 --- a/ftnoir_protocol_fg/ftnoir_fgcontrols.ui +++ b/ftnoir_protocol_fg/ftnoir_fgcontrols.ui @@ -1,143 +1,143 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICFGControls</class>
 - <widget class="QWidget" name="UICFGControls">
 -  <property name="windowModality">
 -   <enum>Qt::NonModal</enum>
 -  </property>
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>415</width>
 -    <height>112</height>
 -   </rect>
 -  </property>
 -  <property name="windowTitle">
 -   <string>FlightGear protocol settings</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset resource="../ftnoir_filter_ewma2/ewma-filter.qrc">
 -    <normaloff>:/images/filter-16.png</normaloff>:/images/filter-16.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QGridLayout" name="gridLayout">
 -   <item row="0" column="0">
 -    <widget class="QLabel" name="label_4">
 -     <property name="text">
 -      <string>IP-address remote PC</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="1">
 -    <widget class="QSpinBox" name="spinIPFirstNibble">
 -     <property name="maximumSize">
 -      <size>
 -       <width>60</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="maximum">
 -      <number>255</number>
 -     </property>
 -     <property name="singleStep">
 -      <number>1</number>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="2">
 -    <widget class="QSpinBox" name="spinIPSecondNibble">
 -     <property name="maximumSize">
 -      <size>
 -       <width>60</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="maximum">
 -      <number>255</number>
 -     </property>
 -     <property name="singleStep">
 -      <number>1</number>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="3">
 -    <widget class="QSpinBox" name="spinIPThirdNibble">
 -     <property name="maximumSize">
 -      <size>
 -       <width>60</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="maximum">
 -      <number>255</number>
 -     </property>
 -     <property name="singleStep">
 -      <number>1</number>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="4">
 -    <widget class="QSpinBox" name="spinIPFourthNibble">
 -     <property name="maximumSize">
 -      <size>
 -       <width>60</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="maximum">
 -      <number>255</number>
 -     </property>
 -     <property name="singleStep">
 -      <number>1</number>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="0">
 -    <widget class="QLabel" name="label_5">
 -     <property name="text">
 -      <string>Port-number</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="1">
 -    <widget class="QSpinBox" name="spinPortNumber">
 -     <property name="minimum">
 -      <number>1000</number>
 -     </property>
 -     <property name="maximum">
 -      <number>10000</number>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="2" column="2" colspan="3">
 -    <widget class="QDialogButtonBox" name="buttonBox">
 -     <property name="standardButtons">
 -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
 -     </property>
 -    </widget>
 -   </item>
 -  </layout>
 - </widget>
 - <tabstops>
 -  <tabstop>spinIPFirstNibble</tabstop>
 -  <tabstop>spinIPSecondNibble</tabstop>
 -  <tabstop>spinIPThirdNibble</tabstop>
 -  <tabstop>spinIPFourthNibble</tabstop>
 -  <tabstop>spinPortNumber</tabstop>
 - </tabstops>
 - <resources>
 -  <include location="../ftnoir_filter_ewma2/ewma-filter.qrc"/>
 - </resources>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICFGControls</class> + <widget class="QWidget" name="UICFGControls"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>415</width> +    <height>112</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>FlightGear protocol settings</string> +  </property> +  <property name="windowIcon"> +   <iconset resource="../ftnoir_filter_ewma2/ewma-filter.qrc"> +    <normaloff>:/images/filter-16.png</normaloff>:/images/filter-16.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QGridLayout" name="gridLayout"> +   <item row="0" column="0"> +    <widget class="QLabel" name="label_4"> +     <property name="text"> +      <string>IP-address remote PC</string> +     </property> +    </widget> +   </item> +   <item row="0" column="1"> +    <widget class="QSpinBox" name="spinIPFirstNibble"> +     <property name="maximumSize"> +      <size> +       <width>60</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="maximum"> +      <number>255</number> +     </property> +     <property name="singleStep"> +      <number>1</number> +     </property> +    </widget> +   </item> +   <item row="0" column="2"> +    <widget class="QSpinBox" name="spinIPSecondNibble"> +     <property name="maximumSize"> +      <size> +       <width>60</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="maximum"> +      <number>255</number> +     </property> +     <property name="singleStep"> +      <number>1</number> +     </property> +    </widget> +   </item> +   <item row="0" column="3"> +    <widget class="QSpinBox" name="spinIPThirdNibble"> +     <property name="maximumSize"> +      <size> +       <width>60</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="maximum"> +      <number>255</number> +     </property> +     <property name="singleStep"> +      <number>1</number> +     </property> +    </widget> +   </item> +   <item row="0" column="4"> +    <widget class="QSpinBox" name="spinIPFourthNibble"> +     <property name="maximumSize"> +      <size> +       <width>60</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="maximum"> +      <number>255</number> +     </property> +     <property name="singleStep"> +      <number>1</number> +     </property> +    </widget> +   </item> +   <item row="1" column="0"> +    <widget class="QLabel" name="label_5"> +     <property name="text"> +      <string>Port-number</string> +     </property> +    </widget> +   </item> +   <item row="1" column="1"> +    <widget class="QSpinBox" name="spinPortNumber"> +     <property name="minimum"> +      <number>1000</number> +     </property> +     <property name="maximum"> +      <number>10000</number> +     </property> +    </widget> +   </item> +   <item row="2" column="2" colspan="3"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <tabstops> +  <tabstop>spinIPFirstNibble</tabstop> +  <tabstop>spinIPSecondNibble</tabstop> +  <tabstop>spinIPThirdNibble</tabstop> +  <tabstop>spinIPFourthNibble</tabstop> +  <tabstop>spinPortNumber</tabstop> + </tabstops> + <resources> +  <include location="../ftnoir_filter_ewma2/ewma-filter.qrc"/> + </resources> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/ftnoir_protocol_fsuipc/ftnoir_fsuipccontrols.ui b/ftnoir_protocol_fsuipc/ftnoir_fsuipccontrols.ui index 6cb066bd..637e4dba 100644 --- a/ftnoir_protocol_fsuipc/ftnoir_fsuipccontrols.ui +++ b/ftnoir_protocol_fsuipc/ftnoir_fsuipccontrols.ui @@ -1,134 +1,134 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICFSUIPCControls</class>
 - <widget class="QWidget" name="UICFSUIPCControls">
 -  <property name="windowModality">
 -   <enum>Qt::NonModal</enum>
 -  </property>
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>512</width>
 -    <height>100</height>
 -   </rect>
 -  </property>
 -  <property name="windowTitle">
 -   <string>FSUIPC settings FaceTrackNoIR</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset>
 -    <normaloff>images/FaceTrackNoIR.png</normaloff>images/FaceTrackNoIR.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QGridLayout" name="gridLayout">
 -   <item row="2" column="1">
 -    <widget class="QPushButton" name="btnCancel">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="minimumSize">
 -      <size>
 -       <width>100</width>
 -       <height>0</height>
 -      </size>
 -     </property>
 -     <property name="maximumSize">
 -      <size>
 -       <width>100</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>Cancel</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="0">
 -    <widget class="QLabel" name="txtLocationOfDLL">
 -     <property name="minimumSize">
 -      <size>
 -       <width>230</width>
 -       <height>0</height>
 -      </size>
 -     </property>
 -     <property name="toolTip">
 -      <string>Location of FSUIPC.dll</string>
 -     </property>
 -     <property name="frameShape">
 -      <enum>QFrame::Box</enum>
 -     </property>
 -     <property name="frameShadow">
 -      <enum>QFrame::Sunken</enum>
 -     </property>
 -     <property name="lineWidth">
 -      <number>1</number>
 -     </property>
 -     <property name="text">
 -      <string>Location of FSUIPC.dll</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="0" colspan="2">
 -    <widget class="QLabel" name="label">
 -     <property name="text">
 -      <string>The DLL should be located in the Modules/ directory of MS FS 2004</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="2" column="0">
 -    <widget class="QPushButton" name="btnOK">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="minimumSize">
 -      <size>
 -       <width>100</width>
 -       <height>0</height>
 -      </size>
 -     </property>
 -     <property name="maximumSize">
 -      <size>
 -       <width>100</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>OK</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="1">
 -    <widget class="QPushButton" name="btnFindDLL">
 -     <property name="maximumSize">
 -      <size>
 -       <width>35</width>
 -       <height>16777215</height>
 -      </size>
 -     </property>
 -     <property name="text">
 -      <string>...</string>
 -     </property>
 -    </widget>
 -   </item>
 -  </layout>
 - </widget>
 - <resources/>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICFSUIPCControls</class> + <widget class="QWidget" name="UICFSUIPCControls"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>512</width> +    <height>100</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>FSUIPC settings FaceTrackNoIR</string> +  </property> +  <property name="windowIcon"> +   <iconset> +    <normaloff>images/FaceTrackNoIR.png</normaloff>images/FaceTrackNoIR.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QGridLayout" name="gridLayout"> +   <item row="2" column="1"> +    <widget class="QPushButton" name="btnCancel"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="minimumSize"> +      <size> +       <width>100</width> +       <height>0</height> +      </size> +     </property> +     <property name="maximumSize"> +      <size> +       <width>100</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>Cancel</string> +     </property> +    </widget> +   </item> +   <item row="0" column="0"> +    <widget class="QLabel" name="txtLocationOfDLL"> +     <property name="minimumSize"> +      <size> +       <width>230</width> +       <height>0</height> +      </size> +     </property> +     <property name="toolTip"> +      <string>Location of FSUIPC.dll</string> +     </property> +     <property name="frameShape"> +      <enum>QFrame::Box</enum> +     </property> +     <property name="frameShadow"> +      <enum>QFrame::Sunken</enum> +     </property> +     <property name="lineWidth"> +      <number>1</number> +     </property> +     <property name="text"> +      <string>Location of FSUIPC.dll</string> +     </property> +    </widget> +   </item> +   <item row="1" column="0" colspan="2"> +    <widget class="QLabel" name="label"> +     <property name="text"> +      <string>The DLL should be located in the Modules/ directory of MS FS 2004</string> +     </property> +    </widget> +   </item> +   <item row="2" column="0"> +    <widget class="QPushButton" name="btnOK"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="minimumSize"> +      <size> +       <width>100</width> +       <height>0</height> +      </size> +     </property> +     <property name="maximumSize"> +      <size> +       <width>100</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>OK</string> +     </property> +    </widget> +   </item> +   <item row="0" column="1"> +    <widget class="QPushButton" name="btnFindDLL"> +     <property name="maximumSize"> +      <size> +       <width>35</width> +       <height>16777215</height> +      </size> +     </property> +     <property name="text"> +      <string>...</string> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources/> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/ftnoir_protocol_ft/ftnoir_ftcontrols.ui b/ftnoir_protocol_ft/ftnoir_ftcontrols.ui index 941aaff0..554e681a 100644 --- a/ftnoir_protocol_ft/ftnoir_ftcontrols.ui +++ b/ftnoir_protocol_ft/ftnoir_ftcontrols.ui @@ -1,223 +1,223 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICFTControls</class>
 - <widget class="QWidget" name="UICFTControls">
 -  <property name="windowModality">
 -   <enum>Qt::NonModal</enum>
 -  </property>
 -  <property name="enabled">
 -   <bool>true</bool>
 -  </property>
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>489</width>
 -    <height>402</height>
 -   </rect>
 -  </property>
 -  <property name="sizePolicy">
 -   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
 -    <horstretch>0</horstretch>
 -    <verstretch>0</verstretch>
 -   </sizepolicy>
 -  </property>
 -  <property name="minimumSize">
 -   <size>
 -    <width>0</width>
 -    <height>0</height>
 -   </size>
 -  </property>
 -  <property name="windowTitle">
 -   <string>freetrack protocol settings</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset resource="ft-protocol.qrc">
 -    <normaloff>:/images/freetrack.png</normaloff>:/images/freetrack.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QGridLayout" name="gridLayout_2">
 -   <item row="0" column="0">
 -    <widget class="QGroupBox" name="groupBox">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="title">
 -      <string>TIRViews</string>
 -     </property>
 -     <property name="alignment">
 -      <set>Qt::AlignJustify|Qt::AlignTop</set>
 -     </property>
 -     <property name="flat">
 -      <bool>false</bool>
 -     </property>
 -     <layout class="QFormLayout" name="formLayout_2">
 -      <item row="0" column="0">
 -       <widget class="QCheckBox" name="chkTIRViews">
 -        <property name="layoutDirection">
 -         <enum>Qt::RightToLeft</enum>
 -        </property>
 -        <property name="text">
 -         <string>Memory hacks</string>
 -        </property>
 -       </widget>
 -      </item>
 -      <item row="0" column="1">
 -       <widget class="QLabel" name="label_2">
 -        <property name="text">
 -         <string>Only for very old and buggy old games such as CFS3.</string>
 -        </property>
 -        <property name="scaledContents">
 -         <bool>false</bool>
 -        </property>
 -        <property name="alignment">
 -         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
 -        </property>
 -        <property name="wordWrap">
 -         <bool>true</bool>
 -        </property>
 -       </widget>
 -      </item>
 -     </layout>
 -    </widget>
 -   </item>
 -   <item row="1" column="0">
 -    <widget class="QGroupBox" name="groupBox_2">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="title">
 -      <string>TrackIR.exe</string>
 -     </property>
 -     <property name="alignment">
 -      <set>Qt::AlignJustify|Qt::AlignTop</set>
 -     </property>
 -     <property name="flat">
 -      <bool>false</bool>
 -     </property>
 -     <layout class="QFormLayout" name="formLayout_3">
 -      <item row="0" column="0">
 -       <widget class="QCheckBox" name="chkStartDummy">
 -        <property name="layoutDirection">
 -         <enum>Qt::RightToLeft</enum>
 -        </property>
 -        <property name="text">
 -         <string>Using EZCA</string>
 -        </property>
 -       </widget>
 -      </item>
 -      <item row="0" column="1">
 -       <widget class="QLabel" name="label">
 -        <property name="text">
 -         <string>FSX-specific EZCA protocol hacks</string>
 -        </property>
 -        <property name="wordWrap">
 -         <bool>true</bool>
 -        </property>
 -       </widget>
 -      </item>
 -     </layout>
 -    </widget>
 -   </item>
 -   <item row="2" column="0">
 -    <widget class="QGroupBox" name="groupBox_3">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="title">
 -      <string>Select interface</string>
 -     </property>
 -     <property name="alignment">
 -      <set>Qt::AlignJustify|Qt::AlignTop</set>
 -     </property>
 -     <property name="flat">
 -      <bool>false</bool>
 -     </property>
 -     <layout class="QGridLayout" name="gridLayout_3">
 -      <item row="0" column="0">
 -       <widget class="QComboBox" name="cbxSelectInterface"/>
 -      </item>
 -      <item row="0" column="1">
 -       <widget class="QLabel" name="label_8">
 -        <property name="text">
 -         <string>Disable one of the protocols if game is confused by presence of both at the same time.</string>
 -        </property>
 -        <property name="wordWrap">
 -         <bool>true</bool>
 -        </property>
 -       </widget>
 -      </item>
 -     </layout>
 -    </widget>
 -   </item>
 -   <item row="3" column="0">
 -    <widget class="QGroupBox" name="groupBox_4">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="title">
 -      <string>Repair NPClient location</string>
 -     </property>
 -     <property name="alignment">
 -      <set>Qt::AlignJustify|Qt::AlignTop</set>
 -     </property>
 -     <property name="flat">
 -      <bool>false</bool>
 -     </property>
 -     <layout class="QGridLayout" name="gridLayout">
 -      <item row="0" column="0">
 -       <widget class="QPushButton" name="bntLocateNPClient">
 -        <property name="text">
 -         <string>Locate DLL</string>
 -        </property>
 -       </widget>
 -      </item>
 -      <item row="0" column="1">
 -       <widget class="QLabel" name="label_10">
 -        <property name="text">
 -         <string>Replace the registry entry if you want to use other software with the NPClient protocol and it doesn't work automatically.</string>
 -        </property>
 -        <property name="wordWrap">
 -         <bool>true</bool>
 -        </property>
 -       </widget>
 -      </item>
 -     </layout>
 -    </widget>
 -   </item>
 -   <item row="4" column="0">
 -    <widget class="QDialogButtonBox" name="buttonBox">
 -     <property name="standardButtons">
 -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
 -     </property>
 -    </widget>
 -   </item>
 -  </layout>
 - </widget>
 - <resources>
 -  <include location="ft-protocol.qrc"/>
 - </resources>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICFTControls</class> + <widget class="QWidget" name="UICFTControls"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="enabled"> +   <bool>true</bool> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>489</width> +    <height>402</height> +   </rect> +  </property> +  <property name="sizePolicy"> +   <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +    <horstretch>0</horstretch> +    <verstretch>0</verstretch> +   </sizepolicy> +  </property> +  <property name="minimumSize"> +   <size> +    <width>0</width> +    <height>0</height> +   </size> +  </property> +  <property name="windowTitle"> +   <string>freetrack protocol settings</string> +  </property> +  <property name="windowIcon"> +   <iconset resource="ft-protocol.qrc"> +    <normaloff>:/images/freetrack.png</normaloff>:/images/freetrack.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QGridLayout" name="gridLayout_2"> +   <item row="0" column="0"> +    <widget class="QGroupBox" name="groupBox"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="title"> +      <string>TIRViews</string> +     </property> +     <property name="alignment"> +      <set>Qt::AlignJustify|Qt::AlignTop</set> +     </property> +     <property name="flat"> +      <bool>false</bool> +     </property> +     <layout class="QFormLayout" name="formLayout_2"> +      <item row="0" column="0"> +       <widget class="QCheckBox" name="chkTIRViews"> +        <property name="layoutDirection"> +         <enum>Qt::RightToLeft</enum> +        </property> +        <property name="text"> +         <string>Memory hacks</string> +        </property> +       </widget> +      </item> +      <item row="0" column="1"> +       <widget class="QLabel" name="label_2"> +        <property name="text"> +         <string>Only for very old and buggy old games such as CFS3.</string> +        </property> +        <property name="scaledContents"> +         <bool>false</bool> +        </property> +        <property name="alignment"> +         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set> +        </property> +        <property name="wordWrap"> +         <bool>true</bool> +        </property> +       </widget> +      </item> +     </layout> +    </widget> +   </item> +   <item row="1" column="0"> +    <widget class="QGroupBox" name="groupBox_2"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="title"> +      <string>TrackIR.exe</string> +     </property> +     <property name="alignment"> +      <set>Qt::AlignJustify|Qt::AlignTop</set> +     </property> +     <property name="flat"> +      <bool>false</bool> +     </property> +     <layout class="QFormLayout" name="formLayout_3"> +      <item row="0" column="0"> +       <widget class="QCheckBox" name="chkStartDummy"> +        <property name="layoutDirection"> +         <enum>Qt::RightToLeft</enum> +        </property> +        <property name="text"> +         <string>Using EZCA</string> +        </property> +       </widget> +      </item> +      <item row="0" column="1"> +       <widget class="QLabel" name="label"> +        <property name="text"> +         <string>FSX-specific EZCA protocol hacks</string> +        </property> +        <property name="wordWrap"> +         <bool>true</bool> +        </property> +       </widget> +      </item> +     </layout> +    </widget> +   </item> +   <item row="2" column="0"> +    <widget class="QGroupBox" name="groupBox_3"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="title"> +      <string>Select interface</string> +     </property> +     <property name="alignment"> +      <set>Qt::AlignJustify|Qt::AlignTop</set> +     </property> +     <property name="flat"> +      <bool>false</bool> +     </property> +     <layout class="QGridLayout" name="gridLayout_3"> +      <item row="0" column="0"> +       <widget class="QComboBox" name="cbxSelectInterface"/> +      </item> +      <item row="0" column="1"> +       <widget class="QLabel" name="label_8"> +        <property name="text"> +         <string>Disable one of the protocols if game is confused by presence of both at the same time.</string> +        </property> +        <property name="wordWrap"> +         <bool>true</bool> +        </property> +       </widget> +      </item> +     </layout> +    </widget> +   </item> +   <item row="3" column="0"> +    <widget class="QGroupBox" name="groupBox_4"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="title"> +      <string>Repair NPClient location</string> +     </property> +     <property name="alignment"> +      <set>Qt::AlignJustify|Qt::AlignTop</set> +     </property> +     <property name="flat"> +      <bool>false</bool> +     </property> +     <layout class="QGridLayout" name="gridLayout"> +      <item row="0" column="0"> +       <widget class="QPushButton" name="bntLocateNPClient"> +        <property name="text"> +         <string>Locate DLL</string> +        </property> +       </widget> +      </item> +      <item row="0" column="1"> +       <widget class="QLabel" name="label_10"> +        <property name="text"> +         <string>Replace the registry entry if you want to use other software with the NPClient protocol and it doesn't work automatically.</string> +        </property> +        <property name="wordWrap"> +         <bool>true</bool> +        </property> +       </widget> +      </item> +     </layout> +    </widget> +   </item> +   <item row="4" column="0"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources> +  <include location="ft-protocol.qrc"/> + </resources> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/ftnoir_protocol_ftn/ftnoir_ftncontrols.ui b/ftnoir_protocol_ftn/ftnoir_ftncontrols.ui index 48679f3c..ca811e99 100644 --- a/ftnoir_protocol_ftn/ftnoir_ftncontrols.ui +++ b/ftnoir_protocol_ftn/ftnoir_ftncontrols.ui @@ -1,266 +1,266 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICFTNControls</class>
 - <widget class="QWidget" name="UICFTNControls">
 -  <property name="windowModality">
 -   <enum>Qt::NonModal</enum>
 -  </property>
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>411</width>
 -    <height>169</height>
 -   </rect>
 -  </property>
 -  <property name="windowTitle">
 -   <string>UDP protocol settings</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset resource="../facetracknoir/main-facetracknoir.qrc">
 -    <normaloff>:/images/facetracknoir.png</normaloff>:/images/facetracknoir.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QVBoxLayout" name="_vertical_layout">
 -   <item>
 -    <layout class="QGridLayout" name="gridLayout">
 -     <item row="1" column="4">
 -      <widget class="QSpinBox" name="spinIPFourthNibble">
 -       <property name="maximumSize">
 -        <size>
 -         <width>60</width>
 -         <height>16777215</height>
 -        </size>
 -       </property>
 -       <property name="maximum">
 -        <number>255</number>
 -       </property>
 -       <property name="singleStep">
 -        <number>1</number>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="1">
 -      <widget class="QSpinBox" name="spinIPFirstNibble">
 -       <property name="maximumSize">
 -        <size>
 -         <width>60</width>
 -         <height>16777215</height>
 -        </size>
 -       </property>
 -       <property name="maximum">
 -        <number>255</number>
 -       </property>
 -       <property name="singleStep">
 -        <number>1</number>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="2">
 -      <widget class="QSpinBox" name="spinIPSecondNibble">
 -       <property name="maximumSize">
 -        <size>
 -         <width>60</width>
 -         <height>16777215</height>
 -        </size>
 -       </property>
 -       <property name="maximum">
 -        <number>255</number>
 -       </property>
 -       <property name="singleStep">
 -        <number>1</number>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="3">
 -      <widget class="QSpinBox" name="spinIPThirdNibble">
 -       <property name="maximumSize">
 -        <size>
 -         <width>60</width>
 -         <height>16777215</height>
 -        </size>
 -       </property>
 -       <property name="maximum">
 -        <number>255</number>
 -       </property>
 -       <property name="singleStep">
 -        <number>1</number>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="0">
 -      <widget class="QLabel" name="label_4">
 -       <property name="text">
 -        <string>IP-address remote PC</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="0">
 -      <widget class="QLabel" name="label_5">
 -       <property name="text">
 -        <string>Port-number</string>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="2" column="1">
 -      <widget class="QSpinBox" name="spinPortNumber">
 -       <property name="minimum">
 -        <number>1000</number>
 -       </property>
 -       <property name="maximum">
 -        <number>10000</number>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </item>
 -   <item>
 -    <spacer name="verticalSpacer">
 -     <property name="orientation">
 -      <enum>Qt::Vertical</enum>
 -     </property>
 -     <property name="sizeHint" stdset="0">
 -      <size>
 -       <width>20</width>
 -       <height>40</height>
 -      </size>
 -     </property>
 -    </spacer>
 -   </item>
 -   <item>
 -    <layout class="QVBoxLayout" name="verticalLayout">
 -     <item>
 -      <widget class="QLabel" name="label">
 -       <property name="text">
 -        <string>Enter IP-address and port-number for the remote PC.</string>
 -       </property>
 -       <property name="wordWrap">
 -        <bool>true</bool>
 -       </property>
 -      </widget>
 -     </item>
 -     <item>
 -      <widget class="QLabel" name="label_3">
 -       <property name="text">
 -        <string>Remember: you may have to change firewall-settings too!</string>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </item>
 -   <item>
 -    <layout class="QHBoxLayout" name="horizontalLayout">
 -     <item>
 -      <spacer name="horizontalSpacer_2">
 -       <property name="orientation">
 -        <enum>Qt::Horizontal</enum>
 -       </property>
 -       <property name="sizeHint" stdset="0">
 -        <size>
 -         <width>40</width>
 -         <height>20</height>
 -        </size>
 -       </property>
 -      </spacer>
 -     </item>
 -     <item>
 -      <layout class="QHBoxLayout" name="horizontalLayout_2">
 -       <property name="sizeConstraint">
 -        <enum>QLayout::SetDefaultConstraint</enum>
 -       </property>
 -       <item>
 -        <widget class="QPushButton" name="btnOK">
 -         <property name="sizePolicy">
 -          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
 -           <horstretch>0</horstretch>
 -           <verstretch>0</verstretch>
 -          </sizepolicy>
 -         </property>
 -         <property name="minimumSize">
 -          <size>
 -           <width>100</width>
 -           <height>0</height>
 -          </size>
 -         </property>
 -         <property name="maximumSize">
 -          <size>
 -           <width>100</width>
 -           <height>16777215</height>
 -          </size>
 -         </property>
 -         <property name="text">
 -          <string>OK</string>
 -         </property>
 -        </widget>
 -       </item>
 -       <item>
 -        <widget class="QPushButton" name="btnCancel">
 -         <property name="sizePolicy">
 -          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
 -           <horstretch>0</horstretch>
 -           <verstretch>0</verstretch>
 -          </sizepolicy>
 -         </property>
 -         <property name="minimumSize">
 -          <size>
 -           <width>100</width>
 -           <height>0</height>
 -          </size>
 -         </property>
 -         <property name="maximumSize">
 -          <size>
 -           <width>100</width>
 -           <height>16777215</height>
 -          </size>
 -         </property>
 -         <property name="text">
 -          <string>Cancel</string>
 -         </property>
 -        </widget>
 -       </item>
 -      </layout>
 -     </item>
 -     <item>
 -      <spacer name="horizontalSpacer">
 -       <property name="orientation">
 -        <enum>Qt::Horizontal</enum>
 -       </property>
 -       <property name="sizeType">
 -        <enum>QSizePolicy::Fixed</enum>
 -       </property>
 -       <property name="sizeHint" stdset="0">
 -        <size>
 -         <width>10</width>
 -         <height>20</height>
 -        </size>
 -       </property>
 -      </spacer>
 -     </item>
 -    </layout>
 -   </item>
 -  </layout>
 - </widget>
 - <tabstops>
 -  <tabstop>spinIPFirstNibble</tabstop>
 -  <tabstop>spinIPSecondNibble</tabstop>
 -  <tabstop>spinIPThirdNibble</tabstop>
 -  <tabstop>spinIPFourthNibble</tabstop>
 -  <tabstop>spinPortNumber</tabstop>
 -  <tabstop>btnOK</tabstop>
 -  <tabstop>btnCancel</tabstop>
 - </tabstops>
 - <resources>
 -  <include location="../facetracknoir/main-facetracknoir.qrc"/>
 - </resources>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICFTNControls</class> + <widget class="QWidget" name="UICFTNControls"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>411</width> +    <height>169</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>UDP protocol settings</string> +  </property> +  <property name="windowIcon"> +   <iconset resource="../facetracknoir/main-facetracknoir.qrc"> +    <normaloff>:/images/facetracknoir.png</normaloff>:/images/facetracknoir.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QVBoxLayout" name="_vertical_layout"> +   <item> +    <layout class="QGridLayout" name="gridLayout"> +     <item row="1" column="4"> +      <widget class="QSpinBox" name="spinIPFourthNibble"> +       <property name="maximumSize"> +        <size> +         <width>60</width> +         <height>16777215</height> +        </size> +       </property> +       <property name="maximum"> +        <number>255</number> +       </property> +       <property name="singleStep"> +        <number>1</number> +       </property> +      </widget> +     </item> +     <item row="1" column="1"> +      <widget class="QSpinBox" name="spinIPFirstNibble"> +       <property name="maximumSize"> +        <size> +         <width>60</width> +         <height>16777215</height> +        </size> +       </property> +       <property name="maximum"> +        <number>255</number> +       </property> +       <property name="singleStep"> +        <number>1</number> +       </property> +      </widget> +     </item> +     <item row="1" column="2"> +      <widget class="QSpinBox" name="spinIPSecondNibble"> +       <property name="maximumSize"> +        <size> +         <width>60</width> +         <height>16777215</height> +        </size> +       </property> +       <property name="maximum"> +        <number>255</number> +       </property> +       <property name="singleStep"> +        <number>1</number> +       </property> +      </widget> +     </item> +     <item row="1" column="3"> +      <widget class="QSpinBox" name="spinIPThirdNibble"> +       <property name="maximumSize"> +        <size> +         <width>60</width> +         <height>16777215</height> +        </size> +       </property> +       <property name="maximum"> +        <number>255</number> +       </property> +       <property name="singleStep"> +        <number>1</number> +       </property> +      </widget> +     </item> +     <item row="1" column="0"> +      <widget class="QLabel" name="label_4"> +       <property name="text"> +        <string>IP-address remote PC</string> +       </property> +      </widget> +     </item> +     <item row="2" column="0"> +      <widget class="QLabel" name="label_5"> +       <property name="text"> +        <string>Port-number</string> +       </property> +      </widget> +     </item> +     <item row="2" column="1"> +      <widget class="QSpinBox" name="spinPortNumber"> +       <property name="minimum"> +        <number>1000</number> +       </property> +       <property name="maximum"> +        <number>10000</number> +       </property> +      </widget> +     </item> +    </layout> +   </item> +   <item> +    <spacer name="verticalSpacer"> +     <property name="orientation"> +      <enum>Qt::Vertical</enum> +     </property> +     <property name="sizeHint" stdset="0"> +      <size> +       <width>20</width> +       <height>40</height> +      </size> +     </property> +    </spacer> +   </item> +   <item> +    <layout class="QVBoxLayout" name="verticalLayout"> +     <item> +      <widget class="QLabel" name="label"> +       <property name="text"> +        <string>Enter IP-address and port-number for the remote PC.</string> +       </property> +       <property name="wordWrap"> +        <bool>true</bool> +       </property> +      </widget> +     </item> +     <item> +      <widget class="QLabel" name="label_3"> +       <property name="text"> +        <string>Remember: you may have to change firewall-settings too!</string> +       </property> +      </widget> +     </item> +    </layout> +   </item> +   <item> +    <layout class="QHBoxLayout" name="horizontalLayout"> +     <item> +      <spacer name="horizontalSpacer_2"> +       <property name="orientation"> +        <enum>Qt::Horizontal</enum> +       </property> +       <property name="sizeHint" stdset="0"> +        <size> +         <width>40</width> +         <height>20</height> +        </size> +       </property> +      </spacer> +     </item> +     <item> +      <layout class="QHBoxLayout" name="horizontalLayout_2"> +       <property name="sizeConstraint"> +        <enum>QLayout::SetDefaultConstraint</enum> +       </property> +       <item> +        <widget class="QPushButton" name="btnOK"> +         <property name="sizePolicy"> +          <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy> +         </property> +         <property name="minimumSize"> +          <size> +           <width>100</width> +           <height>0</height> +          </size> +         </property> +         <property name="maximumSize"> +          <size> +           <width>100</width> +           <height>16777215</height> +          </size> +         </property> +         <property name="text"> +          <string>OK</string> +         </property> +        </widget> +       </item> +       <item> +        <widget class="QPushButton" name="btnCancel"> +         <property name="sizePolicy"> +          <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy> +         </property> +         <property name="minimumSize"> +          <size> +           <width>100</width> +           <height>0</height> +          </size> +         </property> +         <property name="maximumSize"> +          <size> +           <width>100</width> +           <height>16777215</height> +          </size> +         </property> +         <property name="text"> +          <string>Cancel</string> +         </property> +        </widget> +       </item> +      </layout> +     </item> +     <item> +      <spacer name="horizontalSpacer"> +       <property name="orientation"> +        <enum>Qt::Horizontal</enum> +       </property> +       <property name="sizeType"> +        <enum>QSizePolicy::Fixed</enum> +       </property> +       <property name="sizeHint" stdset="0"> +        <size> +         <width>10</width> +         <height>20</height> +        </size> +       </property> +      </spacer> +     </item> +    </layout> +   </item> +  </layout> + </widget> + <tabstops> +  <tabstop>spinIPFirstNibble</tabstop> +  <tabstop>spinIPSecondNibble</tabstop> +  <tabstop>spinIPThirdNibble</tabstop> +  <tabstop>spinIPFourthNibble</tabstop> +  <tabstop>spinPortNumber</tabstop> +  <tabstop>btnOK</tabstop> +  <tabstop>btnCancel</tabstop> + </tabstops> + <resources> +  <include location="../facetracknoir/main-facetracknoir.qrc"/> + </resources> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/ftnoir_protocol_mouse/ftnoir_mousecontrols.ui b/ftnoir_protocol_mouse/ftnoir_mousecontrols.ui index 2705fff7..258ed06a 100644 --- a/ftnoir_protocol_mouse/ftnoir_mousecontrols.ui +++ b/ftnoir_protocol_mouse/ftnoir_mousecontrols.ui @@ -1,205 +1,205 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICMOUSEControls</class>
 - <widget class="QWidget" name="UICMOUSEControls">
 -  <property name="windowModality">
 -   <enum>Qt::NonModal</enum>
 -  </property>
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>257</width>
 -    <height>114</height>
 -   </rect>
 -  </property>
 -  <property name="windowTitle">
 -   <string>Mouse protocol settings</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset resource="win32-mouse-protocol.qrc">
 -    <normaloff>:/images/mouse.png</normaloff>:/images/mouse.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QVBoxLayout" name="_vertical_layout">
 -   <item>
 -    <layout class="QGridLayout" name="gridLayout">
 -     <item row="1" column="1">
 -      <widget class="QComboBox" name="cbxSelectMouse_Y">
 -       <property name="maximumSize">
 -        <size>
 -         <width>80</width>
 -         <height>16777215</height>
 -        </size>
 -       </property>
 -       <property name="toolTip">
 -        <string>Select Number</string>
 -       </property>
 -       <property name="insertPolicy">
 -        <enum>QComboBox::InsertAlphabetically</enum>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="1" column="0">
 -      <widget class="QLabel" name="textLabel2_3">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Map mouse Y to:</string>
 -       </property>
 -       <property name="alignment">
 -        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 -       </property>
 -       <property name="wordWrap">
 -        <bool>false</bool>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="0">
 -      <widget class="QLabel" name="textLabel2_2">
 -       <property name="sizePolicy">
 -        <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
 -         <horstretch>0</horstretch>
 -         <verstretch>0</verstretch>
 -        </sizepolicy>
 -       </property>
 -       <property name="text">
 -        <string>Map mouse X to:</string>
 -       </property>
 -       <property name="alignment">
 -        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
 -       </property>
 -       <property name="wordWrap">
 -        <bool>false</bool>
 -       </property>
 -      </widget>
 -     </item>
 -     <item row="0" column="1">
 -      <widget class="QComboBox" name="cbxSelectMouse_X">
 -       <property name="maximumSize">
 -        <size>
 -         <width>80</width>
 -         <height>16777215</height>
 -        </size>
 -       </property>
 -       <property name="toolTip">
 -        <string>Select Number</string>
 -       </property>
 -       <property name="insertPolicy">
 -        <enum>QComboBox::InsertAlphabetically</enum>
 -       </property>
 -      </widget>
 -     </item>
 -    </layout>
 -   </item>
 -   <item>
 -    <layout class="QHBoxLayout" name="horizontalLayout">
 -     <item>
 -      <spacer name="horizontalSpacer_2">
 -       <property name="orientation">
 -        <enum>Qt::Horizontal</enum>
 -       </property>
 -       <property name="sizeHint" stdset="0">
 -        <size>
 -         <width>40</width>
 -         <height>20</height>
 -        </size>
 -       </property>
 -      </spacer>
 -     </item>
 -     <item>
 -      <layout class="QHBoxLayout" name="horizontalLayout_2">
 -       <property name="sizeConstraint">
 -        <enum>QLayout::SetDefaultConstraint</enum>
 -       </property>
 -       <item>
 -        <widget class="QPushButton" name="btnOK">
 -         <property name="sizePolicy">
 -          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
 -           <horstretch>0</horstretch>
 -           <verstretch>0</verstretch>
 -          </sizepolicy>
 -         </property>
 -         <property name="minimumSize">
 -          <size>
 -           <width>100</width>
 -           <height>0</height>
 -          </size>
 -         </property>
 -         <property name="maximumSize">
 -          <size>
 -           <width>100</width>
 -           <height>16777215</height>
 -          </size>
 -         </property>
 -         <property name="text">
 -          <string>OK</string>
 -         </property>
 -        </widget>
 -       </item>
 -       <item>
 -        <widget class="QPushButton" name="btnCancel">
 -         <property name="sizePolicy">
 -          <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
 -           <horstretch>0</horstretch>
 -           <verstretch>0</verstretch>
 -          </sizepolicy>
 -         </property>
 -         <property name="minimumSize">
 -          <size>
 -           <width>100</width>
 -           <height>0</height>
 -          </size>
 -         </property>
 -         <property name="maximumSize">
 -          <size>
 -           <width>100</width>
 -           <height>16777215</height>
 -          </size>
 -         </property>
 -         <property name="text">
 -          <string>Cancel</string>
 -         </property>
 -        </widget>
 -       </item>
 -      </layout>
 -     </item>
 -     <item>
 -      <spacer name="horizontalSpacer">
 -       <property name="orientation">
 -        <enum>Qt::Horizontal</enum>
 -       </property>
 -       <property name="sizeType">
 -        <enum>QSizePolicy::Fixed</enum>
 -       </property>
 -       <property name="sizeHint" stdset="0">
 -        <size>
 -         <width>10</width>
 -         <height>20</height>
 -        </size>
 -       </property>
 -      </spacer>
 -     </item>
 -    </layout>
 -   </item>
 -  </layout>
 - </widget>
 - <resources>
 -  <include location="win32-mouse-protocol.qrc"/>
 - </resources>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICMOUSEControls</class> + <widget class="QWidget" name="UICMOUSEControls"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>257</width> +    <height>114</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>Mouse protocol settings</string> +  </property> +  <property name="windowIcon"> +   <iconset resource="win32-mouse-protocol.qrc"> +    <normaloff>:/images/mouse.png</normaloff>:/images/mouse.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QVBoxLayout" name="_vertical_layout"> +   <item> +    <layout class="QGridLayout" name="gridLayout"> +     <item row="1" column="1"> +      <widget class="QComboBox" name="cbxSelectMouse_Y"> +       <property name="maximumSize"> +        <size> +         <width>80</width> +         <height>16777215</height> +        </size> +       </property> +       <property name="toolTip"> +        <string>Select Number</string> +       </property> +       <property name="insertPolicy"> +        <enum>QComboBox::InsertAlphabetically</enum> +       </property> +      </widget> +     </item> +     <item row="1" column="0"> +      <widget class="QLabel" name="textLabel2_3"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Map mouse Y to:</string> +       </property> +       <property name="alignment"> +        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +       </property> +       <property name="wordWrap"> +        <bool>false</bool> +       </property> +      </widget> +     </item> +     <item row="0" column="0"> +      <widget class="QLabel" name="textLabel2_2"> +       <property name="sizePolicy"> +        <sizepolicy hsizetype="Minimum" vsizetype="Fixed"> +         <horstretch>0</horstretch> +         <verstretch>0</verstretch> +        </sizepolicy> +       </property> +       <property name="text"> +        <string>Map mouse X to:</string> +       </property> +       <property name="alignment"> +        <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> +       </property> +       <property name="wordWrap"> +        <bool>false</bool> +       </property> +      </widget> +     </item> +     <item row="0" column="1"> +      <widget class="QComboBox" name="cbxSelectMouse_X"> +       <property name="maximumSize"> +        <size> +         <width>80</width> +         <height>16777215</height> +        </size> +       </property> +       <property name="toolTip"> +        <string>Select Number</string> +       </property> +       <property name="insertPolicy"> +        <enum>QComboBox::InsertAlphabetically</enum> +       </property> +      </widget> +     </item> +    </layout> +   </item> +   <item> +    <layout class="QHBoxLayout" name="horizontalLayout"> +     <item> +      <spacer name="horizontalSpacer_2"> +       <property name="orientation"> +        <enum>Qt::Horizontal</enum> +       </property> +       <property name="sizeHint" stdset="0"> +        <size> +         <width>40</width> +         <height>20</height> +        </size> +       </property> +      </spacer> +     </item> +     <item> +      <layout class="QHBoxLayout" name="horizontalLayout_2"> +       <property name="sizeConstraint"> +        <enum>QLayout::SetDefaultConstraint</enum> +       </property> +       <item> +        <widget class="QPushButton" name="btnOK"> +         <property name="sizePolicy"> +          <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy> +         </property> +         <property name="minimumSize"> +          <size> +           <width>100</width> +           <height>0</height> +          </size> +         </property> +         <property name="maximumSize"> +          <size> +           <width>100</width> +           <height>16777215</height> +          </size> +         </property> +         <property name="text"> +          <string>OK</string> +         </property> +        </widget> +       </item> +       <item> +        <widget class="QPushButton" name="btnCancel"> +         <property name="sizePolicy"> +          <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy> +         </property> +         <property name="minimumSize"> +          <size> +           <width>100</width> +           <height>0</height> +          </size> +         </property> +         <property name="maximumSize"> +          <size> +           <width>100</width> +           <height>16777215</height> +          </size> +         </property> +         <property name="text"> +          <string>Cancel</string> +         </property> +        </widget> +       </item> +      </layout> +     </item> +     <item> +      <spacer name="horizontalSpacer"> +       <property name="orientation"> +        <enum>Qt::Horizontal</enum> +       </property> +       <property name="sizeType"> +        <enum>QSizePolicy::Fixed</enum> +       </property> +       <property name="sizeHint" stdset="0"> +        <size> +         <width>10</width> +         <height>20</height> +        </size> +       </property> +      </spacer> +     </item> +    </layout> +   </item> +  </layout> + </widget> + <resources> +  <include location="win32-mouse-protocol.qrc"/> + </resources> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/ftnoir_protocol_sc/ftnoir_sccontrols.ui b/ftnoir_protocol_sc/ftnoir_sccontrols.ui index 87dc8d86..5b2fd291 100644 --- a/ftnoir_protocol_sc/ftnoir_sccontrols.ui +++ b/ftnoir_protocol_sc/ftnoir_sccontrols.ui @@ -1,72 +1,72 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICSCControls</class>
 - <widget class="QWidget" name="UICSCControls">
 -  <property name="windowModality">
 -   <enum>Qt::NonModal</enum>
 -  </property>
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>290</width>
 -    <height>79</height>
 -   </rect>
 -  </property>
 -  <property name="windowTitle">
 -   <string>SimConnect settings FaceTrackNoIR</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset>
 -    <normaloff>images/FaceTrackNoIR.png</normaloff>images/FaceTrackNoIR.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QGridLayout" name="gridLayout">
 -   <item row="0" column="0">
 -    <widget class="QLabel" name="label">
 -     <property name="text">
 -      <string>FSX version</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="1">
 -    <widget class="QComboBox" name="comboBox">
 -     <item>
 -      <property name="text">
 -       <string>SP1</string>
 -      </property>
 -     </item>
 -     <item>
 -      <property name="text">
 -       <string>SP2</string>
 -      </property>
 -     </item>
 -     <item>
 -      <property name="text">
 -       <string>Acceleration</string>
 -      </property>
 -     </item>
 -    </widget>
 -   </item>
 -   <item row="1" column="1">
 -    <widget class="QDialogButtonBox" name="buttonBox">
 -     <property name="standardButtons">
 -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
 -     </property>
 -    </widget>
 -   </item>
 -  </layout>
 - </widget>
 - <resources/>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICSCControls</class> + <widget class="QWidget" name="UICSCControls"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>290</width> +    <height>79</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>SimConnect settings FaceTrackNoIR</string> +  </property> +  <property name="windowIcon"> +   <iconset> +    <normaloff>images/FaceTrackNoIR.png</normaloff>images/FaceTrackNoIR.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QGridLayout" name="gridLayout"> +   <item row="0" column="0"> +    <widget class="QLabel" name="label"> +     <property name="text"> +      <string>FSX version</string> +     </property> +    </widget> +   </item> +   <item row="0" column="1"> +    <widget class="QComboBox" name="comboBox"> +     <item> +      <property name="text"> +       <string>SP1</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>SP2</string> +      </property> +     </item> +     <item> +      <property name="text"> +       <string>Acceleration</string> +      </property> +     </item> +    </widget> +   </item> +   <item row="1" column="1"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources/> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/ftnoir_tracker_aruco/trans_calib.cpp b/ftnoir_tracker_aruco/trans_calib.cpp index dd18399a..b1f956b4 100644 --- a/ftnoir_tracker_aruco/trans_calib.cpp +++ b/ftnoir_tracker_aruco/trans_calib.cpp @@ -1,44 +1,44 @@ -/* Copyright (c) 2012 Patrick Ruoff
 - *
 - * 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 "trans_calib.h"
 -
 -using namespace cv;
 -
 -//-----------------------------------------------------------------------------
 -TranslationCalibrator::TranslationCalibrator()
 -{
 -	reset();
 -}
 -
 -void TranslationCalibrator::reset()
 -{
 -	P = Matx66f::zeros();
 -	y = Vec6f(0,0,0, 0,0,0);
 -}
 -
 -void TranslationCalibrator::update(const Matx33f& R_CM_k, const Vec3f& t_CM_k)
 -{
 -	Matx<float, 6,3> H_k_T = Matx<float, 6,3>::zeros();
 -	for (int i=0; i<3; ++i) {
 -		for (int j=0; j<3; ++j) {
 -			H_k_T(i,j) = R_CM_k(j,i);
 -		}
 -	}
 -	for (int i=0; i<3; ++i)
 -	{
 -		H_k_T(3+i,i) = 1.0;
 -	}
 -	P += H_k_T * H_k_T.t();
 -	y += H_k_T * t_CM_k;
 -}
 -
 -Vec3f TranslationCalibrator::get_estimate()
 -{
 -	Vec6f x = P.inv() * y;
 -    return Vec3f(x[0], x[1], x[2]);
 -}
 +/* Copyright (c) 2012 Patrick Ruoff + * + * 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 "trans_calib.h" + +using namespace cv; + +//----------------------------------------------------------------------------- +TranslationCalibrator::TranslationCalibrator() +{ +	reset(); +} + +void TranslationCalibrator::reset() +{ +	P = Matx66f::zeros(); +	y = Vec6f(0,0,0, 0,0,0); +} + +void TranslationCalibrator::update(const Matx33f& R_CM_k, const Vec3f& t_CM_k) +{ +	Matx<float, 6,3> H_k_T = Matx<float, 6,3>::zeros(); +	for (int i=0; i<3; ++i) { +		for (int j=0; j<3; ++j) { +			H_k_T(i,j) = R_CM_k(j,i); +		} +	} +	for (int i=0; i<3; ++i) +	{ +		H_k_T(3+i,i) = 1.0; +	} +	P += H_k_T * H_k_T.t(); +	y += H_k_T * t_CM_k; +} + +Vec3f TranslationCalibrator::get_estimate() +{ +	Vec6f x = P.inv() * y; +    return Vec3f(x[0], x[1], x[2]); +} diff --git a/ftnoir_tracker_aruco/trans_calib.h b/ftnoir_tracker_aruco/trans_calib.h index f2521690..609c9af1 100644 --- a/ftnoir_tracker_aruco/trans_calib.h +++ b/ftnoir_tracker_aruco/trans_calib.h @@ -1,39 +1,39 @@ -/* Copyright (c) 2012 Patrick Ruoff
 - *
 - * 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.
 - */
 -
 -#ifndef TRANSCALIB_H
 -#define TRANSCALIB_H
 -
 -#include <opencv2/opencv.hpp>
 -
 -//-----------------------------------------------------------------------------
 -// Calibrates the translation from head to model = t_MH
 -// by recursive least squares /
 -// kalman filter in information form with identity noise covariance
 -// measurement equation when head position = t_CH is fixed:
 -// (R_CM_k , Id)*(-t_MH, t_CH) = t_CM_k
 -
 -class TranslationCalibrator
 -{
 -public:
 -	TranslationCalibrator();
 -
 -	// reset the calibration process
 -	void reset();
 -
 -	// update the current estimate
 -	void update(const cv::Matx33f& R_CM_k, const cv::Vec3f& t_CM_k);
 -
 -	// get the current estimate for t_MH
 -	cv::Vec3f get_estimate();
 -
 -protected:
 -	cv::Matx66f P;	// normalized precision matrix = inverse covariance
 -	cv::Vec6f y;	// P*(-t_MH, t_CH)
 -};
 -
 +/* Copyright (c) 2012 Patrick Ruoff + * + * 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. + */ + +#ifndef TRANSCALIB_H +#define TRANSCALIB_H + +#include <opencv2/opencv.hpp> + +//----------------------------------------------------------------------------- +// Calibrates the translation from head to model = t_MH +// by recursive least squares / +// kalman filter in information form with identity noise covariance +// measurement equation when head position = t_CH is fixed: +// (R_CM_k , Id)*(-t_MH, t_CH) = t_CM_k + +class TranslationCalibrator +{ +public: +	TranslationCalibrator(); + +	// reset the calibration process +	void reset(); + +	// update the current estimate +	void update(const cv::Matx33f& R_CM_k, const cv::Vec3f& t_CM_k); + +	// get the current estimate for t_MH +	cv::Vec3f get_estimate(); + +protected: +	cv::Matx66f P;	// normalized precision matrix = inverse covariance +	cv::Vec6f y;	// P*(-t_MH, t_CH) +}; +  #endif //TRANSCALIB_H
\ No newline at end of file diff --git a/ftnoir_tracker_freepie-udp/freepie-udp-controls.ui b/ftnoir_tracker_freepie-udp/freepie-udp-controls.ui index 9870372a..48290bf2 100644 --- a/ftnoir_tracker_freepie-udp/freepie-udp-controls.ui +++ b/ftnoir_tracker_freepie-udp/freepie-udp-controls.ui @@ -1,69 +1,69 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UI_freepie_udp_dialog</class>
 - <widget class="QWidget" name="UI_freepie_udp_dialog">
 -  <property name="windowModality">
 -   <enum>Qt::NonModal</enum>
 -  </property>
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>198</width>
 -    <height>71</height>
 -   </rect>
 -  </property>
 -  <property name="windowTitle">
 -   <string>UDP tracker settings</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset>
 -    <normaloff>../facetracknoir/images/facetracknoir.png</normaloff>../facetracknoir/images/facetracknoir.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QGridLayout" name="gridLayout">
 -   <item row="0" column="0">
 -    <widget class="QLabel" name="label_5">
 -     <property name="sizePolicy">
 -      <sizepolicy hsizetype="Maximum" vsizetype="Preferred">
 -       <horstretch>0</horstretch>
 -       <verstretch>0</verstretch>
 -      </sizepolicy>
 -     </property>
 -     <property name="text">
 -      <string>UDP port</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="1">
 -    <widget class="QSpinBox" name="port">
 -     <property name="minimum">
 -      <number>0</number>
 -     </property>
 -     <property name="maximum">
 -      <number>65535</number>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="0" colspan="2">
 -    <widget class="QDialogButtonBox" name="buttonBox">
 -     <property name="standardButtons">
 -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
 -     </property>
 -    </widget>
 -   </item>
 -  </layout>
 - </widget>
 - <resources/>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UI_freepie_udp_dialog</class> + <widget class="QWidget" name="UI_freepie_udp_dialog"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>198</width> +    <height>71</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>UDP tracker settings</string> +  </property> +  <property name="windowIcon"> +   <iconset> +    <normaloff>../facetracknoir/images/facetracknoir.png</normaloff>../facetracknoir/images/facetracknoir.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QGridLayout" name="gridLayout"> +   <item row="0" column="0"> +    <widget class="QLabel" name="label_5"> +     <property name="sizePolicy"> +      <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +       <horstretch>0</horstretch> +       <verstretch>0</verstretch> +      </sizepolicy> +     </property> +     <property name="text"> +      <string>UDP port</string> +     </property> +    </widget> +   </item> +   <item row="0" column="1"> +    <widget class="QSpinBox" name="port"> +     <property name="minimum"> +      <number>0</number> +     </property> +     <property name="maximum"> +      <number>65535</number> +     </property> +    </widget> +   </item> +   <item row="1" column="0" colspan="2"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources/> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/ftnoir_tracker_udp/ftnoir_ftnclientcontrols.ui b/ftnoir_tracker_udp/ftnoir_ftnclientcontrols.ui index f485e67f..4a5624cf 100644 --- a/ftnoir_tracker_udp/ftnoir_ftnclientcontrols.ui +++ b/ftnoir_tracker_udp/ftnoir_ftnclientcontrols.ui @@ -1,66 +1,66 @@ -<?xml version="1.0" encoding="UTF-8"?>
 -<ui version="4.0">
 - <class>UICFTNClientControls</class>
 - <widget class="QWidget" name="UICFTNClientControls">
 -  <property name="windowModality">
 -   <enum>Qt::NonModal</enum>
 -  </property>
 -  <property name="geometry">
 -   <rect>
 -    <x>0</x>
 -    <y>0</y>
 -    <width>216</width>
 -    <height>71</height>
 -   </rect>
 -  </property>
 -  <property name="windowTitle">
 -   <string>UDP tracker settings</string>
 -  </property>
 -  <property name="windowIcon">
 -   <iconset>
 -    <normaloff>../facetracknoir/images/facetracknoir.png</normaloff>../facetracknoir/images/facetracknoir.png</iconset>
 -  </property>
 -  <property name="layoutDirection">
 -   <enum>Qt::LeftToRight</enum>
 -  </property>
 -  <property name="autoFillBackground">
 -   <bool>false</bool>
 -  </property>
 -  <layout class="QGridLayout" name="gridLayout">
 -   <item row="0" column="0">
 -    <widget class="QLabel" name="label_5">
 -     <property name="text">
 -      <string>Port</string>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="0" column="1">
 -    <widget class="QSpinBox" name="spinPortNumber">
 -     <property name="minimum">
 -      <number>0</number>
 -     </property>
 -     <property name="maximum">
 -      <number>65535</number>
 -     </property>
 -    </widget>
 -   </item>
 -   <item row="1" column="1">
 -    <widget class="QDialogButtonBox" name="buttonBox">
 -     <property name="standardButtons">
 -      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
 -     </property>
 -    </widget>
 -   </item>
 -  </layout>
 - </widget>
 - <tabstops>
 -  <tabstop>spinPortNumber</tabstop>
 - </tabstops>
 - <resources/>
 - <connections/>
 - <slots>
 -  <slot>startEngineClicked()</slot>
 -  <slot>stopEngineClicked()</slot>
 -  <slot>cameraSettingsClicked()</slot>
 - </slots>
 -</ui>
 +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UICFTNClientControls</class> + <widget class="QWidget" name="UICFTNClientControls"> +  <property name="windowModality"> +   <enum>Qt::NonModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>216</width> +    <height>71</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>UDP tracker settings</string> +  </property> +  <property name="windowIcon"> +   <iconset> +    <normaloff>../facetracknoir/images/facetracknoir.png</normaloff>../facetracknoir/images/facetracknoir.png</iconset> +  </property> +  <property name="layoutDirection"> +   <enum>Qt::LeftToRight</enum> +  </property> +  <property name="autoFillBackground"> +   <bool>false</bool> +  </property> +  <layout class="QGridLayout" name="gridLayout"> +   <item row="0" column="0"> +    <widget class="QLabel" name="label_5"> +     <property name="text"> +      <string>Port</string> +     </property> +    </widget> +   </item> +   <item row="0" column="1"> +    <widget class="QSpinBox" name="spinPortNumber"> +     <property name="minimum"> +      <number>0</number> +     </property> +     <property name="maximum"> +      <number>65535</number> +     </property> +    </widget> +   </item> +   <item row="1" column="1"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <tabstops> +  <tabstop>spinPortNumber</tabstop> + </tabstops> + <resources/> + <connections/> + <slots> +  <slot>startEngineClicked()</slot> +  <slot>stopEngineClicked()</slot> +  <slot>cameraSettingsClicked()</slot> + </slots> +</ui> diff --git a/qxt-mini/plat/qxtglobalshortcut_mac.cpp b/qxt-mini/plat/qxtglobalshortcut_mac.cpp index f43c773a..fbf86a94 100644 --- a/qxt-mini/plat/qxtglobalshortcut_mac.cpp +++ b/qxt-mini/plat/qxtglobalshortcut_mac.cpp @@ -1,4 +1,4 @@ -#include <Carbon/Carbon.h>
 +#include <Carbon/Carbon.h>  /****************************************************************************  ** Copyright (c) 2006 - 2011, the LibQxt project.  ** See the Qxt AUTHORS file for a list of authors and copyright holders. @@ -29,235 +29,235 @@  ** <http://libqxt.org>  <foundation@libqxt.org>  *****************************************************************************/ -#include "qxtglobalshortcut_p.h"
 -#include <QMap>
 -#include <QHash>
 -#include <QtDebug>
 -#include <QApplication>
 -
 -typedef QPair<uint, uint> Identifier;
 -static QMap<quint32, EventHotKeyRef> keyRefs;
 -static QHash<Identifier, quint32> keyIDs;
 -static quint32 hotKeySerial = 0;
 -static bool qxt_mac_handler_installed = false;
 -
 -OSStatus qxt_mac_handle_hot_key(EventHandlerCallRef nextHandler, EventRef event, void* data)
 -{
 -    Q_UNUSED(nextHandler);
 -    Q_UNUSED(data);
 -    if (GetEventClass(event) == kEventClassKeyboard && GetEventKind(event) == kEventHotKeyPressed)
 -    {
 -        EventHotKeyID keyID;
 -        GetEventParameter(event, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(keyID), NULL, &keyID);
 -	Identifier id = keyIDs.key(keyID.id);
 +#include "qxtglobalshortcut_p.h" +#include <QMap> +#include <QHash> +#include <QtDebug> +#include <QApplication> + +typedef QPair<uint, uint> Identifier; +static QMap<quint32, EventHotKeyRef> keyRefs; +static QHash<Identifier, quint32> keyIDs; +static quint32 hotKeySerial = 0; +static bool qxt_mac_handler_installed = false; + +OSStatus qxt_mac_handle_hot_key(EventHandlerCallRef nextHandler, EventRef event, void* data) +{ +    Q_UNUSED(nextHandler); +    Q_UNUSED(data); +    if (GetEventClass(event) == kEventClassKeyboard && GetEventKind(event) == kEventHotKeyPressed) +    { +        EventHotKeyID keyID; +        GetEventParameter(event, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(keyID), NULL, &keyID); +	Identifier id = keyIDs.key(keyID.id);  	if(id != Identifier()) -		QxtGlobalShortcutPrivate::activateShortcut(id.second, id.first);
 -    }
 -    return noErr;
 -}
 -
 -quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers)
 -{
 -    quint32 native = 0;
 -    if (modifiers & Qt::ShiftModifier)
 -        native |= shiftKey;
 -    if (modifiers & Qt::ControlModifier)
 -        native |= cmdKey;
 -    if (modifiers & Qt::AltModifier)
 -        native |= optionKey;
 -    if (modifiers & Qt::MetaModifier)
 -        native |= controlKey;
 -    if (modifiers & Qt::KeypadModifier)
 -        native |= kEventKeyModifierNumLockMask;
 -    return native;
 -}
 -
 -quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)
 -{
 -    UTF16Char ch;
 -    // Constants found in NSEvent.h from AppKit.framework
 -    switch (key)
 -    {
 -    case Qt::Key_Return:
 -        return kVK_Return;
 -    case Qt::Key_Enter:
 -        return kVK_ANSI_KeypadEnter;
 -    case Qt::Key_Tab:
 -        return kVK_Tab;
 -    case Qt::Key_Space:
 -        return kVK_Space;
 -    case Qt::Key_Backspace:
 -        return kVK_Delete;
 -    case Qt::Key_Control:
 -        return kVK_Command;
 -    case Qt::Key_Shift:
 -        return kVK_Shift;
 -    case Qt::Key_CapsLock:
 -        return kVK_CapsLock;
 -    case Qt::Key_Option:
 -        return kVK_Option;
 -    case Qt::Key_Meta:
 -        return kVK_Control;
 -    case Qt::Key_F17:
 -        return kVK_F17;
 -    case Qt::Key_VolumeUp:
 -        return kVK_VolumeUp;
 -    case Qt::Key_VolumeDown:
 -        return kVK_VolumeDown;
 -    case Qt::Key_F18:
 -        return kVK_F18;
 -    case Qt::Key_F19:
 -        return kVK_F19;
 -    case Qt::Key_F20:
 -        return kVK_F20;
 -    case Qt::Key_F5:
 -        return kVK_F5;
 -    case Qt::Key_F6:
 -        return kVK_F6;
 -    case Qt::Key_F7:
 -        return kVK_F7;
 -    case Qt::Key_F3:
 -        return kVK_F3;
 -    case Qt::Key_F8:
 -        return kVK_F8;
 -    case Qt::Key_F9:
 -        return kVK_F9;
 -    case Qt::Key_F11:
 -        return kVK_F11;
 -    case Qt::Key_F13:
 -        return kVK_F13;
 -    case Qt::Key_F16:
 -        return kVK_F16;
 -    case Qt::Key_F14:
 -        return kVK_F14;
 -    case Qt::Key_F10:
 -        return kVK_F10;
 -    case Qt::Key_F12:
 -        return kVK_F12;
 -    case Qt::Key_F15:
 -        return kVK_F15;
 -    case Qt::Key_Help:
 -        return kVK_Help;
 -    case Qt::Key_Home:
 -        return kVK_Home;
 -    case Qt::Key_PageUp:
 -        return kVK_PageUp;
 -    case Qt::Key_Delete:
 -        return kVK_ForwardDelete;
 -    case Qt::Key_F4:
 -        return kVK_F4;
 -    case Qt::Key_End:
 -        return kVK_End;
 -    case Qt::Key_F2:
 -        return kVK_F2;
 -    case Qt::Key_PageDown:
 -        return kVK_PageDown;
 -    case Qt::Key_F1:
 -        return kVK_F1;
 -    case Qt::Key_Left:
 -        return kVK_LeftArrow;
 -    case Qt::Key_Right:
 -        return kVK_RightArrow;
 -    case Qt::Key_Down:
 -        return kVK_DownArrow;
 -    case Qt::Key_Up:
 -        return kVK_UpArrow;
 -    default:
 -        ;
 -    }
 -
 -    if (key == Qt::Key_Escape)	ch = 27;
 -    else if (key == Qt::Key_Return) ch = 13;
 -    else if (key == Qt::Key_Enter) ch = 3;
 -    else if (key == Qt::Key_Tab) ch = 9;
 -    else ch = key;
 -
 -    CFDataRef currentLayoutData;
 -    TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
 -
 -    if (currentKeyboard == NULL)
 -        return 0;
 -
 -    currentLayoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData);
 -    CFRelease(currentKeyboard);
 -    if (currentLayoutData == NULL)
 -        return 0;
 -
 -    UCKeyboardLayout* header = (UCKeyboardLayout*)CFDataGetBytePtr(currentLayoutData);
 -    UCKeyboardTypeHeader* table = header->keyboardTypeList;
 -
 -    uint8_t *data = (uint8_t*)header;
 -    // God, would a little documentation for this shit kill you...
 -    for (quint32 i=0; i < header->keyboardTypeCount; i++)
 -    {
 -        UCKeyStateRecordsIndex* stateRec = 0;
 -        if (table[i].keyStateRecordsIndexOffset != 0)
 -        {
 -            stateRec = reinterpret_cast<UCKeyStateRecordsIndex*>(data + table[i].keyStateRecordsIndexOffset);
 -            if (stateRec->keyStateRecordsIndexFormat != kUCKeyStateRecordsIndexFormat) stateRec = 0;
 -        }
 -
 -        UCKeyToCharTableIndex* charTable = reinterpret_cast<UCKeyToCharTableIndex*>(data + table[i].keyToCharTableIndexOffset);
 -        if (charTable->keyToCharTableIndexFormat != kUCKeyToCharTableIndexFormat) continue;
 -
 -        for (quint32 j=0; j < charTable->keyToCharTableCount; j++)
 -        {
 -            UCKeyOutput* keyToChar = reinterpret_cast<UCKeyOutput*>(data + charTable->keyToCharTableOffsets[j]);
 -            for (quint32 k=0; k < charTable->keyToCharTableSize; k++)
 -            {
 -                if (keyToChar[k] & kUCKeyOutputTestForIndexMask)
 -                {
 -                    long idx = keyToChar[k] & kUCKeyOutputGetIndexMask;
 -                    if (stateRec && idx < stateRec->keyStateRecordCount)
 -                    {
 -                        UCKeyStateRecord* rec = reinterpret_cast<UCKeyStateRecord*>(data + stateRec->keyStateRecordOffsets[idx]);
 -                        if (rec->stateZeroCharData == ch) return k;
 -                    }
 -                }
 -                else if (!(keyToChar[k] & kUCKeyOutputSequenceIndexMask) && keyToChar[k] < 0xFFFE)
 -                {
 -                    if (keyToChar[k] == ch) return k;
 -                }
 -            } // for k
 -        } // for j
 -    } // for i
 -    return 0;
 -}
 -
 -bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods)
 -{
 -    if (!qxt_mac_handler_installed)
 -    {
 +		QxtGlobalShortcutPrivate::activateShortcut(id.second, id.first); +    } +    return noErr; +} + +quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) +{ +    quint32 native = 0; +    if (modifiers & Qt::ShiftModifier) +        native |= shiftKey; +    if (modifiers & Qt::ControlModifier) +        native |= cmdKey; +    if (modifiers & Qt::AltModifier) +        native |= optionKey; +    if (modifiers & Qt::MetaModifier) +        native |= controlKey; +    if (modifiers & Qt::KeypadModifier) +        native |= kEventKeyModifierNumLockMask; +    return native; +} + +quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) +{ +    UTF16Char ch; +    // Constants found in NSEvent.h from AppKit.framework +    switch (key) +    { +    case Qt::Key_Return: +        return kVK_Return; +    case Qt::Key_Enter: +        return kVK_ANSI_KeypadEnter; +    case Qt::Key_Tab: +        return kVK_Tab; +    case Qt::Key_Space: +        return kVK_Space; +    case Qt::Key_Backspace: +        return kVK_Delete; +    case Qt::Key_Control: +        return kVK_Command; +    case Qt::Key_Shift: +        return kVK_Shift; +    case Qt::Key_CapsLock: +        return kVK_CapsLock; +    case Qt::Key_Option: +        return kVK_Option; +    case Qt::Key_Meta: +        return kVK_Control; +    case Qt::Key_F17: +        return kVK_F17; +    case Qt::Key_VolumeUp: +        return kVK_VolumeUp; +    case Qt::Key_VolumeDown: +        return kVK_VolumeDown; +    case Qt::Key_F18: +        return kVK_F18; +    case Qt::Key_F19: +        return kVK_F19; +    case Qt::Key_F20: +        return kVK_F20; +    case Qt::Key_F5: +        return kVK_F5; +    case Qt::Key_F6: +        return kVK_F6; +    case Qt::Key_F7: +        return kVK_F7; +    case Qt::Key_F3: +        return kVK_F3; +    case Qt::Key_F8: +        return kVK_F8; +    case Qt::Key_F9: +        return kVK_F9; +    case Qt::Key_F11: +        return kVK_F11; +    case Qt::Key_F13: +        return kVK_F13; +    case Qt::Key_F16: +        return kVK_F16; +    case Qt::Key_F14: +        return kVK_F14; +    case Qt::Key_F10: +        return kVK_F10; +    case Qt::Key_F12: +        return kVK_F12; +    case Qt::Key_F15: +        return kVK_F15; +    case Qt::Key_Help: +        return kVK_Help; +    case Qt::Key_Home: +        return kVK_Home; +    case Qt::Key_PageUp: +        return kVK_PageUp; +    case Qt::Key_Delete: +        return kVK_ForwardDelete; +    case Qt::Key_F4: +        return kVK_F4; +    case Qt::Key_End: +        return kVK_End; +    case Qt::Key_F2: +        return kVK_F2; +    case Qt::Key_PageDown: +        return kVK_PageDown; +    case Qt::Key_F1: +        return kVK_F1; +    case Qt::Key_Left: +        return kVK_LeftArrow; +    case Qt::Key_Right: +        return kVK_RightArrow; +    case Qt::Key_Down: +        return kVK_DownArrow; +    case Qt::Key_Up: +        return kVK_UpArrow; +    default: +        ; +    } + +    if (key == Qt::Key_Escape)	ch = 27; +    else if (key == Qt::Key_Return) ch = 13; +    else if (key == Qt::Key_Enter) ch = 3; +    else if (key == Qt::Key_Tab) ch = 9; +    else ch = key; + +    CFDataRef currentLayoutData; +    TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); + +    if (currentKeyboard == NULL) +        return 0; + +    currentLayoutData = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData); +    CFRelease(currentKeyboard); +    if (currentLayoutData == NULL) +        return 0; + +    UCKeyboardLayout* header = (UCKeyboardLayout*)CFDataGetBytePtr(currentLayoutData); +    UCKeyboardTypeHeader* table = header->keyboardTypeList; + +    uint8_t *data = (uint8_t*)header; +    // God, would a little documentation for this shit kill you... +    for (quint32 i=0; i < header->keyboardTypeCount; i++) +    { +        UCKeyStateRecordsIndex* stateRec = 0; +        if (table[i].keyStateRecordsIndexOffset != 0) +        { +            stateRec = reinterpret_cast<UCKeyStateRecordsIndex*>(data + table[i].keyStateRecordsIndexOffset); +            if (stateRec->keyStateRecordsIndexFormat != kUCKeyStateRecordsIndexFormat) stateRec = 0; +        } + +        UCKeyToCharTableIndex* charTable = reinterpret_cast<UCKeyToCharTableIndex*>(data + table[i].keyToCharTableIndexOffset); +        if (charTable->keyToCharTableIndexFormat != kUCKeyToCharTableIndexFormat) continue; + +        for (quint32 j=0; j < charTable->keyToCharTableCount; j++) +        { +            UCKeyOutput* keyToChar = reinterpret_cast<UCKeyOutput*>(data + charTable->keyToCharTableOffsets[j]); +            for (quint32 k=0; k < charTable->keyToCharTableSize; k++) +            { +                if (keyToChar[k] & kUCKeyOutputTestForIndexMask) +                { +                    long idx = keyToChar[k] & kUCKeyOutputGetIndexMask; +                    if (stateRec && idx < stateRec->keyStateRecordCount) +                    { +                        UCKeyStateRecord* rec = reinterpret_cast<UCKeyStateRecord*>(data + stateRec->keyStateRecordOffsets[idx]); +                        if (rec->stateZeroCharData == ch) return k; +                    } +                } +                else if (!(keyToChar[k] & kUCKeyOutputSequenceIndexMask) && keyToChar[k] < 0xFFFE) +                { +                    if (keyToChar[k] == ch) return k; +                } +            } // for k +        } // for j +    } // for i +    return 0; +} + +bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) +{ +    if (!qxt_mac_handler_installed) +    {  	qxt_mac_handler_installed = true; -        EventTypeSpec t;
 -        t.eventClass = kEventClassKeyboard;
 -        t.eventKind = kEventHotKeyPressed;
 -        InstallApplicationEventHandler(&qxt_mac_handle_hot_key, 1, &t, NULL, NULL);
 -    }
 -
 -    EventHotKeyID keyID;
 -    keyID.signature = 'cute';
 -    keyID.id = ++hotKeySerial;
 -
 -    EventHotKeyRef ref = 0;
 -    bool rv = !RegisterEventHotKey(nativeKey, nativeMods, keyID, GetApplicationEventTarget(), 0, &ref);
 -    if (rv)
 -    {
 -        keyIDs.insert(Identifier(nativeMods, nativeKey), keyID.id);
 -        keyRefs.insert(keyID.id, ref);
 -    }
 -    return rv;
 -}
 -
 -bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods)
 -{
 -    Identifier id(nativeMods, nativeKey);
 -    if (!keyIDs.contains(id)) return false;
 -
 -    EventHotKeyRef ref = keyRefs.take(keyIDs[id]);
 -    keyIDs.remove(id);
 -    return !UnregisterEventHotKey(ref);
 -}
 +        EventTypeSpec t; +        t.eventClass = kEventClassKeyboard; +        t.eventKind = kEventHotKeyPressed; +        InstallApplicationEventHandler(&qxt_mac_handle_hot_key, 1, &t, NULL, NULL); +    } + +    EventHotKeyID keyID; +    keyID.signature = 'cute'; +    keyID.id = ++hotKeySerial; + +    EventHotKeyRef ref = 0; +    bool rv = !RegisterEventHotKey(nativeKey, nativeMods, keyID, GetApplicationEventTarget(), 0, &ref); +    if (rv) +    { +        keyIDs.insert(Identifier(nativeMods, nativeKey), keyID.id); +        keyRefs.insert(keyID.id, ref); +    } +    return rv; +} + +bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) +{ +    Identifier id(nativeMods, nativeKey); +    if (!keyIDs.contains(id)) return false; + +    EventHotKeyRef ref = keyRefs.take(keyIDs[id]); +    keyIDs.remove(id); +    return !UnregisterEventHotKey(ref); +}  bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType,      void *message, long *result)  { diff --git a/qxt-mini/plat/qxtglobalshortcut_x11.cpp b/qxt-mini/plat/qxtglobalshortcut_x11.cpp index 0c203dd8..f18f86db 100644 --- a/qxt-mini/plat/qxtglobalshortcut_x11.cpp +++ b/qxt-mini/plat/qxtglobalshortcut_x11.cpp @@ -1,235 +1,235 @@ -#include "../qxtglobalshortcut_p.h"
 -/****************************************************************************
 -** Copyright (c) 2006 - 2011, the LibQxt project.
 -** See the Qxt AUTHORS file for a list of authors and copyright holders.
 -** All rights reserved.
 -**
 -** Redistribution and use in source and binary forms, with or without
 -** modification, are permitted provided that the following conditions are met:
 -**     * Redistributions of source code must retain the above copyright
 -**       notice, this list of conditions and the following disclaimer.
 -**     * Redistributions in binary form must reproduce the above copyright
 -**       notice, this list of conditions and the following disclaimer in the
 -**       documentation and/or other materials provided with the distribution.
 -**     * Neither the name of the LibQxt project nor the
 -**       names of its contributors may be used to endorse or promote products
 -**       derived from this software without specific prior written permission.
 -**
 -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 -** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 -** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 -** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
 -** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 -** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 -** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 -** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 -** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 -**
 -** <http://libqxt.org>  <foundation@libqxt.org>
 -*****************************************************************************/
 -
 -#include <QVector>
 -#include <QApplication>
 -// include private header for great justice -sh 20131015
 -#include <X11/Xlib.h>
 -#include <xcb/xcb.h>
 -#include "qplatformnativeinterface.h"
 -
 -namespace {
 -
 -const QVector<quint32> maskModifiers = QVector<quint32>()
 -    << 0 << Mod2Mask << LockMask << (Mod2Mask | LockMask);
 -
 -typedef int (*X11ErrorHandler)(Display *display, XErrorEvent *event);
 -
 -class QxtX11ErrorHandler {
 -public:
 -    static bool error;
 -
 -    static int qxtX11ErrorHandler(Display *display, XErrorEvent *event)
 -    {
 -        Q_UNUSED(display);
 -        switch (event->error_code)
 -        {
 -            case BadAccess:
 -            case BadValue:
 -            case BadWindow:
 -                if (event->request_code == 33 /* X_GrabKey */ ||
 -                        event->request_code == 34 /* X_UngrabKey */)
 -                {
 -                    error = true;
 -                    //TODO:
 -                    //char errstr[256];
 -                    //XGetErrorText(dpy, err->error_code, errstr, 256);
 -                }
 -        }
 -        return 0;
 -    }
 -
 -    QxtX11ErrorHandler()
 -    {
 -        error = false;
 -        m_previousErrorHandler = XSetErrorHandler(qxtX11ErrorHandler);
 -    }
 -
 -    ~QxtX11ErrorHandler()
 -    {
 -        XSetErrorHandler(m_previousErrorHandler);
 -    }
 -
 -private:
 -    X11ErrorHandler m_previousErrorHandler;
 -};
 -
 -bool QxtX11ErrorHandler::error = false;
 -
 -class QxtX11Data {
 -public:
 -    QxtX11Data()
 -    {
 -#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
 -        m_display = QX11Info::display();
 -#else
 -        QPlatformNativeInterface *native = qApp->platformNativeInterface();
 -        void *display = native->nativeResourceForScreen(QByteArray("display"),
 -                                                        QGuiApplication::primaryScreen());
 -        m_display = reinterpret_cast<Display *>(display);
 -#endif
 -    }
 -
 -    bool isValid()
 -    {
 -        return m_display != 0;
 -    }
 -
 -    Display *display()
 -    {
 -        Q_ASSERT(isValid());
 -        return m_display;
 -    }
 -
 -    Window rootWindow()
 -    {
 -        return DefaultRootWindow(display());
 -    }
 -
 -    bool grabKey(quint32 keycode, quint32 modifiers, Window window)
 -    {
 -        QxtX11ErrorHandler errorHandler;
 -
 -        for (int i = 0; !errorHandler.error && i < maskModifiers.size(); ++i) {
 -            XGrabKey(display(), keycode, modifiers | maskModifiers[i], window, True,
 -                     GrabModeAsync, GrabModeAsync);
 -        }
 -
 -        if (errorHandler.error) {
 -            ungrabKey(keycode, modifiers, window);
 -            return false;
 -        }
 -
 -        return true;
 -    }
 -
 -    bool ungrabKey(quint32 keycode, quint32 modifiers, Window window)
 -    {
 -        QxtX11ErrorHandler errorHandler;
 -
 -        foreach (quint32 maskMods, maskModifiers) {
 -            XUngrabKey(display(), keycode, modifiers | maskMods, window);
 -        }
 -
 -        return !errorHandler.error;
 -    }
 -
 -private:
 -    Display *m_display;
 -};
 -
 -} // namespace
 -
 -#if QT_VERSION < QT_VERSION_CHECK(5,0,0)
 -bool QxtGlobalShortcutPrivate::eventFilter(void *message)
 -{
 -    XEvent *event = static_cast<XEvent *>(message);
 -    if (event->type == KeyPress)
 -    {
 -        XKeyEvent *key = reinterpret_cast<XKeyEvent *>(event);
 -        unsigned int keycode = key->keycode;
 -        unsigned int keystate = key->state;
 -#else
 -bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType,
 -    void *message, long *result)
 -{
 -    Q_UNUSED(result);
 -
 -    xcb_key_press_event_t *kev = 0;
 -    if (eventType == "xcb_generic_event_t") {
 -        xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message);
 -        if ((ev->response_type & 127) == XCB_KEY_PRESS)
 -            kev = static_cast<xcb_key_press_event_t *>(message);
 -    }
 -
 -    if (kev != 0) {
 -        unsigned int keycode = kev->detail;
 -        unsigned int keystate = 0;
 -        if(kev->state & XCB_MOD_MASK_1)
 -            keystate |= Mod1Mask;
 -        if(kev->state & XCB_MOD_MASK_CONTROL)
 -            keystate |= ControlMask;
 -        if(kev->state & XCB_MOD_MASK_4)
 -            keystate |= Mod4Mask;
 -        if(kev->state & XCB_MOD_MASK_SHIFT)
 -            keystate |= ShiftMask;
 -#endif
 -        activateShortcut(keycode,
 -            // Mod1Mask == Alt, Mod4Mask == Meta
 -            keystate & (ShiftMask | ControlMask | Mod1Mask | Mod4Mask));
 -    }
 -    return false;
 -}
 -
 -quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers)
 -{
 -    // ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask
 -    quint32 native = 0;
 -    if (modifiers & Qt::ShiftModifier)
 -        native |= ShiftMask;
 -    if (modifiers & Qt::ControlModifier)
 -        native |= ControlMask;
 -    if (modifiers & Qt::AltModifier)
 -        native |= Mod1Mask;
 -    if (modifiers & Qt::MetaModifier)
 -        native |= Mod4Mask;
 -
 -    // TODO: resolve these?
 -    //if (modifiers & Qt::MetaModifier)
 -    //if (modifiers & Qt::KeypadModifier)
 -    //if (modifiers & Qt::GroupSwitchModifier)
 -    return native;
 -}
 -
 -quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key)
 -{
 -    QxtX11Data x11;
 -    if (!x11.isValid())
 -        return 0;
 -
 -    KeySym keysym = XStringToKeysym(QKeySequence(key).toString().toLatin1().data());
 -    if (keysym == NoSymbol)
 -        keysym = static_cast<ushort>(key);
 -
 -    return XKeysymToKeycode(x11.display(), keysym);
 -}
 -
 -bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods)
 -{
 -    QxtX11Data x11;
 -    return x11.isValid() && x11.grabKey(nativeKey, nativeMods, x11.rootWindow());
 -}
 -
 -bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods)
 -{
 -    QxtX11Data x11;
 -    return x11.isValid() && x11.ungrabKey(nativeKey, nativeMods, x11.rootWindow());
 -}
 +#include "../qxtglobalshortcut_p.h" +/**************************************************************************** +** Copyright (c) 2006 - 2011, the LibQxt project. +** See the Qxt AUTHORS file for a list of authors and copyright holders. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +**     * Redistributions of source code must retain the above copyright +**       notice, this list of conditions and the following disclaimer. +**     * Redistributions in binary form must reproduce the above copyright +**       notice, this list of conditions and the following disclaimer in the +**       documentation and/or other materials provided with the distribution. +**     * Neither the name of the LibQxt project nor the +**       names of its contributors may be used to endorse or promote products +**       derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY +** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** <http://libqxt.org>  <foundation@libqxt.org> +*****************************************************************************/ + +#include <QVector> +#include <QApplication> +// include private header for great justice -sh 20131015 +#include <X11/Xlib.h> +#include <xcb/xcb.h> +#include "qplatformnativeinterface.h" + +namespace { + +const QVector<quint32> maskModifiers = QVector<quint32>() +    << 0 << Mod2Mask << LockMask << (Mod2Mask | LockMask); + +typedef int (*X11ErrorHandler)(Display *display, XErrorEvent *event); + +class QxtX11ErrorHandler { +public: +    static bool error; + +    static int qxtX11ErrorHandler(Display *display, XErrorEvent *event) +    { +        Q_UNUSED(display); +        switch (event->error_code) +        { +            case BadAccess: +            case BadValue: +            case BadWindow: +                if (event->request_code == 33 /* X_GrabKey */ || +                        event->request_code == 34 /* X_UngrabKey */) +                { +                    error = true; +                    //TODO: +                    //char errstr[256]; +                    //XGetErrorText(dpy, err->error_code, errstr, 256); +                } +        } +        return 0; +    } + +    QxtX11ErrorHandler() +    { +        error = false; +        m_previousErrorHandler = XSetErrorHandler(qxtX11ErrorHandler); +    } + +    ~QxtX11ErrorHandler() +    { +        XSetErrorHandler(m_previousErrorHandler); +    } + +private: +    X11ErrorHandler m_previousErrorHandler; +}; + +bool QxtX11ErrorHandler::error = false; + +class QxtX11Data { +public: +    QxtX11Data() +    { +#if QT_VERSION < QT_VERSION_CHECK(5,0,0) +        m_display = QX11Info::display(); +#else +        QPlatformNativeInterface *native = qApp->platformNativeInterface(); +        void *display = native->nativeResourceForScreen(QByteArray("display"), +                                                        QGuiApplication::primaryScreen()); +        m_display = reinterpret_cast<Display *>(display); +#endif +    } + +    bool isValid() +    { +        return m_display != 0; +    } + +    Display *display() +    { +        Q_ASSERT(isValid()); +        return m_display; +    } + +    Window rootWindow() +    { +        return DefaultRootWindow(display()); +    } + +    bool grabKey(quint32 keycode, quint32 modifiers, Window window) +    { +        QxtX11ErrorHandler errorHandler; + +        for (int i = 0; !errorHandler.error && i < maskModifiers.size(); ++i) { +            XGrabKey(display(), keycode, modifiers | maskModifiers[i], window, True, +                     GrabModeAsync, GrabModeAsync); +        } + +        if (errorHandler.error) { +            ungrabKey(keycode, modifiers, window); +            return false; +        } + +        return true; +    } + +    bool ungrabKey(quint32 keycode, quint32 modifiers, Window window) +    { +        QxtX11ErrorHandler errorHandler; + +        foreach (quint32 maskMods, maskModifiers) { +            XUngrabKey(display(), keycode, modifiers | maskMods, window); +        } + +        return !errorHandler.error; +    } + +private: +    Display *m_display; +}; + +} // namespace + +#if QT_VERSION < QT_VERSION_CHECK(5,0,0) +bool QxtGlobalShortcutPrivate::eventFilter(void *message) +{ +    XEvent *event = static_cast<XEvent *>(message); +    if (event->type == KeyPress) +    { +        XKeyEvent *key = reinterpret_cast<XKeyEvent *>(event); +        unsigned int keycode = key->keycode; +        unsigned int keystate = key->state; +#else +bool QxtGlobalShortcutPrivate::nativeEventFilter(const QByteArray & eventType, +    void *message, long *result) +{ +    Q_UNUSED(result); + +    xcb_key_press_event_t *kev = 0; +    if (eventType == "xcb_generic_event_t") { +        xcb_generic_event_t *ev = static_cast<xcb_generic_event_t *>(message); +        if ((ev->response_type & 127) == XCB_KEY_PRESS) +            kev = static_cast<xcb_key_press_event_t *>(message); +    } + +    if (kev != 0) { +        unsigned int keycode = kev->detail; +        unsigned int keystate = 0; +        if(kev->state & XCB_MOD_MASK_1) +            keystate |= Mod1Mask; +        if(kev->state & XCB_MOD_MASK_CONTROL) +            keystate |= ControlMask; +        if(kev->state & XCB_MOD_MASK_4) +            keystate |= Mod4Mask; +        if(kev->state & XCB_MOD_MASK_SHIFT) +            keystate |= ShiftMask; +#endif +        activateShortcut(keycode, +            // Mod1Mask == Alt, Mod4Mask == Meta +            keystate & (ShiftMask | ControlMask | Mod1Mask | Mod4Mask)); +    } +    return false; +} + +quint32 QxtGlobalShortcutPrivate::nativeModifiers(Qt::KeyboardModifiers modifiers) +{ +    // ShiftMask, LockMask, ControlMask, Mod1Mask, Mod2Mask, Mod3Mask, Mod4Mask, and Mod5Mask +    quint32 native = 0; +    if (modifiers & Qt::ShiftModifier) +        native |= ShiftMask; +    if (modifiers & Qt::ControlModifier) +        native |= ControlMask; +    if (modifiers & Qt::AltModifier) +        native |= Mod1Mask; +    if (modifiers & Qt::MetaModifier) +        native |= Mod4Mask; + +    // TODO: resolve these? +    //if (modifiers & Qt::MetaModifier) +    //if (modifiers & Qt::KeypadModifier) +    //if (modifiers & Qt::GroupSwitchModifier) +    return native; +} + +quint32 QxtGlobalShortcutPrivate::nativeKeycode(Qt::Key key) +{ +    QxtX11Data x11; +    if (!x11.isValid()) +        return 0; + +    KeySym keysym = XStringToKeysym(QKeySequence(key).toString().toLatin1().data()); +    if (keysym == NoSymbol) +        keysym = static_cast<ushort>(key); + +    return XKeysymToKeycode(x11.display(), keysym); +} + +bool QxtGlobalShortcutPrivate::registerShortcut(quint32 nativeKey, quint32 nativeMods) +{ +    QxtX11Data x11; +    return x11.isValid() && x11.grabKey(nativeKey, nativeMods, x11.rootWindow()); +} + +bool QxtGlobalShortcutPrivate::unregisterShortcut(quint32 nativeKey, quint32 nativeMods) +{ +    QxtX11Data x11; +    return x11.isValid() && x11.ungrabKey(nativeKey, nativeMods, x11.rootWindow()); +} diff --git a/qxt-mini/qxtglobalshortcut.cpp b/qxt-mini/qxtglobalshortcut.cpp index 8515a6b2..45576d37 100644 --- a/qxt-mini/qxtglobalshortcut.cpp +++ b/qxt-mini/qxtglobalshortcut.cpp @@ -1,224 +1,224 @@ -#include "qxtglobalshortcut.h"
 -/****************************************************************************
 -** Copyright (c) 2006 - 2011, the LibQxt project.
 -** See the Qxt AUTHORS file for a list of authors and copyright holders.
 -** All rights reserved.
 -**
 -** Redistribution and use in source and binary forms, with or without
 -** modification, are permitted provided that the following conditions are met:
 -**     * Redistributions of source code must retain the above copyright
 -**       notice, this list of conditions and the following disclaimer.
 -**     * Redistributions in binary form must reproduce the above copyright
 -**       notice, this list of conditions and the following disclaimer in the
 -**       documentation and/or other materials provided with the distribution.
 -**     * Neither the name of the LibQxt project nor the
 -**       names of its contributors may be used to endorse or promote products
 -**       derived from this software without specific prior written permission.
 -**
 -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 -** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 -** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 -** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
 -** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 -** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 -** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 -** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 -** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 -**
 -** <http://libqxt.org>  <foundation@libqxt.org>
 -*****************************************************************************/
 -
 -#include "qxtglobalshortcut_p.h"
 -#include <QAbstractEventDispatcher>
 -#include <QtDebug>
 -
 -#ifndef Q_OS_MAC
 -int QxtGlobalShortcutPrivate::ref = 0;
 -#   if QT_VERSION < QT_VERSION_CHECK(5,0,0)
 -QAbstractEventDispatcher::EventFilter QxtGlobalShortcutPrivate::prevEventFilter = 0;
 -#   endif
 -#endif // Q_OS_MAC
 -QHash<QPair<quint32, quint32>, QxtGlobalShortcut*> QxtGlobalShortcutPrivate::shortcuts;
 -
 -QxtGlobalShortcutPrivate::QxtGlobalShortcutPrivate() : enabled(true), key(Qt::Key(0)), mods(Qt::NoModifier)
 -{
 -#ifndef Q_OS_MAC
 -    if (ref == 0) {
 -#   if QT_VERSION < QT_VERSION_CHECK(5,0,0)
 -        prevEventFilter = QAbstractEventDispatcher::instance()->setEventFilter(eventFilter);
 -#   else
 -        QAbstractEventDispatcher::instance()->installNativeEventFilter(this);
 -#endif
 -    }
 -    ++ref;
 -#endif // Q_OS_MAC
 -}
 -
 -QxtGlobalShortcutPrivate::~QxtGlobalShortcutPrivate()
 -{
 -#ifndef Q_OS_MAC
 -    --ref;
 -    if (ref == 0) {
 -        QAbstractEventDispatcher *ed = QAbstractEventDispatcher::instance();
 -        if (ed != 0) {
 -#   if QT_VERSION < QT_VERSION_CHECK(5,0,0)
 -            ed->setEventFilter(prevEventFilter);
 -#   else
 -            ed->removeNativeEventFilter(this);
 -#   endif
 -        }
 -    }
 -#endif // Q_OS_MAC
 -}
 -
 -bool QxtGlobalShortcutPrivate::setShortcut(const QKeySequence& shortcut)
 -{
 -    if (shortcut.toString() == "") return false;
 -    Qt::KeyboardModifiers allMods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier;
 -    key = shortcut.isEmpty() ? Qt::Key(0) : Qt::Key((shortcut[0] ^ allMods) & shortcut[0]);
 -    mods = shortcut.isEmpty() ? Qt::KeyboardModifiers(0) : Qt::KeyboardModifiers(shortcut[0] & allMods);
 -    const quint32 nativeKey = nativeKeycode(key);
 -    const quint32 nativeMods = nativeModifiers(mods);
 -    const bool res = registerShortcut(nativeKey, nativeMods);
 -    if (res)
 -        shortcuts.insert(qMakePair(nativeKey, nativeMods), &qxt_p());
 -    else
 -        qWarning() << "QxtGlobalShortcut failed to register:" << QKeySequence(key + mods).toString();
 -    return res;
 -}
 -
 -bool QxtGlobalShortcutPrivate::unsetShortcut()
 -{
 -    bool res = false;
 -    const quint32 nativeKey = nativeKeycode(key);
 -    const quint32 nativeMods = nativeModifiers(mods);
 -    if (shortcuts.value(qMakePair(nativeKey, nativeMods)) == &qxt_p())
 -        res = unregisterShortcut(nativeKey, nativeMods);
 -    if (res)
 -        shortcuts.remove(qMakePair(nativeKey, nativeMods));
 -    else
 -        qWarning() << "QxtGlobalShortcut failed to unregister:" << QKeySequence(key + mods).toString();
 -    key = Qt::Key(0);
 -    mods = Qt::KeyboardModifiers(0);
 -    return res;
 -}
 -
 -void QxtGlobalShortcutPrivate::activateShortcut(quint32 nativeKey, quint32 nativeMods)
 -{
 -    QxtGlobalShortcut* shortcut = shortcuts.value(qMakePair(nativeKey, nativeMods));
 -    if (shortcut && shortcut->isEnabled())
 -        emit shortcut->activated();
 -}
 -
 -/*!
 -    \class QxtGlobalShortcut
 -    \inmodule QxtWidgets
 -    \brief The QxtGlobalShortcut class provides a global shortcut aka "hotkey".
 -
 -    A global shortcut triggers even if the application is not active. This
 -    makes it easy to implement applications that react to certain shortcuts
 -    still if some other application is active or if the application is for
 -    example minimized to the system tray.
 -
 -    Example usage:
 -    \code
 -    QxtGlobalShortcut* shortcut = new QxtGlobalShortcut(window);
 -    connect(shortcut, SIGNAL(activated()), window, SLOT(toggleVisibility()));
 -    shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12"));
 -    \endcode
 -
 -    \bold {Note:} Since Qxt 0.6 QxtGlobalShortcut no more requires QxtApplication.
 - */
 -
 -/*!
 -    \fn QxtGlobalShortcut::activated()
 -
 -    This signal is emitted when the user types the shortcut's key sequence.
 -
 -    \sa shortcut
 - */
 -
 -/*!
 -    Constructs a new QxtGlobalShortcut with \a parent.
 - */
 -QxtGlobalShortcut::QxtGlobalShortcut(QObject* parent)
 -        : QObject(parent)
 -{
 -    QXT_INIT_PRIVATE(QxtGlobalShortcut);
 -}
 -
 -/*!
 -    Constructs a new QxtGlobalShortcut with \a shortcut and \a parent.
 - */
 -QxtGlobalShortcut::QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent)
 -        : QObject(parent)
 -{
 -    QXT_INIT_PRIVATE(QxtGlobalShortcut);
 -    setShortcut(shortcut);
 -}
 -
 -/*!
 -    Destructs the QxtGlobalShortcut.
 - */
 -QxtGlobalShortcut::~QxtGlobalShortcut()
 -{
 -    if (qxt_d().key != 0)
 -        qxt_d().unsetShortcut();
 -}
 -
 -/*!
 -    \property QxtGlobalShortcut::shortcut
 -    \brief the shortcut key sequence
 -
 -    \bold {Note:} Notice that corresponding key press and release events are not
 -    delivered for registered global shortcuts even if they are disabled.
 -    Also, comma separated key sequences are not supported.
 -    Only the first part is used:
 -
 -    \code
 -    qxtShortcut->setShortcut(QKeySequence("Ctrl+Alt+A,Ctrl+Alt+B"));
 -    Q_ASSERT(qxtShortcut->shortcut() == QKeySequence("Ctrl+Alt+A"));
 -    \endcode
 - */
 -QKeySequence QxtGlobalShortcut::shortcut() const
 -{
 -    return QKeySequence(qxt_d().key | qxt_d().mods);
 -}
 -
 -bool QxtGlobalShortcut::setShortcut(const QKeySequence& shortcut)
 -{
 -    if (qxt_d().key != 0)
 -        qxt_d().unsetShortcut();
 -    return qxt_d().setShortcut(shortcut);
 -}
 -
 -/*!
 -    \property QxtGlobalShortcut::enabled
 -    \brief whether the shortcut is enabled
 -
 -    A disabled shortcut does not get activated.
 -
 -    The default value is \c true.
 -
 -    \sa setDisabled()
 - */
 -bool QxtGlobalShortcut::isEnabled() const
 -{
 -    return qxt_d().enabled;
 -}
 -
 -void QxtGlobalShortcut::setEnabled(bool enabled)
 -{
 -    qxt_d().enabled = enabled;
 -}
 -
 -/*!
 -    Sets the shortcut \a disabled.
 -
 -    \sa enabled
 - */
 -void QxtGlobalShortcut::setDisabled(bool disabled)
 -{
 -    qxt_d().enabled = !disabled;
 -}
 +#include "qxtglobalshortcut.h" +/**************************************************************************** +** Copyright (c) 2006 - 2011, the LibQxt project. +** See the Qxt AUTHORS file for a list of authors and copyright holders. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +**     * Redistributions of source code must retain the above copyright +**       notice, this list of conditions and the following disclaimer. +**     * Redistributions in binary form must reproduce the above copyright +**       notice, this list of conditions and the following disclaimer in the +**       documentation and/or other materials provided with the distribution. +**     * Neither the name of the LibQxt project nor the +**       names of its contributors may be used to endorse or promote products +**       derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY +** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** <http://libqxt.org>  <foundation@libqxt.org> +*****************************************************************************/ + +#include "qxtglobalshortcut_p.h" +#include <QAbstractEventDispatcher> +#include <QtDebug> + +#ifndef Q_OS_MAC +int QxtGlobalShortcutPrivate::ref = 0; +#   if QT_VERSION < QT_VERSION_CHECK(5,0,0) +QAbstractEventDispatcher::EventFilter QxtGlobalShortcutPrivate::prevEventFilter = 0; +#   endif +#endif // Q_OS_MAC +QHash<QPair<quint32, quint32>, QxtGlobalShortcut*> QxtGlobalShortcutPrivate::shortcuts; + +QxtGlobalShortcutPrivate::QxtGlobalShortcutPrivate() : enabled(true), key(Qt::Key(0)), mods(Qt::NoModifier) +{ +#ifndef Q_OS_MAC +    if (ref == 0) { +#   if QT_VERSION < QT_VERSION_CHECK(5,0,0) +        prevEventFilter = QAbstractEventDispatcher::instance()->setEventFilter(eventFilter); +#   else +        QAbstractEventDispatcher::instance()->installNativeEventFilter(this); +#endif +    } +    ++ref; +#endif // Q_OS_MAC +} + +QxtGlobalShortcutPrivate::~QxtGlobalShortcutPrivate() +{ +#ifndef Q_OS_MAC +    --ref; +    if (ref == 0) { +        QAbstractEventDispatcher *ed = QAbstractEventDispatcher::instance(); +        if (ed != 0) { +#   if QT_VERSION < QT_VERSION_CHECK(5,0,0) +            ed->setEventFilter(prevEventFilter); +#   else +            ed->removeNativeEventFilter(this); +#   endif +        } +    } +#endif // Q_OS_MAC +} + +bool QxtGlobalShortcutPrivate::setShortcut(const QKeySequence& shortcut) +{ +    if (shortcut.toString() == "") return false; +    Qt::KeyboardModifiers allMods = Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier | Qt::MetaModifier; +    key = shortcut.isEmpty() ? Qt::Key(0) : Qt::Key((shortcut[0] ^ allMods) & shortcut[0]); +    mods = shortcut.isEmpty() ? Qt::KeyboardModifiers(0) : Qt::KeyboardModifiers(shortcut[0] & allMods); +    const quint32 nativeKey = nativeKeycode(key); +    const quint32 nativeMods = nativeModifiers(mods); +    const bool res = registerShortcut(nativeKey, nativeMods); +    if (res) +        shortcuts.insert(qMakePair(nativeKey, nativeMods), &qxt_p()); +    else +        qWarning() << "QxtGlobalShortcut failed to register:" << QKeySequence(key + mods).toString(); +    return res; +} + +bool QxtGlobalShortcutPrivate::unsetShortcut() +{ +    bool res = false; +    const quint32 nativeKey = nativeKeycode(key); +    const quint32 nativeMods = nativeModifiers(mods); +    if (shortcuts.value(qMakePair(nativeKey, nativeMods)) == &qxt_p()) +        res = unregisterShortcut(nativeKey, nativeMods); +    if (res) +        shortcuts.remove(qMakePair(nativeKey, nativeMods)); +    else +        qWarning() << "QxtGlobalShortcut failed to unregister:" << QKeySequence(key + mods).toString(); +    key = Qt::Key(0); +    mods = Qt::KeyboardModifiers(0); +    return res; +} + +void QxtGlobalShortcutPrivate::activateShortcut(quint32 nativeKey, quint32 nativeMods) +{ +    QxtGlobalShortcut* shortcut = shortcuts.value(qMakePair(nativeKey, nativeMods)); +    if (shortcut && shortcut->isEnabled()) +        emit shortcut->activated(); +} + +/*! +    \class QxtGlobalShortcut +    \inmodule QxtWidgets +    \brief The QxtGlobalShortcut class provides a global shortcut aka "hotkey". + +    A global shortcut triggers even if the application is not active. This +    makes it easy to implement applications that react to certain shortcuts +    still if some other application is active or if the application is for +    example minimized to the system tray. + +    Example usage: +    \code +    QxtGlobalShortcut* shortcut = new QxtGlobalShortcut(window); +    connect(shortcut, SIGNAL(activated()), window, SLOT(toggleVisibility())); +    shortcut->setShortcut(QKeySequence("Ctrl+Shift+F12")); +    \endcode + +    \bold {Note:} Since Qxt 0.6 QxtGlobalShortcut no more requires QxtApplication. + */ + +/*! +    \fn QxtGlobalShortcut::activated() + +    This signal is emitted when the user types the shortcut's key sequence. + +    \sa shortcut + */ + +/*! +    Constructs a new QxtGlobalShortcut with \a parent. + */ +QxtGlobalShortcut::QxtGlobalShortcut(QObject* parent) +        : QObject(parent) +{ +    QXT_INIT_PRIVATE(QxtGlobalShortcut); +} + +/*! +    Constructs a new QxtGlobalShortcut with \a shortcut and \a parent. + */ +QxtGlobalShortcut::QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent) +        : QObject(parent) +{ +    QXT_INIT_PRIVATE(QxtGlobalShortcut); +    setShortcut(shortcut); +} + +/*! +    Destructs the QxtGlobalShortcut. + */ +QxtGlobalShortcut::~QxtGlobalShortcut() +{ +    if (qxt_d().key != 0) +        qxt_d().unsetShortcut(); +} + +/*! +    \property QxtGlobalShortcut::shortcut +    \brief the shortcut key sequence + +    \bold {Note:} Notice that corresponding key press and release events are not +    delivered for registered global shortcuts even if they are disabled. +    Also, comma separated key sequences are not supported. +    Only the first part is used: + +    \code +    qxtShortcut->setShortcut(QKeySequence("Ctrl+Alt+A,Ctrl+Alt+B")); +    Q_ASSERT(qxtShortcut->shortcut() == QKeySequence("Ctrl+Alt+A")); +    \endcode + */ +QKeySequence QxtGlobalShortcut::shortcut() const +{ +    return QKeySequence(qxt_d().key | qxt_d().mods); +} + +bool QxtGlobalShortcut::setShortcut(const QKeySequence& shortcut) +{ +    if (qxt_d().key != 0) +        qxt_d().unsetShortcut(); +    return qxt_d().setShortcut(shortcut); +} + +/*! +    \property QxtGlobalShortcut::enabled +    \brief whether the shortcut is enabled + +    A disabled shortcut does not get activated. + +    The default value is \c true. + +    \sa setDisabled() + */ +bool QxtGlobalShortcut::isEnabled() const +{ +    return qxt_d().enabled; +} + +void QxtGlobalShortcut::setEnabled(bool enabled) +{ +    qxt_d().enabled = enabled; +} + +/*! +    Sets the shortcut \a disabled. + +    \sa enabled + */ +void QxtGlobalShortcut::setDisabled(bool disabled) +{ +    qxt_d().enabled = !disabled; +} diff --git a/qxt-mini/qxtglobalshortcut.h b/qxt-mini/qxtglobalshortcut.h index a81942d2..641c07c9 100644 --- a/qxt-mini/qxtglobalshortcut.h +++ b/qxt-mini/qxtglobalshortcut.h @@ -1,64 +1,64 @@ -#ifndef QXTGLOBALSHORTCUT_H
 -/****************************************************************************
 -** Copyright (c) 2006 - 2011, the LibQxt project.
 -** See the Qxt AUTHORS file for a list of authors and copyright holders.
 -** All rights reserved.
 -**
 -** Redistribution and use in source and binary forms, with or without
 -** modification, are permitted provided that the following conditions are met:
 -**     * Redistributions of source code must retain the above copyright
 -**       notice, this list of conditions and the following disclaimer.
 -**     * Redistributions in binary form must reproduce the above copyright
 -**       notice, this list of conditions and the following disclaimer in the
 -**       documentation and/or other materials provided with the distribution.
 -**     * Neither the name of the LibQxt project nor the
 -**       names of its contributors may be used to endorse or promote products
 -**       derived from this software without specific prior written permission.
 -**
 -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 -** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 -** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 -** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY
 -** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 -** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 -** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 -** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 -** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 -**
 -** <http://libqxt.org>  <foundation@libqxt.org>
 -*****************************************************************************/
 -
 -#define QXTGLOBALSHORTCUT_H
 -
 -#include "qxtglobal.h"
 -#include <QObject>
 -#include <QKeySequence>
 -class QxtGlobalShortcutPrivate;
 -
 -class QXT_GUI_EXPORT QxtGlobalShortcut : public QObject
 -{
 -    Q_OBJECT
 -    QXT_DECLARE_PRIVATE(QxtGlobalShortcut)
 -    Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled)
 -    Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut)
 -
 -public:
 -    explicit QxtGlobalShortcut(QObject* parent = 0);
 -    explicit QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent = 0);
 -    virtual ~QxtGlobalShortcut();
 -
 -    QKeySequence shortcut() const;
 -    bool setShortcut(const QKeySequence& shortcut);
 -
 -    bool isEnabled() const;
 -
 -public Q_SLOTS:
 -    void setEnabled(bool enabled = true);
 -    void setDisabled(bool disabled = true);
 -
 -Q_SIGNALS:
 -    void activated();
 -};
 -
 -#endif // QXTGLOBALSHORTCUT_H
 +#ifndef QXTGLOBALSHORTCUT_H +/**************************************************************************** +** Copyright (c) 2006 - 2011, the LibQxt project. +** See the Qxt AUTHORS file for a list of authors and copyright holders. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions are met: +**     * Redistributions of source code must retain the above copyright +**       notice, this list of conditions and the following disclaimer. +**     * Redistributions in binary form must reproduce the above copyright +**       notice, this list of conditions and the following disclaimer in the +**       documentation and/or other materials provided with the distribution. +**     * Neither the name of the LibQxt project nor the +**       names of its contributors may be used to endorse or promote products +**       derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY +** DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +** ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** <http://libqxt.org>  <foundation@libqxt.org> +*****************************************************************************/ + +#define QXTGLOBALSHORTCUT_H + +#include "qxtglobal.h" +#include <QObject> +#include <QKeySequence> +class QxtGlobalShortcutPrivate; + +class QXT_GUI_EXPORT QxtGlobalShortcut : public QObject +{ +    Q_OBJECT +    QXT_DECLARE_PRIVATE(QxtGlobalShortcut) +    Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled) +    Q_PROPERTY(QKeySequence shortcut READ shortcut WRITE setShortcut) + +public: +    explicit QxtGlobalShortcut(QObject* parent = 0); +    explicit QxtGlobalShortcut(const QKeySequence& shortcut, QObject* parent = 0); +    virtual ~QxtGlobalShortcut(); + +    QKeySequence shortcut() const; +    bool setShortcut(const QKeySequence& shortcut); + +    bool isEnabled() const; + +public Q_SLOTS: +    void setEnabled(bool enabled = true); +    void setDisabled(bool disabled = true); + +Q_SIGNALS: +    void activated(); +}; + +#endif // QXTGLOBALSHORTCUT_H | 
