You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			234 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			234 lines
		
	
	
		
			8.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| //------------------------------------------------------------------------------
 | |
| // <copyright file="WebPartMenuStyle.cs" company="Microsoft">
 | |
| //     Copyright (c) Microsoft Corporation.  All rights reserved.
 | |
| // </copyright>
 | |
| //------------------------------------------------------------------------------
 | |
| 
 | |
| namespace System.Web.UI.WebControls.WebParts {
 | |
| 
 | |
|     using System;
 | |
|     using System.Collections;
 | |
|     using System.ComponentModel;
 | |
|     using System.Drawing;
 | |
|     using System.Globalization;
 | |
|     using System.Web;
 | |
|     using System.Web.UI;
 | |
|     using System.Web.UI.WebControls;
 | |
| 
 | |
|     /// <devdoc>
 | |
|     /// </devdoc>
 | |
|     public sealed class WebPartMenuStyle : TableStyle, ICustomTypeDescriptor {
 | |
| 
 | |
|         private const int PROP_SHADOWCOLOR = 0x00200000;
 | |
| 
 | |
|         public WebPartMenuStyle() : this(null) {
 | |
|         }
 | |
| 
 | |
|         public WebPartMenuStyle(StateBag bag) : base(bag) {
 | |
|             CellPadding = 1;
 | |
|             CellSpacing = 0;
 | |
|         }
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         [
 | |
|         WebCategory("Appearance"),
 | |
|         DefaultValue(typeof(Color), ""),
 | |
|         TypeConverterAttribute(typeof(WebColorConverter)),
 | |
|         WebSysDescription(SR.WebPartMenuStyle_ShadowColor)
 | |
|         ]
 | |
|         public Color ShadowColor {
 | |
|             get {
 | |
|                 if (IsSet(PROP_SHADOWCOLOR)) {
 | |
|                     return (Color)(ViewState["ShadowColor"]);
 | |
|                 }
 | |
|                 return Color.Empty;
 | |
|             }
 | |
|             set {
 | |
|                 ViewState["ShadowColor"] = value;
 | |
|                 SetBit(PROP_SHADOWCOLOR);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <devdoc>
 | |
|         /// </devdoc>
 | |
|         [
 | |
|         Browsable(false),
 | |
|         DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden),
 | |
|         EditorBrowsable(EditorBrowsableState.Never)
 | |
|         ]
 | |
|         public override HorizontalAlign HorizontalAlign {
 | |
|             get {
 | |
|                 return base.HorizontalAlign;
 | |
|             }
 | |
|             set {
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <internalonly/>
 | |
|         protected override void FillStyleAttributes(CssStyleCollection attributes, IUrlResolutionService urlResolver) {
 | |
|             base.FillStyleAttributes(attributes, urlResolver);
 | |
| 
 | |
|             Color shadowColor = ShadowColor;
 | |
|             if (shadowColor.IsEmpty == false) {
 | |
|                 string colorValue = ColorTranslator.ToHtml(shadowColor);
 | |
|                 string filterValue = "progid:DXImageTransform.Microsoft.Shadow(color='" + colorValue + "', Direction=135, Strength=3)";
 | |
| 
 | |
|                 attributes.Add(HtmlTextWriterStyle.Filter, filterValue);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <internalonly/>
 | |
|         public override void CopyFrom(Style s) {
 | |
|             if (s != null && !s.IsEmpty) {
 | |
|                 base.CopyFrom(s);
 | |
| 
 | |
|                 if (s is WebPartMenuStyle) {
 | |
|                     WebPartMenuStyle ms = (WebPartMenuStyle)s;
 | |
| 
 | |
|                     // Only copy the BackImageUrl if it isn't in the source Style's registered CSS class
 | |
|                     if (s.RegisteredCssClass.Length != 0) {
 | |
|                         if (ms.IsSet(PROP_SHADOWCOLOR)) {
 | |
|                             ViewState.Remove("ShadowColor");
 | |
|                             ClearBit(PROP_SHADOWCOLOR);
 | |
|                         }
 | |
|                     }
 | |
|                     else {
 | |
|                         if (ms.IsSet(PROP_SHADOWCOLOR)) {
 | |
|                             this.ShadowColor = ms.ShadowColor;
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <internalonly/>
 | |
|         public override void MergeWith(Style s) {
 | |
|             if (s != null && !s.IsEmpty) {
 | |
|                 if (IsEmpty) {
 | |
|                     // merge into an empty style is equivalent to a copy,
 | |
|                     // which is more efficient
 | |
|                     CopyFrom(s);
 | |
|                     return;
 | |
|                 }
 | |
| 
 | |
|                 base.MergeWith(s);
 | |
| 
 | |
|                 if (s is WebPartMenuStyle) {
 | |
|                     WebPartMenuStyle ms = (WebPartMenuStyle)s;
 | |
| 
 | |
|                     // Since we're already copying the registered CSS class in base.MergeWith, we don't
 | |
|                     // need to any attributes that would be included in that class.
 | |
|                     if (s.RegisteredCssClass.Length == 0) {
 | |
|                         if (ms.IsSet(PROP_SHADOWCOLOR) && !this.IsSet(PROP_SHADOWCOLOR))
 | |
|                             this.ShadowColor = ms.ShadowColor;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         /// <internalonly/>
 | |
|         public override void Reset() {
 | |
|             if (IsSet(PROP_SHADOWCOLOR)) {
 | |
|                 ViewState.Remove("ShadowColor");
 | |
|             }
 | |
| 
 | |
|             base.Reset();
 | |
|         }
 | |
| 
 | |
|         #region ICustomTypeDesciptor implementation
 | |
|         System.ComponentModel.AttributeCollection ICustomTypeDescriptor.GetAttributes() {
 | |
|             return TypeDescriptor.GetAttributes(this, true);
 | |
|         }
 | |
| 
 | |
|         string ICustomTypeDescriptor.GetClassName() {
 | |
|             return TypeDescriptor.GetClassName(this, true);
 | |
|         }
 | |
| 
 | |
|         string ICustomTypeDescriptor.GetComponentName() {
 | |
|             return TypeDescriptor.GetComponentName(this, true);
 | |
|         }
 | |
| 
 | |
|         TypeConverter ICustomTypeDescriptor.GetConverter() {
 | |
|             return TypeDescriptor.GetConverter(this, true);
 | |
|         }
 | |
| 
 | |
|         EventDescriptor ICustomTypeDescriptor.GetDefaultEvent() {
 | |
|             return TypeDescriptor.GetDefaultEvent(this, true);
 | |
|         }
 | |
| 
 | |
|         PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty() {
 | |
|             return TypeDescriptor.GetDefaultProperty(this, true);
 | |
|         }
 | |
| 
 | |
|         object ICustomTypeDescriptor.GetEditor(Type editorBaseType) {
 | |
|             return TypeDescriptor.GetEditor(this, editorBaseType, true);
 | |
|         }
 | |
| 
 | |
|         EventDescriptorCollection ICustomTypeDescriptor.GetEvents() {
 | |
|             return TypeDescriptor.GetEvents(this, true);
 | |
|         }
 | |
| 
 | |
|         EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes) {
 | |
|             return TypeDescriptor.GetEvents(this, attributes, true);
 | |
|         }
 | |
| 
 | |
|         PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties() {
 | |
|             return ((ICustomTypeDescriptor)this).GetProperties(null);
 | |
|         }
 | |
| 
 | |
|         PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties(Attribute[] attributes) {
 | |
|             PropertyDescriptorCollection oldProperties = TypeDescriptor.GetProperties(GetType(), attributes);
 | |
|             PropertyDescriptor[] newProperties = new PropertyDescriptor[oldProperties.Count];
 | |
| 
 | |
|             PropertyDescriptor oldPaddingProperty = oldProperties["CellPadding"];
 | |
|             PropertyDescriptor newPaddingProperty =
 | |
|                 TypeDescriptor.CreateProperty(GetType(), oldPaddingProperty, new DefaultValueAttribute(1));
 | |
| 
 | |
|             PropertyDescriptor oldSpacingProperty = oldProperties["CellSpacing"];
 | |
|             PropertyDescriptor newSpacingProperty =
 | |
|                 TypeDescriptor.CreateProperty(GetType(), oldSpacingProperty, new DefaultValueAttribute(0));
 | |
| 
 | |
|             PropertyDescriptor oldFontProperty = oldProperties["Font"];
 | |
|             PropertyDescriptor newFontProperty =
 | |
|                 TypeDescriptor.CreateProperty(GetType(), oldFontProperty,
 | |
|                     new BrowsableAttribute(false),
 | |
|                     new ThemeableAttribute(false),
 | |
|                     new EditorBrowsableAttribute(EditorBrowsableState.Never));
 | |
| 
 | |
|             PropertyDescriptor oldForeColorProperty = oldProperties["ForeColor"];
 | |
|             PropertyDescriptor newForeColorProperty =
 | |
|                 TypeDescriptor.CreateProperty(GetType(), oldForeColorProperty,
 | |
|                     new BrowsableAttribute(false),
 | |
|                     new ThemeableAttribute(false),
 | |
|                     new EditorBrowsableAttribute(EditorBrowsableState.Never));
 | |
| 
 | |
|             for (int i = 0; i < oldProperties.Count; i++) {
 | |
|                 PropertyDescriptor property = oldProperties[i];
 | |
|                 if (property == oldPaddingProperty) {
 | |
|                     newProperties[i] = newPaddingProperty;
 | |
|                 }
 | |
|                 else if (property == oldSpacingProperty) {
 | |
|                     newProperties[i] = newSpacingProperty;
 | |
|                 }
 | |
|                 else if (property == oldFontProperty) {
 | |
|                     newProperties[i] = newFontProperty;
 | |
|                 }
 | |
|                 else if (property == oldForeColorProperty) {
 | |
|                     newProperties[i] = newForeColorProperty;
 | |
|                 }
 | |
|                 else {
 | |
|                     newProperties[i] = property;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return new PropertyDescriptorCollection(newProperties, true);
 | |
|         }
 | |
| 
 | |
|         object ICustomTypeDescriptor.GetPropertyOwner(PropertyDescriptor pd) {
 | |
|             return this;
 | |
|         }
 | |
|         #endregion //ICustomTypeDescriptor implementation
 | |
|     }
 | |
| }
 |