e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
213 lines
9.1 KiB
C#
213 lines
9.1 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="DesignerCommandAdapter.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
using System.Globalization;
|
|
using System.IO;
|
|
using System.Web.Mobile;
|
|
using System.Web.UI.Design.MobileControls;
|
|
using System.Web.UI.MobileControls;
|
|
using System.Web.UI.MobileControls.Adapters;
|
|
|
|
namespace System.Web.UI.Design.MobileControls.Adapters
|
|
{
|
|
[
|
|
System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
|
|
Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
|
|
]
|
|
[Obsolete("The System.Web.Mobile.dll assembly has been deprecated and should no longer be used. For information about how to develop ASP.NET mobile applications, see http://go.microsoft.com/fwlink/?LinkId=157231.")]
|
|
internal class DesignerCommandAdapter : HtmlCommandAdapter
|
|
{
|
|
// required width may differ a little bit from actual exact pixel value
|
|
private const int SAFETY_MARGIN = 8;
|
|
|
|
public override MobileCapabilities Device
|
|
{
|
|
get
|
|
{
|
|
return DesignerCapabilities.Instance;
|
|
}
|
|
}
|
|
|
|
public override void Render(HtmlMobileTextWriter writer)
|
|
{
|
|
// Invalid text writers are not supported in this Adapter.
|
|
if (!(writer is DesignerTextWriter))
|
|
{
|
|
return;
|
|
}
|
|
|
|
Alignment alignment = (Alignment)Style[Style.AlignmentKey, true];
|
|
byte templateStatus;
|
|
int maxWidth = DesignerAdapterUtil.GetMaxWidthToFit(Control, out templateStatus);
|
|
String width = DesignerAdapterUtil.GetWidth(Control);
|
|
|
|
if (Control.ImageUrl.Length == 0)
|
|
{
|
|
if (Control.Format == CommandFormat.Button)
|
|
{
|
|
if (maxWidth == 0 && templateStatus == DesignerAdapterUtil.CONTROL_IN_TEMPLATE_NONEDIT)
|
|
{
|
|
maxWidth = DesignerAdapterUtil.CONTROL_MAX_WIDTH_IN_TEMPLATE;
|
|
}
|
|
|
|
if (maxWidth == 0 && DesignerAdapterUtil.InMobileUserControl(Control))
|
|
{
|
|
maxWidth = Constants.ControlMaxsizeAtToplevel;
|
|
}
|
|
|
|
if (maxWidth == 0)
|
|
{
|
|
// Render will be called a second time for which maxWidth != 0
|
|
return;
|
|
}
|
|
|
|
String additionalStyle = null;
|
|
String controlText = Control.Text;
|
|
String commandCaption;
|
|
int requiredWidth = 0;
|
|
|
|
DesignerTextWriter twTmp;
|
|
twTmp = new DesignerTextWriter();
|
|
twTmp.WriteBeginTag("input");
|
|
twTmp.WriteStyleAttribute(Style, null);
|
|
twTmp.WriteAttribute("type", "submit");
|
|
twTmp.Write(" value=\"");
|
|
twTmp.WriteText(controlText, true);
|
|
twTmp.Write("\"/>");
|
|
String htmlFragment = twTmp.ToString();
|
|
|
|
MSHTMLHostUtil.ApplyStyle(String.Empty, String.Empty, null);
|
|
requiredWidth = MSHTMLHostUtil.GetHtmlFragmentWidth(htmlFragment);
|
|
|
|
((DesignerTextWriter)writer).EnterZeroFontSizeTag();
|
|
writer.WriteBeginTag("div");
|
|
if (requiredWidth + SAFETY_MARGIN > maxWidth)
|
|
{
|
|
if (templateStatus == DesignerAdapterUtil.CONTROL_IN_TEMPLATE_EDIT)
|
|
{
|
|
int tmpRequiredWidth, allowedLength;
|
|
int captionLength = controlText.Length;
|
|
twTmp = new DesignerTextWriter();
|
|
twTmp.WriteBeginTag("input");
|
|
twTmp.WriteStyleAttribute(Style, null);
|
|
twTmp.WriteAttribute("type", "submit");
|
|
twTmp.WriteAttribute("value", "{0}");
|
|
twTmp.Write("/>");
|
|
htmlFragment = twTmp.ToString();
|
|
// At least 10 characters can fit into the caption of the command
|
|
for (allowedLength = (captionLength < 10 ? captionLength : 10); allowedLength <= captionLength; allowedLength++)
|
|
{
|
|
tmpRequiredWidth = MSHTMLHostUtil.GetHtmlFragmentWidth(String.Format(CultureInfo.CurrentCulture, htmlFragment, HttpUtility.HtmlEncode(controlText.Substring(0, allowedLength))));
|
|
if (tmpRequiredWidth + SAFETY_MARGIN > maxWidth)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
commandCaption = controlText.Substring(0, allowedLength - 1);
|
|
}
|
|
else
|
|
{
|
|
commandCaption = controlText;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
writer.WriteAttribute("style", "width:" + width);
|
|
commandCaption = controlText;
|
|
}
|
|
|
|
if (alignment != Alignment.NotSet)
|
|
{
|
|
writer.WriteAttribute("align", Enum.GetName(typeof(Alignment), alignment));
|
|
}
|
|
writer.Write(">");
|
|
|
|
writer.EnterLayout(Style);
|
|
|
|
writer.WriteBeginTag("input");
|
|
if (requiredWidth + SAFETY_MARGIN > maxWidth)
|
|
{
|
|
additionalStyle = String.Format(CultureInfo.CurrentCulture, "width:{0};", width);
|
|
}
|
|
((DesignerTextWriter)writer).WriteStyleAttribute(Style, additionalStyle);
|
|
writer.WriteAttribute("type", "submit");
|
|
|
|
writer.Write(" value=\"");
|
|
writer.WriteText(commandCaption, true);
|
|
writer.Write("\"/>");
|
|
|
|
writer.ExitLayout(Style);
|
|
}
|
|
else
|
|
{
|
|
Wrapping wrapping = (Wrapping) Style[Style.WrappingKey, true];
|
|
bool wrap = (wrapping == Wrapping.Wrap || wrapping == Wrapping.NotSet);
|
|
|
|
((DesignerTextWriter)writer).EnterZeroFontSizeTag();
|
|
writer.WriteBeginTag("div");
|
|
|
|
if (!wrap)
|
|
{
|
|
if (templateStatus == DesignerAdapterUtil.CONTROL_IN_TEMPLATE_EDIT)
|
|
{
|
|
width = maxWidth.ToString(CultureInfo.InvariantCulture) + "px";
|
|
}
|
|
writer.WriteAttribute("style", "overflow-x:hidden;width:" + width);
|
|
}
|
|
else
|
|
{
|
|
writer.WriteAttribute("style", "word-wrap:break-word;width:" + width);
|
|
}
|
|
|
|
if (alignment != Alignment.NotSet)
|
|
{
|
|
writer.WriteAttribute("align", Enum.GetName(typeof(Alignment), alignment));
|
|
}
|
|
writer.Write(">");
|
|
|
|
writer.WriteBeginTag("a");
|
|
writer.WriteAttribute("href", "NavigationUrl");
|
|
writer.Write(">");
|
|
((DesignerTextWriter)writer).WriteCssStyleText(Style, null, Control.Text, true);
|
|
writer.WriteEndTag("a");
|
|
}
|
|
writer.WriteEndTag("div");
|
|
((DesignerTextWriter)writer).ExitZeroFontSizeTag();
|
|
}
|
|
else
|
|
{
|
|
if (templateStatus == DesignerAdapterUtil.CONTROL_IN_TEMPLATE_EDIT)
|
|
{
|
|
width = maxWidth.ToString(CultureInfo.InvariantCulture) + "px";
|
|
}
|
|
|
|
writer.WriteBeginTag("div");
|
|
if (alignment == Alignment.Center)
|
|
{
|
|
writer.WriteAttribute("align", "center");
|
|
}
|
|
writer.WriteAttribute("style", "overflow-x:hidden;width:" + width);
|
|
writer.Write(">");
|
|
|
|
writer.WriteBeginTag("img");
|
|
((DesignerTextWriter)writer).WriteStyleAttribute(Style);
|
|
writer.WriteAttribute("src", Control.ImageUrl, true);
|
|
|
|
// center alignment not part of HTML for images.
|
|
if (alignment == Alignment.Right ||
|
|
alignment == Alignment.Left)
|
|
{
|
|
writer.WriteAttribute("align", Enum.GetName(typeof(Alignment), alignment));
|
|
}
|
|
|
|
writer.WriteAttribute("border", "0");
|
|
writer.Write(">");
|
|
writer.WriteEndTag("div");
|
|
}
|
|
}
|
|
}
|
|
}
|