/// <summary> /// Handle a RenderGroup action in the RenderOrder. /// </summary> /// <param name="action"></param> private void HandleRenderOrderAction_RenderGroup( RenderOrder.RenderGroup action, RenderableHandler renderAction) { var group = AllRenderables.GetSubnode(action.Name); group.Render(action.Options, renderAction, SeenRenderables, SeenGroups, action.SkipDuplicates); }
/// <summary> /// Handle a RenderItem action in the RenderOrder. /// </summary> /// <param name="action"></param> private void HandleRenderOrderAction_RenderItem( RenderOrder.RenderItem action, RenderableHandler renderAction) { var renderable = AllRenderables.GetItem(action.Name); if (!(action.SkipDuplicates && SeenRenderables.Contains(renderable))) { renderAction(renderable); } }
/// <summary> /// Render all objects. /// </summary> /// <param name="options">The options determining which order the items and subgroups are rendered in.</param> /// <param name="renderAction">The layer's RenderAction, which determines how each RenderableObject encountered is handled and rendered.</param> /// <param name="seenRenderables">The list of RenderableObjects already seen by the layer in this render cycle.</param> /// <param name="seenGroups">The list of RenderableGroups already seen by the layer in this render cycle.</param> /// <param name="skipDuplicates">Whether or not to skip duplicate items/subgroups (if they're present in the seenRenderables/seenGroups lists).</param> public virtual void Render(TraversalOptions options , RenderableHandler renderAction , HashSet <RenderableObject> seenRenderables , HashSet <RenderableGroup> seenGroups , bool skipDuplicates = true) { switch (options) { case TraversalOptions.Top: if (!(skipDuplicates && seenGroups.Contains(this))) { RenderTop(renderAction, seenRenderables, skipDuplicates); } break; case TraversalOptions.Pre: foreach (var subgroup in Subnodes.Values) { subgroup.Render(options, renderAction, seenRenderables, seenGroups, skipDuplicates); } if (!(skipDuplicates && seenGroups.Contains(this))) { RenderTop(renderAction, seenRenderables, skipDuplicates); } break; case TraversalOptions.Post: if (!(skipDuplicates && seenGroups.Contains(this))) { RenderTop(renderAction, seenRenderables, skipDuplicates); } foreach (var subgroup in Subnodes.Values) { subgroup.Render(options, renderAction, seenRenderables, seenGroups, skipDuplicates); } break; default: throw new RenderOrderException( String.Format( "Unknown RenderOrder.RenderGroupOptions '{0}' supplied when rendering " + "renderable group '{1}'.", options, FullName)); } seenGroups.Add(this); }
public bool TryBinding(IPathStack path, out IHttpHandler handler) { object value = Handler.ExecuteAction(Context, Controller, Arguments); if (value == null) { handler = null; return false; } else if (value is IRenderable || value is IViewTemplate) { handler = new RenderableHandler { Context = Context, Handler = Handler, Value = value }; } else if ((handler = Context.Route.RoutingEngine.ParseRoute(Context, path, value)) == null) { return false; } return true; }
/// <summary> /// Render only the top level objects in this group (i.e. the objects that aren't members of subnodes). /// </summary> /// <param name="renderAction">The layer's RenderAction, which determines how each RenderableObject encountered is handled and rendered.</param> /// <param name="seenRenderables">The list of RenderableObjects already seen by the layer in this render cycle.</param> /// <param name="skipDuplicates">Whether or not to skip duplicate items (if they're present in the seenRenderables list).</param> public virtual void RenderTop(RenderableHandler renderAction , HashSet <RenderableObject> seenRenderables , bool skipDuplicates = true) { foreach (var item in Items.Values) { if (skipDuplicates && seenRenderables.Contains(item)) { continue; } renderAction(item); } foreach (var item in AnonymousItems) { if (skipDuplicates && seenRenderables.Contains(item)) { continue; } renderAction(item); } }
/// <summary> /// Handle a RenderOrderAction that the RenderLayer couldn't identify what to do with. /// Implement this if you have RenderOrderActions that aren't one of the builtin types. /// </summary> /// <param name="action"></param> protected virtual void HandleUnknownRenderOrderAction( RenderOrder.AbstractRenderOrderAction action, RenderableHandler renderAction) { throw new RenderOrderException( String.Format("Unknown render order action '{0}'.", action)); }