Skip to content

Commit f1a14e0

Browse files
committed
Some more watch panel improvements
Added support for the Delete key to delete entries. Fixed delete watches, it never worked properly. Optimized adding, removing and updating new entries.
1 parent 2384997 commit f1a14e0

File tree

2 files changed

+50
-31
lines changed

2 files changed

+50
-31
lines changed

External/Plugins/FlashDebugger/Controls/DataTreeControl.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ public DataTreeControl(bool watchMode)
7070
NameNodeTextBox.EditorHided += NameNodeTextBox_EditorHided;
7171
NameNodeTextBox.IsEditEnabledValueNeeded += NameNodeTextBox_IsEditEnabledValueNeeded;
7272
NameNodeTextBox.LabelChanged += NameNodeTextBox_LabelChanged;
73+
_tree.KeyDown += Tree_KeyDown;
7374
_tree.NodeMouseClick += Tree_NameNodeMouseClick;
7475
}
7576

@@ -175,6 +176,16 @@ void NameNodeTextBox_LabelChanged(object sender, LabelEventArgs e)
175176
if (!newExp) node.Text = e.OldLabel;
176177
}
177178

179+
void Tree_KeyDown(object sender, KeyEventArgs e)
180+
{
181+
if (e.KeyCode == Keys.Delete)
182+
{
183+
var node = _tree.SelectedNode;
184+
if (node != null && node.Level == 1 && node.NextNode != null)
185+
PanelsHelper.watchUI.RemoveElement(Tree.SelectedNode.Index);
186+
}
187+
}
188+
178189
void Tree_NameNodeMouseClick(object sender, TreeNodeAdvMouseEventArgs e)
179190
{
180191
if (e.Node.Level == 1 && e.Control == NameNodeTextBox && !e.Node.CanExpand &&
@@ -323,7 +334,7 @@ private void WatchItemClick(Object sender, EventArgs e)
323334
DataNode node = Tree.SelectedNode.Tag as DataNode;
324335
if (watchMode)
325336
{
326-
PanelsHelper.watchUI.RemoveElement(Tree.SelectedNode.Row);
337+
PanelsHelper.watchUI.RemoveElement(Tree.SelectedNode.Index);
327338
}
328339
else
329340
{
@@ -337,7 +348,7 @@ void TreeSelectionChanged(Object sender, EventArgs e)
337348
{
338349
item.Enabled = (Tree.SelectedNode != null);
339350
}
340-
if (watchMode) watchMenuItem.Enabled = (Tree.SelectedNode != null && Tree.SelectedNode.Level == 1);
351+
if (watchMode) watchMenuItem.Enabled = (Tree.SelectedNode != null && Tree.SelectedNode.Level == 1 && Tree.SelectedNode.NextNode != null);
341352
}
342353

343354
void TreeExpanding(Object sender, TreeViewAdvEventArgs e)

External/Plugins/FlashDebugger/Controls/WatchUI.cs

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ namespace FlashDebugger.Controls
1717
public class WatchUI : DockPanelControl
1818
{
1919
private DataTreeControl treeControl;
20-
private List<String> watches;
20+
private List<string> watches;
2121

2222
public WatchUI()
2323
{
@@ -39,23 +39,25 @@ private void TreeControlResize(Object sender, EventArgs e)
3939
this.treeControl.Tree.Columns[1].Width = w - 8;
4040
}
4141

42-
public bool AddElement(String item)
42+
public bool AddElement(string item)
4343
{
4444
if (watches.Contains(item)) return false;
4545
watches.Add(item);
46+
treeControl.Nodes.Insert(watches.Count - 1, GetExpressionNode(item));
4647
UpdateElements();
4748
return true;
4849
}
4950

5051
public void RemoveElement(string item)
5152
{
52-
watches.Remove(item);
53-
UpdateElements();
53+
if (watches.Remove(item))
54+
UpdateElements();
5455
}
5556

5657
public void RemoveElement(int itemN)
5758
{
58-
if (itemN < watches.Count) RemoveElement(watches[itemN]);
59+
if (itemN < watches.Count) watches.RemoveAt(itemN);
60+
treeControl.Nodes.RemoveAt(itemN);
5961
}
6062

6163
public bool ReplaceElement(string oldItem, string newItem)
@@ -67,7 +69,7 @@ public bool ReplaceElement(string oldItem, string newItem)
6769
else
6870
{
6971
watches[itemN] = newItem;
70-
UpdateElements();
72+
treeControl.Nodes[itemN] = GetExpressionNode(newItem);
7173
}
7274

7375
return true;
@@ -78,36 +80,16 @@ public void Clear()
7880
watches.Clear();
7981
treeControl.Nodes.Clear();
8082
}
81-
83+
8284
public void UpdateElements()
8385
{
8486
treeControl.Tree.BeginUpdate();
8587
treeControl.SaveState();
8688

8789
treeControl.Nodes.Clear();
88-
foreach (String item in watches)
90+
foreach (string item in watches)
8991
{
90-
DataNode node; // todo, introduce new Node types.
91-
try
92-
{
93-
IASTBuilder builder = new ASTBuilder(false);
94-
ValueExp exp = builder.parse(new java.io.StringReader(item));
95-
var ctx = new ExpressionContext(PluginMain.debugManager.FlashInterface.Session, PluginMain.debugManager.FlashInterface.GetFrames()[PluginMain.debugManager.CurrentFrame]);
96-
var obj = exp.evaluate(ctx);
97-
if (obj is Variable)
98-
node = new VariableNode((Variable)obj);
99-
else if (obj is Value)
100-
node = new ValueNode(item, (Value)obj);
101-
else
102-
node = new ScalarNode(item, obj.toString());
103-
node.Tag = item;
104-
}
105-
catch (Exception ex)
106-
{
107-
node = new ErrorNode(item, ex);
108-
}
109-
node.Text = item;
110-
treeControl.AddNode(node);
92+
treeControl.AddNode(GetExpressionNode(item));
11193
}
11294

11395
treeControl.AddNode(new ValueNode(TextHelper.GetString("Label.AddExpression")));
@@ -116,5 +98,31 @@ public void UpdateElements()
11698
treeControl.Enabled = true;
11799
}
118100

101+
private DataNode GetExpressionNode(string item)
102+
{
103+
DataNode node;
104+
try
105+
{
106+
IASTBuilder builder = new ASTBuilder(false);
107+
ValueExp exp = builder.parse(new java.io.StringReader(item));
108+
var ctx = new ExpressionContext(PluginMain.debugManager.FlashInterface.Session, PluginMain.debugManager.FlashInterface.GetFrames()[PluginMain.debugManager.CurrentFrame]);
109+
var obj = exp.evaluate(ctx);
110+
if (obj is Variable)
111+
node = new VariableNode((Variable)obj);
112+
else if (obj is Value)
113+
node = new ValueNode(item, (Value)obj);
114+
else
115+
node = new ScalarNode(item, obj.toString());
116+
node.Tag = item;
117+
}
118+
catch (Exception ex)
119+
{
120+
node = new ErrorNode(item, ex);
121+
}
122+
node.Text = item;
123+
124+
return node;
125+
}
126+
119127
}
120128
}

0 commit comments

Comments
 (0)