diff options
| -rw-r--r-- | facetracknoir/main.ui | 1890 | ||||
| -rw-r--r-- | facetracknoir/new_config.ui | 45 | ||||
| -rw-r--r-- | facetracknoir/new_file_dialog.h | 48 | ||||
| -rw-r--r--[-rwxr-xr-x] | facetracknoir/ui.cpp | 172 | ||||
| -rw-r--r-- | facetracknoir/ui.h | 15 | ||||
| -rw-r--r-- | ftnoir_tracker_hatire/ftnoir_tracker_hat_settings.cpp | 21 | ||||
| -rw-r--r-- | opentrack/options.hpp | 53 | 
7 files changed, 1202 insertions, 1042 deletions
| diff --git a/facetracknoir/main.ui b/facetracknoir/main.ui index 2328be40..f240a510 100644 --- a/facetracknoir/main.ui +++ b/facetracknoir/main.ui @@ -7,8 +7,8 @@     <rect>      <x>0</x>      <y>0</y> -    <width>708</width> -    <height>504</height> +    <width>707</width> +    <height>492</height>     </rect>    </property>    <property name="windowIcon"> @@ -53,13 +53,7 @@        <property name="lineWidth">         <number>0</number>        </property> -      <layout class="QFormLayout" name="formLayout"> -       <property name="horizontalSpacing"> -        <number>0</number> -       </property> -       <property name="verticalSpacing"> -        <number>0</number> -       </property> +      <layout class="QGridLayout" name="gridLayout_5">         <property name="leftMargin">          <number>0</number>         </property> @@ -72,728 +66,755 @@         <property name="bottomMargin">          <number>0</number>         </property> +       <property name="spacing"> +        <number>0</number> +       </property>         <item row="0" column="0"> -        <widget class="QFrame" name="video_feed"> -         <property name="sizePolicy"> -          <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> -           <horstretch>0</horstretch> -           <verstretch>0</verstretch> -          </sizepolicy> -         </property> -         <property name="minimumSize"> -          <size> -           <width>480</width> -           <height>360</height> -          </size> -         </property> -         <property name="maximumSize"> -          <size> -           <width>480</width> -           <height>360</height> -          </size> -         </property> -         <widget class="QFrame" name="video_frame"> -          <property name="geometry"> -           <rect> -            <x>0</x> -            <y>0</y> -            <width>480</width> -            <height>360</height> -           </rect> -          </property> -          <property name="sizePolicy"> -           <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> -            <horstretch>0</horstretch> -            <verstretch>0</verstretch> -           </sizepolicy> -          </property> -          <widget class="QLabel" name="video_frame_label"> -           <property name="geometry"> -            <rect> -             <x>0</x> -             <y>0</y> -             <width>480</width> -             <height>360</height> -            </rect> -           </property> -           <property name="sizePolicy"> -            <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> -             <horstretch>0</horstretch> -             <verstretch>0</verstretch> -            </sizepolicy> -           </property> -           <property name="minimumSize"> -            <size> -             <width>480</width> -             <height>360</height> -            </size> -           </property> -           <property name="maximumSize"> -            <size> -             <width>480</width> -             <height>360</height> -            </size> -           </property> -           <property name="text"> -            <string/> -           </property> -          </widget> -         </widget> -        </widget> -       </item> -       <item row="0" column="1"> -        <widget class="QFrame" name="top_display"> +        <widget class="QFrame" name="top">           <property name="frameShape">            <enum>QFrame::NoFrame</enum>           </property> -         <property name="lineWidth"> -          <number>0</number> -         </property> -         <layout class="QVBoxLayout"> +         <layout class="QHBoxLayout" name="horizontalLayout_2">            <property name="spacing"> -           <number>12</number> +           <number>0</number>            </property>            <property name="leftMargin"> -           <number>6</number> +           <number>0</number>            </property>            <property name="topMargin"> -           <number>12</number> +           <number>0</number>            </property>            <property name="rightMargin"> -           <number>8</number> +           <number>0</number>            </property>            <property name="bottomMargin"> -           <number>4</number> +           <number>0</number>            </property>            <item> -           <widget class="GLWidget" name="pose_display" native="true"> +           <widget class="QFrame" name="video_feed">              <property name="sizePolicy"> -             <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding"> +             <sizepolicy hsizetype="Fixed" vsizetype="Fixed">                <horstretch>0</horstretch>                <verstretch>0</verstretch>               </sizepolicy>              </property> -            <property name="maximumSize"> +            <property name="minimumSize">               <size> -              <width>80</width> -              <height>90</height> +              <width>480</width> +              <height>360</height>               </size>              </property> -           </widget> -          </item> -          <item> -           <widget class="QGroupBox" name="box_raw_headpose"> -            <property name="sizePolicy"> -             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum"> -              <horstretch>0</horstretch> -              <verstretch>0</verstretch> -             </sizepolicy> -            </property> -            <property name="title"> -             <string notr="true">Raw tracker data</string> +            <property name="maximumSize"> +             <size> +              <width>480</width> +              <height>360</height> +             </size>              </property> -            <layout class="QGridLayout" name="gridLayout_12"> -             <property name="leftMargin"> -              <number>0</number> -             </property> -             <property name="topMargin"> -              <number>0</number> +            <widget class="QFrame" name="video_frame"> +             <property name="geometry"> +              <rect> +               <x>0</x> +               <y>0</y> +               <width>480</width> +               <height>360</height> +              </rect>               </property> -             <property name="rightMargin"> -              <number>0</number> +             <property name="sizePolicy"> +              <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> +               <horstretch>0</horstretch> +               <verstretch>0</verstretch> +              </sizepolicy>               </property> -             <property name="bottomMargin"> -              <number>0</number> -             </property> -             <property name="horizontalSpacing"> -              <number>3</number> -             </property> -             <property name="verticalSpacing"> -              <number>2</number> -             </property> -             <item row="0" column="1"> -              <widget class="QLCDNumber" name="raw_x"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Plain</enum> -               </property> -               <property name="lineWidth"> -                <number>1</number> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Outline</enum> -               </property> -              </widget> -             </item> -             <item row="0" column="2"> -              <widget class="QLabel" name="lblRotX_4"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>yaw</string> -               </property> -              </widget> -             </item> -             <item row="2" column="2"> -              <widget class="QLabel" name="lblRotZ_4"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>roll</string> -               </property> -              </widget> -             </item> -             <item row="2" column="0"> -              <widget class="QLabel" name="lblZ_4"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="autoFillBackground"> -                <bool>false</bool> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>TZ</string> -               </property> -              </widget> -             </item> -             <item row="1" column="2"> -              <widget class="QLabel" name="lblRotY_4"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>pitch</string> -               </property> -              </widget> -             </item> -             <item row="1" column="1"> -              <widget class="QLCDNumber" name="raw_y"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Plain</enum> -               </property> -               <property name="lineWidth"> -                <number>1</number> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Outline</enum> -               </property> -              </widget> -             </item> -             <item row="0" column="3"> -              <widget class="QLCDNumber" name="raw_yaw"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Plain</enum> -               </property> -               <property name="lineWidth"> -                <number>1</number> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Outline</enum> -               </property> -              </widget> -             </item> -             <item row="2" column="3"> -              <widget class="QLCDNumber" name="raw_roll"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Plain</enum> -               </property> -               <property name="lineWidth"> -                <number>1</number> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Outline</enum> -               </property> -              </widget> -             </item> -             <item row="2" column="1"> -              <widget class="QLCDNumber" name="raw_z"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Plain</enum> -               </property> -               <property name="lineWidth"> -                <number>1</number> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Outline</enum> -               </property> -              </widget> -             </item> -             <item row="0" column="0"> -              <widget class="QLabel" name="lblX_4"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>TX</string> -               </property> -              </widget> -             </item> -             <item row="1" column="3"> -              <widget class="QLCDNumber" name="raw_pitch"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Plain</enum> -               </property> -               <property name="lineWidth"> -                <number>1</number> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Outline</enum> -               </property> -              </widget> -             </item> -             <item row="1" column="0"> -              <widget class="QLabel" name="lblY_4"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="autoFillBackground"> -                <bool>false</bool> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>TY</string> -               </property> -              </widget> -             </item> -            </layout> +             <widget class="QLabel" name="video_frame_label"> +              <property name="geometry"> +               <rect> +                <x>0</x> +                <y>0</y> +                <width>480</width> +                <height>360</height> +               </rect> +              </property> +              <property name="sizePolicy"> +               <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> +                <horstretch>0</horstretch> +                <verstretch>0</verstretch> +               </sizepolicy> +              </property> +              <property name="minimumSize"> +               <size> +                <width>480</width> +                <height>360</height> +               </size> +              </property> +              <property name="maximumSize"> +               <size> +                <width>480</width> +                <height>360</height> +               </size> +              </property> +              <property name="text"> +               <string/> +              </property> +             </widget> +            </widget>             </widget>            </item>            <item> -           <widget class="QGroupBox" name="box_mapped_headpose"> -            <property name="sizePolicy"> -             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum"> -              <horstretch>0</horstretch> -              <verstretch>0</verstretch> -             </sizepolicy> +           <widget class="QFrame" name="top_display"> +            <property name="frameShape"> +             <enum>QFrame::NoFrame</enum>              </property> -            <property name="title"> -             <string notr="true">Game data</string> +            <property name="lineWidth"> +             <number>0</number>              </property> -            <layout class="QGridLayout" name="gridLayout_14"> +            <layout class="QVBoxLayout"> +             <property name="spacing"> +              <number>12</number> +             </property>               <property name="leftMargin"> -              <number>0</number> +              <number>6</number>               </property>               <property name="topMargin"> -              <number>0</number> +              <number>12</number>               </property>               <property name="rightMargin"> -              <number>0</number> +              <number>8</number>               </property>               <property name="bottomMargin"> -              <number>0</number> -             </property> -             <property name="horizontalSpacing"> -              <number>3</number> -             </property> -             <property name="verticalSpacing"> -              <number>2</number> +              <number>4</number>               </property> -             <item row="1" column="0"> -              <widget class="QLabel" name="lblY_2"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="autoFillBackground"> -                <bool>false</bool> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>TY</string> -               </property> -              </widget> -             </item> -             <item row="1" column="2"> -              <widget class="QLabel" name="lblRotY_2"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>pitch</string> -               </property> -              </widget> -             </item> -             <item row="0" column="1"> -              <widget class="QLCDNumber" name="pose_x"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Flat</enum> -               </property> -              </widget> -             </item> -             <item row="0" column="2"> -              <widget class="QLabel" name="lblRotX_2"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>yaw</string> -               </property> -              </widget> -             </item> -             <item row="2" column="2"> -              <widget class="QLabel" name="lblRotZ_2"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>roll</string> -               </property> -              </widget> -             </item> -             <item row="2" column="0"> -              <widget class="QLabel" name="lblZ_2"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="autoFillBackground"> -                <bool>false</bool> -               </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>TZ</string> -               </property> -              </widget> -             </item> -             <item row="1" column="1"> -              <widget class="QLCDNumber" name="pose_y"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Flat</enum> -               </property> -              </widget> -             </item> -             <item row="2" column="3"> -              <widget class="QLCDNumber" name="pose_roll"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Flat</enum> -               </property> -              </widget> -             </item> -             <item row="0" column="3"> -              <widget class="QLCDNumber" name="pose_yaw"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Flat</enum> -               </property> -              </widget> -             </item> -             <item row="2" column="1"> -              <widget class="QLCDNumber" name="pose_z"> -               <property name="enabled"> -                <bool>true</bool> -               </property> +             <item> +              <widget class="GLWidget" name="pose_display" native="true">                 <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">                   <horstretch>0</horstretch>                   <verstretch>0</verstretch>                  </sizepolicy>                 </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Flat</enum> +               <property name="maximumSize"> +                <size> +                 <width>80</width> +                 <height>90</height> +                </size>                 </property>                </widget>               </item> -             <item row="0" column="0"> -              <widget class="QLabel" name="lblx"> +             <item> +              <widget class="QGroupBox" name="box_raw_headpose">                 <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">                   <horstretch>0</horstretch>                   <verstretch>0</verstretch>                  </sizepolicy>                 </property> -               <property name="frameShadow"> -                <enum>QFrame::Raised</enum> -               </property> -               <property name="text"> -                <string>TX</string> -               </property> +               <property name="title"> +                <string notr="true">Raw tracker data</string> +               </property> +               <layout class="QGridLayout" name="gridLayout_12"> +                <property name="leftMargin"> +                 <number>0</number> +                </property> +                <property name="topMargin"> +                 <number>0</number> +                </property> +                <property name="rightMargin"> +                 <number>0</number> +                </property> +                <property name="bottomMargin"> +                 <number>0</number> +                </property> +                <property name="horizontalSpacing"> +                 <number>3</number> +                </property> +                <property name="verticalSpacing"> +                 <number>2</number> +                </property> +                <item row="0" column="1"> +                 <widget class="QLCDNumber" name="raw_x"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Plain</enum> +                  </property> +                  <property name="lineWidth"> +                   <number>1</number> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Outline</enum> +                  </property> +                 </widget> +                </item> +                <item row="0" column="2"> +                 <widget class="QLabel" name="lblRotX_4"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>yaw</string> +                  </property> +                 </widget> +                </item> +                <item row="2" column="2"> +                 <widget class="QLabel" name="lblRotZ_4"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>roll</string> +                  </property> +                 </widget> +                </item> +                <item row="2" column="0"> +                 <widget class="QLabel" name="lblZ_4"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="autoFillBackground"> +                   <bool>false</bool> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>TZ</string> +                  </property> +                 </widget> +                </item> +                <item row="1" column="2"> +                 <widget class="QLabel" name="lblRotY_4"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>pitch</string> +                  </property> +                 </widget> +                </item> +                <item row="1" column="1"> +                 <widget class="QLCDNumber" name="raw_y"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Plain</enum> +                  </property> +                  <property name="lineWidth"> +                   <number>1</number> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Outline</enum> +                  </property> +                 </widget> +                </item> +                <item row="0" column="3"> +                 <widget class="QLCDNumber" name="raw_yaw"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Plain</enum> +                  </property> +                  <property name="lineWidth"> +                   <number>1</number> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Outline</enum> +                  </property> +                 </widget> +                </item> +                <item row="2" column="3"> +                 <widget class="QLCDNumber" name="raw_roll"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Plain</enum> +                  </property> +                  <property name="lineWidth"> +                   <number>1</number> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Outline</enum> +                  </property> +                 </widget> +                </item> +                <item row="2" column="1"> +                 <widget class="QLCDNumber" name="raw_z"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Plain</enum> +                  </property> +                  <property name="lineWidth"> +                   <number>1</number> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Outline</enum> +                  </property> +                 </widget> +                </item> +                <item row="0" column="0"> +                 <widget class="QLabel" name="lblX_4"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>TX</string> +                  </property> +                 </widget> +                </item> +                <item row="1" column="3"> +                 <widget class="QLCDNumber" name="raw_pitch"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Plain</enum> +                  </property> +                  <property name="lineWidth"> +                   <number>1</number> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Outline</enum> +                  </property> +                 </widget> +                </item> +                <item row="1" column="0"> +                 <widget class="QLabel" name="lblY_4"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="autoFillBackground"> +                   <bool>false</bool> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>TY</string> +                  </property> +                 </widget> +                </item> +               </layout>                </widget>               </item> -             <item row="1" column="3"> -              <widget class="QLCDNumber" name="pose_pitch"> -               <property name="enabled"> -                <bool>true</bool> -               </property> +             <item> +              <widget class="QGroupBox" name="box_mapped_headpose">                 <property name="sizePolicy"> -                <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">                   <horstretch>0</horstretch>                   <verstretch>0</verstretch>                  </sizepolicy>                 </property> -               <property name="frameShape"> -                <enum>QFrame::NoFrame</enum> -               </property> -               <property name="smallDecimalPoint"> -                <bool>true</bool> -               </property> -               <property name="digitCount"> -                <number>4</number> -               </property> -               <property name="segmentStyle"> -                <enum>QLCDNumber::Flat</enum> -               </property> +               <property name="title"> +                <string notr="true">Game data</string> +               </property> +               <layout class="QGridLayout" name="gridLayout_14"> +                <property name="leftMargin"> +                 <number>0</number> +                </property> +                <property name="topMargin"> +                 <number>0</number> +                </property> +                <property name="rightMargin"> +                 <number>0</number> +                </property> +                <property name="bottomMargin"> +                 <number>0</number> +                </property> +                <property name="horizontalSpacing"> +                 <number>3</number> +                </property> +                <property name="verticalSpacing"> +                 <number>2</number> +                </property> +                <item row="1" column="0"> +                 <widget class="QLabel" name="lblY_2"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="autoFillBackground"> +                   <bool>false</bool> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>TY</string> +                  </property> +                 </widget> +                </item> +                <item row="1" column="2"> +                 <widget class="QLabel" name="lblRotY_2"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>pitch</string> +                  </property> +                 </widget> +                </item> +                <item row="0" column="1"> +                 <widget class="QLCDNumber" name="pose_x"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Flat</enum> +                  </property> +                 </widget> +                </item> +                <item row="0" column="2"> +                 <widget class="QLabel" name="lblRotX_2"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>yaw</string> +                  </property> +                 </widget> +                </item> +                <item row="2" column="2"> +                 <widget class="QLabel" name="lblRotZ_2"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>roll</string> +                  </property> +                 </widget> +                </item> +                <item row="2" column="0"> +                 <widget class="QLabel" name="lblZ_2"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="autoFillBackground"> +                   <bool>false</bool> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>TZ</string> +                  </property> +                 </widget> +                </item> +                <item row="1" column="1"> +                 <widget class="QLCDNumber" name="pose_y"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Flat</enum> +                  </property> +                 </widget> +                </item> +                <item row="2" column="3"> +                 <widget class="QLCDNumber" name="pose_roll"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Flat</enum> +                  </property> +                 </widget> +                </item> +                <item row="0" column="3"> +                 <widget class="QLCDNumber" name="pose_yaw"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Flat</enum> +                  </property> +                 </widget> +                </item> +                <item row="2" column="1"> +                 <widget class="QLCDNumber" name="pose_z"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Flat</enum> +                  </property> +                 </widget> +                </item> +                <item row="0" column="0"> +                 <widget class="QLabel" name="lblx"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShadow"> +                   <enum>QFrame::Raised</enum> +                  </property> +                  <property name="text"> +                   <string>TX</string> +                  </property> +                 </widget> +                </item> +                <item row="1" column="3"> +                 <widget class="QLCDNumber" name="pose_pitch"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="frameShape"> +                   <enum>QFrame::NoFrame</enum> +                  </property> +                  <property name="smallDecimalPoint"> +                   <bool>true</bool> +                  </property> +                  <property name="digitCount"> +                   <number>4</number> +                  </property> +                  <property name="segmentStyle"> +                   <enum>QLCDNumber::Flat</enum> +                  </property> +                 </widget> +                </item> +               </layout>                </widget>               </item>              </layout> @@ -802,112 +823,142 @@           </layout>          </widget>         </item> -       <item row="1" column="0" colspan="2"> +       <item row="1" column="0">          <widget class="QFrame" name="bottom_controls"> +         <property name="sizePolicy"> +          <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +           <horstretch>0</horstretch> +           <verstretch>0</verstretch> +          </sizepolicy> +         </property>           <layout class="QGridLayout" name="gridLayout_2"> +          <property name="leftMargin"> +           <number>4</number> +          </property>            <property name="topMargin"> -           <number>0</number> +           <number>8</number> +          </property> +          <property name="rightMargin"> +           <number>10</number>            </property>            <property name="bottomMargin">             <number>0</number>            </property>            <property name="horizontalSpacing"> -           <number>6</number> +           <number>4</number>            </property>            <property name="verticalSpacing">             <number>0</number>            </property> -          <item row="1" column="1"> -           <widget class="QGroupBox" name="groupStartStop"> +          <item row="1" column="2"> +           <widget class="QGroupBox" name="groupWindows"> +            <property name="sizePolicy"> +             <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +              <horstretch>4</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property>              <property name="title"> -             <string notr="true">Controls</string> +             <string>Settings</string>              </property>              <property name="flat">               <bool>true</bool>              </property> -            <layout class="QGridLayout" name="gridLayout_5"> +            <layout class="QVBoxLayout" name="verticalLayout_3"> +             <property name="spacing"> +              <number>3</number> +             </property>               <property name="leftMargin">                <number>4</number>               </property>               <property name="topMargin"> -              <number>12</number> +              <number>2</number>               </property>               <property name="rightMargin"> -              <number>4</number> +              <number>0</number>               </property>               <property name="bottomMargin"> -              <number>12</number> +              <number>6</number>               </property> -             <item row="0" column="1"> -              <widget class="QToolButton" name="btnStopTracker"> -               <property name="enabled"> -                <bool>false</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="text"> -                <string>Stop</string> -               </property> -              </widget> -             </item> -             <item row="0" column="0"> -              <widget class="QToolButton" name="btnStartTracker"> +             <item> +              <widget class="QFrame" name="groupProfile">                 <property name="sizePolicy"> -                <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> +                <sizepolicy hsizetype="Preferred" vsizetype="MinimumExpanding">                   <horstretch>0</horstretch> -                 <verstretch>0</verstretch> +                 <verstretch>2</verstretch>                  </sizepolicy>                 </property> -               <property name="text"> -                <string>Start</string> -               </property> +               <layout class="QHBoxLayout" name="horizontalLayout"> +                <property name="spacing"> +                 <number>0</number> +                </property> +                <property name="leftMargin"> +                 <number>0</number> +                </property> +                <property name="rightMargin"> +                 <number>2</number> +                </property> +                <property name="bottomMargin"> +                 <number>2</number> +                </property> +                <item> +                 <widget class="QToolButton" name="profile_button"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="text"> +                   <string>Profile</string> +                  </property> +                  <property name="popupMode"> +                   <enum>QToolButton::InstantPopup</enum> +                  </property> +                  <property name="toolButtonStyle"> +                   <enum>Qt::ToolButtonTextBesideIcon</enum> +                  </property> +                  <property name="autoRaise"> +                   <bool>true</bool> +                  </property> +                  <property name="arrowType"> +                   <enum>Qt::DownArrow</enum> +                  </property> +                 </widget> +                </item> +                <item> +                 <widget class="QComboBox" name="iconcomboProfile"> +                  <property name="sizePolicy"> +                   <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +                    <horstretch>0</horstretch> +                    <verstretch>0</verstretch> +                   </sizepolicy> +                  </property> +                  <property name="maxVisibleItems"> +                   <number>10</number> +                  </property> +                 </widget> +                </item> +               </layout>                </widget>               </item> -            </layout> -           </widget> -          </item> -          <item row="1" column="2"> -           <widget class="QGroupBox" name="groupWindows"> -            <property name="title"> -             <string>Settings</string> -            </property> -            <property name="flat"> -             <bool>true</bool> -            </property> -            <layout class="QGridLayout" name="gridLayout_6"> -             <property name="leftMargin"> -              <number>4</number> -             </property> -             <property name="topMargin"> -              <number>0</number> -             </property> -             <property name="rightMargin"> -              <number>4</number> -             </property> -             <property name="bottomMargin"> -              <number>4</number> -             </property> -             <property name="verticalSpacing"> -              <number>2</number> -             </property> -             <item row="1" column="0"> -              <widget class="QPushButton" name="btnShortcuts"> +             <item> +              <widget class="QPushButton" name="btnEditCurves">                 <property name="sizePolicy"> -                <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">                   <horstretch>0</horstretch> -                 <verstretch>0</verstretch> +                 <verstretch>3</verstretch>                  </sizepolicy>                 </property>                 <property name="text"> -                <string>Options</string> +                <string>Mapping</string>                 </property>                 <property name="icon">                  <iconset resource="ui-res.qrc"> -                 <normaloff>:/images/tools.png</normaloff>:/images/tools.png</iconset> +                 <normaloff>:/images/curves.png</normaloff>:/images/curves.png</iconset>                 </property>                 <property name="iconSize">                  <size> @@ -917,20 +968,20 @@                 </property>                </widget>               </item> -             <item row="0" column="0"> -              <widget class="QPushButton" name="btnEditCurves"> +             <item> +              <widget class="QPushButton" name="btnShortcuts">                 <property name="sizePolicy"> -                <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> +                <sizepolicy hsizetype="Preferred" vsizetype="Preferred">                   <horstretch>0</horstretch> -                 <verstretch>0</verstretch> +                 <verstretch>3</verstretch>                  </sizepolicy>                 </property>                 <property name="text"> -                <string>Mapping</string> +                <string>Options</string>                 </property>                 <property name="icon">                  <iconset resource="ui-res.qrc"> -                 <normaloff>:/images/curves.png</normaloff>:/images/curves.png</iconset> +                 <normaloff>:/images/tools.png</normaloff>:/images/tools.png</iconset>                 </property>                 <property name="iconSize">                  <size> @@ -943,230 +994,225 @@              </layout>             </widget>            </item> -          <item row="0" column="2"> -           <widget class="QGroupBox" name="groupFilter"> +          <item row="1" column="1"> +           <widget class="QGroupBox" name="groupStartStop"> +            <property name="sizePolicy"> +             <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +              <horstretch>3</horstretch> +              <verstretch>0</verstretch> +             </sizepolicy> +            </property>              <property name="title"> -             <string>Filter</string> +             <string notr="true">Controls</string>              </property>              <property name="flat">               <bool>true</bool>              </property> -            <layout class="QGridLayout" name="gridLayout_3"> +            <layout class="QVBoxLayout" name="verticalLayout_4"> +             <property name="spacing"> +              <number>8</number> +             </property>               <property name="leftMargin"> -              <number>4</number> +              <number>0</number>               </property>               <property name="topMargin"> -              <number>0</number> +              <number>8</number>               </property>               <property name="rightMargin"> -              <number>4</number> +              <number>0</number>               </property>               <property name="bottomMargin"> -              <number>4</number> +              <number>9</number>               </property> -             <property name="horizontalSpacing"> -              <number>3</number> -             </property> -             <property name="verticalSpacing"> -              <number>2</number> -             </property> -             <item row="0" column="0"> -              <widget class="QComboBox" name="iconcomboFilter"/> -             </item> -             <item row="0" column="1"> -              <widget class="QToolButton" name="btnShowFilterControls"> -               <property name="enabled"> -                <bool>true</bool> +             <item> +              <widget class="QToolButton" name="btnStartTracker"> +               <property name="sizePolicy"> +                <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> +                 <horstretch>0</horstretch> +                 <verstretch>0</verstretch> +                </sizepolicy>                 </property>                 <property name="text"> -                <string>...</string> -               </property> -               <property name="flat" stdset="0"> -                <bool>false</bool> +                <string>Start</string>                 </property>                </widget>               </item> -            </layout> -           </widget> -          </item> -          <item row="0" column="0"> -           <widget class="QGroupBox" name="groupTrackerSource"> -            <property name="title"> -             <string>Tracker</string> -            </property> -            <property name="flat"> -             <bool>true</bool> -            </property> -            <layout class="QGridLayout" name="gridLayout"> -             <property name="leftMargin"> -              <number>4</number> -             </property> -             <property name="topMargin"> -              <number>0</number> -             </property> -             <property name="rightMargin"> -              <number>4</number> -             </property> -             <property name="bottomMargin"> -              <number>4</number> -             </property> -             <property name="horizontalSpacing"> -              <number>3</number> -             </property> -             <property name="verticalSpacing"> -              <number>2</number> -             </property> -             <item row="0" column="0"> -              <widget class="QComboBox" name="iconcomboTrackerSource"/> -             </item> -             <item row="0" column="1"> -              <widget class="QToolButton" name="btnShowEngineControls"> +             <item> +              <widget class="QToolButton" name="btnStopTracker">                 <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="text"> -                <string>...</string> -               </property> -               <property name="flat" stdset="0">                  <bool>false</bool>                 </property> -              </widget> -             </item> -            </layout> -           </widget> -          </item> -          <item row="0" column="1"> -           <widget class="QGroupBox" name="groupGameProtocol"> -            <property name="title"> -             <string>Protocol</string> -            </property> -            <property name="flat"> -             <bool>true</bool> -            </property> -            <layout class="QGridLayout" name="gridLayout_4"> -             <property name="leftMargin"> -              <number>4</number> -             </property> -             <property name="topMargin"> -              <number>0</number> -             </property> -             <property name="rightMargin"> -              <number>4</number> -             </property> -             <property name="bottomMargin"> -              <number>4</number> -             </property> -             <property name="horizontalSpacing"> -              <number>3</number> -             </property> -             <property name="verticalSpacing"> -              <number>2</number> -             </property> -             <item row="0" column="1"> -              <widget class="QToolButton" name="btnShowServerControls"> -               <property name="enabled"> -                <bool>true</bool> +               <property name="sizePolicy"> +                <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> +                 <horstretch>0</horstretch> +                 <verstretch>0</verstretch> +                </sizepolicy>                 </property>                 <property name="text"> -                <string>...</string> -               </property> -               <property name="flat" stdset="0"> -                <bool>false</bool> +                <string>Stop</string>                 </property>                </widget>               </item> -             <item row="0" column="0"> -              <widget class="QComboBox" name="iconcomboProtocol"/> -             </item>              </layout>             </widget>            </item>            <item row="1" column="0"> -           <widget class="QGroupBox" name="groupProfile"> +           <widget class="QFrame" name="frame_2">              <property name="sizePolicy"> -             <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> -              <horstretch>0</horstretch> +             <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> +              <horstretch>4</horstretch>                <verstretch>0</verstretch>               </sizepolicy>              </property> -            <property name="title"> -             <string>Profile</string> +            <property name="frameShape"> +             <enum>QFrame::NoFrame</enum>              </property> -            <property name="flat"> -             <bool>true</bool> +            <property name="frameShadow"> +             <enum>QFrame::Raised</enum>              </property> -            <layout class="QGridLayout" name="gridLayout_7"> +            <layout class="QVBoxLayout" name="verticalLayout"> +             <property name="spacing"> +              <number>2</number> +             </property>               <property name="leftMargin"> -              <number>4</number> +              <number>3</number>               </property>               <property name="topMargin"> -              <number>0</number> +              <number>2</number>               </property>               <property name="rightMargin"> -              <number>4</number> +              <number>3</number>               </property>               <property name="bottomMargin"> -              <number>4</number> +              <number>8</number>               </property> -             <property name="verticalSpacing"> -              <number>2</number> -             </property> -             <item row="0" column="0"> -              <widget class="QComboBox" name="iconcomboProfile"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="maxVisibleItems"> -                <number>10</number> -               </property> -              </widget> -             </item> -             <item row="1" column="0"> -              <widget class="QToolButton" name="btnLoad"> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="text"> -                <string>Load</string> -               </property> +             <item> +              <widget class="QGroupBox" name="groupTrackerSource"> +               <property name="title"> +                <string>Tracker</string> +               </property> +               <layout class="QGridLayout" name="gridLayout"> +                <property name="leftMargin"> +                 <number>4</number> +                </property> +                <property name="topMargin"> +                 <number>0</number> +                </property> +                <property name="rightMargin"> +                 <number>4</number> +                </property> +                <property name="bottomMargin"> +                 <number>0</number> +                </property> +                <property name="horizontalSpacing"> +                 <number>3</number> +                </property> +                <property name="verticalSpacing"> +                 <number>0</number> +                </property> +                <item row="0" column="0"> +                 <widget class="QComboBox" name="iconcomboTrackerSource"/> +                </item> +                <item row="0" column="1"> +                 <widget class="QToolButton" name="btnShowEngineControls"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="text"> +                   <string>...</string> +                  </property> +                  <property name="flat" stdset="0"> +                   <bool>false</bool> +                  </property> +                 </widget> +                </item> +               </layout>                </widget>               </item> -             <item row="0" column="1"> -              <widget class="QToolButton" name="btnSave"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="text"> -                <string>Save</string> -               </property> +             <item> +              <widget class="QGroupBox" name="groupGameProtocol"> +               <property name="title"> +                <string>Protocol</string> +               </property> +               <layout class="QGridLayout" name="gridLayout_4"> +                <property name="leftMargin"> +                 <number>4</number> +                </property> +                <property name="topMargin"> +                 <number>0</number> +                </property> +                <property name="rightMargin"> +                 <number>4</number> +                </property> +                <property name="bottomMargin"> +                 <number>0</number> +                </property> +                <property name="horizontalSpacing"> +                 <number>3</number> +                </property> +                <property name="verticalSpacing"> +                 <number>0</number> +                </property> +                <item row="0" column="0"> +                 <widget class="QComboBox" name="iconcomboProtocol"/> +                </item> +                <item row="0" column="1"> +                 <widget class="QToolButton" name="btnShowServerControls"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="text"> +                   <string>...</string> +                  </property> +                  <property name="flat" stdset="0"> +                   <bool>false</bool> +                  </property> +                 </widget> +                </item> +               </layout>                </widget>               </item> -             <item row="1" column="1"> -              <widget class="QToolButton" name="btnSaveAs"> -               <property name="enabled"> -                <bool>true</bool> -               </property> -               <property name="sizePolicy"> -                <sizepolicy hsizetype="Maximum" vsizetype="Fixed"> -                 <horstretch>0</horstretch> -                 <verstretch>0</verstretch> -                </sizepolicy> -               </property> -               <property name="text"> -                <string>Save...</string> -               </property> +             <item> +              <widget class="QGroupBox" name="groupFilter"> +               <property name="title"> +                <string>Filter</string> +               </property> +               <layout class="QGridLayout" name="gridLayout_3"> +                <property name="leftMargin"> +                 <number>4</number> +                </property> +                <property name="topMargin"> +                 <number>0</number> +                </property> +                <property name="rightMargin"> +                 <number>4</number> +                </property> +                <property name="bottomMargin"> +                 <number>0</number> +                </property> +                <property name="horizontalSpacing"> +                 <number>3</number> +                </property> +                <property name="verticalSpacing"> +                 <number>0</number> +                </property> +                <item row="0" column="0"> +                 <widget class="QComboBox" name="iconcomboFilter"/> +                </item> +                <item row="0" column="1"> +                 <widget class="QToolButton" name="btnShowFilterControls"> +                  <property name="enabled"> +                   <bool>true</bool> +                  </property> +                  <property name="text"> +                   <string>...</string> +                  </property> +                  <property name="flat" stdset="0"> +                   <bool>false</bool> +                  </property> +                 </widget> +                </item> +               </layout>                </widget>               </item>              </layout> @@ -1197,10 +1243,6 @@    <tabstop>btnShowServerControls</tabstop>    <tabstop>iconcomboFilter</tabstop>    <tabstop>btnShowFilterControls</tabstop> -  <tabstop>iconcomboProfile</tabstop> -  <tabstop>btnLoad</tabstop> -  <tabstop>btnSave</tabstop> -  <tabstop>btnSaveAs</tabstop>    <tabstop>btnEditCurves</tabstop>    <tabstop>btnShortcuts</tabstop>   </tabstops> diff --git a/facetracknoir/new_config.ui b/facetracknoir/new_config.ui new file mode 100644 index 00000000..27dce0f8 --- /dev/null +++ b/facetracknoir/new_config.ui @@ -0,0 +1,45 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>UI_new_config</class> + <widget class="QDialog" name="UI_new_config"> +  <property name="windowModality"> +   <enum>Qt::ApplicationModal</enum> +  </property> +  <property name="geometry"> +   <rect> +    <x>0</x> +    <y>0</y> +    <width>269</width> +    <height>67</height> +   </rect> +  </property> +  <property name="windowTitle"> +   <string>Config filename</string> +  </property> +  <property name="windowIcon"> +   <iconset> +    <normaloff>images/facetracknoir.png</normaloff>images/facetracknoir.png</iconset> +  </property> +  <layout class="QFormLayout" name="formLayout"> +   <item row="0" column="0"> +    <widget class="QLabel" name="label"> +     <property name="text"> +      <string>New file name:</string> +     </property> +    </widget> +   </item> +   <item row="0" column="1"> +    <widget class="QLineEdit" name="lineEdit"/> +   </item> +   <item row="1" column="1"> +    <widget class="QDialogButtonBox" name="buttonBox"> +     <property name="standardButtons"> +      <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> +     </property> +    </widget> +   </item> +  </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/facetracknoir/new_file_dialog.h b/facetracknoir/new_file_dialog.h new file mode 100644 index 00000000..dc821592 --- /dev/null +++ b/facetracknoir/new_file_dialog.h @@ -0,0 +1,48 @@ +#pragma once + +#include "ui_new_config.h" +#include "opentrack/options.hpp" +#include <QFile> +#include <QRegExp> +#include <QString> +#include <QMessageBox> + +class new_file_dialog : public QDialog +{ +    Q_OBJECT +public: +    new_file_dialog(QWidget* parent = 0) : QDialog(parent), ok(false) +    { +        ui.setupUi(this); +        connect(ui.buttonBox, SIGNAL(accepted()), this, SLOT(ok_clicked())); +        connect(ui.buttonBox, SIGNAL(rejected()), this, SLOT(cancel_clicked())); +        setFixedSize(size()); +    } +    bool is_ok(QString& name_) +    { +        name_ = name; +        return ok; +    } +private: +    Ui::UI_new_config ui; +    bool ok; +    QString name; +private slots: +    void cancel_clicked() { close(); } +    void ok_clicked() +    { +        QString text = ui.lineEdit->text(); +        text = text.replace('/', ""); +        text = text.replace('\\', ""); +        if (text == "" || QFile(options::group::ini_directory() + "/" + text).exists()) +        { +            QMessageBox::warning(this, +                                 "File exists", "This file already exists. Pick another name.", +                                 QMessageBox::Ok, QMessageBox::NoButton); +            return; +        } +        ok = true; +        close(); +        name = text; +    } +}; diff --git a/facetracknoir/ui.cpp b/facetracknoir/ui.cpp index 3f87ca2f..958a2439 100755..100644 --- a/facetracknoir/ui.cpp +++ b/facetracknoir/ui.cpp @@ -33,7 +33,10 @@  #include "ui.h"  #include "opentrack/tracker.h"  #include "opentrack/options.hpp" +#include "facetracknoir/new_file_dialog.h"  #include <QFileDialog> +#include <QDesktopServices> +#include <QMenu>  #ifndef _WIN32  #   include <unistd.h> @@ -53,10 +56,6 @@ MainWindow::MainWindow() :      updateButtonState(false, false);      ui.video_frame_label->setPixmap(no_feed_pixmap); -    connect(ui.btnLoad, SIGNAL(clicked()), this, SLOT(open())); -    connect(ui.btnSave, SIGNAL(clicked()), this, SLOT(save())); -    connect(ui.btnSaveAs, SIGNAL(clicked()), this, SLOT(saveAs())); -      connect(ui.btnEditCurves, SIGNAL(clicked()), this, SLOT(showCurveConfiguration()));      connect(ui.btnShortcuts, SIGNAL(clicked()), this, SLOT(showKeyboardShortcuts()));      connect(ui.btnShowEngineControls, SIGNAL(clicked()), this, SLOT(showTrackerSettings())); @@ -74,7 +73,7 @@ MainWindow::MainWindow() :      for (auto x : modules.filters())          ui.iconcomboFilter->addItem(x->icon, x->name); -    fill_profile_combobox(); +    refresh_config_list();      tie_setting(s.tracker_dll, ui.iconcomboTrackerSource);      tie_setting(s.protocol_dll, ui.iconcomboProtocol); @@ -82,15 +81,15 @@ MainWindow::MainWindow() :      connect(ui.iconcomboTrackerSource,              static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), -            [&](int) -> void { if (pTrackerDialog) pTrackerDialog = nullptr; }); +            [&](int) -> void { if (pTrackerDialog) pTrackerDialog = nullptr; save(); });      connect(ui.iconcomboProtocol,              static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), -            [&](int) -> void { if (pProtocolDialog) pProtocolDialog = nullptr; }); +            [&](int) -> void { if (pProtocolDialog) pProtocolDialog = nullptr; save(); });      connect(ui.iconcomboFilter,              static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), -            [&](int) -> void { if (pFilterDialog) pFilterDialog = nullptr; }); +            [&](int) -> void { if (pFilterDialog) pFilterDialog = nullptr; save(); });      connect(ui.btnStartTracker, SIGNAL(clicked()), this, SLOT(startTracker()));      connect(ui.btnStopTracker, SIGNAL(clicked()), this, SLOT(stopTracker())); @@ -98,14 +97,46 @@ MainWindow::MainWindow() :      connect(&pose_update_timer, SIGNAL(timeout()), this, SLOT(showHeadPose()));      connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); + +    auto menu = new QMenu; +    menu->addAction("Create new empty config", this, SLOT(make_empty_config())); +    menu->addAction("Create new copied config", this, SLOT(make_copied_config())); +    menu->addAction("Open configuration directory", this, SLOT(open_config_directory())); +    menu->addAction("Refresh configuration list", this, SLOT(refresh_config_list())); +    ui.profile_button->setMenu(menu); +      kbd_quit.setEnabled(true);      connect(&det_timer, SIGNAL(timeout()), this, SLOT(maybe_start_profile_from_executable()));      det_timer.start(1000);      ensure_tray(); -      set_working_directory(); + +    if (!QFile(group::ini_pathname()).exists()) +    { +        set_profile(OPENTRACK_DEFAULT_CONFIG); +        if (!QFile(group::ini_pathname()).exists()) +        { +            const auto pathname = group::ini_pathname(); +            QFile file(pathname); +            if (file.open(QFile::ReadWrite)) +            { +                QTextStream stream(&file); +                stream << "\n"; +            } +        } +    } +} + +bool MainWindow::get_new_config_name_from_dialog(QString& ret) +{ +    new_file_dialog dlg; +    dlg.exec(); +    bool b = dlg.is_ok(ret); +    if (b && !ret.endsWith(".ini")) +        ret += ".ini"; +    return b;  }  MainWindow::~MainWindow() @@ -121,27 +152,6 @@ void MainWindow::set_working_directory()      QDir::setCurrent(QCoreApplication::applicationDirPath());  } -void MainWindow::open() { -    QFileDialog dialog(this); -    dialog.setFileMode(QFileDialog::ExistingFile); -    QString dir_path = QFileInfo(group::ini_pathname()).absolutePath(); -    QString fileName = dialog.getOpenFileName( -                this, -                tr("Open the settings file"), -                dir_path, -                tr("Settings file (*.ini);;All Files (*)")); -    set_working_directory(); - -    if (!fileName.isEmpty()) { -        { -            QSettings settings(OPENTRACK_ORG); -            settings.setValue(OPENTRACK_CONFIG_FILENAME_KEY, remove_app_path(fileName)); -        } -        fill_profile_combobox(); -        load_settings(); -    } -} -  void MainWindow::save_mappings() {      pose.save_mappings();  } @@ -164,29 +174,6 @@ void MainWindow::save() {  #endif  } -void MainWindow::saveAs() -{ -    QString oldFile = group::ini_pathname(); -    QString fileName = QFileDialog::getSaveFileName(this, tr("Save file"), -                                                    oldFile, -                                                    tr("Settings file (*.ini);;All Files (*)")); -    set_working_directory(); -     -    if (fileName.isEmpty()) -        return; -     -    (void) QFile::remove(fileName); -     -    { -        (void) QFile::copy(oldFile, fileName); -        QSettings settings(OPENTRACK_ORG); -        settings.setValue (OPENTRACK_CONFIG_FILENAME_KEY, remove_app_path(fileName)); -    } -     -    save(); -    fill_profile_combobox(); -} -  void MainWindow::load_mappings() {      pose.load_mappings();  } @@ -196,10 +183,59 @@ void MainWindow::load_settings() {      load_mappings();  } +void MainWindow::make_empty_config() +{ +    QString name; +    const QString dir = group::ini_directory(); +    if (dir != "" && get_new_config_name_from_dialog(name)) +    { +        QFile filename(dir + "/" + name); +        if (filename.open(QFile::ReadWrite)) +        { +            QTextStream stream(&filename); +            stream << "\n"; +            refresh_config_list(); +        } +    } +} + +void MainWindow::make_copied_config() +{ +    const QString dir = group::ini_directory(); +    const QString cur = group::ini_pathname(); +    QString name; +    if (cur != "" && dir != "" && get_new_config_name_from_dialog(name)) +    { +        const QString new_name = dir + "/" + name; +        (void) QFile::remove(new_name); +        (void) QFile::copy(cur, new_name); +        refresh_config_list(); +    } +} + +void MainWindow::open_config_directory() +{ +    const QString path = group::ini_directory(); +    if (path != "") +    { +        QDesktopServices::openUrl("file:///" + QDir::toNativeSeparators(path)); +    } +} +  extern "C" volatile const char* opentrack_version; -void MainWindow::fill_profile_combobox() +void MainWindow::refresh_config_list()  { +    if (group::ini_list().size() == 0) +    { +        QFile filename(group::ini_directory() + "/" OPENTRACK_DEFAULT_CONFIG); +        if (filename.open(QFile::ReadWrite)) +        { +            QTextStream stream(&filename); +            stream << "\n"; +        } +    } +       QStringList ini_list = group::ini_list();       set_title();       QString current = QFileInfo(group::ini_pathname()).fileName(); @@ -219,8 +255,7 @@ void MainWindow::updateButtonState(bool running, bool inertialp)      ui.iconcomboFilter->setEnabled ( not_running );      ui.iconcomboTrackerSource->setEnabled(not_running);      ui.video_frame_label->setVisible(not_running || inertialp); -    ui.btnSaveAs->setEnabled(not_running); -    ui.btnLoad->setEnabled(not_running); +    ui.profile_button->setEnabled(not_running);  }  void MainWindow::bindKeyboardShortcuts() @@ -440,26 +475,6 @@ void MainWindow::exit() {      QCoreApplication::exit(0);  } -QString MainWindow::remove_app_path(const QString full_path) -{ -    QFileInfo path_info(full_path); -    QString path = path_info.absolutePath(); -     -    QFileInfo app_path(QCoreApplication::applicationDirPath()); -    QString app_prefix(app_path.absoluteFilePath()); -     -    if (path == app_prefix) -    { -        path = "."; -    } -    else if (path.startsWith(app_prefix + "/")) -    { -        path = "./" + path.mid(app_prefix.size() + 1); -    } -     -    return path + "/" + path_info.fileName(); -} -  void MainWindow::profileSelected(int index)  {      if (index == -1) @@ -467,8 +482,7 @@ void MainWindow::profileSelected(int index)      {          QSettings settings(OPENTRACK_ORG); -        settings.setValue (OPENTRACK_CONFIG_FILENAME_KEY, remove_app_path(QFileInfo(group::ini_pathname()).absolutePath() + "/" + -                                                                ui.iconcomboProfile->itemText(index))); +        settings.setValue (OPENTRACK_CONFIG_FILENAME_KEY, ui.iconcomboProfile->itemText(index));      }      set_title(); @@ -550,5 +564,5 @@ void MainWindow::maybe_start_profile_from_executable()  void MainWindow::set_profile(const QString &profile)  {      QSettings settings(OPENTRACK_ORG); -    settings.setValue(OPENTRACK_CONFIG_FILENAME_KEY, MainWindow::remove_app_path(profile)); +    settings.setValue(OPENTRACK_CONFIG_FILENAME_KEY, profile);  } diff --git a/facetracknoir/ui.h b/facetracknoir/ui.h index 097b2439..0c3063d4 100644 --- a/facetracknoir/ui.h +++ b/facetracknoir/ui.h @@ -93,22 +93,20 @@ class MainWindow : public QMainWindow, private State      void changeEvent(QEvent* e) override; -    void createIconGroupBox();      void load_settings();      void updateButtonState(bool running, bool inertialp); -    void fill_profile_combobox();      void display_pose(const double* mapped, const double* raw);      void ensure_tray();      void set_title(const QString& game_title = QStringLiteral("")); +    void save(); +    static bool get_new_config_name_from_dialog(QString &ret); +    static void set_profile(const QString& profile);  public slots:      void shortcutRecentered();      void shortcutToggled();      void shortcutZeroed();      void bindKeyboardShortcuts();  private slots: -    void open(); -    void save(); -    void saveAs();      void exit();      void profileSelected(int index); @@ -121,6 +119,11 @@ private slots:      void restore_from_tray(QSystemTrayIcon::ActivationReason);      void maybe_start_profile_from_executable(); + +    void make_empty_config(); +    void make_copied_config(); +    void open_config_directory(); +    void refresh_config_list();  public slots:      void startTracker();      void stopTracker(); @@ -129,7 +132,5 @@ public:      ~MainWindow();      void save_mappings();      void load_mappings(); -    static QString remove_app_path(const QString full_path);      static void set_working_directory(); -    static void set_profile(const QString& profile);  }; diff --git a/ftnoir_tracker_hatire/ftnoir_tracker_hat_settings.cpp b/ftnoir_tracker_hatire/ftnoir_tracker_hat_settings.cpp index 80543e7a..0a4454e4 100644 --- a/ftnoir_tracker_hatire/ftnoir_tracker_hat_settings.cpp +++ b/ftnoir_tracker_hatire/ftnoir_tracker_hat_settings.cpp @@ -35,15 +35,11 @@  void TrackerSettings::load_ini()  { -#ifdef OPENTRACK_API +#ifndef OPENTRACK_API      QSettings settings(OPENTRACK_ORG);	// Registry settings (in HK_USER) +    QString currentFile = settings.value( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();  #else -    QSettings settings("opentrack");	// Registry settings (in HK_USER) -#endif -#ifdef OPENTRACK_API -    QString currentFile = settings.value( OPENTRACK_CONFIG_FILENAME_KEY, QCoreApplication::applicationDirPath() + OPENTRACK_DEFAULT_CONFIG_PATH ).toString(); -#else -	QString currentFile = settings.value( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString(); +    QString currentFile = options::group::ini_pathname();  #endif  	QSettings iniFile( currentFile, QSettings::IniFormat );		// Application settings (in INI-file) @@ -101,19 +97,14 @@ void TrackerSettings::load_ini()  	iniFile.endGroup();  } -  void TrackerSettings::save_ini() const  { -#ifdef OPENTRACK_API +#ifndef OPENTRACK_API      QSettings settings(OPENTRACK_ORG);	// Registry settings (in HK_USER) +    QString currentFile = settings.value( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString();  #else -    QSettings settings("opentrack");	// Registry settings (in HK_USER) -#endif -#ifdef OPENTRACK_API -    QString currentFile = settings.value( OPENTRACK_CONFIG_FILENAME_KEY, QCoreApplication::applicationDirPath() + OPENTRACK_DEFAULT_CONFIG_PATH ).toString(); -#else -	QString currentFile = settings.value( "SettingsFile", QCoreApplication::applicationDirPath() + "/Settings/default.ini" ).toString(); +    QString currentFile = options::group::ini_pathname();  #endif  	QSettings iniFile( currentFile, QSettings::IniFormat );		// Application settings (in INI-file) diff --git a/opentrack/options.hpp b/opentrack/options.hpp index f4deb8a1..8e623092 100644 --- a/opentrack/options.hpp +++ b/opentrack/options.hpp @@ -30,6 +30,7 @@  #include <QCoreApplication>  #include <QFileInfo>  #include <QDir> +#include <QStandardPaths>  #include <cinttypes> @@ -38,8 +39,8 @@  #include <memory>  template<typename t> using mem = std::shared_ptr<t>; -#define OPENTRACK_CONFIG_FILENAME_KEY "settings-file" -#define OPENTRACK_DEFAULT_CONFIG_PATH "/settings/default.ini" +#define OPENTRACK_CONFIG_FILENAME_KEY "settings-filename" +#define OPENTRACK_DEFAULT_CONFIG "default.ini"  #define OPENTRACK_ORG "opentrack-2.3"  namespace options { @@ -90,30 +91,30 @@ namespace options {      public:          group(const string& name) : name(name)          { -            QSettings conf(ini_pathname(), QSettings::IniFormat); +            auto conf = ini_file();              auto q_name = QString::fromStdString(name); -            conf.beginGroup(q_name); -            for (auto& k_ : conf.childKeys()) +            conf->beginGroup(q_name); +            for (auto& k_ : conf->childKeys())              {                  auto tmp = k_.toUtf8();                  string k(tmp); -                kvs[k] = conf.value(k_); +                kvs[k] = conf->value(k_);              } -            conf.endGroup(); +            conf->endGroup();          }          void save()          { -            QSettings s(ini_pathname(), QSettings::IniFormat); +            auto s = ini_file();              auto q_name = QString::fromStdString(name); -            s.beginGroup(q_name); +            s->beginGroup(q_name);              for (auto& i : kvs)              {                  auto k = QString::fromStdString(i.first); -                s.setValue(k, i.second); +                s->setValue(k, i.second);              } -            s.endGroup(); -            s.sync(); +            s->endGroup(); +            s->sync();          }          template<typename t> @@ -132,22 +133,40 @@ namespace options {              return kvs.count(s) != 0;          } -        static const QString ini_pathname() +        static QString ini_directory()          { +            const auto dirs = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation); +            if (dirs.size() == 0) +                return ""; +            if (QDir(dirs[0]).mkpath(OPENTRACK_ORG)) +                return dirs[0] + "/" OPENTRACK_ORG; +            return ""; +        } + +        static QString ini_pathname() +        { +            const auto dir = ini_directory(); +            if (dir == "") +                return "";              QSettings settings(OPENTRACK_ORG); -            return settings.value(OPENTRACK_CONFIG_FILENAME_KEY, QCoreApplication::applicationDirPath() + OPENTRACK_DEFAULT_CONFIG_PATH).toString(); +            return dir + "/" + settings.value(OPENTRACK_CONFIG_FILENAME_KEY, OPENTRACK_DEFAULT_CONFIG).toString();          }          static const QStringList ini_list()          { -            QFileInfo info(group::ini_pathname()); -            QDir settings_dir(info.dir()); +            const auto dirname = ini_directory(); +            if (dirname == "") +                return QStringList(); +            QDir settings_dir(dirname);              return settings_dir.entryList( QStringList { "*.ini" } , QDir::Files, QDir::Name );          }          static const mem<QSettings> ini_file()          { -            return std::make_shared<QSettings>(ini_pathname(), QSettings::IniFormat); +            const auto pathname = ini_pathname(); +            if (pathname != "") +                return std::make_shared<QSettings>(ini_pathname(), QSettings::IniFormat); +            return std::make_shared<QSettings>();          }      }; | 
