// Copyright � 2007 Jeffrey Bazinet, http://www.vwd-cms.com/
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
using System.Text;
namespace VwdCms
{
public class ImageZoom : Panel, INamingContainer, IToolbarProvider
{
protected HtmlImage imgMain;
protected HtmlGenericControl divImage;
private bool _controlsBuilt;
protected Toolbar tbrImageZoom;
private bool _toolbarCreated = false;
private string _toolbarContainerID = null;
private string _toolbarCssClass = null;
private string _toolbarButtonCssClass = null;
private string _toolbarLinkCssClass = null;
private string _toolbarSpacerCssClass = null;
private string _toolbarSeparatorCssClass = null;
private string _imageUrl = VwdCms.Configuration.Utilities.ImageUrl;
private string _imageSrc = null;
private bool _useIconMatrix = false;
public bool UseIconMatrix
{
get { return _useIconMatrix; }
set { _useIconMatrix = value; }
}
protected override void OnPreRender(EventArgs e)
{
BuildCompositeControls();
CreateToolbar();
RegisterControlClientScript();
base.OnPreRender(e);
}
public string ImageUrl
{
get { return _imageUrl; }
set { _imageUrl = value; }
}
public string ImageSrc
{
get { return _imageSrc; }
set
{
_imageSrc = value;
if (this.Image != null)
{
this.Image.Src = value;
}
}
}
public HtmlImage Image
{
get { return this.imgMain; }
}
private void BuildCompositeControls()
{
if (!_controlsBuilt)
{
_controlsBuilt = true;
this.divImage = new HtmlGenericControl("div");
this.divImage.ID = "divImage";
this.divImage.Style.Add("width", "100%");
this.divImage.Style.Add("height", "100%");
this.divImage.Style.Add("overflow", "auto");
this.imgMain = new HtmlImage();
this.imgMain.ID = "imgMain";
this.imgMain.Src = this.ImageSrc;
this.imgMain.Style.Add("border", "solid 1px #333333");
this.imgMain.Style.Add("margin", "5px");
this.divImage.Controls.Add(this.imgMain);
this.Controls.Add(this.divImage);
}
}
private void RegisterControlClientScript()
{
StringBuilder sb = new StringBuilder();
const string newline = "\r\n";
sb.Append("<script type=\"text/javascript\"> <!-- ");
sb.Append(newline);
sb.Append("function ");
sb.Append(this.ClientID);
sb.Append("_setImage(src){");
sb.Append("try{");
sb.Append("var img=document.getElementById('");
sb.Append(this.imgMain.ClientID);
sb.Append("');");
sb.Append("img.removeAttribute('width');");
sb.Append("img.src=src;");
sb.Append("}catch(e){alert('setImage error: ' + e.message);}");
sb.Append("}");
sb.Append(newline);
sb.Append("function ");
sb.Append(this.ClientID);
sb.Append("_zoomIn(){");
sb.Append("try{");
sb.Append("var img=document.getElementById('");
sb.Append(this.imgMain.ClientID);
sb.Append("');img.width=img.width*1.25;");
sb.Append("}catch(e){alert('zoomIn error: ' + e.message);}");
sb.Append("}");
sb.Append(newline);
sb.Append("function ");
sb.Append(this.ClientID);
sb.Append("_zoomOut(){");
sb.Append("try{");
sb.Append("var img=document.getElementById('");
sb.Append(this.imgMain.ClientID);
sb.Append("');img.width=img.width*0.75;");
sb.Append("}catch(e){alert('zoomOut error: ' + e.message);}");
sb.Append("}");
sb.Append(newline);
sb.Append("function ");
sb.Append(this.ClientID);
sb.Append("_actualSize(){");
sb.Append("try{");
sb.Append("var img=document.getElementById('");
sb.Append(this.imgMain.ClientID);
sb.Append("');");
sb.Append("img.removeAttribute('width');");
sb.Append("}catch(e){alert('actualSize error: ' + e.message);}");
sb.Append("}");
sb.Append(newline);
sb.Append("function ");
sb.Append(this.ClientID);
sb.Append("_bestFit(){");
sb.Append("try{");
sb.Append("var iz=document.getElementById('");
sb.Append(this.ClientID);
sb.Append("');var img=document.getElementById('");
sb.Append(this.imgMain.ClientID);
sb.Append("');");
sb.Append("var cw=iz.clientWidth;while(cw==0){iz=iz.parentElement;cw=iz.clientWidth;}");
sb.Append("var ch=iz.clientHeight;");
sb.Append("img.removeAttribute('width');");
sb.Append("var ar=img.width/img.height;");
sb.Append("if (ar>=1.0) {img.width=cw-12;}");
sb.Append("else {img.width=Math.floor(ch*ar)-12;}");
sb.Append("}catch(e){alert('bestFit error: ' + e.message);}");
sb.Append("}");
sb.Append(newline);
sb.Append("// -->");
sb.Append(newline);
sb.Append("</script>");
sb.Append(newline);
this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(),
this.ClientID + "_ClientScript", sb.ToString());
}
// *************************************************************************
// **** Toolbar Methods and Properties ****
// *************************************************************************
public string ToolbarContainerID
{
get { return _toolbarContainerID; }
set { _toolbarContainerID = value; }
}
public string ToolbarCssClass
{
get { return _toolbarCssClass; }
set { _toolbarCssClass = value; }
}
public string ToolbarButtonCssClass
{
get { return _toolbarButtonCssClass; }
set { _toolbarButtonCssClass = value; }
}
public string ToolbarLinkCssClass
{
get { return _toolbarLinkCssClass; }
set { _toolbarLinkCssClass = value; }
}
public string ToolbarSpacerCssClass
{
get { return _toolbarSpacerCssClass; }
set { _toolbarSpacerCssClass = value; }
}
public string ToolbarSeparatorCssClass
{
get { return _toolbarSeparatorCssClass; }
set { _toolbarSeparatorCssClass = value; }
}
// IToolbarProvider Members
Toolbar IToolbarProvider.GetToolbar()
{
Toolbar tbr = null;
if (this.Visible)
{
tbr = this.CreateToolbar();
}
return tbr;
}
string IToolbarProvider.ToolbarContainerID
{
get
{
return this.ToolbarContainerID;
}
}
// Toolbar implementation
private Toolbar CreateToolbar()
{
if (!_toolbarCreated)
{
_toolbarCreated = true;
VwdCms.Configuration.CmsConfig cfg = VwdCms.Configuration.CmsConfig.Current;
this.tbrImageZoom = new Toolbar();
this.tbrImageZoom.ID = "tbrImageZoom";
if (!string.IsNullOrEmpty(this.ToolbarCssClass))
{
this.tbrImageZoom.CssClass = this.ToolbarCssClass;
}
if (!string.IsNullOrEmpty(this.ToolbarButtonCssClass))
{
this.tbrImageZoom.ButtonCssClass = this.ToolbarButtonCssClass;
}
if (!string.IsNullOrEmpty(this.ToolbarLinkCssClass))
{
this.tbrImageZoom.LinkCssClass = this.ToolbarLinkCssClass;
}
if (!string.IsNullOrEmpty(this.ToolbarSpacerCssClass))
{
this.tbrImageZoom.SpacerCssClass = this.ToolbarSpacerCssClass;
}
if (!string.IsNullOrEmpty(this.ToolbarSeparatorCssClass))
{
this.tbrImageZoom.SeparatorCssClass = this.ToolbarSeparatorCssClass;
}
this.tbrImageZoom.AttachResources = true;
this.tbrImageZoom.JavaScriptFolder = "../../scripts/";
this.tbrImageZoom.CssFolder = "../../css/";
ToolbarItem ti = null;
ti = ToolbarItem.Spacer();
this.tbrImageZoom.Items.Add(ti.Name, ti);
ti = new ToolbarItem("ZoomIn", _imageUrl + "zoomin.gif", "Zoom In", "ZI", this.ClientID + "_zoomIn();", this.UseIconMatrix);
this.tbrImageZoom.Items.Add(ti.Name, ti);
ti = new ToolbarItem("ZoomOut", _imageUrl + "zoomout.gif", "Zoom Out", "ZO", this.ClientID + "_zoomOut();", this.UseIconMatrix);
this.tbrImageZoom.Items.Add(ti.Name, ti);
ti = ToolbarItem.Separator();
this.tbrImageZoom.Items.Add(ti.Name, ti);
ti = new ToolbarItem("ActualSize", _imageUrl + "actualsize.gif", "Actual Size", "AS", this.ClientID + "_actualSize();", this.UseIconMatrix);
this.tbrImageZoom.Items.Add(ti.Name, ti);
ti = new ToolbarItem("BestFit", _imageUrl + "bestfit.gif", "Best Fit", "BF", this.ClientID + "_bestFit();", this.UseIconMatrix);
this.tbrImageZoom.Items.Add(ti.Name, ti);
ti = ToolbarItem.Spacer();
this.tbrImageZoom.Items.Add(ti.Name, ti);
}
return this.tbrImageZoom;
}
}
}