e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
212 lines
8.6 KiB
C#
212 lines
8.6 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="PopOutPanel.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.UI.WebControls {
|
|
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Drawing.Design;
|
|
using System.Globalization;
|
|
using System.Web;
|
|
using System.Web.UI;
|
|
using System.ComponentModel;
|
|
|
|
/// <devdoc>
|
|
/// Constructs a panel with automatic scrolling
|
|
/// and relative positioning for use with the Menu control.
|
|
/// </devdoc>
|
|
internal sealed class PopOutPanel : Panel {
|
|
|
|
private Menu _owner;
|
|
private String _scrollerClass;
|
|
private Style _scrollerStyle;
|
|
private Style _style;
|
|
private PopOutPanelStyle _emptyPopOutPanelStyle;
|
|
|
|
public PopOutPanel(Menu owner, Style style) {
|
|
_owner = owner;
|
|
_style = style;
|
|
_emptyPopOutPanelStyle = new PopOutPanelStyle(null);
|
|
}
|
|
|
|
public override ScrollBars ScrollBars {
|
|
get {
|
|
return ScrollBars.None;
|
|
}
|
|
}
|
|
|
|
internal String ScrollerClass {
|
|
get {
|
|
return _scrollerClass;
|
|
}
|
|
set {
|
|
_scrollerClass = value;
|
|
}
|
|
}
|
|
|
|
internal Style ScrollerStyle {
|
|
get {
|
|
return _scrollerStyle;
|
|
}
|
|
set {
|
|
_scrollerStyle = value;
|
|
}
|
|
}
|
|
|
|
/// <devdoc>
|
|
/// Add positioning custom attributes.
|
|
/// </devdoc>
|
|
protected override void AddAttributesToRender(HtmlTextWriter writer) {
|
|
string oldCssClass = CssClass;
|
|
Style oldStyle = _style;
|
|
CssClass = String.Empty;
|
|
_style = null;
|
|
ControlStyle.Reset();
|
|
|
|
base.AddAttributesToRender(writer);
|
|
|
|
CssClass = oldCssClass;
|
|
_style = oldStyle;
|
|
|
|
// Non-configurable style attributes
|
|
RenderStyleAttributes(writer);
|
|
}
|
|
|
|
internal PopOutPanelStyle GetEmptyPopOutPanelStyle() {
|
|
return _emptyPopOutPanelStyle;
|
|
}
|
|
|
|
public override void RenderEndTag(HtmlTextWriter writer) {
|
|
if (!_owner.DesignMode) {
|
|
RenderScrollerAttributes(writer);
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID + "Up");
|
|
writer.AddAttribute("onmouseover", "PopOut_Up(this)");
|
|
writer.AddAttribute("onmouseout", "PopOut_Stop(this)");
|
|
writer.RenderBeginTag(HtmlTextWriterTag.Div);
|
|
string scrollUpImageUrl = _owner.ScrollUpImageUrl;
|
|
if (scrollUpImageUrl.Length != 0) {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Src, _owner.ResolveClientUrl(scrollUpImageUrl));
|
|
}
|
|
else {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Src, _owner.GetImageUrl(Menu.ScrollUpImageIndex));
|
|
}
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Alt, _owner.ScrollUpText);
|
|
writer.RenderBeginTag(HtmlTextWriterTag.Img);
|
|
writer.RenderEndTag();
|
|
writer.RenderEndTag();
|
|
RenderScrollerAttributes(writer);
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID + "Dn");
|
|
writer.AddAttribute("onmouseover", "PopOut_Down(this)");
|
|
writer.AddAttribute("onmouseout", "PopOut_Stop(this)");
|
|
writer.RenderBeginTag(HtmlTextWriterTag.Div);
|
|
string scrollDownImageUrl = _owner.ScrollDownImageUrl;
|
|
if (scrollDownImageUrl.Length != 0) {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Src, _owner.ResolveClientUrl(scrollDownImageUrl));
|
|
}
|
|
else {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Src, _owner.GetImageUrl(Menu.ScrollDownImageIndex));
|
|
}
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Alt, _owner.ScrollDownText);
|
|
writer.RenderBeginTag(HtmlTextWriterTag.Img);
|
|
writer.RenderEndTag();
|
|
writer.RenderEndTag();
|
|
}
|
|
base.RenderEndTag(writer);
|
|
}
|
|
|
|
private void RenderScrollerAttributes(HtmlTextWriter writer) {
|
|
if ((Page != null) && Page.SupportsStyleSheets) {
|
|
if (!String.IsNullOrEmpty(ScrollerClass)) {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Class, ScrollerClass + ' ' +
|
|
GetEmptyPopOutPanelStyle().RegisteredCssClass);
|
|
}
|
|
else {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Class, GetEmptyPopOutPanelStyle().RegisteredCssClass);
|
|
}
|
|
}
|
|
else {
|
|
if ((ScrollerStyle != null) && !ScrollerStyle.IsEmpty) {
|
|
ScrollerStyle.AddAttributesToRender(writer);
|
|
}
|
|
if (ScrollerStyle.BackColor.IsEmpty) {
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "white");
|
|
}
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Visibility, "hidden");
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Position, "absolute");
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Left, "0px");
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Top, "0px");
|
|
}
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.TextAlign, "center");
|
|
}
|
|
|
|
private void RenderStyleAttributes(HtmlTextWriter writer) {
|
|
if (_style == null) {
|
|
if (!String.IsNullOrEmpty(CssClass)) {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
|
|
}
|
|
else {
|
|
if (BackColor.IsEmpty) {
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, "white");
|
|
}
|
|
else {
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.BackgroundColor, ColorTranslator.ToHtml(BackColor));
|
|
}
|
|
if (!_owner.DesignMode) {
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Visibility, "hidden");
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Display, "none");
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Position, "absolute");
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Left, "0px");
|
|
writer.AddStyleAttribute(HtmlTextWriterStyle.Top, "0px");
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
if ((Page != null) && Page.SupportsStyleSheets) {
|
|
string styleClass = _style.RegisteredCssClass;
|
|
if (styleClass.Trim().Length > 0) {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Class,
|
|
(!String.IsNullOrEmpty(CssClass)) ?
|
|
styleClass + ' ' + CssClass:
|
|
styleClass);
|
|
return;
|
|
}
|
|
}
|
|
if (!String.IsNullOrEmpty(CssClass)) {
|
|
writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
|
|
}
|
|
else {
|
|
_style.AddAttributesToRender(writer);
|
|
}
|
|
}
|
|
}
|
|
|
|
internal void SetInternalStyle(Style style) {
|
|
_style = style;
|
|
}
|
|
|
|
internal sealed class PopOutPanelStyle : SubMenuStyle {
|
|
private PopOutPanel _owner;
|
|
|
|
public PopOutPanelStyle(PopOutPanel owner) {
|
|
_owner = owner;
|
|
}
|
|
|
|
protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver) {
|
|
if (BackColor.IsEmpty && ((_owner == null) || _owner.BackColor.IsEmpty)) {
|
|
attributes.Add(HtmlTextWriterStyle.BackgroundColor, "white");
|
|
}
|
|
attributes.Add(HtmlTextWriterStyle.Visibility, "hidden");
|
|
attributes.Add(HtmlTextWriterStyle.Display, "none");
|
|
attributes.Add(HtmlTextWriterStyle.Position, "absolute");
|
|
attributes.Add(HtmlTextWriterStyle.Left, "0px");
|
|
attributes.Add(HtmlTextWriterStyle.Top, "0px");
|
|
base.FillStyleAttributes(attributes, urlResolver);
|
|
}
|
|
}
|
|
}
|
|
}
|