/// <summary> /// Renders <paramref name="controls"/> to a document. /// </summary> /// <param name="controls">The controls to be rendered.</param> /// <param name="factory">The renderer factory.</param> /// <param name="level">The depth down the control tree being rendered (affects indenting).</param> /// <param name="allControls">The complete control list.</param> internal void Render(ControlList controls, ControlRendererFactory factory, int level, ControlList allControls) { IEnumerable<Control> orderedControls = controls.Where(c => this.controlsAccess.FirstOrDefault(a => a.ControlId == c.Id).AccessLevel == AccessLevel.Write).OrderBy(c => c.Position); foreach (Control control in orderedControls) { var renderer = factory.GetControlRenderer(control); renderer.Render(this.document, control, level, allControls); } }