protected internal virtual void RenderItem(HtmlTextWriter writer, MenuItem item, int position) { bool flag4; string str6; Menu control = this.Control; MenuItemStyle menuItemStyle = control.GetMenuItemStyle(item); string imageUrl = item.ImageUrl; int depth = item.Depth; int num2 = depth + 1; string toolTip = item.ToolTip; string navigateUrl = item.NavigateUrl; string text = item.Text; bool isEnabled = item.IsEnabled; bool selectable = item.Selectable; MenuItemCollection childItems = item.ChildItems; string staticTopSeparatorImageUrl = null; if ((depth < control.StaticDisplayLevels) && (control.StaticTopSeparatorImageUrl.Length != 0)) { staticTopSeparatorImageUrl = control.StaticTopSeparatorImageUrl; } else if ((depth >= control.StaticDisplayLevels) && (control.DynamicTopSeparatorImageUrl.Length != 0)) { staticTopSeparatorImageUrl = control.DynamicTopSeparatorImageUrl; } if (staticTopSeparatorImageUrl != null) { new Image { ImageUrl = staticTopSeparatorImageUrl, GenerateEmptyAlternateText = true, Page = base.Page }.RenderControl(writer); this.RenderBreak(writer); } if (((menuItemStyle != null) && !menuItemStyle.ItemSpacing.IsEmpty) && ((this._titleItem != null) || (position != 0))) { this.RenderSpace(writer, menuItemStyle.ItemSpacing, control.Orientation); } Panel panel = new SpanPanel { Enabled = isEnabled, Page = base.Page }; if ((base.Page != null) && base.Page.SupportsStyleSheets) { string cssClassName = control.GetCssClassName(item, false); if (cssClassName.Trim().Length > 0) { panel.CssClass = cssClassName; } } else if (menuItemStyle != null) { panel.ApplyStyle(menuItemStyle); } if (item.ToolTip.Length != 0) { panel.ToolTip = item.ToolTip; } panel.RenderBeginTag(writer); bool flag3 = (((position != 0) && (childItems.Count != 0)) && (num2 >= control.StaticDisplayLevels)) && (num2 < control.MaximumDepth); if (((position != 0) && (depth > 0)) && ((control.StaticSubMenuIndent != Unit.Pixel(0)) && (depth < control.StaticDisplayLevels))) { Image image2 = new Image { ImageUrl = control.SpacerImageUrl, GenerateEmptyAlternateText = true }; double num3 = control.StaticSubMenuIndent.Value * depth; if (num3 < 32767.0) { image2.Width = new Unit(num3, control.StaticSubMenuIndent.Type); } else { image2.Width = new Unit(32767.0, control.StaticSubMenuIndent.Type); } image2.Height = Unit.Pixel(1); image2.Page = base.Page; image2.RenderControl(writer); } if ((imageUrl.Length > 0) && item.NotTemplated()) { Image image3 = new Image { ImageUrl = imageUrl }; if (toolTip.Length != 0) { image3.AlternateText = toolTip; } else { image3.GenerateEmptyAlternateText = true; } image3.Page = base.Page; image3.RenderControl(writer); writer.Write(' '); } if ((base.Page != null) && base.Page.SupportsStyleSheets) { str6 = control.GetCssClassName(item, true, out flag4); } else { str6 = string.Empty; flag4 = false; } if (isEnabled && (flag3 || selectable)) { string accessKey = control.AccessKey; string str8 = (((position == 0) || ((position == 1) && (depth == 0))) && (accessKey.Length != 0)) ? accessKey : null; if ((navigateUrl.Length > 0) && !flag3) { if (base.PageAdapter != null) { base.PageAdapter.RenderBeginHyperlink(writer, control.ResolveClientUrl(navigateUrl), true, System.Web.SR.GetString("Adapter_GoLabel"), (str8 != null) ? str8 : ((this._currentAccessKey < 10) ? this._currentAccessKey++.ToString(CultureInfo.InvariantCulture) : null)); writer.Write(HttpUtility.HtmlEncode(item.FormattedText)); base.PageAdapter.RenderEndHyperlink(writer); } else { HyperLink link = new HyperLink { NavigateUrl = control.ResolveClientUrl(navigateUrl) }; string target = item.Target; if (string.IsNullOrEmpty(target)) { target = control.Target; } if (!string.IsNullOrEmpty(target)) { link.Target = target; } link.AccessKey = str8; link.Page = base.Page; if (writer is Html32TextWriter) { link.RenderBeginTag(writer); SpanPanel panel2 = new SpanPanel { Page = base.Page }; this.RenderStyle(writer, panel2, str6, menuItemStyle, flag4); panel2.RenderBeginTag(writer); item.RenderText(writer); panel2.RenderEndTag(writer); link.RenderEndTag(writer); } else { this.RenderStyle(writer, link, str6, menuItemStyle, flag4); link.RenderBeginTag(writer); item.RenderText(writer); link.RenderEndTag(writer); } } } else if (base.PageAdapter != null) { base.PageAdapter.RenderPostBackEvent(writer, control.UniqueID, (flag3 ? 'o' : 'b') + this.Escape(item.InternalValuePath), System.Web.SR.GetString("Adapter_OKLabel"), item.FormattedText, null, (str8 != null) ? str8 : ((this._currentAccessKey < 10) ? this._currentAccessKey++.ToString(CultureInfo.InvariantCulture) : null)); if (flag3) { this.RenderExpand(writer, item, control); } } else { HyperLink link2 = new HyperLink { NavigateUrl = base.Page.ClientScript.GetPostBackClientHyperlink(control, (flag3 ? 'o' : 'b') + this.Escape(item.InternalValuePath), true), AccessKey = str8, Page = base.Page }; if (writer is Html32TextWriter) { link2.RenderBeginTag(writer); SpanPanel panel3 = new SpanPanel { Page = base.Page }; this.RenderStyle(writer, panel3, str6, menuItemStyle, flag4); panel3.RenderBeginTag(writer); item.RenderText(writer); if (flag3) { this.RenderExpand(writer, item, control); } panel3.RenderEndTag(writer); link2.RenderEndTag(writer); } else { this.RenderStyle(writer, link2, str6, menuItemStyle, flag4); link2.RenderBeginTag(writer); item.RenderText(writer); if (flag3) { this.RenderExpand(writer, item, control); } link2.RenderEndTag(writer); } } } else { item.RenderText(writer); } panel.RenderEndTag(writer); this.RenderBreak(writer); if ((menuItemStyle != null) && !menuItemStyle.ItemSpacing.IsEmpty) { this.RenderSpace(writer, menuItemStyle.ItemSpacing, control.Orientation); } string separatorImageUrl = null; if (item.SeparatorImageUrl.Length != 0) { separatorImageUrl = item.SeparatorImageUrl; } else if ((depth < control.StaticDisplayLevels) && (control.StaticBottomSeparatorImageUrl.Length != 0)) { separatorImageUrl = control.StaticBottomSeparatorImageUrl; } else if ((depth >= control.StaticDisplayLevels) && (control.DynamicBottomSeparatorImageUrl.Length != 0)) { separatorImageUrl = control.DynamicBottomSeparatorImageUrl; } if (separatorImageUrl != null) { new Image { ImageUrl = separatorImageUrl, GenerateEmptyAlternateText = true, Page = base.Page }.RenderControl(writer); this.RenderBreak(writer); } }
protected virtual internal void RenderItem(HtmlTextWriter writer, MenuItem item, int position) { Menu owner = Control; MenuItemStyle mergedStyle = owner.GetMenuItemStyle(item); string imageUrl = item.ImageUrl; int depth = item.Depth; int depthPlusOne = depth + 1; string toolTip = item.ToolTip; string navigateUrl = item.NavigateUrl; string text = item.Text; bool enabled = item.IsEnabled; bool selectable = item.Selectable; MenuItemCollection childItems = item.ChildItems; // Top separator string topSeparatorUrl = null; if (depth < owner.StaticDisplayLevels && owner.StaticTopSeparatorImageUrl.Length != 0) { topSeparatorUrl = owner.StaticTopSeparatorImageUrl; } else if (depth >= owner.StaticDisplayLevels && owner.DynamicTopSeparatorImageUrl.Length != 0) { topSeparatorUrl = owner.DynamicTopSeparatorImageUrl; } if (topSeparatorUrl != null) { Image separatorImage = new Image(); separatorImage.ImageUrl = topSeparatorUrl; separatorImage.GenerateEmptyAlternateText = true; // XHtml compliance separatorImage.Page = Page; separatorImage.RenderControl(writer); RenderBreak(writer); } // Don't render the top spacing if this is the first root item if ((mergedStyle != null) && !mergedStyle.ItemSpacing.IsEmpty && ((_titleItem != null) || (position != 0))) { RenderSpace(writer, mergedStyle.ItemSpacing, owner.Orientation); } // Item span Panel itemPanel = new SpanPanel(); itemPanel.Enabled = enabled; itemPanel.Page = Page; // Apply styles if (Page != null && Page.SupportsStyleSheets) { string styleClass = owner.GetCssClassName(item, false); if (styleClass.Trim().Length > 0) { itemPanel.CssClass = styleClass; } } else if (mergedStyle != null) { itemPanel.ApplyStyle(mergedStyle); } // Tooltip if (item.ToolTip.Length != 0) { itemPanel.ToolTip = item.ToolTip; } // Render item begin tag itemPanel.RenderBeginTag(writer); // If there is a navigation url on this item, set up the navigation stuff if: // - the item is the current title item for this level // - the item has no children // - the item is a static item of depth + 1 < StaticDisplayLevels bool clickOpensThisNode = !((position == 0) || (childItems.Count == 0) || (depthPlusOne < owner.StaticDisplayLevels) || (depthPlusOne >= owner.MaximumDepth)); // Indent if (position != 0 && depth > 0 && owner.StaticSubMenuIndent != Unit.Pixel(0) && depth < owner.StaticDisplayLevels) { Image spacerImage = new Image(); spacerImage.ImageUrl = owner.SpacerImageUrl; spacerImage.GenerateEmptyAlternateText = true; // XHtml compliance double indent = owner.StaticSubMenuIndent.Value * depth; if (indent < Unit.MaxValue) { spacerImage.Width = new Unit(indent, owner.StaticSubMenuIndent.Type); } else { spacerImage.Width = new Unit(Unit.MaxValue, owner.StaticSubMenuIndent.Type);; } spacerImage.Height = Unit.Pixel(1); spacerImage.Page = Page; spacerImage.RenderControl(writer); } // Render out the item icon, if it is set and if the item is not templated (VSWhidbey 501618) if (imageUrl.Length > 0 && item.NotTemplated()) { Image newImage = new Image(); newImage.ImageUrl = imageUrl; if (toolTip.Length != 0) { newImage.AlternateText = toolTip; } else { newImage.GenerateEmptyAlternateText = true; // XHtml compliance } newImage.Page = Page; newImage.RenderControl(writer); writer.Write(' '); } bool applyInlineBorder; string linkClass; if (Page != null && Page.SupportsStyleSheets) { linkClass = owner.GetCssClassName(item, true, out applyInlineBorder); } else { linkClass = String.Empty; applyInlineBorder = false; } if (enabled && (clickOpensThisNode || selectable)) { string accessKey = owner.AccessKey; string itemAccessKey = ((position == 0 || (position == 1 && depth == 0)) && accessKey.Length != 0) ? accessKey : null; if (navigateUrl.Length > 0 && !clickOpensThisNode) { if (PageAdapter != null) { PageAdapter.RenderBeginHyperlink(writer, owner.ResolveClientUrl(navigateUrl), true, SR.GetString(SR.Adapter_GoLabel), itemAccessKey != null ? itemAccessKey : (_currentAccessKey < 10 ? (_currentAccessKey++).ToString(CultureInfo.InvariantCulture) : null)); writer.Write(HttpUtility.HtmlEncode(item.FormattedText)); PageAdapter.RenderEndHyperlink(writer); } else { HyperLink link = new HyperLink(); link.NavigateUrl = owner.ResolveClientUrl(navigateUrl); string target = item.Target; if (String.IsNullOrEmpty(target)) { target = owner.Target; } if (!String.IsNullOrEmpty(target)) { link.Target = target; } link.AccessKey = itemAccessKey; link.Page = Page; if (writer is Html32TextWriter) { link.RenderBeginTag(writer); SpanPanel lbl = new SpanPanel(); lbl.Page = Page; RenderStyle(writer, lbl, linkClass, mergedStyle, applyInlineBorder); lbl.RenderBeginTag(writer); item.RenderText(writer); lbl.RenderEndTag(writer); link.RenderEndTag(writer); } else { RenderStyle(writer, link, linkClass, mergedStyle, applyInlineBorder); link.RenderBeginTag(writer); item.RenderText(writer); link.RenderEndTag(writer); } } } // Otherwise, write out a postback that will open or select the item else { if (PageAdapter != null) { PageAdapter.RenderPostBackEvent(writer, owner.UniqueID, (clickOpensThisNode ? 'o' : 'b') + Escape(item.InternalValuePath), SR.GetString(SR.Adapter_OKLabel), item.FormattedText, null, itemAccessKey != null ? itemAccessKey : (_currentAccessKey < 10 ? (_currentAccessKey++).ToString(CultureInfo.InvariantCulture) : null)); // Expand image if (clickOpensThisNode) { RenderExpand(writer, item, owner); } } else { HyperLink link = new HyperLink(); link.NavigateUrl = Page.ClientScript.GetPostBackClientHyperlink(owner, (clickOpensThisNode ? 'o' : 'b') + Escape(item.InternalValuePath), true); link.AccessKey = itemAccessKey; link.Page = Page; if (writer is Html32TextWriter) { link.RenderBeginTag(writer); SpanPanel lbl = new SpanPanel(); lbl.Page = Page; RenderStyle(writer, lbl, linkClass, mergedStyle, applyInlineBorder); lbl.RenderBeginTag(writer); item.RenderText(writer); if (clickOpensThisNode) { RenderExpand(writer, item, owner); } lbl.RenderEndTag(writer); link.RenderEndTag(writer); } else { RenderStyle(writer, link, linkClass, mergedStyle, applyInlineBorder); link.RenderBeginTag(writer); item.RenderText(writer); if (clickOpensThisNode) { RenderExpand(writer, item, owner); } link.RenderEndTag(writer); } } } } else { item.RenderText(writer); } itemPanel.RenderEndTag(writer); // Bottom (or right) item spacing RenderBreak(writer); if ((mergedStyle != null) && !mergedStyle.ItemSpacing.IsEmpty) { RenderSpace(writer, mergedStyle.ItemSpacing, owner.Orientation); } // Bottom separator string bottomSeparatorUrl = null; if (item.SeparatorImageUrl.Length != 0) { bottomSeparatorUrl = item.SeparatorImageUrl; } else if ((depth < owner.StaticDisplayLevels) && (owner.StaticBottomSeparatorImageUrl.Length != 0)) { bottomSeparatorUrl = owner.StaticBottomSeparatorImageUrl; } else if ((depth >= owner.StaticDisplayLevels) && (owner.DynamicBottomSeparatorImageUrl.Length != 0)) { bottomSeparatorUrl = owner.DynamicBottomSeparatorImageUrl; } if (bottomSeparatorUrl != null) { Image separatorImage = new Image(); separatorImage.ImageUrl = bottomSeparatorUrl; separatorImage.GenerateEmptyAlternateText = true; // XHtml compliance separatorImage.Page = Page; separatorImage.RenderControl(writer); RenderBreak(writer); } }