/// <summary></summary> protected virtual bool UpdateSelectorStackBlockState(List <IFocusFrameSelectorList> selectorStack, IFocusBlockState blockState, IFocusInner inner, ref IFocusNodeStateView currentStateView) { Debug.Assert(ControllerView.TemplateSet.BlockTemplateTable.ContainsKey(blockState.ParentInner.BlockType)); IFocusBlockTemplate Template = ControllerView.TemplateSet.BlockTemplateTable[blockState.ParentInner.BlockType] as IFocusBlockTemplate; Debug.Assert(Template != null); IFocusNodeState ParentState = blockState.ParentInner.Owner; Debug.Assert(ParentState != null); currentStateView = ControllerView.StateViewTable[ParentState]; if (Template.FrameSelectorForProperty(inner.PropertyName, out IFocusFrameWithSelector Frame)) { if (Frame != null) { if (Frame.Selectors.Count > 0) { selectorStack.Insert(0, Frame.Selectors); } } } return(true); }
/// <summary> /// Gets the frame that creates cells associated to states in the inner. /// This overload uses selectors to choose the correct frame. /// </summary> /// <param name="inner">The inner.</param> /// <param name="selectorStack">A list of selectors to choose the correct frame.</param> public virtual IFocusFrame InnerToFrame(IFocusInner <IFocusBrowsingChildIndex> inner, IList <IFocusFrameSelectorList> selectorStack) { IFocusNodeState Owner = inner.Owner; Type OwnerType = Owner.Node.GetType(); Type InterfaceType = NodeTreeHelper.NodeTypeToInterfaceType(OwnerType); IFocusNodeTemplate Template = (IFocusNodeTemplate)NodeTypeToTemplate(InterfaceType); IFocusFrame Frame = Template.PropertyToFrame(inner.PropertyName, selectorStack); if (Frame is IFocusBlockListFrame AsBlockListFrame) { IFocusBlockListInner <IFocusBrowsingBlockNodeIndex> BlockListInner = inner as IFocusBlockListInner <IFocusBrowsingBlockNodeIndex>; Debug.Assert(BlockListInner != null); Type BlockType = NodeTreeHelperBlockList.BlockListBlockType(Owner.Node, BlockListInner.PropertyName); IFocusBlockTemplate BlockTemplate = (IFocusBlockTemplate)BlockTypeToTemplate(BlockType); Frame = (IFocusFrame)BlockTemplate.GetPlaceholderFrame(); } return(Frame); }