/// <summary> /// Checks that a frame selector is correctly constructed. /// </summary> /// <param name="nodeType">Type of the node this frame selector can describe.</param> /// <param name="nodeTemplateTable">Table of templates with all frames.</param> /// <param name="propertyName">The property for which frames can be selected.</param> public virtual bool IsValid(Type nodeType, IFocusTemplateReadOnlyDictionary nodeTemplateTable, string propertyName) { bool IsValid = true; IsValid &= SelectorType != null; IsValid &= !string.IsNullOrEmpty(SelectorName); Type ChildInterfaceType, ChildNodeType; IsValid &= NodeTreeHelperChild.IsChildNodeProperty(nodeType, propertyName, out ChildInterfaceType) || NodeTreeHelperOptional.IsOptionalChildNodeProperty(nodeType, propertyName, out ChildInterfaceType) || NodeTreeHelperList.IsNodeListProperty(nodeType, propertyName, out ChildInterfaceType) || NodeTreeHelperBlockList.IsBlockListProperty(nodeType, propertyName, out ChildInterfaceType, out ChildNodeType) || (NodeTreeHelper.IsBlockType(nodeType) && propertyName == nameof(BaseNode.IBlock.NodeList)); IsValid &= nodeTemplateTable.ContainsKey(SelectorType); IFocusNodeTemplate Template = nodeTemplateTable[SelectorType] as IFocusNodeTemplate; Debug.Assert(Template != null); IFocusSelectionFrame AsSelectionFrame = Template.Root as IFocusSelectionFrame; IsValid &= AsSelectionFrame != null; if (IsValid) { IFocusSelectableFrame SelectedItem = null; foreach (IFocusSelectableFrame Item in AsSelectionFrame.Items) { if (Item.Name == SelectorName) { SelectedItem = Item; break; } } IsValid &= SelectedItem != null; } Debug.Assert(IsValid); return(IsValid); }
private bool GetFirstCommentFrameSelection(IFocusSelectionFrame root, IList <FocusFrameSelectorList> selectorStack, out IFocusCommentFrame frame) { frame = null; IFocusSelectableFrame SelectedFrame = null; foreach (IFocusSelectableFrame Item in root.Items) { foreach (FocusFrameSelectorList SelectorList in selectorStack) { foreach (IFocusFrameSelector Selector in SelectorList) { if (Selector.SelectorType == NodeType) { if (Selector.SelectorName == Item.Name) { SelectedFrame = Item; break; } } } if (SelectedFrame != null) { break; } } if (SelectedFrame != null) { break; } } if (SelectedFrame != null) { if (GetFirstCommentFrame(SelectedFrame.Content, selectorStack, out frame)) { return(true); } } return(false); }
private bool GetFirstNamedFrameSelection(IFocusSelectionFrame root, string propertyName, IList <FocusFrameSelectorList> selectorStack, bool reverseSearch, ref int valueFrameIndex, out IFocusNamedFrame frame) { frame = null; IFocusSelectableFrame SelectedFrame = null; foreach (IFocusSelectableFrame Item in root.Items) { foreach (FocusFrameSelectorList SelectorList in selectorStack) { foreach (IFocusFrameSelector Selector in SelectorList) { if (Selector.SelectorType == NodeType) { if (Selector.SelectorName == Item.Name) { SelectedFrame = Item; break; } } } if (SelectedFrame != null) { break; } } if (SelectedFrame != null) { break; } } if (SelectedFrame != null) { if (GetFirstNamedFrame(SelectedFrame.Content, propertyName, selectorStack, reverseSearch, ref valueFrameIndex, out frame)) { return(true); } } return(false); }
private protected virtual bool GetFirstCommentFrame(IFocusFrame root, IList <IFocusFrameSelectorList> selectorStack, out IFocusCommentFrame frame) { bool Found = false; frame = null; if (root is IFocusCommentFrame AsCommentFrame) { frame = AsCommentFrame; Found = true; } if (!Found && root is IFocusPanelFrame AsPanelFrame) { foreach (IFocusFrame Item in AsPanelFrame.Items) { if (GetFirstCommentFrame(Item, selectorStack, out frame)) { Found = true; break; } } } else if (root is IFocusSelectionFrame AsSelectionFrame) { IFocusSelectableFrame SelectedFrame = null; foreach (IFocusSelectableFrame Item in AsSelectionFrame.Items) { foreach (IFocusFrameSelectorList SelectorList in selectorStack) { foreach (IFocusFrameSelector Selector in SelectorList) { if (Selector.SelectorType == NodeType) { if (Selector.SelectorName == Item.Name) { SelectedFrame = Item; break; } } } if (SelectedFrame != null) { break; } } if (SelectedFrame != null) { break; } } if (SelectedFrame != null) { if (GetFirstCommentFrame(SelectedFrame.Content, selectorStack, out frame)) { Found = true; } } } return(Found); }
private protected bool GetFirstNamedFrame(IFocusFrame root, string propertyName, IList <IFocusFrameSelectorList> selectorStack, bool reverseSearch, ref int valueFrameIndex, out IFocusNamedFrame frame) { frame = null; bool Found = false; if (root is IFocusNamedFrame AsNamedFrame) { valueFrameIndex++; if (AsNamedFrame.PropertyName == propertyName) { frame = AsNamedFrame; Found = true; } } if (root is IFocusPanelFrame AsPanelFrame) { int Count = AsPanelFrame.Items.Count; for (int i = 0; i < Count; i++) { IFocusFrame Item = AsPanelFrame.Items[reverseSearch ? Count - 1 - i : i]; if (GetFirstNamedFrame(Item, propertyName, selectorStack, reverseSearch, ref valueFrameIndex, out frame)) { Found = true; break; } } } else if (root is IFocusSelectionFrame AsSelectionFrame) { IFocusSelectableFrame SelectedFrame = null; foreach (IFocusSelectableFrame Item in AsSelectionFrame.Items) { foreach (IFocusFrameSelectorList SelectorList in selectorStack) { foreach (IFocusFrameSelector Selector in SelectorList) { if (Selector.SelectorType == NodeType) { if (Selector.SelectorName == Item.Name) { SelectedFrame = Item; break; } } } if (SelectedFrame != null) { break; } } if (SelectedFrame != null) { break; } } if (SelectedFrame != null) { if (GetFirstNamedFrame(SelectedFrame.Content, propertyName, selectorStack, reverseSearch, ref valueFrameIndex, out frame)) { Found = true; } } } return(Found); }
bool ICollection <IFocusSelectableFrame> .Remove(IFocusSelectableFrame item) { return(Remove((ILayoutSelectableFrame)item)); }
bool ICollection <IFocusSelectableFrame> .Contains(IFocusSelectableFrame value) { return(Contains((ILayoutSelectableFrame)value)); }
void ICollection <IFocusSelectableFrame> .Add(IFocusSelectableFrame item) { Add((ILayoutSelectableFrame)item); }
void IList <IFocusSelectableFrame> .Insert(int index, IFocusSelectableFrame item) { Insert(index, (ILayoutSelectableFrame)item); }
int IList <IFocusSelectableFrame> .IndexOf(IFocusSelectableFrame value) { return(IndexOf((ILayoutSelectableFrame)value)); }