Skip to content

Commit 5f042bf

Browse files
committed
Several debugging user experience improvements:
Fixed edition of watch expressions, it shouldn't be allowed in children nodes, also modified behaviour for triggering the edition, if the node has children a single click won't trigger it as it stops double click to expand from working. Fixed text style on name column on last child node of an expression. Moved and renamed PluginUI to Controls/LocalsUI, better organized and more descriptive that way. Improved state restoring on DataTreeControl and added some optimizations.
1 parent 5b62b92 commit 5f042bf

File tree

9 files changed

+74
-48
lines changed

9 files changed

+74
-48
lines changed

External/Plugins/FlashDebugger/Controls/DataTreeControl.cs

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public partial class DataTreeControl : UserControl, IToolTipProvider
2222
private static ViewerForm viewerForm;
2323
private ContextMenuStrip _contextMenuStrip;
2424
private ToolStripMenuItem copyMenuItem, viewerMenuItem, watchMenuItem;
25-
private List<String> expandedList = new List<String>();
25+
private DataTreeState state;
2626
private bool watchMode;
2727
private bool addingNewExpression;
2828

@@ -68,7 +68,9 @@ public DataTreeControl(bool watchMode)
6868
NameNodeTextBox.DrawText += NameNodeTextBox_DrawText;
6969
NameNodeTextBox.EditorShowing += NameNodeTextBox_EditorShowing;
7070
NameNodeTextBox.EditorHided += NameNodeTextBox_EditorHided;
71+
NameNodeTextBox.IsEditEnabledValueNeeded += NameNodeTextBox_IsEditEnabledValueNeeded;
7172
NameNodeTextBox.LabelChanged += NameNodeTextBox_LabelChanged;
73+
_tree.NodeMouseClick += Tree_NameNodeMouseClick;
7274
}
7375

7476
_model = new DataTreeModel();
@@ -97,13 +99,9 @@ public DataTreeControl(bool watchMode)
9799
viewerMenuItem = new ToolStripMenuItem(TextHelper.GetString("Label.Viewer"), null, new EventHandler(this.ViewerItemClick));
98100
_contextMenuStrip.Items.AddRange(new ToolStripMenuItem[] { copyMenuItem, viewerMenuItem});
99101
if (watchMode)
100-
{
101102
watchMenuItem = new ToolStripMenuItem(TextHelper.GetString("Label.Unwatch"), null, new EventHandler(this.WatchItemClick));
102-
}
103103
else
104-
{
105104
watchMenuItem = new ToolStripMenuItem(TextHelper.GetString("Label.Watch"), null, new EventHandler(this.WatchItemClick));
106-
}
107105
_contextMenuStrip.Items.Add(watchMenuItem);
108106
TreeSelectionChanged(null, null);
109107
viewerForm = new ViewerForm();
@@ -114,7 +112,7 @@ void NameNodeTextBox_DrawText(object sender, DrawEventArgs e)
114112
{
115113
try
116114
{
117-
if (e.Node.NextNode == null && !addingNewExpression)
115+
if (e.Node.NextNode == null && e.Node.Level == 1 && !addingNewExpression)
118116
{
119117
e.Font = new Font(e.Font, FontStyle.Italic);
120118
}
@@ -149,6 +147,11 @@ void NameNodeTextBox_EditorShowing(object sender, System.ComponentModel.CancelEv
149147
addingNewExpression = false;
150148
}
151149

150+
void NameNodeTextBox_IsEditEnabledValueNeeded(object sender, NodeControlValueEventArgs e)
151+
{
152+
e.Value = e.Node.Level == 1;
153+
}
154+
152155
void NameNodeTextBox_LabelChanged(object sender, LabelEventArgs e)
153156
{
154157
NodeTextBox box = sender as NodeTextBox;
@@ -170,6 +173,16 @@ void NameNodeTextBox_LabelChanged(object sender, LabelEventArgs e)
170173
if (!newExp) node.Text = e.OldLabel;
171174
}
172175

176+
void Tree_NameNodeMouseClick(object sender, TreeNodeAdvMouseEventArgs e)
177+
{
178+
if (e.Node.Level == 1 && e.Control == NameNodeTextBox && !e.Node.CanExpand &&
179+
(Tree.SelectedNode == null || Tree.SelectedNode == e.Node))
180+
{
181+
NameNodeTextBox.BeginEdit();
182+
e.Handled = true;
183+
}
184+
}
185+
173186
void ValueNodeTextBox_LabelChanged(object sender, LabelEventArgs e)
174187
{
175188
NodeTextBox box = sender as NodeTextBox;
@@ -247,7 +260,6 @@ void ValueNodeTextBox_DrawText(object sender, DrawEventArgs e)
247260
public DataNode AddNode(DataNode node)
248261
{
249262
_model.Root.Nodes.Add(node);
250-
RestoreExpanded();
251263
return node;
252264
}
253265

@@ -262,13 +274,6 @@ public string GetFullPath(DataNode node)
262274
return _model.GetFullPath(node);
263275
}
264276

265-
public void Clear()
266-
{
267-
if (Nodes.Count > 0) SaveExpanded();
268-
Nodes.Clear();
269-
}
270-
271-
272277
private void CopyItemClick(Object sender, System.EventArgs e)
273278
{
274279
if (Tree.SelectedNode != null)
@@ -467,9 +472,11 @@ void Tree_NodeMouseDoubleClick(object sender, TreeNodeAdvMouseEventArgs e)
467472
}
468473
}
469474

470-
public void SaveExpanded()
475+
public void SaveState()
471476
{
472-
expandedList.Clear();
477+
if (state == null) state = new DataTreeState();
478+
state.Selected = _tree.SelectedNode == null ? null : _model.GetFullPath(_tree.SelectedNode.Tag as Node);
479+
state.Expanded.Clear();
473480
SaveExpanded(Nodes);
474481
}
475482

@@ -480,23 +487,26 @@ private void SaveExpanded(Collection<Node> nodes)
480487
{
481488
if (Tree.FindNode(_model.GetPath(node)).IsExpanded)
482489
{
483-
expandedList.Add(_model.GetFullPath(node));
490+
state.Expanded.Add(_model.GetFullPath(node));
484491
SaveExpanded(node.Nodes);
485492
}
486493
}
487494
}
488495

489-
public void RestoreExpanded()
496+
public void RestoreState()
490497
{
498+
if (state == null) return;
491499
RestoreExpanded(Nodes);
500+
if (state.Selected != null)
501+
_tree.SelectedNode = _tree.FindNodeByTag(_model.FindNode(state.Selected));
492502
}
493503

494504
private void RestoreExpanded(Collection<Node> nodes)
495505
{
496506
if (nodes == null) return;
497507
foreach (Node node in nodes)
498508
{
499-
if (expandedList.Contains(_model.GetFullPath(node)))
509+
if (state.Expanded.Contains(_model.GetFullPath(node)))
500510
{
501511
Tree.FindNode(_model.GetPath(node)).Expand();
502512
RestoreExpanded(node.Nodes);
@@ -527,6 +537,18 @@ public string GetToolTip(TreeNodeAdv node, NodeControl nodeControl)
527537
}
528538

529539
#endregion
540+
541+
#region State Class
542+
543+
private class DataTreeState
544+
{
545+
546+
public HashSet<string> Expanded = new HashSet<String>();
547+
public string Selected;
548+
549+
}
550+
551+
#endregion
530552
}
531553

532554
}

External/Plugins/FlashDebugger/Controls/DataTreeModel.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,20 @@ public string GetFullPath(Node node)
2424
public Node FindNode(string path)
2525
{
2626
if (path == string.Empty) return Root;
27-
else return FindNode(Root, path, 0);
27+
else return FindNode(Root, path);
2828
}
2929

30-
private Node FindNode(Node root, string path, int level)
30+
private Node FindNode(Node root, string path)
3131
{
3232
foreach (Node node in root.Nodes)
3333
{
34-
if (path == GetFullPath(node)) return node;
35-
else
34+
string nodePath = GetFullPath(node);
35+
if (path == nodePath) return node;
36+
if (path.StartsWith(nodePath))
3637
{
3738
if (node.Nodes.Count > 0)
3839
{
39-
Node tmp = FindNode(node, path, level + 1);
40+
Node tmp = FindNode(node, path);
4041
if (tmp != null) return tmp;
4142
}
4243
}

External/Plugins/FlashDebugger/PluginUI.cs renamed to External/Plugins/FlashDebugger/Controls/LocalsUI.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@
77

88
namespace FlashDebugger
99
{
10-
class PluginUI : DockPanelControl
10+
class LocalsUI : DockPanelControl
1111
{
1212
private PluginMain pluginMain;
1313
private DataTreeControl treeControl;
1414
private static Char[] chTrims = { '.' };
1515

16-
public PluginUI(PluginMain pluginMain)
16+
public LocalsUI(PluginMain pluginMain)
1717
{
1818
this.pluginMain = pluginMain;
1919
this.treeControl = new DataTreeControl();
@@ -40,7 +40,7 @@ public DataTreeControl TreeControl
4040

4141
public void Clear()
4242
{
43-
treeControl.Clear();
43+
treeControl.Nodes.Clear();
4444
}
4545

4646
public void SetData(Variable[] variables)

External/Plugins/FlashDebugger/Controls/WatchUI.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ public void Clear()
8282
public void UpdateElements()
8383
{
8484
treeControl.Tree.BeginUpdate();
85+
treeControl.SaveState();
8586
treeControl.Nodes.Clear();
8687
foreach (String item in watches)
8788
{
@@ -109,7 +110,7 @@ public void UpdateElements()
109110
}
110111

111112
treeControl.AddNode(new ValueNode(TextHelper.GetString("Label.AddExpression")));
112-
((NodeTextBox)treeControl.Tree.NodeControls[treeControl.Tree.NodeControls.Count - 2]).EditOnClick = true;
113+
treeControl.RestoreState();
113114
treeControl.Tree.EndUpdate();
114115
treeControl.Enabled = true;
115116
}

External/Plugins/FlashDebugger/Debugger/DebuggerManager.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ private void flashInterface_StartedEvent(object sender)
346346
else if (!PluginMain.settingObject.DisablePanelsAutoshow)
347347
{
348348
PanelsHelper.watchPanel.Show();
349-
PanelsHelper.pluginPanel.Show();
349+
PanelsHelper.localsPanel.Show();
350350
PanelsHelper.threadsPanel.Show();
351351
PanelsHelper.immediatePanel.Show();
352352
PanelsHelper.breakPointPanel.Show();
@@ -376,13 +376,13 @@ private void flashInterface_DisconnectedEvent(object sender)
376376
else if (!PluginMain.settingObject.DisablePanelsAutoshow)
377377
{
378378
PanelsHelper.watchPanel.Hide();
379-
PanelsHelper.pluginPanel.Hide();
379+
PanelsHelper.localsPanel.Hide();
380380
PanelsHelper.threadsPanel.Hide();
381381
PanelsHelper.immediatePanel.Hide();
382382
PanelsHelper.breakPointPanel.Hide();
383383
PanelsHelper.stackframePanel.Hide();
384384
}
385-
PanelsHelper.pluginUI.TreeControl.Nodes.Clear();
385+
PanelsHelper.localsUI.TreeControl.Nodes.Clear();
386386
PanelsHelper.stackframeUI.ClearItem();
387387
PanelsHelper.watchUI.Clear();
388388
PanelsHelper.threadsUI.ClearItem();
@@ -523,19 +523,21 @@ private void UpdateLocalsUI()
523523
Variable thisValue = m_FlashInterface.GetThis(m_CurrentFrame);
524524
Variable[] args = m_FlashInterface.GetArgs(m_CurrentFrame);
525525
Variable[] locals = m_FlashInterface.GetLocals(m_CurrentFrame);
526-
PanelsHelper.pluginUI.Clear();
526+
PanelsHelper.localsUI.TreeControl.SaveState();
527+
PanelsHelper.localsUI.Clear();
527528
if (thisValue != null)
528529
{
529-
PanelsHelper.pluginUI.SetData(new Variable[] { thisValue });
530+
PanelsHelper.localsUI.SetData(new Variable[] { thisValue });
530531
}
531532
if (args != null && args.Length > 0)
532533
{
533-
PanelsHelper.pluginUI.SetData(args);
534+
PanelsHelper.localsUI.SetData(args);
534535
}
535536
if (locals != null && locals.Length > 0)
536537
{
537-
PanelsHelper.pluginUI.SetData(locals);
538+
PanelsHelper.localsUI.SetData(locals);
538539
}
540+
PanelsHelper.localsUI.TreeControl.RestoreState();
539541
CurrentLocation = frames[m_CurrentFrame].getLocation();
540542
PanelsHelper.watchUI.UpdateElements();
541543
}

External/Plugins/FlashDebugger/FlashDebugger.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,9 @@
102102
<Compile Include="Controls\DataTree\ScalarNode.cs" />
103103
<Compile Include="Controls\DataTree\ValueNode.cs" />
104104
<Compile Include="Controls\DataTree\VariableNode.cs" />
105+
<Compile Include="Controls\LocalsUI.cs">
106+
<SubType>UserControl</SubType>
107+
</Compile>
105108
<Compile Include="Controls\ThreadsUI.cs">
106109
<SubType>UserControl</SubType>
107110
</Compile>
@@ -147,9 +150,6 @@
147150
<Compile Include="Helpers\MenusHelper.cs" />
148151
<Compile Include="Helpers\PanelsHelper.cs" />
149152
<Compile Include="Helpers\ScintillaHelper.cs" />
150-
<Compile Include="PluginUI.cs">
151-
<SubType>UserControl</SubType>
152-
</Compile>
153153
<Compile Include="Properties\AssemblyInfo.cs" />
154154
<Compile Include="PluginMain.cs" />
155155
<Compile Include="Properties\Resource.Designer.cs">

External/Plugins/FlashDebugger/Helpers/MenusHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public void AddToolStripItems()
158158

159159
public void OpenLocalVariablesPanel(Object sender, System.EventArgs e)
160160
{
161-
PanelsHelper.pluginPanel.Show();
161+
PanelsHelper.localsPanel.Show();
162162
}
163163

164164
public void OpenBreakPointPanel(Object sender, System.EventArgs e)
@@ -269,7 +269,7 @@ public void UpdateMenuState(object sender, DebuggerState state)
269269
RunToCursorMenu.Enabled = StepButton.Enabled = StepMenu.Enabled = enabled;
270270
if (state == DebuggerState.Running)
271271
{
272-
PanelsHelper.pluginUI.TreeControl.Clear();
272+
PanelsHelper.localsUI.TreeControl.Nodes.Clear();
273273
PanelsHelper.stackframeUI.ClearItem();
274274
}
275275
enabled = /*(state != DebuggerState.Running) &&*/ GetLanguageIsValid();

External/Plugins/FlashDebugger/Helpers/PanelsHelper.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ namespace FlashDebugger
1010
{
1111
internal class PanelsHelper
1212
{
13-
static public String pluginGuid = "f9d8faf1-31f7-45ca-9c14-2cad27d7a19e";
14-
static public DockContent pluginPanel;
15-
static public PluginUI pluginUI;
13+
static public String localsGuid = "f9d8faf1-31f7-45ca-9c14-2cad27d7a19e";
14+
static public DockContent localsPanel;
15+
static public LocalsUI localsUI;
1616

1717
static public String breakPointGuid = "6ee0f809-a3f7-4365-96c7-3bdf89f3aaa4";
1818
static public DockContent breakPointPanel;
@@ -36,10 +36,10 @@ internal class PanelsHelper
3636

3737
public PanelsHelper(PluginMain pluginMain, Image pluginImage)
3838
{
39-
pluginUI = new PluginUI(pluginMain);
40-
pluginUI.Text = TextHelper.GetString("Title.LocalVariables");
41-
pluginPanel = PluginBase.MainForm.CreateDockablePanel(pluginUI, pluginGuid, pluginImage, DockState.DockLeft);
42-
pluginPanel.Hide();
39+
localsUI = new LocalsUI(pluginMain);
40+
localsUI.Text = TextHelper.GetString("Title.LocalVariables");
41+
localsPanel = PluginBase.MainForm.CreateDockablePanel(localsUI, localsGuid, pluginImage, DockState.DockLeft);
42+
localsPanel.Hide();
4343

4444
stackframeUI = new StackframeUI(pluginMain, MenusHelper.imageList);
4545
stackframeUI.Text = TextHelper.GetString("Title.StackTrace");

External/Plugins/FlashDebugger/PluginMain.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public String Name
5454
/// </summary>
5555
public String Guid
5656
{
57-
get { return PanelsHelper.pluginGuid; }
57+
get { return PanelsHelper.localsGuid; }
5858
}
5959

6060
/// <summary>

0 commit comments

Comments
 (0)