Esempio n. 1
0
 /// <summary>
 /// Clears all items from the display tree.
 /// </summary>
 public void Clear()
 {
     TopLevelItems.Clear();
     if (DisplayTreeChanged != null)
     {
         DisplayTreeChanged(this, new DisplayTreeChangedEventArgs()
         {
             AffectedItems = null, Type = DisplayTreeChangedType.Clear
         });
     }
 }
Esempio n. 2
0
        public MenuItem AppendMenuItem(string label, EventHandler selectedHandler)
        {
            if (menuContainer != null)
            {
                throw new Exception("HUDRadialMenu cannot call AppendMenuItem after Create");
            }

            MenuItem i = new MenuItem()
            {
                Label = label
            };

            i.OnSelected += selectedHandler;
            TopLevelItems.Add(i);
            AllItems.Add(i);
            return(i);
        }
Esempio n. 3
0
        void _ParseTree_ParseTreeModified(object sender, ParseTreeModifiedEventArgs e)
        {
            if (e.Type == ParseTreeModifiedType.Insert)
            {
                // see if the added item is displayed at all
                var toadd = CreateOverlayShapesFromItem(e.AffectedItem);

                if (toadd.Count() == 0)
                {
                    return;
                }

                // so we have something to add... find the correct element of the display tree to insert into
                var parent = e.AffectedItem.Ancestors.FirstOrDefault(tcpi => AllItems.OfType <OverlayScope>().Count(os => os.item == tcpi) > 0);
                if (parent == null)
                {
                    TopLevelItems.AddRange(toadd);
                }
                else
                {
                    var scope = AllItems.OfType <OverlayScope>().First(os => os.item == parent);
                    scope.children.AddRange(toadd);
                }


                //var cplist = toadd.SelectMany(tpi => GetAllDescendants(tpi)).OfType<OverlayControlPoint>();
                //foreach (var cp in cplist)
                //    cp.BindToOrigin(AllItems);
                BindControlPointsToOrigins(); // slightly inefficient ... but who cares

                if (DisplayTreeChanged != null)
                {
                    DisplayTreeChanged(this, new DisplayTreeChangedEventArgs()
                    {
                        Type = DisplayTreeChangedType.Insert, AffectedItems = toadd
                    });
                }
            }
            else if (e.Type == ParseTreeModifiedType.Remove)
            {
                throw new NotSupportedException(); // maybe support that in the future
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Adds a single parseitem to the display tree and redraws.
        /// This is called by tools adding something to the parsetree to refresh the overlay
        /// without redrawing it completely.
        /// </summary>
        /// <param name="tpi">The parseitem to add.</param>
        public void AddToDisplayTree(TikzParseItem tpi)
        {
            List <OverlayShape> l = new List <OverlayShape>();

            DrawObject(tpi, l);
            if (CurEditing == null)
            {
                //do not redraw if there is nothing to show.
                if (TopLevelItems == null)
                {
                    RedrawObjects();
                }
                TopLevelItems.AddRange(l);
            }
            else
            {
                CurEditing.children.AddRange(l);
            }
            AdjustPositions();
            BindControlPointsToOrigins();
        }
Esempio n. 5
0
        /// <summary>
        /// Clears the current display tree and rebuilds it from the current parse tree.
        /// </summary>
        public void RecreateDisplayTree()
        {
            Clear();

            if (ParseTree == null)
            {
                return;
            }

            try
            {
                var allitems = this.CreateOverlayShapesFromItem(ParseTree);
                TopLevelItems.AddRange(allitems);
                BindControlPointsToOrigins();
                //DrawObject(ParseTree, TopLevelItems);
                if (DisplayTreeChanged != null)
                {
                    DisplayTreeChanged(this, new DisplayTreeChangedEventArgs()
                    {
                        AffectedItems = AllItems, Type = DisplayTreeChangedType.Insert
                    });
                }
            }
            catch (Exception e)
            {
                // we should really not come here.... but there are conceivable tex files with cyclic references that might
                // produce errors.
                Clear();
                //        View.AllowEditing = false; // todo
                GlobalUI.UI.AddStatusLine(this, "Error in Overlay rendering: '" + e.Message + "' Overlay disabled for now.", true);

                if (DisplayError != null)
                {
                    DisplayError(this, new DisplayErrorEventArgs()
                    {
                        Message = "Error in Overlay rendering: '" + e.Message
                    });
                }
            }
        }