Example #1
0
        static void ShowFilterForm()
        {
            var mockTags = new TreeGridItemCollection();

            var parentA = new OSMTag("website");
            var itemA   = new OSMTreeGridItem(parentA, 0, 0, false, false);
            var AChildA = new OSMTreeGridItem(new OSMTag("website=http://www.google.com"), 1, 2, true, false);

            itemA.Children.Add(AChildA);
            var AChildB = new OSMTreeGridItem(new OSMTag("website=http://www.test.com"), 1, 2, true, false);

            itemA.Children.Add(AChildB);
            mockTags.Add(itemA);

            var parentB = new OSMTag("height");
            var itemB   = new OSMTreeGridItem(parentB, 0, 0, false, false);
            var BChildA = new OSMTreeGridItem(new OSMTag("height=10"), 2, 2, true, false);

            itemB.Children.Add(BChildA);
            var BChildB = new OSMTreeGridItem(new OSMTag("height=5"), 1, 1, true, false);

            itemB.Children.Add(BChildB);
            var CChildC = new OSMTreeGridItem(new OSMTag("height=11"), 3, 3, true, false);

            itemB.Children.Add(CChildC);
            var BChildD = new OSMTreeGridItem(new OSMTag("height=2"), 3, 3, true, false);

            itemB.Children.Add(BChildD);
            var CChildE = new OSMTreeGridItem(new OSMTag("height=20"), 3, 3, true, false);

            itemB.Children.Add(CChildE);
            mockTags.Add(itemB);

            new Application(Eto.Platforms.Wpf).Run(new FilterTagsForm(mockTags, HideObscure));
        }
Example #2
0
        /// <summary>For sorting a set of numeric values, like building heights, that may contain strings</summary>
        public static double?MayBeIntSort(this OSMTreeGridItem item)
        {
            string value = item.OSMData.Value;

            bool success = double.TryParse(value, out var i);

            return(success ? (double?)i : (double?)null);
        }
        /// <summary>Parse the Grasshopper data tree into the form's data tree</summary>
        protected TreeGridItemCollection GetSelectableTagsFromInputTree(OSMListWithPaths requests)
        {
            var indexOfParents = new Dictionary <string, int>();
            var sortedTags     = requests.items.OrderBy(t => t.ToString()).ToList();
            var selectableTags = new TreeGridItemCollection();

            foreach (var tag in sortedTags)
            {
                if (tag.Key != null)
                {
                    if (!indexOfParents.ContainsKey(tag.Key.Value))
                    {
                        var parentItem = new OSMTreeGridItem(tag.Key, 0, 0, true, false);
                        selectableTags.Add(parentItem);
                        indexOfParents[parentItem.OSMData.Value] = selectableTags.Count - 1;
                    }
                }

                var nodeCount = 0; var wayCount = 0;
                if (ProvidedNodes)
                {
                    nodeCount = requests.pathsPerItem[tag].Count();
                }
                else
                {
                    wayCount = requests.pathsPerItem[tag].Count();
                }

                var childItem = new OSMTreeGridItem(tag, nodeCount, wayCount, true, false);
                if (childItem.OSMData.Key != null)
                {
                    var parentKey = indexOfParents[childItem.OSMData.Key.Value];
                    var parent    = selectableTags[parentKey] as OSMTreeGridItem;
                    parent.Children.Add(childItem);
                }
            }

            foreach (OSMTreeGridItem tag in selectableTags) // Hack to sort numeric data properly
            {
                if (OSMSpecialTags.numericTags.ContainsKey(tag.OSMData.Value))
                {
                    var childrenCopy = tag.Children.Cast <OSMTreeGridItem>().OrderBy(
                        item => TreeGridUtilities.MayBeIntSort(item)).ToList();
                    tag.Children.Clear();
                    tag.Children.AddRange(childrenCopy);
                }
            }

            return(selectableTags);
        }
Example #4
0
        /// <summary>Given a pre-existing tree grid collection, show/hide items based on if obscure features should be hidden </summary>
        public static TreeGridItemCollection FilterByObscurity(TreeGridItemCollection selectableData,
                                                               bool hideObscureFeatures, TreeGridItemCollection currentSelectableData = null)
        {
            // Need to clone the items and make a new list to preserve the original Collection as unfiltered
            var newSelectableData = new TreeGridItemCollection();

            for (var i = 0; i < selectableData.Count; i++)
            {
                // Try to preserve open/close and selected/unselected state during filtering
                var previousItem = selectableData[i] as OSMTreeGridItem;
                if (currentSelectableData != null)
                {
                    var currentItem = currentSelectableData.Where(t => t.ToString() == previousItem.ToString()).First();
                    if (currentItem != null)
                    {
                        previousItem = currentItem  as OSMTreeGridItem;
                    }
                }

                var currentTagExpanded = previousItem.Expanded;
                var currentTagSelected = previousItem.IsSelected();

                var originalTag = selectableData[i] as OSMTreeGridItem;
                if (originalTag.IsObscure && hideObscureFeatures)
                {
                    continue;
                }

                var newTag = new OSMTreeGridItem(originalTag.OSMData, originalTag.OSMData.NodeCount,
                                                 originalTag.OSMData.WayCount, originalTag.IsParsed, currentTagSelected, currentTagExpanded);

                foreach (OSMTreeGridItem originalChild in originalTag.Children)
                {
                    if (!originalChild.IsObscure || !hideObscureFeatures)
                    {
                        newTag.Children.Add(originalChild);
                    }
                }

                newSelectableData.Add(newTag);
            }

            return(newSelectableData);
        }
Example #5
0
        public static TreeGridItemCollection GetTreeCollection()
        {
            var selectableOSMs = new TreeGridItemCollection();
            var indexOfParents = new Dictionary <string, int>();

            var primaryFeatures = new List <OSMTag>(OSMPrimaryTypes.Keys.Values);

            for (var i = 0; i < primaryFeatures.Count; i++)
            {
                var parentItem = new OSMTreeGridItem(primaryFeatures[i],
                                                     0, 0, false, false);

                selectableOSMs.Add(parentItem);
                indexOfParents[primaryFeatures[i].Value] = i;
            }

            var secondaryFeatures = OSMPrimaryTypes.Values;

            foreach (var keyValue in secondaryFeatures.Keys)
            {
                var item       = secondaryFeatures[keyValue];
                var parentItem = selectableOSMs[indexOfParents[item["key"]]] as OSMTreeGridItem;

                var childOSM  = new OSMTag(item["value"], null, item["description"], parentItem.OSMData);
                var childItem = new OSMTreeGridItem(childOSM,
                                                    int.Parse(item["nodes"]), int.Parse(item["ways"]), false, false);

                if (childItem.OSMData.Value == "yes")
                {
                    parentItem.Children.Insert(0, childItem);
                }
                else
                {
                    parentItem.Children.Add(childItem);
                }
            }

            return(selectableOSMs);
        }