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)); }
/// <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); }
private void SetParent(XenWidget widget) { var parent = widget; foreach (var child in widget.Children) { child.Parent = parent; SetParent(child); } }
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); }
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); }
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)); }
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); }
/// <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." }); }
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"; }
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 }); }
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 }); }
public ShowAttachedProperties(XenWidget widget) { Widget = widget; }
public ShowWidgetEvents(XenWidget widget) { Widget = widget; }
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); }
/// <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);
/// <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);
/// <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);
/// <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);
/// <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);
public ShowWidgetPropertyEditors(XenWidget widget) { Widget = widget; }
public ReplacedWidgetCollection(XenWidget widget) { Widget = widget; }
/// <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)); }