Skip to content

Commit c3ff68e

Browse files
committed
fixup! expant/collapse tree node on double click fix
1 parent ad23038 commit c3ff68e

8 files changed

Lines changed: 72 additions & 68 deletions

File tree

Aga.Controls/Tree/Input/NormalInputState.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,18 @@ public override void KeyDown(KeyEventArgs args)
2424
{
2525
case Keys.Right:
2626
if (!Tree.CurrentNode.IsExpanded)
27-
Tree.CurrentNode.IsExpanded = true;
27+
{
28+
Tree.CurrentNode.Expand(true);
29+
}
2830
else if (Tree.CurrentNode.Nodes.Count > 0)
2931
Tree.SelectedNode = Tree.CurrentNode.Nodes[0];
3032
args.Handled = true;
3133
break;
3234
case Keys.Left:
3335
if (Tree.CurrentNode.IsExpanded)
34-
Tree.CurrentNode.IsExpanded = false;
36+
{
37+
Tree.CurrentNode.Collapse(true);
38+
}
3539
else if (Tree.CurrentNode.Parent != Tree.Root)
3640
Tree.SelectedNode = Tree.CurrentNode.Parent;
3741
args.Handled = true;
@@ -63,12 +67,12 @@ public override void KeyDown(KeyEventArgs args)
6367
args.Handled = true;
6468
break;
6569
case Keys.Subtract:
66-
Tree.CurrentNode.Collapse();
70+
Tree.CurrentNode.Collapse(true);
6771
args.Handled = true;
6872
args.SuppressKeyPress = true;
6973
break;
7074
case Keys.Add:
71-
Tree.CurrentNode.Expand();
75+
Tree.CurrentNode.Expand(true);
7276
args.Handled = true;
7377
args.SuppressKeyPress = true;
7478
break;

Aga.Controls/Tree/NodeControls/NodePlusMinus.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,13 @@ public override void MouseDown(TreeNodeAdvMouseEventArgs args)
9191
{
9292
args.Handled = true;
9393
if (args.Node.CanExpand)
94-
args.Node.IsExpanded = !args.Node.IsExpanded;
95-
}
94+
{
95+
if (args.Node.IsExpanded)
96+
args.Node.Collapse(true);
97+
else
98+
args.Node.Expand(true);
99+
}
100+
}
96101
}
97102

98103
public override void MouseDoubleClick(TreeNodeAdvMouseEventArgs args)

Aga.Controls/Tree/TreeNodeAdv.cs

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using System;
2-
using System.Collections.Generic;
32
using System.Collections.ObjectModel;
43
using System.Runtime.Serialization;
54
using System.Security.Permissions;
@@ -83,10 +82,10 @@ internal void OnCollapsing()
8382
}
8483

8584
public event EventHandler<TreeViewAdvEventArgs> Collapsed;
86-
internal void OnCollapsed()
85+
internal void OnCollapsed(bool byUser)
8786
{
8887
if (Collapsed != null)
89-
Collapsed(this, new TreeViewAdvEventArgs(this));
88+
Collapsed(this, new TreeViewAdvEventArgs(this, byUser));
9089
}
9190

9291
public event EventHandler<TreeViewAdvEventArgs> Expanding;
@@ -97,10 +96,10 @@ internal void OnExpanding()
9796
}
9897

9998
public event EventHandler<TreeViewAdvEventArgs> Expanded;
100-
internal void OnExpanded()
99+
internal void OnExpanded(bool byUser)
101100
{
102101
if (Expanded != null)
103-
Expanded(this, new TreeViewAdvEventArgs(this));
102+
Expanded(this, new TreeViewAdvEventArgs(this, byUser));
104103
}
105104

106105
#endregion
@@ -194,13 +193,6 @@ public bool IsExpandedOnce
194193
public bool IsExpanded
195194
{
196195
get { return _isExpanded; }
197-
set
198-
{
199-
if (value)
200-
Expand();
201-
else
202-
Collapse();
203-
}
204196
}
205197

206198
internal void AssignIsExpanded(bool value)
@@ -367,34 +359,34 @@ public override string ToString()
367359
return base.ToString();
368360
}
369361

370-
public void Collapse()
362+
public void Collapse(bool raisedByUser)
371363
{
372364
if (_isExpanded)
373-
Collapse(true);
365+
Collapse(true, raisedByUser);
374366
}
375367

376368
public void CollapseAll()
377369
{
378-
Collapse(false);
370+
Collapse(false, false);
379371
}
380372

381-
public void Collapse(bool ignoreChildren)
373+
public void Collapse(bool ignoreChildren, bool raisedByUser)
382374
{
383375
SetIsExpanded(false, ignoreChildren);
384376
}
385377

386-
public void Expand()
378+
public void Expand(bool raisedByUser)
387379
{
388380
if (!_isExpanded)
389-
Expand(true);
381+
Expand(true, raisedByUser);
390382
}
391383

392384
public void ExpandAll()
393385
{
394-
Expand(false);
386+
Expand(false, false);
395387
}
396388

397-
public void Expand(bool ignoreChildren)
389+
public void Expand(bool ignoreChildren, bool raisedByUser)
398390
{
399391
SetIsExpanded(true, ignoreChildren);
400392
}

Aga.Controls/Tree/TreeViewAdv.Input.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,12 @@ protected override void OnMouseDoubleClick(MouseEventArgs e)
194194
if (!args.Handled)
195195
{
196196
if (args.Node != null && args.Button == MouseButtons.Left)
197-
args.Node.IsExpanded = !args.Node.IsExpanded;
197+
{
198+
if (args.Node.IsExpanded)
199+
args.Node.Collapse(true);
200+
else
201+
args.Node.Expand(true);
202+
}
198203
}
199204
}
200205

Aga.Controls/Tree/TreeViewAdv.cs

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,10 @@ private void OnCollapsing(TreeNodeAdv node)
129129

130130
[Category("Behavior")]
131131
public event EventHandler<TreeViewAdvEventArgs> Collapsed;
132-
private void OnCollapsed(TreeNodeAdv node)
132+
private void OnCollapsed(TreeNodeAdv node, bool byUser)
133133
{
134134
if (Collapsed != null)
135-
Collapsed(this, new TreeViewAdvEventArgs(node));
135+
Collapsed(this, new TreeViewAdvEventArgs(node, byUser));
136136
}
137137

138138
[Category("Behavior")]
@@ -145,10 +145,10 @@ private void OnExpanding(TreeNodeAdv node)
145145

146146
[Category("Behavior")]
147147
public event EventHandler<TreeViewAdvEventArgs> Expanded;
148-
private void OnExpanded(TreeNodeAdv node)
148+
private void OnExpanded(TreeNodeAdv node, bool byUser)
149149
{
150150
if (Expanded != null)
151-
Expanded(this, new TreeViewAdvEventArgs(node));
151+
Expanded(this, new TreeViewAdvEventArgs(node, byUser));
152152
}
153153

154154
[Category("Behavior")]
@@ -436,7 +436,7 @@ public void EnsureVisible(TreeNodeAdv node)
436436
TreeNodeAdv parent = node.Parent;
437437
while (parent != _root)
438438
{
439-
parent.IsExpanded = true;
439+
parent.Expand(false);
440440
parent = parent.Parent;
441441
}
442442
ScrollTo(node);
@@ -717,7 +717,7 @@ private void CreateNodes()
717717
Selection.Clear();
718718
SelectionStart = null;
719719
_root = new TreeNodeAdv(this, null);
720-
_root.IsExpanded = true;
720+
_root.Expand(false);
721721
if (_root.Nodes.Count > 0)
722722
CurrentNode = _root.Nodes[0];
723723
else
@@ -778,6 +778,7 @@ private struct ExpandArgs
778778
public TreeNodeAdv Node;
779779
public bool Value;
780780
public bool IgnoreChildren;
781+
public bool ChangedByUser;
781782
}
782783

783784
public void AbortBackgroundExpandingThreads()
@@ -789,7 +790,7 @@ public void AbortBackgroundExpandingThreads()
789790
Invalidate();
790791
}
791792

792-
internal void SetIsExpanded(TreeNodeAdv node, bool value, bool ignoreChildren)
793+
internal void SetIsExpanded(TreeNodeAdv node, bool value, bool ignoreChildren, bool byUser)
793794
{
794795
ExpandArgs eargs = new ExpandArgs();
795796
eargs.Node = node;
@@ -798,22 +799,22 @@ internal void SetIsExpanded(TreeNodeAdv node, bool value, bool ignoreChildren)
798799

799800
if (AsyncExpanding && LoadOnDemand && !_threadPool.IsMyThread(Thread.CurrentThread))
800801
{
801-
WaitCallback wc = delegate(object argument) { SetIsExpanded((ExpandArgs)argument); };
802+
WaitCallback wc = delegate(object argument) { SetIsExpanded((ExpandArgs)argument, byUser); };
802803
_threadPool.QueueUserWorkItem(wc, eargs);
803804
}
804805
else
805-
SetIsExpanded(eargs);
806+
SetIsExpanded(eargs, byUser);
806807
}
807808

808-
private void SetIsExpanded(ExpandArgs eargs)
809+
private void SetIsExpanded(ExpandArgs eargs, bool byUser)
809810
{
810811
bool update = !eargs.IgnoreChildren && !AsyncExpanding;
811812
if (update)
812813
BeginUpdate();
813814
try
814815
{
815816
if (IsMyNode(eargs.Node) && eargs.Node.IsExpanded != eargs.Value)
816-
SetIsExpanded(eargs.Node, eargs.Value);
817+
SetIsExpanded(eargs.Node, eargs.Value, byUser);
817818

818819
if (!eargs.IgnoreChildren)
819820
SetIsExpandedRecursive(eargs.Node, eargs.Value);
@@ -825,7 +826,7 @@ private void SetIsExpanded(ExpandArgs eargs)
825826
}
826827
}
827828

828-
internal void SetIsExpanded(TreeNodeAdv node, bool value)
829+
internal void SetIsExpanded(TreeNodeAdv node, bool value, bool byUser)
829830
{
830831
if (Root == node && !value)
831832
return; //Can't collapse root node
@@ -857,13 +858,13 @@ internal void SetIsExpanded(TreeNodeAdv node, bool value)
857858

858859
if (value)
859860
{
860-
OnExpanded(node);
861-
node.OnExpanded();
861+
OnExpanded(node, byUser);
862+
node.OnExpanded(byUser);
862863
}
863864
else
864865
{
865-
OnCollapsed(node);
866-
node.OnCollapsed();
866+
OnCollapsed(node, byUser);
867+
node.OnCollapsed(byUser);
867868
}
868869
}
869870

@@ -887,7 +888,10 @@ internal void SetIsExpandedRecursive(TreeNodeAdv root, bool value)
887888
for (int i = 0; i < root.Nodes.Count; i++)
888889
{
889890
TreeNodeAdv node = root.Nodes[i];
890-
node.IsExpanded = value;
891+
if (value)
892+
node.Expand(false);
893+
else
894+
node.Collapse(false);
891895
SetIsExpandedRecursive(node, value);
892896
}
893897
}
@@ -1143,7 +1147,7 @@ private void RestoreExpandedNodes(TreeNodeAdv node, Dictionary<object, object> l
11431147
{
11441148
if (node.Tag != null && list.ContainsKey(node.Tag))
11451149
{
1146-
node.IsExpanded = true;
1150+
node.Expand(false);
11471151
foreach (var child in node.Children)
11481152
RestoreExpandedNodes(child, list);
11491153
}
Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
11
using System;
2-
using System.Collections.Generic;
3-
using System.Text;
42

53
namespace Aga.Controls.Tree
64
{
75
public class TreeViewAdvEventArgs : EventArgs
86
{
9-
private TreeNodeAdv _node;
7+
public TreeNodeAdv Node { get; }
8+
public bool RaisedByUser { get; }
109

11-
public TreeNodeAdv Node
10+
public TreeViewAdvEventArgs(TreeNodeAdv node, bool raisedByUser = false)
1211
{
13-
get { return _node; }
14-
}
15-
16-
public TreeViewAdvEventArgs(TreeNodeAdv node)
17-
{
18-
_node = node;
19-
}
12+
Node = node;
13+
RaisedByUser = raisedByUser;
14+
}
2015
}
2116
}

OpenHardwareMonitor/UI/MainForm.Designer.cs

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

OpenHardwareMonitor/UI/MainForm.cs

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -617,7 +617,7 @@ private void Timer_Tick(object sender, EventArgs e)
617617
if (!backgroundUpdater.IsBusy)
618618
backgroundUpdater.RunWorkerAsync();
619619

620-
//RestoreCollapsedNodeState(treeView);
620+
RestoreCollapsedNodeState(treeView);
621621
}
622622

623623
private void SaveConfiguration()
@@ -675,7 +675,7 @@ private void RestoreCollapsedNodeState(TreeViewAdv treeViewAdv)
675675

676676
foreach (TreeNodeAdv node in collapsedHwNodes)
677677
{
678-
node.IsExpanded = false;
678+
node.Collapse(false);
679679
}
680680
}
681681

@@ -713,23 +713,20 @@ private void AboutMenuItem_Click(object sender, EventArgs e)
713713
_ = new AboutBox().ShowDialog();
714714
}
715715

716+
private void TreeView_CollapsedOrExpanded(object sender, TreeViewAdvEventArgs info)
717+
{
718+
if (info.RaisedByUser && info.Node.Tag is IExpandPersistNode expandPersistNode)
719+
expandPersistNode.Expanded = info.Node.IsExpanded;
720+
}
721+
716722
private void TreeView_Click(object sender, EventArgs e)
717723
{
718724
if (!(e is MouseEventArgs m) || (m.Button != MouseButtons.Left && m.Button != MouseButtons.Right))
719725
return;
720726

721727
NodeControlInfo info = treeView.GetNodeControlInfoAt(new Point(m.X, m.Y));
722-
if (m.Button == MouseButtons.Left && info.Node != null)
723-
{
724-
if (info.Node.Tag is IExpandPersistNode expandPersistNode)
725-
{
726-
expandPersistNode.Expanded = info.Node.IsExpanded;
727-
}
728-
return;
729-
}
730-
731728
treeView.SelectedNode = info.Node;
732-
if (info.Node != null)
729+
if (m.Button == MouseButtons.Right && info.Node != null)
733730
{
734731
if (info.Node.Tag is SensorNode node && node.Sensor != null)
735732
{

0 commit comments

Comments
 (0)