示例#1
0
        private void ProcessItem(configitem item)
        {
            try
            {
                if (!MainV2.comPort.MAV.param.ContainsKey(item.paramname))
                {
                    return;
                }

                var value = (float)MainV2.comPort.MAV.param[item.paramname];

                if (value < item.min)
                {
                    item.min = value;
                }
                if (value > item.max)
                {
                    item.max = value;
                }

                var range = ParameterMetaDataRepository.GetParameterMetaData(item.paramname,
                                                                             ParameterMetaDataConstants.Range, MainV2.comPort.MAV.cs.firmware.ToString());
                var increment = ParameterMetaDataRepository.GetParameterMetaData(item.paramname,
                                                                                 ParameterMetaDataConstants.Increment, MainV2.comPort.MAV.cs.firmware.ToString());

                var rangeopt = range.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                if (rangeopt.Length > 1)
                {
                    item.min = float.Parse(rangeopt[0], CultureInfo.InvariantCulture);
                    item.max = float.Parse(rangeopt[1], CultureInfo.InvariantCulture);
                }

                var incrementf = 0.01f;
                if (increment.Length > 0)
                {
                    float.TryParse(increment, NumberStyles.Float, CultureInfo.InvariantCulture, out incrementf);
                }

                var RNG = new RangeControl(item.paramname, item.desc, item.title, incrementf, 1, item.min, item.max,
                                           value.ToString());
                RNG.Tag = item;

                RNG.Location = new Point(10, y);

                RNG.AttachEvents();

                RNG.ValueChanged += RNG_ValueChanged;

                ThemeManager.ApplyThemeTo(RNG);

                panel1.Controls.Add(RNG);

                y += RNG.Height;
            }
            catch (Exception ex)
            {
                CustomMessageBox.Show("Failed to process " + item.paramname + "\n" + ex);
            }
        }
示例#2
0
        void createValueControl(KeyValuePair <string, string> x)
        {
            string value              = ((float)MainV2.comPort.MAV.param[x.Key]).ToString("0.###", CultureInfo.InvariantCulture);
            string description        = ParameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Description);
            string displayName        = ParameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.DisplayName) + " (" + x.Key + ")";
            string units              = ParameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Units);
            string rangeRaw           = ParameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Range);
            string incrementRaw       = ParameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Increment);
            string availableValuesRaw = ParameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Values);

            float displayscale = 1;

            float increment, intValue;

            float.TryParse(incrementRaw, NumberStyles.Float, CultureInfo.InvariantCulture, out increment);
            // this is in local culture
            float.TryParse(value, out intValue);

            string[] rangeParts = rangeRaw.Split(new[] { ' ' });
            if (rangeParts.Count() == 2 && increment > 0)
            {
                float lowerRange;
                float.TryParse(rangeParts[0], NumberStyles.Float, CultureInfo.InvariantCulture, out lowerRange);
                float upperRange;
                float.TryParse(rangeParts[1], NumberStyles.Float, CultureInfo.InvariantCulture, out upperRange);

                var valueControl = new RangeControl(x.Key, FitDescriptionText(units, description), displayName, increment, displayscale, lowerRange, upperRange, value);

                ThemeManager.ApplyThemeTo(valueControl);

                valueControl.ValueChanged += valueControl_ValueChanged;

                flowLayoutPanel1.Controls.Add(valueControl);
            }
            else if (availableValuesRaw.Length > 0)
            {
                var valueControl = new ValuesControl();
                valueControl.Name            = x.Key;
                valueControl.DescriptionText = FitDescriptionText(units, description);
                valueControl.LabelText       = displayName;

                ThemeManager.ApplyThemeTo(valueControl);

                valueControl.ComboBoxControl.DisplayMember = "Value";
                valueControl.ComboBoxControl.ValueMember   = "Key";
                valueControl.ComboBoxControl.DataSource    = ParameterMetaDataRepository.GetParameterOptionsInt(x.Key);
                valueControl.ComboBoxControl.SelectedItem  = value;

                valueControl.ValueChanged += valueControl_ValueChanged;

                flowLayoutPanel1.Controls.Add(valueControl);
            }
            else
            {
                Console.WriteLine("No valid param metadata for " + x.Key);
            }
        }
示例#3
0
        public static Func <object, PropertyInfo, Func <object>, Action <object>, object> Slider <T>(
            T min, T max,
            Func <T, object> toInt,
            Func <int, T> fromInt)
        => (o, p, gv, sv) =>
        {
            var v  = gv();
            var vc = new DumpContainer {
                Content = v, Style = "min-width: 30px"
            };
            var s = new RangeControl(
                Convert.ToInt32(toInt(min)),
                Convert.ToInt32(toInt(max)),
                Convert.ToInt32(toInt((T)v)))
            {
                IsMultithreaded = true
            };

            s.ValueInput += delegate
            {
                var val = fromInt(s.Value);
                sv(val);
                vc.Content = val;
            };

            var config = new { Min = min, Max = max };
            var editor = EditableDumpContainer.For(config);
            editor.AddChangeHandler(x => x.Min, (_, m) => s.Min = Convert.ToInt32(toInt(m)));
            editor.AddChangeHandler(x => x.Max, (_, m) => s.Max = Convert.ToInt32(toInt(m)));

            var editorDc = new DumpContainer {
                Content = editor
            };
            var display      = true;
            var toggleEditor = new Hyperlinq(() =>
            {
                display        = !display;
                editorDc.Style = display ? "" : "display:none";
            }, "[*]");
            toggleEditor.Action();

            return(Util.VerticalRun(vc, Util.HorizontalRun(false, s, toggleEditor), editorDc));
        };
示例#4
0
        private void BUT_Find_Click(object sender, EventArgs e)
        {
            y = 10;

            string searchfor = "";

            InputBox.Show("Search For", "Enter a single word to search for", ref searchfor);

            foreach (Control ctl in tableLayoutPanel1.Controls)
            {
                if (ctl.GetType() == typeof(RangeControl))
                {
                    RangeControl rng = (RangeControl)ctl;
                    if (rng.LabelText.ToString().ToLower().Contains(searchfor.ToLower()) || rng.DescriptionText.ToString().ToLower().Contains(searchfor.ToLower()))
                    {
                        ctl.Visible  = true;
                        ctl.Location = new Point(ctl.Location.X, y);
                        y           += ctl.Height;
                    }
                    else
                    {
                        ctl.Visible = false;
                    }
                }
                else if (ctl.GetType() == typeof(ValuesControl))
                {
                    ValuesControl vctl = (ValuesControl)ctl;
                    if (vctl.LabelText.ToString().ToLower().Contains(searchfor.ToLower()) || vctl.DescriptionText.ToString().ToLower().Contains(searchfor.ToLower()))
                    {
                        ctl.Visible  = true;
                        ctl.Location = new Point(ctl.Location.X, y);
                        y           += ctl.Height;
                    }
                    else
                    {
                        ctl.Visible = false;
                    }
                }
            }
        }
示例#5
0
 private void InitializeComponent()
 {
     this.INS_LOG_BAT_MASK = new MissionPlanner.Controls.MavlinkCheckBoxBitMask();
     this.INS_LOG_BAT_CNT  = new MissionPlanner.Controls.RangeControl();
     this.but_fft          = new MissionPlanner.Controls.MyButton();
     this.LOG_BITMASK      = new MissionPlanner.Controls.MavlinkCheckBoxBitMask();
     this.groupBox1        = new System.Windows.Forms.GroupBox();
     this.groupBox2        = new System.Windows.Forms.GroupBox();
     this.groupBox1.SuspendLayout();
     this.groupBox2.SuspendLayout();
     this.SuspendLayout();
     //
     // INS_LOG_BAT_MASK
     //
     this.INS_LOG_BAT_MASK.Enabled   = false;
     this.INS_LOG_BAT_MASK.Location  = new System.Drawing.Point(6, 138);
     this.INS_LOG_BAT_MASK.Name      = "INS_LOG_BAT_MASK";
     this.INS_LOG_BAT_MASK.ParamName = null;
     this.INS_LOG_BAT_MASK.Size      = new System.Drawing.Size(604, 115);
     this.INS_LOG_BAT_MASK.TabIndex  = 3;
     this.INS_LOG_BAT_MASK.Value     = 0F;
     //
     // INS_LOG_BAT_CNT
     //
     this.INS_LOG_BAT_CNT.DescriptionText = "Description";
     this.INS_LOG_BAT_CNT.DisplayScale    = 1F;
     this.INS_LOG_BAT_CNT.Increment       = 1F;
     this.INS_LOG_BAT_CNT.LabelText       = "Label";
     this.INS_LOG_BAT_CNT.Location        = new System.Drawing.Point(6, 19);
     this.INS_LOG_BAT_CNT.MaxRange        = 10F;
     this.INS_LOG_BAT_CNT.MinRange        = 0F;
     this.INS_LOG_BAT_CNT.Name            = "INS_LOG_BAT_CNT";
     this.INS_LOG_BAT_CNT.Size            = new System.Drawing.Size(604, 108);
     this.INS_LOG_BAT_CNT.TabIndex        = 4;
     this.INS_LOG_BAT_CNT.Value           = "0";
     //
     // but_fft
     //
     this.but_fft.Location = new System.Drawing.Point(629, 13);
     this.but_fft.Name     = "but_fft";
     this.but_fft.Size     = new System.Drawing.Size(75, 23);
     this.but_fft.TabIndex = 5;
     this.but_fft.Text     = "FFT";
     this.but_fft.UseVisualStyleBackColor = true;
     this.but_fft.Click += new System.EventHandler(this.but_fft_Click);
     //
     // LOG_BITMASK
     //
     this.LOG_BITMASK.Enabled   = false;
     this.LOG_BITMASK.Location  = new System.Drawing.Point(6, 19);
     this.LOG_BITMASK.Name      = "LOG_BITMASK";
     this.LOG_BITMASK.ParamName = null;
     this.LOG_BITMASK.Size      = new System.Drawing.Size(604, 105);
     this.LOG_BITMASK.TabIndex  = 6;
     this.LOG_BITMASK.Value     = 0F;
     //
     // groupBox1
     //
     this.groupBox1.Controls.Add(this.INS_LOG_BAT_CNT);
     this.groupBox1.Controls.Add(this.INS_LOG_BAT_MASK);
     this.groupBox1.Location = new System.Drawing.Point(7, 3);
     this.groupBox1.Name     = "groupBox1";
     this.groupBox1.Size     = new System.Drawing.Size(616, 264);
     this.groupBox1.TabIndex = 8;
     this.groupBox1.TabStop  = false;
     this.groupBox1.Text     = "FFT Setup";
     //
     // groupBox2
     //
     this.groupBox2.Controls.Add(this.LOG_BITMASK);
     this.groupBox2.Location = new System.Drawing.Point(7, 273);
     this.groupBox2.Name     = "groupBox2";
     this.groupBox2.Size     = new System.Drawing.Size(616, 130);
     this.groupBox2.TabIndex = 9;
     this.groupBox2.TabStop  = false;
     this.groupBox2.Text     = "Please ensure IMU_RAW and IMU_FAST are turned off to use FFT";
     //
     // ConfigFFT
     //
     this.Controls.Add(this.groupBox2);
     this.Controls.Add(this.but_fft);
     this.Controls.Add(this.groupBox1);
     this.Name = "ConfigFFT";
     this.Size = new System.Drawing.Size(710, 411);
     this.groupBox1.ResumeLayout(false);
     this.groupBox2.ResumeLayout(false);
     this.ResumeLayout(false);
 }
示例#6
0
        public static void GenerateControls(FlowLayoutPanel panel, Block block)
        {
            //Suspend
            panel.SuspendLayout();

            //Loop
            foreach (Field field in block.Fields)
            {
                //Prepare
                Control control = null;

                //Handle
                switch (field.Type)
                {
                case FieldType.FieldExplanation: control = new ExplanationControl((ExplanationField)field); break;

                case FieldType.FieldBlock: control = new BlockControl((BlockField)field); break;

                case FieldType.FieldStruct: control = new StructControl((StructField)field); break;

                case FieldType.FieldString:
                case FieldType.FieldLongString:
                    control = new StringControl(field);
                    break;

                case FieldType.FieldTagReference:
                    control = new TagReferenceControl(field);
                    break;

                case FieldType.FieldStringId:
                case FieldType.FieldOldStringId:
                    control = new StringIdControl(field);
                    break;

                case FieldType.FieldCharInteger:
                case FieldType.FieldShortInteger:
                case FieldType.FieldLongInteger:
                case FieldType.FieldAngle:
                case FieldType.FieldTag:
                case FieldType.FieldReal:
                case FieldType.FieldRealFraction:
                    control = new ValueControl(field);
                    break;

                case FieldType.FieldCharEnum:
                case FieldType.FieldEnum:
                case FieldType.FieldLongEnum:
                    control = new EnumControl(field);
                    break;

                case FieldType.FieldLongFlags:
                    control = new FlagsControl()
                    {
                        Field        = field,
                        Title        = field.Name,
                        Information  = field.Information,
                        Options      = ((LongFlagsField)field).Options.Select(o => o.Name).ToArray(),
                        Details      = field.Details,
                        Value        = field.Value,
                        ValueChanged = FlagsControl_ValueChanged
                    };
                    break;

                case FieldType.FieldWordFlags:
                    control = new FlagsControl()
                    {
                        Field        = field,
                        Title        = field.Name,
                        Information  = field.Information,
                        Options      = ((WordFlagsField)field).Options.Select(o => o.Name).ToArray(),
                        Details      = field.Details,
                        Value        = field.Value,
                        ValueChanged = FlagsControl_ValueChanged
                    };
                    break;

                case FieldType.FieldByteFlags:
                    control = new FlagsControl()
                    {
                        Field        = field,
                        Title        = field.Name,
                        Information  = field.Information,
                        Options      = ((ByteFlagsField)field).Options.Select(o => o.Name).ToArray(),
                        Details      = field.Details,
                        Value        = field.Value,
                        ValueChanged = FlagsControl_ValueChanged
                    };
                    break;

                case FieldType.FieldShortBounds:
                    control = new RangeControl()
                    {
                        Field      = field,
                        Title      = field.Name,
                        RangeValue = new string[] { ((ShortBounds)field.Value).Min.ToString(), ((ShortBounds)field.Value).Max.ToString() }
                    };
                    break;

                case FieldType.FieldAngleBounds:
                case FieldType.FieldRealBounds:
                case FieldType.FieldRealFractionBounds:
                    control = new RangeControl()
                    {
                        Field      = field,
                        Title      = field.Name,
                        RangeValue = new string[] { ((FloatBounds)field.Value).Min.ToString(), ((FloatBounds)field.Value).Max.ToString() }
                    };
                    break;

                case FieldType.FieldPoint2D:
                    control = new TwoTupleControl()
                    {
                        LabelA     = "x",
                        LabelB     = "y",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Point2)field.Value).X.ToString(), ((Point2)field.Value).Y.ToString() }
                    };
                    break;

                case FieldType.FieldRealPoint2D:
                    control = new TwoTupleControl()
                    {
                        LabelA     = "x",
                        LabelB     = "y",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Point2F)field.Value).X.ToString(), ((Point2F)field.Value).Y.ToString() }
                    };
                    break;

                case FieldType.FieldRealPoint3D:
                    control = new ThreeTupleControl()
                    {
                        LabelA     = "x",
                        LabelB     = "y",
                        LabelC     = "z",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Point3F)field.Value).X.ToString(), ((Point3F)field.Value).Y.ToString(), ((Point3F)field.Value).Z.ToString() }
                    };
                    break;

                case FieldType.FieldRealVector2D:
                    control = new TwoTupleControl()
                    {
                        LabelA     = "i",
                        LabelB     = "j",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Vector2)field.Value).I.ToString(), ((Vector2)field.Value).J.ToString() }
                    };
                    break;

                case FieldType.FieldRealVector3D:
                    control = new ThreeTupleControl()
                    {
                        LabelA     = "i",
                        LabelB     = "j",
                        LabelC     = "k",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Vector3)field.Value).I.ToString(), ((Vector3)field.Value).J.ToString(), ((Vector3)field.Value).K.ToString() }
                    };
                    break;


                case FieldType.FieldRectangle2D:
                    control = new FourTupleControl()
                    {
                        LabelA     = "t",
                        LabelB     = "l",
                        LabelC     = "r",
                        LabelD     = "b",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Rectangle2)field.Value).Top.ToString(), ((Rectangle2)field.Value).Left.ToString(),
                                                    ((Rectangle2)field.Value).Right.ToString(), ((Rectangle2)field.Value).Bottom.ToString() }
                    };
                    break;

                case FieldType.FieldRgbColor:
                    control = new ThreeTupleControl()
                    {
                        LabelA = "r",
                        LabelB = "g",
                        LabelC = "b",
                        Field  = field,
                        Title  = field.Name,
                    };
                    break;

                case FieldType.FieldArgbColor:
                    control = new FourTupleControl()
                    {
                        LabelA = "a",
                        LabelB = "r",
                        LabelC = "g",
                        LabelD = "b",
                        Field  = field,
                        Title  = field.Name,
                    };
                    break;

                case FieldType.FieldRealRgbColor:
                    control = new ThreeTupleControl()
                    {
                        LabelA = "r",
                        LabelB = "g",
                        LabelC = "b",
                        Field  = field,
                        Title  = field.Name,
                    };
                    break;

                case FieldType.FieldRealArgbColor:
                    control = new FourTupleControl()
                    {
                        LabelA = "a",
                        LabelB = "r",
                        LabelC = "g",
                        LabelD = "b",
                        Field  = field,
                        Title  = field.Name,
                    };
                    break;

                case FieldType.FieldRealHsvColor:
                    control = new ThreeTupleControl()
                    {
                        LabelA = "h",
                        LabelB = "s",
                        LabelC = "v",
                        Field  = field,
                        Title  = field.Name,
                    };
                    break;

                case FieldType.FieldRealAhsvColor:
                    control = new FourTupleControl()
                    {
                        LabelA = "a",
                        LabelB = "h",
                        LabelC = "s",
                        LabelD = "v",
                        Field  = field,
                        Title  = field.Name,
                    };
                    break;

                case FieldType.FieldQuaternion:
                    control = new FourTupleControl()
                    {
                        LabelA     = "w",
                        LabelB     = "i",
                        LabelC     = "j",
                        LabelD     = "k",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Quaternion)field.Value).W.ToString(), ((Quaternion)field.Value).I.ToString(),
                                                    ((Quaternion)field.Value).J.ToString(), ((Quaternion)field.Value).K.ToString() }
                    };
                    break;

                case FieldType.FieldEulerAngles2D:
                    control = new TwoTupleControl()
                    {
                        LabelA     = "i",
                        LabelB     = "j",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Vector2)field.Value).I.ToString(), ((Vector2)field.Value).J.ToString() }
                    };
                    break;

                case FieldType.FieldEulerAngles3D:
                    control = new ThreeTupleControl()
                    {
                        LabelA     = "i",
                        LabelB     = "j",
                        LabelC     = "k",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Vector3)field.Value).I.ToString(), ((Vector3)field.Value).J.ToString(), ((Vector3)field.Value).K.ToString() }
                    };
                    break;

                case FieldType.FieldRealPlane2D:
                    control = new ThreeTupleControl()
                    {
                        LabelA     = "i",
                        LabelB     = "j",
                        LabelC     = "d",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Vector3)field.Value).I.ToString(), ((Vector3)field.Value).J.ToString(), ((Vector3)field.Value).K.ToString() }
                    };
                    break;

                case FieldType.FieldRealPlane3D:
                    control = new FourTupleControl()
                    {
                        LabelA     = "i",
                        LabelB     = "j",
                        LabelC     = "k",
                        LabelD     = "d",
                        Field      = field,
                        Title      = field.Name,
                        TupleValue = new string[] { ((Vector4)field.Value).I.ToString(), ((Vector4)field.Value).J.ToString(), ((Vector4)field.Value).K.ToString(), ((Vector4)field.Value).W.ToString() }
                    };
                    break;


                default: control = new GuerillaControl()
                {
                        Visible = false
                }; break;
                }

                //Check
                if (control != null)
                {
                    panel.Controls.Add(control);
                }
            }

            //Resume
            panel.ResumeLayout();
        }
        private void AddControl(KeyValuePair <string, string> x, List <Control> toadd) //, ref int ypos)
        {
            if (!string.IsNullOrEmpty(x.Key))
            {
                try
                {
                    var controlAdded = false;

                    var value = (MainV2.comPort.MAV.param[x.Key].Value).ToString("0.###");

                    var items = Controls.Find(x.Key, true);
                    if (items.Length > 0)
                    {
                        if (items[0].GetType() == typeof(RangeControl))
                        {
                            ((RangeControl)items[0]).ValueChanged -= Control_ValueChanged;
                            ((RangeControl)items[0]).DeAttachEvents();
                            ((RangeControl)items[0]).Value = value;
                            ThemeManager.ApplyThemeTo(((RangeControl)items[0]));
                            ((RangeControl)items[0]).AttachEvents();
                            ((RangeControl)items[0]).ValueChanged += Control_ValueChanged;
                            return;
                        }
                        if (items[0].GetType() == typeof(ValuesControl))
                        {
                            ((ValuesControl)items[0]).ValueChanged -= Control_ValueChanged;
                            ((ValuesControl)items[0]).Value         = value;
                            ((ValuesControl)items[0]).ValueChanged += Control_ValueChanged;
                            return;
                        }
                        if (items[0].GetType() == typeof(MavlinkCheckBoxBitMask))
                        {
                            ((MavlinkCheckBoxBitMask)items[0]).ValueChanged -= Control_ValueChanged;
                            ((MavlinkCheckBoxBitMask)items[0]).Value         = Convert.ToSingle(value);
                            ((MavlinkCheckBoxBitMask)items[0]).ValueChanged += Control_ValueChanged;
                            return;
                        }
                    }

                    var description = ParameterMetaDataRepository.GetParameterMetaData(x.Key,
                                                                                       ParameterMetaDataConstants.Description, MainV2.comPort.MAV.cs.firmware.ToString());
                    var displayName = x.Value + " (" + x.Key + ")";
                    var units       = ParameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Units,
                                                                                       MainV2.comPort.MAV.cs.firmware.ToString());

                    // If this is a range
                    var rangeRaw = ParameterMetaDataRepository.GetParameterMetaData(x.Key,
                                                                                    ParameterMetaDataConstants.Range, MainV2.comPort.MAV.cs.firmware.ToString());
                    var incrementRaw = ParameterMetaDataRepository.GetParameterMetaData(x.Key,
                                                                                        ParameterMetaDataConstants.Increment, MainV2.comPort.MAV.cs.firmware.ToString());

                    if (!string.IsNullOrEmpty(rangeRaw) && !string.IsNullOrEmpty(incrementRaw))
                    {
                        float increment, intValue;
                        float.TryParse(incrementRaw, NumberStyles.Float, CultureInfo.InvariantCulture, out increment);
                        // this is in local culture
                        float.TryParse(value, out intValue);

                        var rangeParts = rangeRaw.Split(' ');
                        if (rangeParts.Count() == 2 && increment > 0)
                        {
                            float lowerRange;
                            float.TryParse(rangeParts[0], NumberStyles.Float, CultureInfo.InvariantCulture,
                                           out lowerRange);
                            float upperRange;
                            float.TryParse(rangeParts[1], NumberStyles.Float, CultureInfo.InvariantCulture,
                                           out upperRange);

                            float displayscale = 1;

                            //    var rangeControl = new RangeControl();

                            if (units.ToLower() == "centi-degrees")
                            {
                                //Console.WriteLine(x.Key + " scale");
                                displayscale = 100;
                                units        = "Degrees (Scaled)";
                                increment   /= 100;
                            }
                            else if (units.ToLower() == "centimeters")
                            {
                                //Console.WriteLine(x.Key + " scale");
                                //  displayscale = 100;
                                //  units = "Meters (Scaled)";
                                //  increment /= 100;
                            }

                            var desc = FitDescriptionText(units, description, tableLayoutPanel1.Width);

                            var rangeControl = new RangeControl(x.Key, desc, displayName, increment, displayscale,
                                                                lowerRange, upperRange, value);

                            rangeControl.Width = tableLayoutPanel1.Width - 50;

                            //Console.WriteLine("{0} {1} {2} {3} {4}", x.Key, increment, lowerRange, upperRange, value);

                            ThemeManager.ApplyThemeTo(rangeControl);

                            if (intValue < lowerRange)
                            {
                                rangeControl.NumericUpDownControl.BackColor = Color.Orange;
                            }

                            if (intValue > upperRange)
                            {
                                rangeControl.NumericUpDownControl.BackColor = Color.Orange;
                            }

                            rangeControl.AttachEvents();

                            rangeControl.ValueChanged += Control_ValueChanged;

                            // set pos
                            rangeControl.Location = new Point(0, y);
                            // add control - let it autosize height
                            toadd.Add(rangeControl);
                            // add height for next control
                            y += rangeControl.Height;

                            controlAdded = true;
                        }
                    }

                    // try bitmask next
                    if (!controlAdded)
                    {
                        var availableBitMask = ParameterMetaDataRepository.GetParameterBitMaskInt(x.Key,
                                                                                                  MainV2.comPort.MAV.cs.firmware.ToString());
                        if (availableBitMask.Count > 0)
                        {
                            var bitmask = new MavlinkCheckBoxBitMask();
                            bitmask.Name = x.Key;
                            bitmask.setup(x.Key, MainV2.comPort.MAV.param);

                            bitmask.myLabel1.Text = displayName;
                            bitmask.label1.Text   = FitDescriptionText(units, description, tableLayoutPanel1.Width - 50);
                            bitmask.Width         = tableLayoutPanel1.Width - 50;

                            ThemeManager.ApplyThemeTo(bitmask);

                            // set pos
                            bitmask.Location = new Point(0, y);
                            // add control - let it autosize height
                            toadd.Add(bitmask);
                            // add height for next control
                            y += bitmask.Height;

                            bitmask.ValueChanged += Control_ValueChanged;

                            controlAdded = true;
                        }
                    }

                    if (!controlAdded)
                    {
                        // If this is a subset of values
                        var availableValuesRaw = ParameterMetaDataRepository.GetParameterMetaData(x.Key,
                                                                                                  ParameterMetaDataConstants.Values, MainV2.comPort.MAV.cs.firmware.ToString());
                        if (!string.IsNullOrEmpty(availableValuesRaw))
                        {
                            var availableValues = availableValuesRaw.Split(',');
                            if (availableValues.Any())
                            {
                                var valueControl = new ValuesControl();
                                valueControl.Width           = tableLayoutPanel1.Width - 50;
                                valueControl.Name            = x.Key;
                                valueControl.DescriptionText = FitDescriptionText(units, description,
                                                                                  tableLayoutPanel1.Width);
                                valueControl.LabelText = displayName;

                                ThemeManager.ApplyThemeTo(valueControl);

                                var splitValues = new List <KeyValuePair <string, string> >();
                                // Add the values to the ddl
                                foreach (var val in availableValues)
                                {
                                    var valParts = val.Split(':');
                                    splitValues.Add(new KeyValuePair <string, string>(valParts[0].Trim(),
                                                                                      (valParts.Length > 1) ? valParts[1].Trim() : valParts[0].Trim()));
                                }
                                ;
                                valueControl.ComboBoxControl.DisplayMember = "Value";
                                valueControl.ComboBoxControl.ValueMember   = "Key";
                                valueControl.ComboBoxControl.DataSource    = splitValues;
                                valueControl.ComboBoxControl.SelectedValue = value;

                                valueControl.ValueChanged += Control_ValueChanged;

                                // set pos
                                valueControl.Location = new Point(0, y);
                                // add control - let it autosize height
                                toadd.Add(valueControl);
                                // add height for next control
                                y += valueControl.Height;
                            }
                        }
                    }
                } // if there is an error simply dont show it, ie bad pde file, bad scale etc
                catch (Exception ex)
                {
                    log.Error(ex);
                }
            }
        }
示例#8
0
        /// <summary>
        /// Binds the param list.
        /// </summary>
        private void BindParamList()
        {
            tableLayoutPanel1.Controls.Clear();
            if (_params == null || _params.Count == 0)
            {
                SortParamList();
            }

            // get the params if nothing exists already
            if (_params != null && _params.Count == 0)
            {
                try
                {
                    Utilities.ParameterMetaDataParser.GetParameterInformation();

                    _parameterMetaDataRepository.Reload();

                    SortParamList();
                }
                catch (Exception exp) { log.Error(exp); } // just to cleanup any errors
            }

            this.SuspendLayout();

            _params.OrderBy(x => x.Key).ForEach(x =>
            {
                if (!String.IsNullOrEmpty(x.Key))
                {
                    try
                    {
                        bool controlAdded = false;

                        string value       = ((float)MainV2.comPort.param[x.Key]).ToString("0.###", CultureInfo.InvariantCulture);
                        string description = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Description);
                        string displayName = x.Value + " (" + x.Key + ")";
                        string units       = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Units);

                        // If this is a range
                        string rangeRaw     = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Range);
                        string incrementRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Increment);

                        // modify for scaling
                        float test = 1;
                        MAVLink.modifyParamForDisplay(true, x.Key, ref test);

                        if (test != 1)
                        {
                            if (units.ToLower() == "centi-degrees")
                            {
                                units               = "Degrees";
                                incrementRaw        = "0.1";
                                string[] rangeParts = rangeRaw.Split(new[] { ' ' });
                                if (rangeParts.Count() == 2)
                                {
                                    float lowerRange;
                                    float.TryParse(rangeParts[0], out lowerRange);
                                    float upperRange;
                                    float.TryParse(rangeParts[1], out upperRange);

                                    rangeRaw = (lowerRange / 100) + " " + (upperRange / 100);
                                }
                            }
                            else if (units.ToLower() == "centimeters")
                            {
                                units               = "Meters";
                                incrementRaw        = "0.1";
                                string[] rangeParts = rangeRaw.Split(new[] { ' ' });
                                if (rangeParts.Count() == 2)
                                {
                                    float lowerRange;
                                    float.TryParse(rangeParts[0], out lowerRange);
                                    float upperRange;
                                    float.TryParse(rangeParts[1], out upperRange);

                                    rangeRaw = (lowerRange / 100) + " " + (upperRange / 100);
                                }
                            }
                            else
                            {
                                units += " / " + (int)(1 / test);
                            }
                        }

                        if (!String.IsNullOrEmpty(rangeRaw) && !String.IsNullOrEmpty(incrementRaw))
                        {
                            float increment, intValue;
                            float.TryParse(incrementRaw, out increment);
                            float.TryParse(value, out intValue);

                            string[] rangeParts = rangeRaw.Split(new[] { ' ' });
                            if (rangeParts.Count() == 2 && increment > 0)
                            {
                                float lowerRange;
                                float.TryParse(rangeParts[0], out lowerRange);
                                float upperRange;
                                float.TryParse(rangeParts[1], out upperRange);

                                int scaler           = (int)float.Parse((1 / increment).ToString(CultureInfo.InvariantCulture));
                                int scaledLowerRange = 0, scaledUpperRange = 0;
                                int scaledIncrement  = (int)increment;
                                if (scaler > 0)
                                {
                                    scaledLowerRange = (int)(lowerRange * scaler);
                                    scaledUpperRange = (int)(upperRange * scaler);
                                    scaledIncrement  = (int)float.Parse((increment * scaler).ToString(CultureInfo.InvariantCulture));
                                    intValue        *= scaler;
                                }

                                var rangeControl                           = new RangeControl();
                                rangeControl.Name                          = x.Key;
                                rangeControl.Scaler                        = scaler;
                                rangeControl.DescriptionText               = FitDescriptionText(units, description);
                                rangeControl.LabelText                     = displayName;
                                rangeControl.TrackBarControl.Minimum       = Math.Min(scaledLowerRange, (int)intValue);
                                rangeControl.TrackBarControl.Maximum       = Math.Max(scaledUpperRange, (int)intValue);
                                rangeControl.TrackBarControl.TickFrequency = scaledIncrement;
                                rangeControl.TrackBarControl.Value         = (int)intValue;

                                rangeControl.NumericUpDownControl.Increment     = (decimal)increment;
                                rangeControl.NumericUpDownControl.DecimalPlaces = scaler.ToString(CultureInfo.InvariantCulture).Length - 1;
                                rangeControl.NumericUpDownControl.Minimum       = (decimal)Math.Min(lowerRange, ((float)MainV2.comPort.param[x.Key]));
                                rangeControl.NumericUpDownControl.Maximum       = (decimal)Math.Max(upperRange, ((float)MainV2.comPort.param[x.Key]));
                                rangeControl.NumericUpDownControl.Value         = (decimal)((float)MainV2.comPort.param[x.Key]);

                                rangeControl.AttachEvents();

                                tableLayoutPanel1.Controls.Add(rangeControl);

                                controlAdded = true;
                            }
                        }

                        if (!controlAdded)
                        {
                            // If this is a subset of values
                            string availableValuesRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Values);
                            if (!String.IsNullOrEmpty(availableValuesRaw))
                            {
                                string[] availableValues = availableValuesRaw.Split(new[] { ',' });
                                if (availableValues.Any())
                                {
                                    var valueControl             = new ValuesControl();
                                    valueControl.Name            = x.Key;
                                    valueControl.DescriptionText = FitDescriptionText(units, description);
                                    valueControl.LabelText       = displayName;

                                    var splitValues = new List <KeyValuePair <string, string> >();
                                    // Add the values to the ddl
                                    availableValues.ForEach(val =>
                                    {
                                        string[] valParts = val.Split(new[] { ':' });
                                        splitValues.Add(new KeyValuePair <string, string>(valParts[0], (valParts.Length > 1) ? valParts[1] : valParts[0]));
                                    });
                                    valueControl.ComboBoxControl.DisplayMember = "Value";
                                    valueControl.ComboBoxControl.ValueMember   = "Key";
                                    valueControl.ComboBoxControl.DataSource    = splitValues;
                                    valueControl.ComboBoxControl.SelectedValue = value;

                                    tableLayoutPanel1.Controls.Add(valueControl);
                                }
                            }
                        }
                    } // if there is an error simply dont show it, ie bad pde file, bad scale etc
                    catch (Exception ex) { log.Error(ex); }
                }
            });

            ThemeManager.ApplyThemeTo(this);

            this.ResumeLayout();
        }
示例#9
0
        /// <summary>
        /// Binds the param list.
        /// </summary>
        private void BindParamList()
        {
            tableLayoutPanel1.Controls.Clear();
            if (_params == null || _params.Count == 0)
            {
                SortParamList();
            }

            // get the params if nothing exists already
            if (_params != null && _params.Count == 0)
            {
                Utilities.ParameterMetaDataParser.GetParameterInformation();
            }

            _params.ForEach(x =>
            {
                if (!String.IsNullOrEmpty(x.Key))
                {
                    try
                    {
                        bool controlAdded = false;

                        string value       = ((float)MainV2.comPort.param[x.Key]).ToString("0.###");
                        string description = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Description);
                        string displayName = x.Value;
                        string units       = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Units);

                        // If this is a range
                        string rangeRaw     = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Range);
                        string incrementRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Increment);
                        if (!String.IsNullOrEmpty(rangeRaw) && !String.IsNullOrEmpty(incrementRaw))
                        {
                            float increment, intValue;
                            float.TryParse(incrementRaw, out increment);
                            float.TryParse(value, out intValue);

                            string[] rangeParts = rangeRaw.Split(new[] { ' ' });
                            if (rangeParts.Count() == 2 && increment > 0)
                            {
                                float lowerRange;
                                float.TryParse(rangeParts[0], out lowerRange);
                                float upperRange;
                                float.TryParse(rangeParts[1], out upperRange);

                                int scaler           = (int)float.Parse((1 / increment).ToString(CultureInfo.InvariantCulture));
                                int scaledLowerRange = 0, scaledUpperRange = 0;
                                int scaledIncrement  = (int)increment;
                                if (scaler > 0)
                                {
                                    scaledLowerRange = (int)(lowerRange * scaler);
                                    scaledUpperRange = (int)(upperRange * scaler);
                                    scaledIncrement  = (int)float.Parse((increment * scaler).ToString(CultureInfo.InvariantCulture));
                                    intValue        *= scaler;
                                }

                                var rangeControl                           = new RangeControl();
                                rangeControl.Name                          = x.Key;
                                rangeControl.Scaler                        = scaler;
                                rangeControl.DescriptionText               = FitDescriptionText(units, description);
                                rangeControl.LabelText                     = displayName;
                                rangeControl.TrackBarControl.Minimum       = scaledLowerRange;
                                rangeControl.TrackBarControl.Maximum       = scaledUpperRange;
                                rangeControl.TrackBarControl.TickFrequency = scaledIncrement;
                                rangeControl.TrackBarControl.Value         = (int)intValue;

                                rangeControl.NumericUpDownControl.Increment     = (decimal)increment;
                                rangeControl.NumericUpDownControl.DecimalPlaces = scaler.ToString(CultureInfo.InvariantCulture).Length - 1;
                                rangeControl.NumericUpDownControl.Minimum       = (decimal)lowerRange;
                                rangeControl.NumericUpDownControl.Maximum       = (decimal)upperRange;
                                rangeControl.NumericUpDownControl.Value         = (decimal)((float)MainV2.comPort.param[x.Key]);

                                rangeControl.AttachEvents();

                                tableLayoutPanel1.Controls.Add(rangeControl);

                                controlAdded = true;
                            }
                        }

                        if (!controlAdded)
                        {
                            // If this is a subset of values
                            string availableValuesRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Values);
                            if (!String.IsNullOrEmpty(availableValuesRaw))
                            {
                                string[] availableValues = availableValuesRaw.Split(new[] { ',' });
                                if (availableValues.Any())
                                {
                                    var valueControl             = new ValuesControl();
                                    valueControl.Name            = x.Key;
                                    valueControl.DescriptionText = FitDescriptionText(units, description);
                                    valueControl.LabelText       = displayName;

                                    var splitValues = new List <KeyValuePair <string, string> >();
                                    // Add the values to the ddl
                                    availableValues.ForEach(val =>
                                    {
                                        string[] valParts = val.Split(new[] { ':' });
                                        splitValues.Add(new KeyValuePair <string, string>(valParts[0], (valParts.Length > 1) ? valParts[1] : valParts[0]));
                                    });
                                    valueControl.ComboBoxControl.DisplayMember = "Value";
                                    valueControl.ComboBoxControl.ValueMember   = "Key";
                                    valueControl.ComboBoxControl.DataSource    = splitValues;
                                    valueControl.ComboBoxControl.SelectedValue = value;

                                    tableLayoutPanel1.Controls.Add(valueControl);
                                }
                            }
                        }
                    } // if there is an error simply dont show it, ie bad pde file, bad scale etc
                    catch (Exception ex) { log.Error(ex); }
                }
            });
        }
        void AddControl(KeyValuePair <string, string> x)
        {
            if (!String.IsNullOrEmpty(x.Key))
            {
                try
                {
                    bool controlAdded = false;

                    string value       = ((float)MainV2.comPort.param[x.Key]).ToString("0.###", CultureInfo.InvariantCulture);
                    string description = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Description);
                    string displayName = x.Value + " (" + x.Key + ")";
                    string units       = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Units);

                    // If this is a range
                    string rangeRaw     = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Range);
                    string incrementRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Increment);

                    if (!String.IsNullOrEmpty(rangeRaw) && !String.IsNullOrEmpty(incrementRaw))
                    {
                        float increment, intValue;
                        float.TryParse(incrementRaw, out increment);
                        float.TryParse(value, out intValue);

                        string[] rangeParts = rangeRaw.Split(new[] { ' ' });
                        if (rangeParts.Count() == 2 && increment > 0)
                        {
                            float lowerRange;
                            float.TryParse(rangeParts[0], out lowerRange);
                            float upperRange;
                            float.TryParse(rangeParts[1], out upperRange);

                            float displayscale = 1;

                            //    var rangeControl = new RangeControl();

                            if (units.ToLower() == "centi-degrees")
                            {
                                Console.WriteLine(x.Key + " scale");
                                displayscale = 100;
                                units        = "Degrees (Scaled)";
                                increment   /= 100;
                            }
                            else if (units.ToLower() == "centimeters")
                            {
                                Console.WriteLine(x.Key + " scale");
                                displayscale = 100;
                                units        = "Meters (Scaled)";
                                increment   /= 100;
                            }

                            var rangeControl = new RangeControl(x.Key, FitDescriptionText(units, description), displayName, increment, displayscale, lowerRange, upperRange, value);

                            /*
                             * rangeControl.Name = x.Key;
                             * rangeControl.Increment = increment;
                             * rangeControl.DescriptionText = FitDescriptionText(units, description);
                             * rangeControl.LabelText = displayName;
                             * rangeControl.MinRange = lowerRange;
                             * rangeControl.MaxRange = upperRange;
                             * rangeControl.Value = value;
                             */
                            Console.WriteLine("{0} {1} {2} {3} {4}", x.Key, increment, lowerRange, upperRange, value);

                            ThemeManager.ApplyThemeTo(rangeControl);

                            if (intValue < lowerRange)
                            {
                                rangeControl.NumericUpDownControl.BackColor = Color.Orange;
                            }

                            if (intValue > upperRange)
                            {
                                rangeControl.NumericUpDownControl.BackColor = Color.Orange;
                            }

/*
 *                          rangeControl.TrackBarControl.Minimum = Math.Min(scaledLowerRange, (int)intValue);
 *                          rangeControl.TrackBarControl.Maximum = Math.Max(scaledUpperRange, (int)intValue);
 *                          rangeControl.TrackBarControl.TickFrequency = scaledIncrement;
 *                          rangeControl.TrackBarControl.Value = (int)intValue;
 *
 *                          rangeControl.NumericUpDownControl.Increment = (decimal)increment;
 *                          rangeControl.NumericUpDownControl.DecimalPlaces = scaler.ToString(CultureInfo.InvariantCulture).Length - 1;
 *                          rangeControl.NumericUpDownControl.Minimum = (decimal)Math.Min(lowerRange, intValue);
 *                          rangeControl.NumericUpDownControl.Maximum = (decimal)Math.Max(upperRange, intValue);
 *                          rangeControl.NumericUpDownControl.Value = (decimal)(intValue);
 */
                            rangeControl.AttachEvents();

                            tableLayoutPanel1.Controls.Add(rangeControl);

                            controlAdded = true;
                        }
                    }

                    if (!controlAdded)
                    {
                        // If this is a subset of values
                        string availableValuesRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Values);
                        if (!String.IsNullOrEmpty(availableValuesRaw))
                        {
                            string[] availableValues = availableValuesRaw.Split(new[] { ',' });
                            if (availableValues.Any())
                            {
                                var valueControl = new ValuesControl();
                                valueControl.Name            = x.Key;
                                valueControl.DescriptionText = FitDescriptionText(units, description);
                                valueControl.LabelText       = displayName;

                                ThemeManager.ApplyThemeTo(valueControl);

                                var splitValues = new List <KeyValuePair <string, string> >();
                                // Add the values to the ddl
                                foreach (string val in availableValues)
                                {
                                    string[] valParts = val.Split(new[] { ':' });
                                    splitValues.Add(new KeyValuePair <string, string>(valParts[0].Trim(), (valParts.Length > 1) ? valParts[1].Trim() : valParts[0].Trim()));
                                }
                                ;
                                valueControl.ComboBoxControl.DisplayMember = "Value";
                                valueControl.ComboBoxControl.ValueMember   = "Key";
                                valueControl.ComboBoxControl.DataSource    = splitValues;
                                valueControl.ComboBoxControl.SelectedValue = value;

                                tableLayoutPanel1.Controls.Add(valueControl);
                            }
                        }
                    }
                } // if there is an error simply dont show it, ie bad pde file, bad scale etc
                catch (Exception ex) { log.Error(ex); }
            }
        }
示例#11
0
        void AddControl(KeyValuePair <string, string> x) //, ref int ypos)
        {
            if (!String.IsNullOrEmpty(x.Key))
            {
                try
                {
                    bool controlAdded = false;

                    string value       = ((float)MainV2.comPort.MAV.param[x.Key]).ToString("0.###", CultureInfo.InvariantCulture);
                    string description = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Description);
                    string displayName = x.Value + " (" + x.Key + ")";
                    string units       = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Units);

                    var items = this.Controls.Find(x.Key, true);
                    if (items.Length > 0)
                    {
                        if (items[0].GetType() == typeof(RangeControl))
                        {
                            ((RangeControl)items[0]).ValueChanged -= Control_ValueChanged;
                            ((RangeControl)items[0]).DeAttachEvents();
                            ((RangeControl)items[0]).Value = value;
                            ThemeManager.ApplyThemeTo(((RangeControl)items[0]));
                            ((RangeControl)items[0]).AttachEvents();
                            ((RangeControl)items[0]).ValueChanged += Control_ValueChanged;
                            return;
                        }
                        else
                        if (items[0].GetType() == typeof(ValuesControl))
                        {
                            ((ValuesControl)items[0]).ValueChanged -= Control_ValueChanged;
                            ((ValuesControl)items[0]).Value         = value;
                            ((ValuesControl)items[0]).ValueChanged += Control_ValueChanged;
                            return;
                        }
                    }

                    // If this is a range
                    string rangeRaw     = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Range);
                    string incrementRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Increment);

                    if (!String.IsNullOrEmpty(rangeRaw) && !String.IsNullOrEmpty(incrementRaw))
                    {
                        float increment, intValue;
                        float.TryParse(incrementRaw, out increment);
                        float.TryParse(value, out intValue);

                        string[] rangeParts = rangeRaw.Split(new[] { ' ' });
                        if (rangeParts.Count() == 2 && increment > 0)
                        {
                            float lowerRange;
                            float.TryParse(rangeParts[0], out lowerRange);
                            float upperRange;
                            float.TryParse(rangeParts[1], out upperRange);

                            float displayscale = 1;

                            //    var rangeControl = new RangeControl();

                            if (units.ToLower() == "centi-degrees")
                            {
                                //Console.WriteLine(x.Key + " scale");
                                displayscale = 100;
                                units        = "Degrees (Scaled)";
                                increment   /= 100;
                            }
                            else if (units.ToLower() == "centimeters")
                            {
                                //Console.WriteLine(x.Key + " scale");
                                displayscale = 100;
                                units        = "Meters (Scaled)";
                                increment   /= 100;
                            }

                            var rangeControl = new RangeControl(x.Key, FitDescriptionText(units, description), displayName, increment, displayscale, lowerRange, upperRange, value);

                            //Console.WriteLine("{0} {1} {2} {3} {4}", x.Key, increment, lowerRange, upperRange, value);

                            ThemeManager.ApplyThemeTo(rangeControl);

                            if (intValue < lowerRange)
                            {
                                rangeControl.NumericUpDownControl.BackColor = Color.Orange;
                            }

                            if (intValue > upperRange)
                            {
                                rangeControl.NumericUpDownControl.BackColor = Color.Orange;
                            }

                            rangeControl.AttachEvents();

                            rangeControl.ValueChanged += Control_ValueChanged;

                            // set pos
//                            rangeControl.Location = new Point(0, ypos);
                            // add control - let it autosize height
                            tableLayoutPanel1.Controls.Add(rangeControl);
                            // add height for next control
//                            ypos += rangeControl.Height;

                            controlAdded = true;
                        }
                    }

                    if (!controlAdded)
                    {
                        // If this is a subset of values
                        string availableValuesRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Values);
                        if (!String.IsNullOrEmpty(availableValuesRaw))
                        {
                            string[] availableValues = availableValuesRaw.Split(new[] { ',' });
                            if (availableValues.Any())
                            {
                                var valueControl = new ValuesControl();
                                valueControl.Name            = x.Key;
                                valueControl.DescriptionText = FitDescriptionText(units, description);
                                valueControl.LabelText       = displayName;

                                ThemeManager.ApplyThemeTo(valueControl);

                                var splitValues = new List <KeyValuePair <string, string> >();
                                // Add the values to the ddl
                                foreach (string val in availableValues)
                                {
                                    string[] valParts = val.Split(new[] { ':' });
                                    splitValues.Add(new KeyValuePair <string, string>(valParts[0].Trim(), (valParts.Length > 1) ? valParts[1].Trim() : valParts[0].Trim()));
                                }
                                ;
                                valueControl.ComboBoxControl.DisplayMember = "Value";
                                valueControl.ComboBoxControl.ValueMember   = "Key";
                                valueControl.ComboBoxControl.DataSource    = splitValues;
                                valueControl.ComboBoxControl.SelectedValue = value;

                                valueControl.ValueChanged += Control_ValueChanged;

                                // set pos
//                                valueControl.Location = new Point(0, ypos);
                                // add control - let it autosize height
                                tableLayoutPanel1.Controls.Add(valueControl);
                                // add height for next control
//                                ypos += valueControl.Height;
                            }
                        }
                    }
                } // if there is an error simply dont show it, ie bad pde file, bad scale etc
                catch (Exception ex) { log.Error(ex); }
            }
        }
        //, ref int ypos)
        void AddControl(KeyValuePair<string,string> x)
        {
            if (!String.IsNullOrEmpty(x.Key))
            {
                try
                {
                    bool controlAdded = false;

                    string value = ((float)MainV2.comPort.MAV.param[x.Key]).ToString("0.###", CultureInfo.InvariantCulture);
                    string description = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Description);
                    string displayName = x.Value + " (" + x.Key + ")";
                    string units = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Units);

                    var items = this.Controls.Find(x.Key,true);
                    if (items.Length > 0)
                    {
                        if (items[0].GetType() == typeof(RangeControl)) {
                            ((RangeControl)items[0]).ValueChanged -= Control_ValueChanged;
                            ((RangeControl)items[0]).DeAttachEvents();
                            ((RangeControl)items[0]).Value = value;
                            ThemeManager.ApplyThemeTo(((RangeControl)items[0]));
                            ((RangeControl)items[0]).AttachEvents();
                            ((RangeControl)items[0]).ValueChanged += Control_ValueChanged;
                            return;
                        } else
                        if (items[0].GetType() == typeof(ValuesControl))
                        {
                            ((ValuesControl)items[0]).ValueChanged -= Control_ValueChanged;
                            ((ValuesControl)items[0]).Value = value;
                            ((ValuesControl)items[0]).ValueChanged += Control_ValueChanged;
                            return;
                        }
                    }

                    // If this is a range
                    string rangeRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Range);
                    string incrementRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Increment);

                    if (!String.IsNullOrEmpty(rangeRaw) && !String.IsNullOrEmpty(incrementRaw))
                    {
                        float increment, intValue;
                        float.TryParse(incrementRaw, out increment);
                        float.TryParse(value, out intValue);

                        string[] rangeParts = rangeRaw.Split(new[] { ' ' });
                        if (rangeParts.Count() == 2 && increment > 0)
                        {
                            float lowerRange;
                            float.TryParse(rangeParts[0], out lowerRange);
                            float upperRange;
                            float.TryParse(rangeParts[1], out upperRange);

                            float displayscale = 1;

                        //    var rangeControl = new RangeControl();

                            if (units.ToLower() == "centi-degrees")
                            {
                                //Console.WriteLine(x.Key + " scale");
                                displayscale = 100;
                                units = "Degrees (Scaled)";
                                increment /= 100;
                            } else if (units.ToLower() == "centimeters")
                            {
                                //Console.WriteLine(x.Key + " scale");
                              //  displayscale = 100;
                              //  units = "Meters (Scaled)";
                              //  increment /= 100;
                            }

                            var rangeControl = new RangeControl(x.Key, FitDescriptionText(units, description), displayName, increment, displayscale, lowerRange, upperRange, value);

                            //Console.WriteLine("{0} {1} {2} {3} {4}", x.Key, increment, lowerRange, upperRange, value);

                            ThemeManager.ApplyThemeTo(rangeControl);

                            if (intValue < lowerRange)
                                rangeControl.NumericUpDownControl.BackColor = Color.Orange;

                            if (intValue > upperRange)
                                rangeControl.NumericUpDownControl.BackColor = Color.Orange;

                            rangeControl.AttachEvents();

                            rangeControl.ValueChanged += Control_ValueChanged;

                            // set pos
                            rangeControl.Location = new Point(0, y);
                            // add control - let it autosize height
                            tableLayoutPanel1.Controls.Add(rangeControl);
                            // add height for next control
                            y += rangeControl.Height;

                            controlAdded = true;
                        }
                    }

                    if (!controlAdded)
                    {
                        // If this is a subset of values
                        string availableValuesRaw = _parameterMetaDataRepository.GetParameterMetaData(x.Key, ParameterMetaDataConstants.Values);
                        if (!String.IsNullOrEmpty(availableValuesRaw))
                        {
                            string[] availableValues = availableValuesRaw.Split(new[] { ',' });
                            if (availableValues.Any())
                            {
                                var valueControl = new ValuesControl();
                                valueControl.Name = x.Key;
                                valueControl.DescriptionText = FitDescriptionText(units, description);
                                valueControl.LabelText = displayName;

                                ThemeManager.ApplyThemeTo(valueControl);

                                var splitValues = new List<KeyValuePair<string, string>>();
                                // Add the values to the ddl
                                foreach (string val in availableValues)
                                {
                                    string[] valParts = val.Split(new[] { ':' });
                                    splitValues.Add(new KeyValuePair<string, string>(valParts[0].Trim(), (valParts.Length > 1) ? valParts[1].Trim() : valParts[0].Trim()));
                                };
                                valueControl.ComboBoxControl.DisplayMember = "Value";
                                valueControl.ComboBoxControl.ValueMember = "Key";
                                valueControl.ComboBoxControl.DataSource = splitValues;
                                valueControl.ComboBoxControl.SelectedValue = value;

                                valueControl.ValueChanged += Control_ValueChanged;

                                // set pos
                                valueControl.Location = new Point(0, y);
                                // add control - let it autosize height
                                tableLayoutPanel1.Controls.Add(valueControl);
                                // add height for next control
                                y += valueControl.Height;
                            }
                        }
                    }
                } // if there is an error simply dont show it, ie bad pde file, bad scale etc
                catch (Exception ex) { log.Error(ex); }
            }
        }