From 32266fc2091ccc0acb557570ee0a56333fde6382 Mon Sep 17 00:00:00 2001 From: nuclearmistake Date: Fri, 25 Mar 2016 14:09:22 -0400 Subject: [PATCH] DynamicReconfigure: recycle a singular DynamicReconfigurePage as target node changes, update debug output. --- DynamicReconfigure/DynamicReconfigure.cs | 4 +- .../DynamicReconfigurePage.xaml.cs | 28 +++----- DynamicReconfigureSharp/MainWindow.xaml.cs | 70 ++++++++++--------- 3 files changed, 51 insertions(+), 51 deletions(-) diff --git a/DynamicReconfigure/DynamicReconfigure.cs b/DynamicReconfigure/DynamicReconfigure.cs index 89d9423c..41ce1569 100644 --- a/DynamicReconfigure/DynamicReconfigure.cs +++ b/DynamicReconfigure/DynamicReconfigure.cs @@ -192,7 +192,7 @@ public void SubscribeForUpdates() } catch (InvalidCastException ice) { - Console.WriteLine(ice); + EDB.WriteLine(ice); } } @@ -273,7 +273,7 @@ private void _set(Config config) _cli = null; } if (!set(config, ref reason)) - Console.WriteLine("SET FAILED\n" + reason); + EDB.WriteLine("SET FAILED\n" + reason); } } diff --git a/DynamicReconfigureSharp/DynamicReconfigurePage.xaml.cs b/DynamicReconfigureSharp/DynamicReconfigurePage.xaml.cs index c28a066b..d1171b40 100644 --- a/DynamicReconfigureSharp/DynamicReconfigurePage.xaml.cs +++ b/DynamicReconfigureSharp/DynamicReconfigurePage.xaml.cs @@ -40,7 +40,8 @@ public DynamicReconfigurePage(NodeHandle n, string name) : this() nh = n; Loaded += (sender, args) => { - Namespace = name; + if (name != null) + Namespace = name; }; } @@ -85,7 +86,7 @@ private void DescriptionRecieved(ConfigDescription cd) } catch (Exception e) { - Console.WriteLine(e); + EDB.WriteLine(e); } })); @@ -96,25 +97,16 @@ public string Namespace { if (Process.GetCurrentProcess().ProcessName == "devenv") return; - Console.WriteLine("CHANGING DYNPARAM PAGE NAMESPACE FROM " + Namespace + " to " + value); + if ((Namespace == null && value == null) || (Namespace != null && Namespace.Equals(value))) + return; + string oldn = Namespace ?? "!NULL!"; + string newn = value ?? "!NULL!"; + EDB.WriteLine("CHANGING DYNPARAM PAGE NAMESPACE FROM " + oldn + " to " + newn); SetValue(NamespaceProperty, value); Init(); } } - public void shutdown() - { - if (dynamic != null) - { - dynamic = null; - } - if (nh != null) - { - nh.shutdown(); - nh = null; - } - } - private void Init() { lock (this) @@ -153,14 +145,16 @@ private void SetupNamespace(string Namespace) nh = new NodeHandle(); if (dynamic != null && dynamic.Namespace != Namespace) { + dynamic.Dispose(); dynamic = null; } - if (dynamic == null) + if (dynamic == null && Namespace != null) { dynamic = new DynamicReconfigureInterface(nh, Namespace); dynamic.SubscribeForUpdates(); dynamic.DescribeParameters(DescriptionRecieved); } + GroupHolder.Children.Clear(); } public event Action BoolChanged; diff --git a/DynamicReconfigureSharp/MainWindow.xaml.cs b/DynamicReconfigureSharp/MainWindow.xaml.cs index 42cc1945..74d28afa 100644 --- a/DynamicReconfigureSharp/MainWindow.xaml.cs +++ b/DynamicReconfigureSharp/MainWindow.xaml.cs @@ -20,9 +20,10 @@ namespace DynamicReconfigureTest /// public partial class MainWindow : Window { - private SortedDictionary knownConfigurations = new SortedDictionary(); + private SortedDictionary knownConfigurations = new SortedDictionary(); private NodeHandle nh; private Thread topicPoller; + private DynamicReconfigurePage reconfigureview; public MainWindow() { @@ -42,7 +43,7 @@ public MainWindow() } catch (Exception e) { - Console.WriteLine(e); + EDB.WriteLine(e); Close(); } @@ -50,7 +51,6 @@ public MainWindow() { while (ROS.ok && !ROS.shutting_down) { - TopicInfo[] topics = new TopicInfo[0]; master.getTopics(ref topics); string[] nodes = new string[0]; @@ -77,34 +77,43 @@ public MainWindow() string pfx = prefix; Dispatcher.Invoke(new Action(() => { - DynamicReconfigurePage drp = new DynamicReconfigurePage(nh, pfx); - if (drp != null) - { - knownConfigurations.Add(pfx, drp); - TargetBox.Items.Refresh(); - } + knownConfigurations.Add(pfx, null); }), new TimeSpan(0,0,0,1)); } } + Dispatcher.Invoke(new Action(TargetBox.Items.Refresh)); foreach (string s in prevlist) { if (!s.Equals("-")) { string pfx = s; Dispatcher.Invoke(new Action(() => - { - if (TargetBox.SelectedItem != null && ((string) TargetBox.SelectedItem).Equals(pfx)) - { - TargetBox.SelectedIndex = 0; - } - lock (this) - { - knownConfigurations.Remove(pfx); - TargetBox.Items.Refresh(); - } - }), new TimeSpan(0, 0, 0, 1)); + { + if (reconfigureview != null && s.Equals(reconfigureview.Namespace)) + reconfigureview.Namespace = null; + if (TargetBox.SelectedItem != null && ((string) TargetBox.SelectedItem).Equals(pfx)) + { + TargetBox.SelectedIndex = 0; + } + lock (this) + { + knownConfigurations.Remove(pfx); + } + }), new TimeSpan(0, 0, 0, 1)); } } + Dispatcher.Invoke(new Action(TargetBox.Items.Refresh)); + if (reconfigureview == null && nh != null) + { + Dispatcher.Invoke(new Action(() => + { + string target = null; + if (TargetBox.SelectedItem != null && !String.Equals(TargetBox.SelectedItem.ToString(), "-")) + target = TargetBox.SelectedItem.ToString(); + reconfigureview = new DynamicReconfigurePage(nh, target); + PageContainer.Children.Add(reconfigureview); + })); + } Thread.Sleep(500); } }); @@ -124,19 +133,16 @@ public MainWindow() private void TargetBox_OnSelectionChanged(object sender, SelectionChangedEventArgs e) { - lock (this) + IEnumerable prevs = e.RemovedItems.OfType(); + IEnumerable news = e.AddedItems.OfType(); + if (!prevs.Any()) + return; + string newprefix = news.ElementAt(0); + if (newprefix != null) { - IEnumerable prevs = e.RemovedItems.OfType(); - IEnumerable news = e.AddedItems.OfType(); - if (prevs.Count() != 1 || news.Count() != 1) return; - PageContainer.Children.Clear(); - string newprefix = news.ElementAt(0); - if (newprefix != null) - { - DynamicReconfigurePage value; - if (knownConfigurations.TryGetValue(newprefix, out value) && !newprefix.Equals("-")) - PageContainer.Children.Add(value); - } + object value; + if (knownConfigurations.TryGetValue(newprefix, out value) && reconfigureview != null) + reconfigureview.Namespace = !newprefix.Equals("-") ? newprefix : null; } }