Beispiel #1
0
        public NodeControl RenderSkinElements(INodeProxy node, string skinName, Dictionary <string, object> skinProperties)
        {
            NodeControl nodeElement = null;

            try
            {
                nodeElement             = new NodeControl();
                nodeElement.DataContext = node;

                foreach (string propertyName in skinProperties.Keys)
                {
                    PropertyInfo propInfo     = nodeElement.GetType().GetProperty(propertyName);
                    Type         propertyType = propInfo.PropertyType;

                    if (propertyType != typeof(string))
                    {
                        TypeConverter converter = GetTypeConverter(propertyType);
                        object        obj       = converter.ConvertFrom(skinProperties[propertyName]);
                        propInfo.SetValue(nodeElement, obj, null);
                    }
                    else
                    {
                        propInfo.SetValue(nodeElement, skinProperties[propertyName], null);
                    }
                }
            }
            catch (Exception)
            {
                nodeElement = null;
            }

            // TODO: Load an 'ApplicationSettings' object here so that the NodeFontSize can be determined through application/user settings.

            return(nodeElement);
        }
        internal void SortColumn(TreeColumn column)
        {
            if (column == null)
            {
                return;
            }

            var nodes = ((TreeModel)Model).Nodes.ToList();

            nodes.Sort(delegate(Node node1, Node node2)
            {
                NodeControl nodeControl = NodeControls.FirstOrDefault(control => control.ParentColumn == column);
                if (nodeControl == null)
                {
                    return(0);
                }

                string propName = nodeControl.GetType().GetProperty("DataPropertyName").GetValue(nodeControl, null).ToString();

                object obj1   = node1.GetType().GetProperty(propName).GetValue(node1, null);
                object obj2   = node2.GetType().GetProperty(propName).GetValue(node2, null);
                string value1 = (obj1 == null) ? string.Empty : obj1.ToString();
                string value2 = (obj2 == null) ? string.Empty : obj2.ToString();

                return(column.SortOrder == SortOrder.Ascending ? value1.CompareTo(value2) : value2.CompareTo(value1));
            });

            ((TreeModel)Model).Nodes.Clear();
            foreach (var node in nodes)
            {
                ((TreeModel)Model).Nodes.Add(node);
            }

            Invalidate();
            Update();
            Refresh();
        }
        internal void SortColumn(NamedTreeColumn column)
        {
            if (column == null)
            {
                return;
            }

            List <ModNode> nodes = null;

            switch (column.Name)
            {
            case ModSelectionColumnsInfo.COLUMNMOD:
                nodes = ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Cast <ModNode>().ToList();
                nodes.Sort(delegate(ModNode node1, ModNode node2)
                {
                    if (column.SortOrder == SortOrder.Ascending)
                    {
                        return(node1.Text.CompareTo(node2.Text));
                    }
                    else
                    {
                        return(node2.Text.CompareTo(node1.Text));
                    }
                });

                ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Clear();
                foreach (ModNode modNode in nodes)
                {
                    ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Add(modNode);
                }

                break;

            default:
                nodes = ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Cast <ModNode>().ToList();
                nodes.Sort(delegate(ModNode node1, ModNode node2)
                {
                    NodeControl nodeControl = null;
                    foreach (NodeControl control in tvModSelection.NodeControls)
                    {
                        if (control.ParentColumn == column)
                        {
                            nodeControl = control;
                            break;
                        }
                    }

                    string propName = nodeControl.GetType().GetProperty("DataPropertyName").GetValue(nodeControl, null).ToString();

                    object obj1   = node1.GetType().GetProperty(propName).GetValue(node1, null);
                    object obj2   = node2.GetType().GetProperty(propName).GetValue(node2, null);
                    string value1 = (obj1 == null) ? string.Empty : obj1.ToString();
                    string value2 = (obj2 == null) ? string.Empty : obj2.ToString();

                    if (column.SortOrder == SortOrder.Ascending)
                    {
                        return(value1.CompareTo(value2));
                    }
                    else
                    {
                        return(value2.CompareTo(value1));
                    }
                });

                ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Clear();
                foreach (ModNode modNode in nodes)
                {
                    ((ModSelectionTreeModel)tvModSelection.Model).Nodes.Add(modNode);
                }

                break;
            }

            InvalidateView();
        }