RenderDynamicMenu() private method

private RenderDynamicMenu ( System.Web.UI.HtmlTextWriter writer, System.Web.UI.WebControls.MenuItem item ) : void
writer System.Web.UI.HtmlTextWriter
item System.Web.UI.WebControls.MenuItem
return void
Example #1
0
        public override void RenderEndTag(HtmlTextWriter writer)
        {
            Menu owner = Owner;

            if (owner.StaticDisplayLevels == 1 && owner.MaximumDynamicDisplayLevels > 0)
            {
                owner.RenderDynamicMenu(writer, owner.Items);
            }
        }
Example #2
0
        protected override void RenderMenuItem(HtmlTextWriter writer, MenuItem item, bool vertical, bool notLast, bool isFirst, OwnerContext oc)
        {
            Menu   owner           = Owner;
            string clientID        = oc.ClientID;
            bool   displayChildren = owner.DisplayChildren(item);
            bool   dynamicChildren = displayChildren && (item.Depth + 1 >= oc.StaticDisplayLevels);
            bool   isDynamicItem   = IsDynamicItem(owner, item);
            bool   isVertical      = oc.IsVertical || isDynamicItem;
            Unit   itemSpacing     = owner.GetItemSpacing(item, isDynamicItem);

            if (itemSpacing != Unit.Empty && (item.Depth > 0 || !isFirst))
            {
                RenderMenuItemSpacing(writer, itemSpacing, isVertical);
            }

            if (!String.IsNullOrEmpty(item.ToolTip))
            {
                writer.AddAttribute(HtmlTextWriterAttribute.Title, item.ToolTip);
            }
            if (isVertical)
            {
                writer.RenderBeginTag(HtmlTextWriterTag.Tr);
            }

            string parentId = isDynamicItem ? "'" + item.Parent.Path + "'" : "null";

            if (dynamicChildren)
            {
                writer.AddAttribute("onmouseover",
                                    "javascript:Menu_OverItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
                writer.AddAttribute("onmouseout",
                                    "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "')");
            }
            else if (isDynamicItem)
            {
                writer.AddAttribute("onmouseover",
                                    "javascript:Menu_OverDynamicLeafItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
                writer.AddAttribute("onmouseout",
                                    "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "'," + parentId + ")");
            }
            else
            {
                writer.AddAttribute("onmouseover",
                                    "javascript:Menu_OverStaticLeafItem ('" + clientID + "','" + item.Path + "')");
                writer.AddAttribute("onmouseout",
                                    "javascript:Menu_OutItem ('" + clientID + "','" + item.Path + "')");
            }

            writer.RenderBeginTag(HtmlTextWriterTag.Td);

            // Top separator image

            if (isDynamicItem)
            {
                RenderSeparatorImage(owner, writer, oc.DynamicTopSeparatorImageUrl, false);
            }
            else
            {
                RenderSeparatorImage(owner, writer, oc.StaticTopSeparatorImageUrl, false);
            }

            // Menu item box

            MenuItemStyle style = new MenuItemStyle();

            if (oc.Header != null)
            {
                // styles are registered
                if (!isDynamicItem && oc.StaticMenuItemStyle != null)
                {
                    AddCssClass(style, oc.StaticMenuItemStyle.CssClass);
                    AddCssClass(style, oc.StaticMenuItemStyle.RegisteredCssClass);
                }
                if (isDynamicItem && oc.DynamicMenuItemStyle != null)
                {
                    AddCssClass(style, oc.DynamicMenuItemStyle.CssClass);
                    AddCssClass(style, oc.DynamicMenuItemStyle.RegisteredCssClass);
                }
                if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth)
                {
                    AddCssClass(style, oc.LevelMenuItemStyles [item.Depth].CssClass);
                    AddCssClass(style, oc.LevelMenuItemStyles [item.Depth].RegisteredCssClass);
                }
                if (item == oc.SelectedItem)
                {
                    if (!isDynamicItem && oc.StaticSelectedStyle != null)
                    {
                        AddCssClass(style, oc.StaticSelectedStyle.CssClass);
                        AddCssClass(style, oc.StaticSelectedStyle.RegisteredCssClass);
                    }
                    if (isDynamicItem && oc.DynamicSelectedStyle != null)
                    {
                        AddCssClass(style, oc.DynamicSelectedStyle.CssClass);
                        AddCssClass(style, oc.DynamicSelectedStyle.RegisteredCssClass);
                    }
                    if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth)
                    {
                        AddCssClass(style, oc.LevelSelectedStyles [item.Depth].CssClass);
                        AddCssClass(style, oc.LevelSelectedStyles [item.Depth].RegisteredCssClass);
                    }
                }
            }
            else
            {
                // styles are not registered
                if (!isDynamicItem && oc.StaticMenuItemStyle != null)
                {
                    style.CopyFrom(oc.StaticMenuItemStyle);
                }
                if (isDynamicItem && oc.DynamicMenuItemStyle != null)
                {
                    style.CopyFrom(oc.DynamicMenuItemStyle);
                }
                if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth)
                {
                    style.CopyFrom(oc.LevelMenuItemStyles [item.Depth]);
                }
                if (item == oc.SelectedItem)
                {
                    if (!isDynamicItem && oc.StaticSelectedStyle != null)
                    {
                        style.CopyFrom(oc.StaticSelectedStyle);
                    }
                    if (isDynamicItem && oc.DynamicSelectedStyle != null)
                    {
                        style.CopyFrom(oc.DynamicSelectedStyle);
                    }
                    if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth)
                    {
                        style.CopyFrom(oc.LevelSelectedStyles [item.Depth]);
                    }
                }
            }
            style.AddAttributesToRender(writer);

            writer.AddAttribute("id", GetItemClientId(clientID, item, "i"));
            writer.AddAttribute("cellpadding", "0", false);
            writer.AddAttribute("cellspacing", "0", false);
            writer.AddAttribute("border", "0", false);
            writer.AddAttribute("width", "100%", false);
            writer.RenderBeginTag(HtmlTextWriterTag.Table);
            writer.RenderBeginTag(HtmlTextWriterTag.Tr);

            // Menu item text

            if (isVertical)
            {
                writer.AddStyleAttribute(HtmlTextWriterStyle.Width, "100%");
            }
            if (!owner.ItemWrap)
            {
                writer.AddStyleAttribute("white-space", "nowrap");
            }
            writer.RenderBeginTag(HtmlTextWriterTag.Td);

            RenderItemHref(owner, writer, item);

            Style linkStyle = new Style();

            if (oc.Header != null)
            {
                // styles are registered
                AddCssClass(linkStyle, oc.ControlLinkStyle.RegisteredCssClass);

                if (!isDynamicItem && oc.StaticMenuItemStyle != null)
                {
                    AddCssClass(linkStyle, oc.StaticMenuItemStyle.CssClass);
                    AddCssClass(linkStyle, oc.StaticMenuItemLinkStyle.RegisteredCssClass);
                }
                if (isDynamicItem && oc.DynamicMenuItemStyle != null)
                {
                    AddCssClass(linkStyle, oc.DynamicMenuItemStyle.CssClass);
                    AddCssClass(linkStyle, oc.DynamicMenuItemLinkStyle.RegisteredCssClass);
                }
                if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth)
                {
                    AddCssClass(linkStyle, oc.LevelMenuItemStyles [item.Depth].CssClass);
                    AddCssClass(linkStyle, oc.LevelMenuItemLinkStyles [item.Depth].RegisteredCssClass);
                }
                if (item == oc.SelectedItem)
                {
                    if (!isDynamicItem && oc.StaticSelectedStyle != null)
                    {
                        AddCssClass(linkStyle, oc.StaticSelectedStyle.CssClass);
                        AddCssClass(linkStyle, oc.StaticSelectedLinkStyle.RegisteredCssClass);
                    }
                    if (isDynamicItem && oc.DynamicSelectedStyle != null)
                    {
                        AddCssClass(linkStyle, oc.DynamicSelectedStyle.CssClass);
                        AddCssClass(linkStyle, oc.DynamicSelectedLinkStyle.RegisteredCssClass);
                    }
                    if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth)
                    {
                        AddCssClass(linkStyle, oc.LevelSelectedStyles [item.Depth].CssClass);
                        AddCssClass(linkStyle, oc.LevelSelectedLinkStyles [item.Depth].RegisteredCssClass);
                    }
                }
            }
            else
            {
                // styles are not registered
                linkStyle.CopyFrom(oc.ControlLinkStyle);

                if (!isDynamicItem && oc.StaticMenuItemStyle != null)
                {
                    linkStyle.CopyFrom(oc.StaticMenuItemLinkStyle);
                }
                if (isDynamicItem && oc.DynamicMenuItemStyle != null)
                {
                    linkStyle.CopyFrom(oc.DynamicMenuItemLinkStyle);
                }
                if (oc.LevelMenuItemStyles != null && oc.LevelMenuItemStyles.Count > item.Depth)
                {
                    linkStyle.CopyFrom(oc.LevelMenuItemLinkStyles [item.Depth]);
                }
                if (item == oc.SelectedItem)
                {
                    if (!isDynamicItem && oc.StaticSelectedStyle != null)
                    {
                        linkStyle.CopyFrom(oc.StaticSelectedLinkStyle);
                    }
                    if (isDynamicItem && oc.DynamicSelectedStyle != null)
                    {
                        linkStyle.CopyFrom(oc.DynamicSelectedLinkStyle);
                    }
                    if (oc.LevelSelectedStyles != null && oc.LevelSelectedStyles.Count > item.Depth)
                    {
                        linkStyle.CopyFrom(oc.LevelSelectedLinkStyles [item.Depth]);
                    }
                }

                linkStyle.AlwaysRenderTextDecoration = true;
            }
            linkStyle.AddAttributesToRender(writer);

            writer.AddAttribute("id", GetItemClientId(clientID, item, "l"));

            if (item.Depth > 0 && !isDynamicItem)
            {
                double value;
#if NET_4_0
                Unit unit = oc.StaticSubMenuIndent;
                if (unit == Unit.Empty)
                {
                    value = 16;
                }
                else
                {
                    value = unit.Value;
                }
#else
                value = oc.StaticSubMenuIndent.Value;
#endif
                Unit indent = new Unit(value * item.Depth, oc.StaticSubMenuIndent.Type);
                writer.AddStyleAttribute(HtmlTextWriterStyle.MarginLeft, indent.ToString());
            }
            writer.RenderBeginTag(HtmlTextWriterTag.A);
            owner.RenderItemContent(writer, item, isDynamicItem);
            writer.RenderEndTag();              // A

            writer.RenderEndTag();              // TD

            // Popup image

            if (dynamicChildren)
            {
                string popOutImage = GetPopOutImage(owner, item, isDynamicItem);
                if (popOutImage != null)
                {
                    writer.RenderBeginTag(HtmlTextWriterTag.Td);
                    writer.AddAttribute("src", owner.ResolveClientUrl(popOutImage));
                    writer.AddAttribute("border", "0");
                    string toolTip = String.Format(isDynamicItem ? oc.DynamicPopOutImageTextFormatString : oc.StaticPopOutImageTextFormatString, item.Text);
                    writer.AddAttribute(HtmlTextWriterAttribute.Alt, toolTip);
                    writer.RenderBeginTag(HtmlTextWriterTag.Img);
                    writer.RenderEndTag();                      // IMG
                    writer.RenderEndTag();                      // TD
                }
            }

            writer.RenderEndTag();              // TR
            writer.RenderEndTag();              // TABLE

            writer.RenderEndTag();              // TD

            if (!isVertical && itemSpacing == Unit.Empty && (notLast || (displayChildren && !dynamicChildren)))
            {
                writer.AddStyleAttribute("width", "3px");
                writer.RenderBeginTag(HtmlTextWriterTag.Td);
                writer.RenderEndTag();
            }

            // Bottom separator image
            string separatorImg = item.SeparatorImageUrl;
            if (separatorImg.Length == 0)
            {
                if (isDynamicItem)
                {
                    separatorImg = oc.DynamicBottomSeparatorImageUrl;
                }
                else
                {
                    separatorImg = oc.StaticBottomSeparatorImageUrl;
                }
            }

            if (separatorImg.Length > 0)
            {
                if (!isVertical)
                {
                    writer.RenderBeginTag(HtmlTextWriterTag.Td);
                }
                RenderSeparatorImage(owner, writer, separatorImg, false);
                if (!isVertical)
                {
                    writer.RenderEndTag();                      // TD
                }
            }

            if (isVertical)
            {
                writer.RenderEndTag();                  // TR
            }
            if (itemSpacing != Unit.Empty)
            {
                RenderMenuItemSpacing(writer, itemSpacing, isVertical);
            }

            // Submenu

            if (displayChildren && !dynamicChildren)
            {
                if (isVertical)
                {
                    writer.RenderBeginTag(HtmlTextWriterTag.Tr);
                }
                writer.RenderBeginTag(HtmlTextWriterTag.Td);
                writer.AddAttribute("width", "100%");
                owner.RenderMenu(writer, item.ChildItems, vertical, false, item.Depth + 1, notLast);
                if (item.Depth + 2 == oc.StaticDisplayLevels)
                {
                    owner.RenderDynamicMenu(writer, item.ChildItems);
                }
                writer.RenderEndTag();                  // TD
                if (isVertical)
                {
                    writer.RenderEndTag();                      // TR
                }
            }
        }