示例#1
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); }


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

                    var value = ((float) MainV2.comPort.MAV.param[x.Key]).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]).setup(x.Key, MainV2.comPort.MAV.param);
                            ((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, bitmask.Width - 100);

                            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);
                }
            }
        }
        //, 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); }
            }
        }
        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);
            }
        }