Ejemplo n.º 1
0
 private void MaybeSelect(DebuggableRef root)
 {
     if (!root.AsTemplate.IsNull)
     {
         uiStates.DebugSelection = Selection.Template(root.AsTemplate);
     }
     else if (!root.AsPatch.IsNull)
     {
         uiStates.DebugSelection = Selection.Patch(root.AsPatch.OwningTemplate, root.AsPatch);
     }
 }
Ejemplo n.º 2
0
 private void MaybeSelectReference(DebuggableRef referenced)
 {
     MaybeSelect(referenced);
     if (itemMap.ContainsKey(referenced))
     {
         itemMap[referenced].Background = Brushes.YellowGreen;
         TreeViewItem item = itemMap[referenced].Parent as TreeViewItem;
         while (item != null)
         {
             item.Background = Brushes.Aquamarine;
             item            = item.Parent as TreeViewItem;
         }
     }
 }
Ejemplo n.º 3
0
 private void Deselect(DebuggableRef dr)
 {
     if (uiStates.DebugSelection.Type == Selection.SelectionType.Template &&
         uiStates.DebugSelection.SelectedTemplate.Debuggable.Equals(dr) ||
         uiStates.DebugSelection.Type == Selection.SelectionType.Patch &&
         !dr.AsPatch.IsNull && dr.AsPatch.Equals(uiStates.DebugSelection.SelectedPatch))
     {
         uiStates.DebugSelection = Selection.Empty;
         foreach (var item in itemMap.Values)
         {
             item.Background = null;
         }
     }
 }
Ejemplo n.º 4
0
        private TreeViewItem dfs(String rootName, DebuggableRef root, TreeViewItem existing)
        {
            var          info = root.getDebugInfo();
            TreeViewItem item = existing ?? new TreeViewItem();

            item.Header      = new DebugItem(rootName, info.shortDescription);
            item.MouseEnter += (sender, args) => {
                var over = Mouse.DirectlyOver;
                if (over is FrameworkElement && ((FrameworkElement)over).TemplatedParent is ContentPresenter && ((ContentPresenter)((FrameworkElement)over).TemplatedParent).Content == item.Header)
                {
                    item.Background = Brushes.Gold;
                    MaybeSelect(root);
                }
            };
            item.MouseLeave += (sender, args) =>
            {
                item.Background = null;
                Deselect();
            };

            item.PreviewMouseMove += (sender, args) =>
            {
                var over = Mouse.DirectlyOver;
                if (over is FrameworkElement && ((FrameworkElement)over).TemplatedParent is ContentPresenter && ((ContentPresenter)((FrameworkElement)over).TemplatedParent).Content == item.Header)
                {
                    item.Background = Brushes.Gold;
                    MaybeSelect(root);
                }
                else
                {
                    item.Background = null;
                    Deselect(root);
                }
            };
            itemMap[root] = item;
            foreach (var propName in info.propNames)
            {
                TreeViewItem child  = null;
                bool         exists = false;
                for (int i = 0; i < item.Items.Count; i++)
                {
                    TreeViewItem t = (TreeViewItem)item.Items[i];
                    if (((DebugItem)t.Header).name == propName)
                    {
                        child  = t;
                        exists = true;
                    }
                }
                if (info.props[propName] is DebuggableRef && info.aggregationPropNames.Contains(propName))
                {
                    child = dfs(propName, (DebuggableRef)info.props[propName], child);
                }
                else if (info.props[propName] is DebuggableRef && !info.aggregationPropNames.Contains(propName))
                {
                    // this is a reference link
                    child = child ?? new TreeViewItem();
                    var referenced = ((DebuggableRef)info.props[propName]);
                    if (referenced.IsNull)
                    {
                        child.Header = new DebugItem(propName, "(null)");
                    }
                    else
                    {
                        child.Header      = new DebugItem(propName, "Reference to " + referenced.getDebugInfo().typeName);
                        child.MouseEnter += (sender, args) =>
                        {
                            child.Background = Brushes.Gold;
                            MaybeSelectReference(referenced);
                        };
                        child.MouseLeave += (sender, args) =>
                        {
                            child.Background = null;
                            Deselect();
                        };
                    }
                }
                else
                {
                    child        = child ?? new TreeViewItem();
                    child.Header = new DebugItem(propName, info.props[propName].ToString());
                }
                if (!exists)
                {
                    item.Items.Add(child);
                }
            }
            List <TreeViewItem> copy = item.Items.Cast <TreeViewItem>().ToList();

            item.Items.Clear();
            foreach (var name in info.propNames)
            {
                item.Items.Add((from it in copy where (it.Header as DebugItem).name == name select it).First());
            }
            return(item);
        }