Exemplo n.º 1
0
        public void Should_return_one_node()
        {
            var w1    = new XenWidget();
            var nodes = w1.GetNodeAndDescendants();

            Assert.IsTrue(nodes.Count() == 1);
        }
 public override bool Contains(XenWidget widget)
 {
     if (string.IsNullOrWhiteSpace(widget?.Id))
     {
         return(false);
     }
     return(_lookup.ContainsKey(widget.Id));
 }
Exemplo n.º 3
0
        /// <summary>
        /// Create the XenWidget visual tree from a given view.
        /// </summary>
        /// <param name="childView">The child visual element</param>
        /// <param name="parentWidget">The visual elements parent XenWidget</param>
        /// <returns></returns>
        internal XenWidget FromView(View childView, XenWidget parentWidget)
        {
            /*
             *  1. Return parent widget if child view is null.
             *     Since, We won't be able to create a XenWidget out of the view.
             */

            if (childView == null)
            {
                return(parentWidget);
            }

            /*
             *  2. Create a XenWidget for the child view.
             */

            var childWidget = Create(childView, parentWidget);

            parentWidget.Children.Add(childWidget);

            /*
             *  3. Determine if the child view has children of it's own.
             */

            var isParentView  = childView as ILayoutController;
            var grandchildren = isParentView?.Children;

            if (grandchildren == null || grandchildren.Count == 0)
            {
                return(parentWidget);
            }

            /*
             *  4. The child does have it's own children.
             */

            foreach (var grandchild in grandchildren)
            {
                var grandchildView = grandchild as View;

                if (grandchildView != null)
                {
                    if (grandchildView is ILayoutController)
                    {
                        FromView(grandchildView, childWidget);
                    }
                    else
                    {
                        var grandchildWidget = Create(grandchildView, childWidget);
                        childWidget.Children.Add(grandchildWidget);
                    }
                }
            }

            return(parentWidget);
        }
Exemplo n.º 4
0
        private void SetParent(XenWidget widget)
        {
            var parent = widget;

            foreach (var child in widget.Children)
            {
                child.Parent = parent;
                SetParent(child);
            }
        }
Exemplo n.º 5
0
        public void SetProperty(XenWidget widget, XenProperty property, object value, bool isBase64 = false, bool isAp = false, object metadata = null)
        {
            var r = XenMessage.Create <SetPropertyRequest>();

            r.Metadata           = metadata;
            r.Path               = property.Path;
            r.Value              = value;
            r.WidgetId           = widget.Id;
            r.IsBase64           = isBase64;
            r.IsAttachedProperty = isAp;

            _socket.Send(r);
        }
Exemplo n.º 6
0
        private static int GetCollectionCount(XenWidget widget, string propertyName)
        {
            var result   = 0;
            var property = widget.Properties.FirstOrDefault(p => p.PropertyName == propertyName);
            var pv       = property?.XenType.PossibleValues?[0];

            if (pv == null)
            {
                return(result);
            }

            int.TryParse(pv, out result);
            return(result);
        }
Exemplo n.º 7
0
        public static XenWidget[] GetParents(XenWidget widget)
        {
            var parents = new List <XenWidget>();
            var current = widget;

            while (current != null)
            {
                if (current.Parent != null)
                {
                    parents.Add(current.Parent);
                }

                current = current.Parent;
            }

            return(parents.ToArray());
        }
        /// <summary>
        /// Attach the child view to the parent.
        /// Once attached, the visual tree will be rebuilt.
        /// </summary>
        /// <param name="child"></param>
        /// <param name="parent"></param>
        /// <returns>
        /// Returns true if attached; otherwise, false.
        /// </returns>
        public override bool SetParent(VisualElement child, XenWidget parent)
        {
            if (child == null || parent == null)
            {
                return(false);
            }

            // Returns null when id not found.
            var pair = this[parent.Id];

            if (pair == null)
            {
                return(false);
            }

            return(SetParent(child, pair.VisualElement));
        }
Exemplo n.º 9
0
        public XenWidget FromPage(ContentPage page)
        {
            var result = new XenWidget
            {
                Id   = page.Id.ToString(),
                Type = page.GetType().Name,
                Name = page.Title
            };

            if (page.Content == null)
            {
                return(result);
            }

            // Create the hierarchy from the views that are already attached to the page.
            Root = FromView(page.Content, result);
            return(Root);
        }
Exemplo n.º 10
0
        /// <summary>
        /// Return or create a XenWidget from the given view.
        /// </summary>
        /// <param name="view"></param>
        /// <param name="parentWidget"></param>
        /// <returns></returns>
        private XenWidget Create(View view, XenWidget parentWidget)
        {
            if (view == null)
            {
                return(null);
            }

            var id = view.Id.ToString();

            _viewLookup.Add(id, view);

            return(new XenWidget
            {
                Id = id,
                Parent = parentWidget,
                Type = view.GetType().Name,
                Name = "Not implemented, yet."
            });
        }
Exemplo n.º 11
0
        private void PopulateEvents(XenWidget widget)
        {
            if (widget.Events == null)
            {
                return;
            }
            _filtered.Clear();

            foreach (var wEvent in widget.Events.OrderBy(e => e.Name))
            {
                var model = new ToolboxEventModel
                {
                    DisplayName = wEvent.Name,
                    Visibility  = ToolboxEventVisibility.Public
                };

                _filtered.Add(model);
            }

            _pouchHeader.Text = $"{widget.Type} events";
        }
Exemplo n.º 12
0
        protected override XenWidget CreateXenWidget(VisualElement source, XenWidget parent)
        {
            if (source == null)
            {
                return(null);
            }

            var id = source.Id.ToString();

            if (!_lookup.ContainsKey(id))
            {
                _lookup.Add(id, source);
            }

            return(new XenWidget
            {
                Id = id,
                Parent = parent,
                Type = source.GetType().Name,
                FullTypeName = source.GetType().FullName,
                Name = "Not implemented, yet.",
                CanDelete = parent != null
            });
        }
Exemplo n.º 13
0
        public void Should_return_all_nodes()
        {
            var w1 = new XenWidget {
                Name = "1"
            };
            var w2 = new XenWidget {
                Name = "2"
            };
            var w3 = new XenWidget {
                Name = "3"
            };
            var w4 = new XenWidget {
                Name = "4"
            };
            var w5 = new XenWidget {
                Name = "5"
            };

            w1.Children = new List <XenWidget>
            {
                w2,
                w3
            };

            w3.Children = new List <XenWidget>
            {
                w4
            };

            w4.Children = new List <XenWidget> {
                w5
            };
            var nodes = w1.GetNodeAndDescendants();

            CollectionAssert.AreEquivalent(nodes, new[] { w1, w2, w3, w4, w5 });
        }
Exemplo n.º 14
0
 public ShowAttachedProperties(XenWidget widget)
 {
     Widget = widget;
 }
Exemplo n.º 15
0
 public ShowWidgetEvents(XenWidget widget)
 {
     Widget = widget;
 }
Exemplo n.º 16
0
        protected override XenWidget BuildTree(VisualElement childView, XenWidget parentWidget)
        {
            /*
             *  1. Return parent widget if child view is null.
             *  Since, We won't be able to create a XenWidget out of the view.
             */

            if (childView == null)
            {
                return(parentWidget);
            }

            /*
             *  2. Create a XenWidget for the child view.
             */

            var childWidget = CreateXenWidget(childView, parentWidget);

            parentWidget.Children.Add(childWidget);

            if (ElementHelper.HasContentProperty(childView))
            {
                childWidget.AllowsManyChildren        = ElementHelper.ContentPropertyAllowsManyChildren(childView);
                childWidget.IsContentPropertyViewType = ElementHelper.IsContentPropertyView(childView);
                childWidget.ContentPropertyTypeName   = ElementHelper.GetContentPropertyTypeName(childView);
                childWidget.HasContentProperty        = true;
                childWidget.IsLayout = false;
            }
            else
            {
                childWidget.HasContentProperty = false;
            }

            /*
             *  3. Determine if the child view has children of it's own.
             */

            var isParentView = childView as ILayoutController;

            if (isParentView != null)
            {
                childWidget.IsLayout = true;
            }

            var grandchildren = isParentView?.Children;

            if (grandchildren == null || grandchildren.Count == 0)
            {
                return(parentWidget);
            }

            /*
             *  4. The child does have it's own children.
             */

            foreach (var grandchild in grandchildren)
            {
                var view = grandchild as View;

                if (view != null)
                {
                    if (view is ILayoutController)
                    {
                        BuildTree(view, childWidget);
                    }
                    else
                    {
                        var grandchildWidget = CreateXenWidget(view, childWidget);

                        if (ElementHelper.HasContentProperty(view))
                        {
                            grandchildWidget.IsLayout = true;
                        }

                        childWidget.Children.Add(grandchildWidget);
                    }
                }
            }

            return(parentWidget);
        }
Exemplo n.º 17
0
 /// <summary>
 /// Remove the <paramref name="widget"/> from the visual tree.
 /// </summary>
 /// <param name="widget"></param>
 /// <returns>
 /// Returns true if the <paramref name="widget"/> has been removed; otherwise, false.
 /// </returns>
 public abstract bool Remove(XenWidget widget);
Exemplo n.º 18
0
 /// <summary>
 /// Checks whether or not the <paramref name="widget"/> is a descendant of <see cref="Root"/>.
 /// </summary>
 /// <param name="widget"></param>.
 /// <returns></returns>
 public abstract bool Contains(XenWidget widget);
Exemplo n.º 19
0
 /// <summary>
 /// Using the <paramref name="childView"/> as a starting element, recursively record and traverse each child element.
 /// </summary>
 /// <param name="childView">The target framework's UI element.</param>
 /// <param name="parentWidget">The <paramref name="childView"/>'s parent.</param>
 /// <returns>
 /// Returns the a XenForms representation of the <paramref name="childView" />.
 /// </returns>
 protected abstract XenWidget BuildTree(TVisualElement childView, XenWidget parentWidget);
Exemplo n.º 20
0
 /// <summary>
 /// The target framework implementations should define this method.
 /// Using the <paramref name="source"/> the method should instantiate and return a <see cref="XenWidget"/>.
 /// </summary>
 /// <param name="source"></param>
 /// <param name="parent"></param>
 /// <returns></returns>
 protected abstract XenWidget CreateXenWidget(TVisualElement source, XenWidget parent);
Exemplo n.º 21
0
 /// <summary>
 /// Attach the child to the parent object.
 /// </summary>
 /// <param name="child"></param>
 /// <param name="parent"></param>
 /// <returns>
 /// Returns true if the view was attached to the parent; otherwise, false.
 /// </returns>
 public abstract bool SetParent(TVisualElement child, XenWidget parent);
Exemplo n.º 22
0
 public ShowWidgetPropertyEditors(XenWidget widget)
 {
     Widget = widget;
 }
Exemplo n.º 23
0
 public ReplacedWidgetCollection(XenWidget widget)
 {
     Widget = widget;
 }
Exemplo n.º 24
0
 /// <summary>
 /// Remove the XenWidget from the hierarchy.
 /// </summary>
 /// <param name="widget"></param>
 /// <returns>
 /// Returns true if the <see cref="widget"/> has been removed; otherwise, false.
 /// </returns>
 public bool Remove(XenWidget widget)
 {
     return(Remove(widget.Id));
 }