From 01210b7fba37356ee2c18420762eeeed52489d20 Mon Sep 17 00:00:00 2001
From: Stanislaw Halik <sthalik@misaki.pl>
Date: Sun, 29 Jan 2017 03:10:28 +0100
Subject: gui/mapping-window, spline-widget, logic/main-settings: limited
 mapping range

---
 gui/mapping-window.cpp |  24 ++++++--
 gui/mapping-window.ui  | 147 +++++++++++++++++++++++++++++++++++++++----------
 2 files changed, 139 insertions(+), 32 deletions(-)

(limited to 'gui')

diff --git a/gui/mapping-window.cpp b/gui/mapping-window.cpp
index d1188e66..d34fcc48 100644
--- a/gui/mapping-window.cpp
+++ b/gui/mapping-window.cpp
@@ -25,6 +25,10 @@ MapWidget::MapWidget(Mappings& m) : m(m)
     tie_setting(s.a_yaw.altp, ui.rx_altp);
     tie_setting(s.a_pitch.altp, ui.ry_altp);
     tie_setting(s.a_roll.altp, ui.rz_altp);
+
+    tie_setting(s.a_yaw.clamp, ui.max_yaw_rotation);
+    tie_setting(s.a_pitch.clamp, ui.max_pitch_rotation);
+    tie_setting(s.a_roll.clamp, ui.max_roll_rotation);
 }
 
 void MapWidget::load()
@@ -51,19 +55,23 @@ void MapWidget::load()
     { nullptr, Yaw, nullptr, false }
     };
 
+    for (QComboBox* x : { ui.max_yaw_rotation, ui.max_pitch_rotation, ui.max_roll_rotation })
+    {
+        using a = axis_opts::max_rotation;
+        for (a y : { a::r180, a::r90, a::r60, a::r45, a::r30, a::r20 })
+            x->addItem(QString::number(y) + "°", y);
+    }
+
     for (int i = 0; qfcs[i].qfc; i++)
     {
         const bool altp = qfcs[i].altp;
 
         Map& axis = m(qfcs[i].axis);
         spline& conf = altp ? axis.spline_alt : axis.spline_main;
-        //const QString& name = altp ? axis.name2 : axis.name1;
-        //conf.set_bundle(make_bundle(name));
-        qfcs[i].qfc->setConfig(&conf);
+        spline_widget& qfc = *qfcs[i].qfc;
 
         if (altp)
         {
-            spline_widget& qfc = *qfcs[i].qfc;
             connect(qfcs[i].checkbox, &QCheckBox::toggled,
                     this,
                     [&](bool f) -> void {qfc.setEnabled(f); qfc.force_redraw();});
@@ -71,10 +79,18 @@ void MapWidget::load()
             qfc.force_redraw();
         }
 
+        connect(&axis.opts.clamp, static_cast<void(base_value::*)(int) const>(&base_value::valueChanged),
+                &qfc, [&conf, &qfc](int value) { conf.set_max_input(value); qfc.reload_spline(); });
+        conf.set_max_input(axis.opts.clamp);
+
         if (qfcs[i].axis >= 3)
+        {
             qfcs[i].qfc->set_snap(1, 2.5);
+        }
         else
             qfcs[i].qfc->set_snap(.5, 1);
+
+        qfcs[i].qfc->setConfig(&conf);
     }
 
 }
diff --git a/gui/mapping-window.ui b/gui/mapping-window.ui
index c1a52021..dc43ab8a 100644
--- a/gui/mapping-window.ui
+++ b/gui/mapping-window.ui
@@ -11,7 +11,7 @@
    </rect>
   </property>
   <property name="sizePolicy">
-   <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
     <horstretch>0</horstretch>
     <verstretch>0</verstretch>
    </sizepolicy>
@@ -22,12 +22,6 @@
     <height>664</height>
    </size>
   </property>
-  <property name="maximumSize">
-   <size>
-    <width>970</width>
-    <height>664</height>
-   </size>
-  </property>
   <property name="windowTitle">
    <string>Mapping properties</string>
   </property>
@@ -41,9 +35,6 @@
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QTabWidget" name="tabWidget">
-     <property name="styleSheet">
-      <string notr="true"/>
-     </property>
      <property name="tabPosition">
       <enum>QTabWidget::North</enum>
      </property>
@@ -51,13 +42,48 @@
       <number>0</number>
      </property>
      <widget class="QWidget" name="tabWidgetPage1">
-      <property name="styleSheet">
-       <string notr="true">background-color: #ccc;</string>
-      </property>
       <attribute name="title">
        <string>Yaw</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_2">
+       <item>
+        <widget class="QFrame" name="frame">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="frameShape">
+          <enum>QFrame::NoFrame</enum>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout">
+          <item>
+           <widget class="QLabel" name="label">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="text">
+             <string>Max rotation</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QComboBox" name="max_yaw_rotation">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
        <item>
         <widget class="spline_widget" name="rxconfig" native="true">
          <property name="colorBezier" stdset="0">
@@ -104,13 +130,48 @@
       </layout>
      </widget>
      <widget class="QWidget" name="tabWidgetPage2">
-      <property name="styleSheet">
-       <string notr="true">background-color: #ccc;</string>
-      </property>
       <attribute name="title">
        <string>Pitch</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_3">
+       <item>
+        <widget class="QFrame" name="frame_2">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="frameShape">
+          <enum>QFrame::NoFrame</enum>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_2">
+          <item>
+           <widget class="QLabel" name="label_2">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="text">
+             <string>Max rotation</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QComboBox" name="max_pitch_rotation">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
        <item>
         <widget class="spline_widget" name="ryconfig" native="true">
          <property name="colorBezier" stdset="0">
@@ -157,13 +218,48 @@
       </layout>
      </widget>
      <widget class="QWidget" name="tabWidgetPage3">
-      <property name="styleSheet">
-       <string notr="true">background-color: #ccc;</string>
-      </property>
       <attribute name="title">
        <string>Roll</string>
       </attribute>
       <layout class="QVBoxLayout" name="verticalLayout_4">
+       <item>
+        <widget class="QFrame" name="frame_3">
+         <property name="sizePolicy">
+          <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
+         <property name="frameShape">
+          <enum>QFrame::NoFrame</enum>
+         </property>
+         <layout class="QHBoxLayout" name="horizontalLayout_4">
+          <item>
+           <widget class="QLabel" name="label_4">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="text">
+             <string>Max rotation</string>
+            </property>
+           </widget>
+          </item>
+          <item>
+           <widget class="QComboBox" name="max_roll_rotation">
+            <property name="sizePolicy">
+             <sizepolicy hsizetype="Maximum" vsizetype="Maximum">
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </item>
        <item>
         <widget class="spline_widget" name="rzconfig" native="true">
          <property name="colorBezier" stdset="0">
@@ -208,11 +304,12 @@
         </widget>
        </item>
       </layout>
+      <zorder>rzconfig</zorder>
+      <zorder>rz_altp</zorder>
+      <zorder>rzconfig_alt</zorder>
+      <zorder>frame_3</zorder>
      </widget>
      <widget class="QWidget" name="tabWidgetPage4">
-      <property name="styleSheet">
-       <string notr="true">background-color: #ccc;</string>
-      </property>
       <attribute name="title">
        <string>X</string>
       </attribute>
@@ -263,9 +360,6 @@
       </layout>
      </widget>
      <widget class="QWidget" name="tabWidgetPage5">
-      <property name="styleSheet">
-       <string notr="true">background-color: #ccc;</string>
-      </property>
       <attribute name="title">
        <string>Y</string>
       </attribute>
@@ -316,9 +410,6 @@
       </layout>
      </widget>
      <widget class="QWidget" name="tabWidgetPage6">
-      <property name="styleSheet">
-       <string notr="true">background-color: #ccc;</string>
-      </property>
       <attribute name="title">
        <string>Z</string>
       </attribute>
-- 
cgit v1.2.3