/// <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);
            }
        }
示例#3
0
        /// <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;
		}
示例#5
0
        /// <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));
 }