public DynamicReconfigureStringBox(DynamicReconfigureInterface dynamic, ParamDescription pd, string def)
 {
     this.def     = def;
     name         = pd.name.data;
     this.dynamic = dynamic;
     InitializeComponent();
     description.Content = name + ":";
     JustTheTip.Content  = pd.description.data;
     dynamic.Subscribe(name, changed);
     ignore = false;
 }
 public DynamicReconfigurePage(NodeHandle n, string name) : this()
 {
     nh        = n;
     this.name = name + ":";
     Loaded   += (sender, args) =>
     {
         dynamic = new DynamicReconfigureInterface(nh, name);
         dynamic.SubscribeForUpdates();
         dynamic.DescribeParameters(DescriptionRecieved);
     };
 }
Example #3
0
 public DynamicReconfigureCheckbox(DynamicReconfigureInterface dynamic, ParamDescription pd, bool def)
 {
     this.def     = def;
     name         = pd.name;
     this.dynamic = dynamic;
     InitializeComponent();
     description.Content = name + ":";
     JustTheTip.Content  = pd.description;
     _checkBox.IsChecked = def;
     dynamic.Subscribe(name, changed);
     ignore = false;
 }
 public void shutdown()
 {
     if (dynamic != null)
     {
         dynamic = null;
     }
     if (nh != null)
     {
         nh.shutdown();
         nh = null;
     }
 }
        public DynamicReconfigureSlider(DynamicReconfigureInterface dynamic, ParamDescription pd, double def, double max, double min, bool isDouble)
        {
            name          = pd.name;
            this.dynamic  = dynamic;
            this.isDouble = isDouble;
            InitializeComponent();
            this.min = min;
            if (double.IsInfinity(this.min))
            {
                value.Minimum = -1000.0;
            }
            else
            {
                value.Minimum = min;
            }
            this.max = max;
            if (double.IsInfinity(this.max))
            {
                value.Maximum = 1000.0;
            }
            else
            {
                value.Maximum = max;
            }
            description.Text   = name + ":";
            JustTheTip.Content = pd.description;

            double range = value.Maximum - value.Minimum;

            minlabel.Content = Format(value.Minimum);
            maxlabel.Content = Format(value.Maximum);
            value.Value      = this.def = def;
            if (isDouble)
            {
                textBehavior.RegularExpression = @"^[\-\.0-9]+$";
                value.IsSnapToTickEnabled      = false;
                value.TickFrequency            = range / 10.0;
                value.LargeChange = range / 10.0;
                value.SmallChange = range / 100.0;
                dynamic.Subscribe(name, new Action <double>(changed));
                ignore = false;
            }
            else
            {
                textBehavior.RegularExpression = @"^[\-0-9][0-9]*$";
                value.IsSnapToTickEnabled      = true;
                value.TickFrequency            = Math.Max(1, (int)Math.Floor(range / 10.0));
                value.LargeChange = Math.Max(1, (int)Math.Floor(range / 10.0));
                value.SmallChange = 1;
                dynamic.Subscribe(name, new Action <int>(changed));
                ignore = false;
            }
        }
Example #6
0
        public DynamicReconfigureSlider(DynamicReconfigureInterface dynamic, ParamDescription pd, double def, double max, double min, bool isDouble)
        {
            name          = pd.name.data;
            this.dynamic  = dynamic;
            this.isDouble = isDouble;
            InitializeComponent();
            this.min = min;
            if (double.IsInfinity(this.min))
            {
                value.Minimum = -1000.0;
            }
            else
            {
                value.Minimum = min;
            }
            this.max = max;
            if (double.IsInfinity(this.max))
            {
                value.Maximum = 1000.0;
            }
            else
            {
                value.Maximum = max;
            }
            description.Text   = name + ":";
            JustTheTip.Content = pd.description.data;

            if (isDouble)
            {
                textBehavior.RegularExpression = @"^[\-\.0-9]+$";
                value.IsSnapToTickEnabled      = false;
                value.TickFrequency            = 0;
                minlabel.Content = string.Format("{0:N2}", value.Minimum);
                maxlabel.Content = string.Format("{0:N2}", value.Maximum);
                value.Value      = this.def = def;
                dynamic.Subscribe(name, new Action <double>(changed));
                ignore = false;
            }
            else
            {
                textBehavior.RegularExpression = @"^[\-0-9][0-9]*$";
                value.TickFrequency            = 1;
                value.IsSnapToTickEnabled      = true;
                minlabel.Content = "" + (int)value.Minimum;
                maxlabel.Content = "" + (int)value.Maximum;
                value.Value      = this.def = def;
                dynamic.Subscribe(name, new Action <int>(changed));
                ignore = false;
            }
        }
 private void SetupNamespace(string Namespace)
 {
     if (Process.GetCurrentProcess().ProcessName == "devenv")
     {
         return;
     }
     if (nh == null)
     {
         nh = new NodeHandle();
     }
     if (dynamic != null && dynamic.Namespace != Namespace)
     {
         dynamic = null;
     }
     if (dynamic == null)
     {
         dynamic = new DynamicReconfigureInterface(nh, Namespace);
         dynamic.SubscribeForUpdates();
         dynamic.DescribeParameters(DescriptionRecieved);
     }
 }
Example #8
0
        public DynamicReconfigureGroup(Group g, Config def, Config min, Config max, string name, DynamicReconfigureInterface dynamic)
            : this()
        {
            this.dynamic = dynamic;
            this.name    = name + ":";
            this.min     = min;
            this.max     = max;
            this.def     = def;
            group        = g;
            //container.Header = g.name.data;
            _id     = g.id;
            _parent = g.parent;
            Loaded += (sender, args) =>
            {
                paramsHolder.Children.Clear();
                dropdowns.Clear();
                checkboxes.Clear();
                sliders.Clear();
                boxes.Clear();

                foreach (ParamDescription s in g.parameters)
                {
                    string _name = s.name.data;
                    switch (TYPE_DICT[s.type.data])
                    {
                    case DYN_RECFG_TYPE.type_bool:
                    {
                        var pdef = def.bools.FirstOrDefault(p => p.name.data == s.name.data);
                        var pmax = max.bools.FirstOrDefault(p => p.name.data == s.name.data);
                        var pmin = min.bools.FirstOrDefault(p => p.name.data == s.name.data);
                        if (s.edit_method.data.Contains("enum_description"))
                        {
                            var d = new DynamicReconfigureStringDropdown(dynamic, s, pdef.value, pmax.value, pmin.value, s.edit_method.data);
                            paramsHolder.Children.Add(d);
                            dropdowns.Add(s.name.data, d);
                            d.Instrument(S =>
                                {
                                    if (IntChanged != null)
                                    {
                                        IntChanged(_name, S);
                                    }
                                });
                        }
                        else
                        {
                            var d = new DynamicReconfigureCheckbox(dynamic, s, pdef.value);
                            paramsHolder.Children.Add(d);
                            checkboxes.Add(s.name.data, d);
                            d.Instrument(S =>
                                {
                                    if (BoolChanged != null)
                                    {
                                        BoolChanged(_name, S);
                                    }
                                });
                        }
                    }
                    break;

                    case DYN_RECFG_TYPE.type_double:
                    {
                        var pdef = def.doubles.FirstOrDefault(p => p.name.data == s.name.data);
                        var pmax = max.doubles.FirstOrDefault(p => p.name.data == s.name.data);
                        var pmin = min.doubles.FirstOrDefault(p => p.name.data == s.name.data);
                        if (s.edit_method.data.Contains("enum_description"))
                        {
                            var d = new DynamicReconfigureStringDropdown(dynamic, s, pdef.value, pmax.value, pmin.value, s.edit_method.data);
                            paramsHolder.Children.Add(d);
                            dropdowns.Add(s.name.data, d);
                            d.Instrument(S =>
                                {
                                    if (IntChanged != null)
                                    {
                                        IntChanged(_name, S);
                                    }
                                });
                        }
                        else
                        {
                            var d = new DynamicReconfigureSlider(dynamic, s, pdef.value, pmax.value, pmin.value, true);
                            paramsHolder.Children.Add(d);
                            sliders.Add(s.name.data, d);
                            d.Instrument(new Action <double>(S =>
                                {
                                    if (DoubleChanged != null)
                                    {
                                        DoubleChanged(_name, S);
                                    }
                                }));
                        }
                    }
                    break;

                    case DYN_RECFG_TYPE.type_int:
                    {
                        var pmax = max.ints.FirstOrDefault(p => p.name.data == s.name.data);
                        var pmin = min.ints.FirstOrDefault(p => p.name.data == s.name.data);
                        var pdef = def.ints.FirstOrDefault(p => p.name.data == s.name.data);
                        if (s.edit_method.data.Contains("enum_description"))
                        {
                            var d = new DynamicReconfigureStringDropdown(dynamic, s, pdef.value, pmax.value, pmin.value, s.edit_method.data);
                            paramsHolder.Children.Add(d);
                            dropdowns.Add(s.name.data, d);
                            d.Instrument(S =>
                                {
                                    if (IntChanged != null)
                                    {
                                        IntChanged(_name, S);
                                    }
                                });
                        }
                        else
                        {
                            var d = new DynamicReconfigureSlider(dynamic, s, pdef.value, pmax.value, pmin.value, false);
                            paramsHolder.Children.Add(d);
                            sliders.Add(s.name.data, d);
                            d.Instrument(S =>
                                {
                                    if (IntChanged != null)
                                    {
                                        IntChanged(_name, S);
                                    }
                                });
                        }
                    }
                    break;

                    case DYN_RECFG_TYPE.type_str:
                    {
                        var pdef = def.strs.FirstOrDefault(p => p.name.data == s.name.data);
                        var pmax = max.strs.FirstOrDefault(p => p.name.data == s.name.data);
                        var pmin = min.strs.FirstOrDefault(p => p.name.data == s.name.data);
                        if (s.edit_method.data.Contains("enum_description"))
                        {
                            var d = new DynamicReconfigureStringDropdown(dynamic, s, pdef.value.data, pmax.value.data, pmin.value.data, s.edit_method.data);
                            paramsHolder.Children.Add(d);
                            dropdowns.Add(s.name.data, d);
                            d.Instrument(S =>
                                {
                                    if (IntChanged != null)
                                    {
                                        IntChanged(_name, S);
                                    }
                                });
                        }
                        else
                        {
                            var d = new DynamicReconfigureStringBox(dynamic, s, pdef.value.data);
                            paramsHolder.Children.Add(d);
                            boxes.Add(s.name.data, d);
                            d.Instrument(S =>
                                {
                                    if (StringChanged != null)
                                    {
                                        StringChanged(_name, S);
                                    }
                                });
                        }
                    }
                    break;
                    }
                }

                SizeChangedEventHandler saeh = null;
                saeh = (o, a)
                       =>
                {
                    double maxwidth = 0;
                    foreach (DynamicReconfigureCheckbox d in checkboxes.Values)
                    {
                        GetMaxWidth(d, ref maxwidth);
                    }
                    foreach (DynamicReconfigureSlider d in sliders.Values)
                    {
                        GetMaxWidth(d, ref maxwidth);
                    }
                    foreach (DynamicReconfigureStringBox d in boxes.Values)
                    {
                        GetMaxWidth(d, ref maxwidth);
                    }
                    foreach (DynamicReconfigureStringDropdown d in dropdowns.Values)
                    {
                        GetMaxWidth(d, ref maxwidth);
                    }
                    foreach (IDynamicReconfigureLayout idrl in paramsHolder.Children)
                    {
                        idrl.setDescriptionWidth(maxwidth);
                    }
                    SizeChanged -= saeh;
                };
                SizeChanged += saeh;
            };
        }
Example #9
0
        public DynamicReconfigureStringDropdown(DynamicReconfigureInterface dynamic, ParamDescription pd, object def, object max, object min, string edit_method)
        {
            this.def         = def;
            this.max         = max;
            this.min         = min;
            this.edit_method = edit_method.Replace("'enum'", "'Enum'");
            Dictionary <string, string> parsed = EnumParser.Parse(this.edit_method);

            string[] vals = parsed["Enum"].Split(new[] { '}' }, StringSplitOptions.RemoveEmptyEntries);
            List <Dictionary <string, string> > descs = vals.Select(s => EnumParser.SubParse(s + "}")).ToList();

            descs                            = descs.Except(descs.Where(d => d.Count == 0)).ToList();
            enumdescription                  = new EnumDescription();
            enumdescription.Enum             = new EnumValue[descs.Count];
            enumdescription.enum_description = parsed["enum_description"];
            Type tdesc = typeof(EnumValue);

            for (int i = 0; i < descs.Count; i++)
            {
                Dictionary <string, string> desc = descs[i];
                EnumValue newval = new EnumValue();
                foreach (string s in desc.Keys)
                {
                    FieldInfo fi = tdesc.GetField(s);
                    if (fi.FieldType == typeof(int))
                    {
                        fi.SetValue(newval, int.Parse(desc[s]));
                    }
                    else
                    {
                        fi.SetValue(newval, desc[s]);
                    }
                }
                enumdescription.Enum[i] = newval;
            }
            name         = pd.name;
            this.dynamic = dynamic;
            InitializeComponent();
            for (int i = 0; i < enumdescription.Enum.Length; i++)
            {
                if (!types.ContainsKey(enumdescription.Enum[i].type))
                {
                    throw new Exception("HANDLE " + enumdescription.Enum[i].type);
                }
                switch (types[enumdescription.Enum[i].type])
                {
                case DROPDOWN_TYPE.INT:
                {
                    ComboBoxItem cbi = new ComboBoxItem {
                        Tag = int.Parse(enumdescription.Enum[i].value), Content = enumdescription.Enum[i].name, ToolTip = new ToolTip {
                            Content = enumdescription.Enum[i].description + " (" + enumdescription.Enum[i].value + ")"
                        }
                    };
                    @enum.Items.Add(cbi);
                    if (i == 0)
                    {
                        @enum.SelectedValue = this.def;
                        dynamic.Subscribe(name, (Action <int>)changed);
                    }
                    else if (enumdescription.Enum[i].type != enumdescription.Enum[i - 1].type)
                    {
                        throw new Exception("NO CHANGSIES MINDSIES");
                    }
                }
                break;

                case DROPDOWN_TYPE.STR:
                {
                    ComboBoxItem cbi = new ComboBoxItem {
                        Tag = enumdescription.Enum[i].value, Content = enumdescription.Enum[i].name, ToolTip = new ToolTip {
                            Content = enumdescription.Enum[i].description
                        }
                    };
                    @enum.Items.Add(cbi);
                    if (i == 0)
                    {
                        @enum.SelectedValue = this.def;
                        dynamic.Subscribe(name, (Action <string>)changed);
                    }
                    else if (enumdescription.Enum[i].type != enumdescription.Enum[i - 1].type)
                    {
                        throw new Exception("NO CHANGSIES MINDSIES");
                    }
                }
                break;
                }
            }
            description.Content = name + ":";
            JustTheTip.Content  = pd.description;
            ignore = false;
        }