/// <summary> /// Sets the state image index of the tree node. /// </summary> /// <param name="treeNode">The tree node to set the state image index for.</param> /// <param name="treeNodeCheckedState">The checked state to determine the state index from.</param> /// <exception cref="InvalidEnumArgumentException">Thrown when the <paramref name="treeNodeCheckedState"/> /// is an invalid value.</exception> /// <exception cref="NotSupportedException">Thrown when the <paramref name="treeNodeCheckedState"/> /// is a valid value, but unsupported.</exception> private static void SetTreeNodeStateImageIndex(TreeNode treeNode, TreeNodeCheckedState treeNodeCheckedState) { if (!Enum.IsDefined(typeof(TreeNodeCheckedState), treeNodeCheckedState)) { throw new InvalidEnumArgumentException(nameof(treeNodeCheckedState), (int)treeNodeCheckedState, typeof(TreeNodeCheckedState)); } switch (treeNodeCheckedState) { case TreeNodeCheckedState.Checked: treeNode.StateImageIndex = checkedCheckBoxStateImageIndex; break; case TreeNodeCheckedState.Unchecked: treeNode.StateImageIndex = uncheckedCheckBoxStateImageIndex; break; case TreeNodeCheckedState.Mixed: treeNode.StateImageIndex = mixedCheckBoxStateImageIndex; break; default: throw new NotSupportedException(); } }
/// <summary> /// This method updates the provided <see cref="TreeNode"/>. /// </summary> /// <param name="treeNode">The <see cref="TreeNode"/> to update.</param> /// <exception cref="InvalidOperationException">Thrown when no corresponding <see cref="TreeNodeInfo"/> can be found for the provided <see cref="TreeNode"/>.</exception> /// <exception cref="InvalidEnumArgumentException">Thrown when the <see cref="TreeNodeCheckedState"/> /// is an invalid value.</exception> /// <exception cref="NotSupportedException">Thrown when the <see cref="TreeNodeCheckedState"/> /// is a valid value, but unsupported.</exception> private void UpdateNode(TreeNode treeNode) { TreeNodeInfo treeNodeInfo = TryGetTreeNodeInfoForData(treeNode.Tag); if (treeNodeInfo == null) { throw new InvalidOperationException("No tree node info registered"); } StartUpdateTimer(); // First of all refresh the child nodes as the other logic below might depend on the presence of child nodes RefreshChildNodes(treeNode, treeNodeInfo); if (treeNodeInfo.Text != null) { string text = treeNodeInfo.Text(treeNode.Tag); // Having very big strings causes rendering problems in the tree view treeNode.Text = text.Length > maximumTextLength ? text.Substring(0, maximumTextLength) : text; } else { treeNode.Text = ""; } treeNode.ForeColor = treeNodeInfo.ForeColor?.Invoke(treeNode.Tag) ?? Color.FromKnownColor(KnownColor.ControlText); SetTreeNodeImageKey(treeNode, treeNodeInfo); if (treeNodeInfo.CanCheck != null && treeNodeInfo.CanCheck(treeNode.Tag) && treeNodeInfo.CheckedState != null) { TreeNodeCheckedState treeNodeCheckedState = treeNodeInfo.CheckedState(treeNode.Tag); if (!IsCheckedStateUpToDate(treeNode, treeNodeCheckedState)) { treeView.AfterCheck -= TreeViewAfterCheck; treeNode.Checked = !treeNode.Checked; treeView.AfterCheck += TreeViewAfterCheck; } SetTreeNodeStateImageIndex(treeNode, treeNodeCheckedState); } if (treeNodeInfo.ExpandOnCreate != null && treeNodeInfo.ExpandOnCreate(treeNode.Tag)) { treeNode.Expand(); } }
public void IsChecked_Always_ReturnsAccordingToVisibleStateOfChartData(ChartData chartData, bool isVisible) { // Setup ChartDataContext context = GetContext(chartData); context.WrappedData.IsVisible = isVisible; // Call TreeNodeCheckedState checkedState = info.CheckedState(context); // Assert TreeNodeCheckedState expectedCheckedState = isVisible ? TreeNodeCheckedState.Checked : TreeNodeCheckedState.Unchecked; Assert.AreEqual(expectedCheckedState, checkedState); }
public void CheckedState_WithContext_ReturnsAccordingToVisibleStateOfMapData(bool isVisible) { // Setup FeatureBasedMapDataContext context = GetContext(new TestFeatureBasedMapData()); context.WrappedData.IsVisible = isVisible; // Call TreeNodeCheckedState checkedState = info.CheckedState(context); // Assert TreeNodeCheckedState expectedCheckedState = isVisible ? TreeNodeCheckedState.Checked : TreeNodeCheckedState.Unchecked; Assert.AreEqual(expectedCheckedState, checkedState); }
public void CheckedState_WithContextAndMapDataCollectionVisibilityVisible_ReturnsStateChecked() { // Setup var featureBasedMapData = new TestFeatureBasedMapData(); var mapDataCollection = new MapDataCollection("test"); mapDataCollection.Add(featureBasedMapData); MapDataCollectionContext context = GetContext(mapDataCollection); // Call TreeNodeCheckedState checkedState = info.CheckedState(context); // Assert Assert.AreEqual(TreeNodeCheckedState.Checked, checkedState); }
private static bool IsCheckedStateUpToDate(TreeNode treeNode, TreeNodeCheckedState treeNodeCheckedState) { return(treeNode.Checked && (treeNodeCheckedState == TreeNodeCheckedState.Checked || treeNodeCheckedState == TreeNodeCheckedState.Mixed) || !treeNode.Checked && treeNodeCheckedState == TreeNodeCheckedState.Unchecked); }