Пример #1
0
        /// <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();
            }
        }
Пример #2
0
        /// <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);
        }
Пример #6
0
 private static bool IsCheckedStateUpToDate(TreeNode treeNode, TreeNodeCheckedState treeNodeCheckedState)
 {
     return(treeNode.Checked && (treeNodeCheckedState == TreeNodeCheckedState.Checked || treeNodeCheckedState == TreeNodeCheckedState.Mixed) ||
            !treeNode.Checked && treeNodeCheckedState == TreeNodeCheckedState.Unchecked);
 }