/// <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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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));
 }