Mega Code Archive

 
Categories / ASP.Net Tutorial / Custom Controls
 

You can add your own Smart Tasks to a custom control by inheriting a new class from the base DesignerActionList class

using System; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.Design;using System.ComponentModel; using System.ComponentModel.Design; namespace myControls {     [Designer(typeof(SmartImageDesigner))]     public class SmartImage : WebControl     {         string _imageUrl;         string _alternateText;         int _rotation = 0;         bool _mirror = false;         public string ImageUrl         {             get { return _imageUrl; }             set { _imageUrl = value; }         }         public string AlternateText         {             get { return _alternateText; }             set { _alternateText = value; }         }         public int Rotation         {             get { return _rotation; }             set { _rotation = value; }         }         public bool Mirror         {             get { return _mirror; }             set { _mirror = value; }         }         protected override HtmlTextWriterTag TagKey         {             get             {                 return HtmlTextWriterTag.Img;             }         }        private string GetFilterString()         {             string _mirrorValue = "0";             if (_mirror)                 _mirrorValue = "1";             return String.Format("progid:DXImageTransform.Microsoft. BasicImage(Rotation={0},Mirror={1})", _rotation, _mirrorValue);         }         protected override void AddAttributesToRender(HtmlTextWriter writer)         {             writer.AddStyleAttribute(HtmlTextWriterStyle.Filter, this. GetFilterString());             writer.AddAttribute(HtmlTextWriterAttribute.Src, _imageUrl);             writer.AddAttribute(HtmlTextWriterAttribute.Alt, _alternateText);             base.AddAttributesToRender(writer);         }     }     public class SmartImageDesigner : ControlDesigner     {         public override DesignerActionListCollection ActionLists         {             get             {                 DesignerActionListCollection actionLists = new DesignerActionListCollection();                 actionLists.AddRange(base.ActionLists);                 actionLists.Add(new SmartImageActionList(this));                 return actionLists;             }         }     }     public class SmartImageActionList : DesignerActionList     {         private DesignerActionItemCollection items;         private SmartImageDesigner _parent;         public SmartImageActionList(SmartImageDesigner parent)             : base(parent.Component)        {             _parent = parent;         }         public void Rotate()         {             TransactedChangeCallback toCall = new TransactedChangeCallback(DoRotate);             ControlDesigner.InvokeTransactedChange(this.Component, toCall, "Rotate", "Rotate image 90 degrees");         }         public void Mirror()         {             TransactedChangeCallback toCall = new TransactedChangeCallback(DoMirror);             ControlDesigner.InvokeTransactedChange(this.Component, toCall, "Mirror", "Mirror Image");         }         public override DesignerActionItemCollection GetSortedActionItems()         {             if (items == null)             {                 items = new DesignerActionItemCollection();                 items.Add(new DesignerActionMethodItem(this, "Rotate", "Rotate Image", true));                 items.Add(new DesignerActionMethodItem(this, "Mirror", "Mirror Image", true));             }             return items;         }         public bool DoRotate(object arg)         {             SmartImage img = (SmartImage)this.Component;             img.Rotation += 1;             if (img.Rotation > 3)                 img.Rotation = 0;             _parent.UpdateDesignTimeHtml();             return true;         }         public bool DoMirror(object arg)         {             SmartImage img = (SmartImage)this.Component;             img.Mirror = !img.Mirror;             _parent.UpdateDesignTimeHtml();             return true;         }     } }