public override void UpdateSelectItems()
        {
            SelectItems.Clear();
            pathToSelectItemMap.Clear();
            RuleEditingContext context = Parent.RuleEditingContext;

            if (context == null)
            {
                return;
            }

            IEnumerable <NamedRule> namedRules = context.GetNamedRuleActivities();

            foreach (var namedRule in namedRules)
            {
                SelectItem newItem = new SelectItem(namedRule.Name, namedRule.DisplayName, namedRule);
                RulePoint  parent  = namedRule.Parent;
                // Build the hierarchy.
                HierarchicalSelectItem parentSelectItem = GetSelectItem(namedRule.Parent);
                parentSelectItem.Children.Add(newItem);
            }

            var    ruleManager = context.GetRuleSignature().Owner;
            string rootPath    = ruleManager.RootRulePoint.Path;

            if (pathToSelectItemMap.ContainsKey(rootPath))
            {
                var rootItem = pathToSelectItemMap[rootPath];
                foreach (var selectItem in rootItem.Children)
                {
                    SelectItems.Add(selectItem);
                }
            }
        }
 private HierarchicalSelectItem GetSelectItem(RuleBase rule)
 {
     if (pathToSelectItemMap.ContainsKey(rule.Path))
     {
         return(pathToSelectItemMap[rule.Path]);
     }
     else
     {
         HierarchicalSelectItem selectItem = new HierarchicalSelectItem(rule.Name, rule.DisplayName, null);
         pathToSelectItemMap[rule.Path] = selectItem;
         if (rule.Parent != null)
         {
             HierarchicalSelectItem parentItem = GetSelectItem(rule.Parent);
             parentItem.Children.Add(selectItem);
         }
         return(selectItem);
     }
 }