Esempio n. 1
0
        protected void RenderContextMenu()
        {
            // What we need to do first is get the maxed size text...
            int x  = 0;
            int ii = -1;

            this.Content.Empty();

            for (int i = 0; i < ContextItems.Count; i++)
            {
                int y = ContextItems[i].Caption.Length;
                if (y > x)
                {
                    x = y; ii = i;
                }
            }

            if (ii == -1)
            {
                return;
            }
            int calwidth = (int)GetTextWidth(ContextItems[ii].Caption, Settings.DefaultFont);

            if (calwidth < Settings.ContextMenuMinWidth)
            {
                calwidth = Settings.ContextMenuMinWidth;
            }
            int width = (calwidth + 34 + 8 + 2);

            int top = 1;

            for (int i = 0; i < ContextItems.Count; i++)
            {
                var contextItem = ContextItems[i];
                int y           = contextItem.Caption.Length;
                var item        = Label(contextItem.Caption, 1, top, width - 2, false, false, "contextitem");
                item.tabIndex    = -1;
                contextItem.Span = item;
                item.onblur      = (ev) =>
                {
                    if (!SpanExist(ev.relatedTarget.As <HTMLElement>()))
                    {
                        MainContextMenu.Close();
                    }
                };

                if (contextItem.Dropdown)
                {
                    var div = new HTMLDivElement();

                    div.className = "control";
                    div.SetLocation("(100% - 20px)", 2);
                    div.SetSize(20, 20);
                    div.innerHTML        = "&gt;";
                    div.style.textShadow = "rgba(64, 64, 64, 0.25) 0 1px 1px";
                    //text-shadow:#000 0 1px 1px,#000 0 -1px 1px
                    div.style.fontWeight = "bold";
                    div.style.textIndent = "0";
                    //                    font-weight: bold;
                    //text-indent: 0;

                    item.appendChild(div);

                    //                       border: solid black;
                    //border-width: 0 3px 3px 0;
                    //display: inline-block;
                    //padding: 3px;
                }

                item.onclick = (ev) =>
                {
                    if (contextItem.Enabled)
                    {
                        if (contextItem.OnItemClick != null)
                        {
                            contextItem.OnItemClick(contextItem);
                        }
                        if (!contextItem.CloseHandled)
                        {
                            this.Close();
                        }
                    }
                };

                item.onmouseenter = (ev) =>
                {
                    if (contextItem.OnMouseEnter != null)
                    {
                        contextItem.OnMouseEnter(contextItem);
                    }
                };

                Content.AppendChild(item);

                top += 24;

                if (ContextItems[i].BeginGroup && i != ContextItems.Count)
                {
                    top += 1;
                    var sep = Div("contextitemseperator");

                    sep.style.top   = top.ToPx();
                    sep.style.width = calwidth.ToPx();

                    Content.AppendChild(sep);

                    top += 2;
                }
            }

            top++;

            this.Content.SetSize(width, top);
        }