/// <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); }