Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit ecbdffe

Browse files
Functionality to set parent node from meta
1 parent bc914a9 commit ecbdffe

File tree

2 files changed

+46
-52
lines changed

2 files changed

+46
-52
lines changed

src/GitHub.Api/UI/TreeBase.cs

Lines changed: 43 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -183,23 +183,9 @@ protected bool PromoteNode(TNode previouslyAddedNode, string nextLabel)
183183

184184
public void SetCheckStateOnAll(bool isChecked)
185185
{
186-
var nodeCheckState = isChecked ? CheckState.Checked : CheckState.Empty;
187186
foreach (var node in Nodes)
188187
{
189-
var wasChecked = node.CheckState == CheckState.Checked;
190-
node.CheckState = nodeCheckState;
191-
192-
if (!node.IsFolder)
193-
{
194-
if (isChecked && !wasChecked)
195-
{
196-
AddCheckedNode(node);
197-
}
198-
else if (!isChecked && wasChecked)
199-
{
200-
RemoveCheckedNode(node);
201-
}
202-
}
188+
SetCheckStateOnNode(node, isChecked ? CheckState.Checked : CheckState.Empty);
203189
}
204190
}
205191

@@ -250,60 +236,42 @@ protected void ToggleNodeVisibility(int idx, TNode node)
250236

251237
protected void ToggleNodeChecked(int idx, TNode node)
252238
{
239+
CheckState checkState;
253240
var isChecked = false;
254-
255241
switch (node.CheckState)
256242
{
257243
case CheckState.Mixed:
258244
case CheckState.Empty:
259-
node.CheckState = CheckState.Checked;
245+
checkState = CheckState.Checked;
260246
isChecked = true;
261247
break;
262248

263249
case CheckState.Checked:
264-
node.CheckState = CheckState.Empty;
250+
checkState = CheckState.Empty;
265251
break;
266-
}
267252

268-
if (!node.IsFolder)
269-
{
270-
if (isChecked)
271-
{
272-
AddCheckedNode(node);
273-
}
274-
else
275-
{
276-
RemoveCheckedNode(node);
277-
}
253+
default:
254+
throw new ArgumentOutOfRangeException("Unknown CheckState");
278255
}
279256

257+
SetCheckStateOnNode(node, checkState);
258+
280259
if (node.IsFolderOrContainer)
281260
{
282261
ToggleChildrenChecked(idx, node, isChecked);
283262
}
284263

285-
ToggleParentFoldersChecked(idx, node, isChecked);
264+
ToggleParentFolderAndContainersChecked(idx, node, isChecked);
286265
}
287266

288267
private void ToggleChildrenChecked(int idx, TNode node, bool isChecked)
289268
{
290269
for (var i = idx + 1; i < Nodes.Count && node.Level < Nodes[i].Level; i++)
291270
{
292271
var childNode = Nodes[i];
293-
var wasChecked = childNode.CheckState == CheckState.Checked;
294-
childNode.CheckState = isChecked ? CheckState.Checked : CheckState.Empty;
295272

296-
if (!childNode.IsFolder)
297-
{
298-
if (isChecked && !wasChecked)
299-
{
300-
AddCheckedNode(childNode);
301-
}
302-
else if (!isChecked && wasChecked)
303-
{
304-
RemoveCheckedNode(childNode);
305-
}
306-
}
273+
var wasChecked = childNode.CheckState == CheckState.Checked;
274+
SetCheckStateOnNode(node, isChecked ? CheckState.Checked : CheckState.Empty);
307275

308276
if (childNode.IsFolderOrContainer)
309277
{
@@ -332,7 +300,29 @@ private List<TNode> GetLeafNodes(TNode node, int idx)
332300
return results;
333301
}
334302

335-
private void ToggleParentFoldersChecked(int idx, TNode node, bool isChecked)
303+
private void SetCheckStateOnNode(TNode node, CheckState nodeCheckState)
304+
{
305+
var isChecked = nodeCheckState == CheckState.Checked
306+
|| nodeCheckState == CheckState.Mixed;
307+
308+
var wasChecked = node.CheckState == CheckState.Checked;
309+
310+
node.CheckState = nodeCheckState;
311+
312+
if (!node.IsFolder)
313+
{
314+
if (isChecked && !wasChecked)
315+
{
316+
AddCheckedNode(node);
317+
}
318+
else if (!isChecked && wasChecked)
319+
{
320+
RemoveCheckedNode(node);
321+
}
322+
}
323+
}
324+
325+
private void ToggleParentFolderAndContainersChecked(int idx, TNode node, bool isChecked)
336326
{
337327
while (true)
338328
{
@@ -383,14 +373,15 @@ private void ToggleParentFoldersChecked(int idx, TNode node, bool isChecked)
383373

384374
var parentIndex = firstSiblingIndex - 1;
385375
var parentNode = Nodes[parentIndex];
386-
if (siblingsInSameState)
387-
{
388-
parentNode.CheckState = isChecked ? CheckState.Checked : CheckState.Empty;
389-
}
390-
else
391-
{
392-
parentNode.CheckState = CheckState.Mixed;
393-
}
376+
377+
var parentNodeState =
378+
siblingsInSameState
379+
? isChecked
380+
? CheckState.Checked
381+
: CheckState.Empty
382+
: CheckState.Mixed;
383+
384+
SetCheckStateOnNode(parentNode, parentNodeState);
394385

395386
idx = parentIndex;
396387
node = parentNode;

src/tests/UnitTests/UI/TreeBaseTests.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,9 @@ public void ShouldCheckParentOfMetaFile()
671671
var sceneNode = testTree.CreatedTreeNodes[2];
672672
var sceneMetaNode = testTree.CreatedTreeNodes[3];
673673

674+
Assert.AreEqual(CheckState.Empty, sceneNode.CheckState);
675+
Assert.AreEqual(CheckState.Empty, sceneMetaNode.CheckState);
676+
674677
testTree.ToggleNodeChecked(3, sceneMetaNode);
675678

676679
Assert.AreEqual(CheckState.Checked, sceneNode.CheckState);

0 commit comments

Comments
 (0)