|
//------------------------------------------------------------------------------
// <copyright file="BehaviorEditorPart.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.Diagnostics;
using System.Globalization;
using System.Web.UI;
using System.Web.UI.WebControls;
public sealed class BehaviorEditorPart : EditorPart {
private CheckBox _allowClose;
private CheckBox _allowConnect;
private CheckBox _allowHide;
private CheckBox _allowMinimize;
private CheckBox _allowZoneChange;
private DropDownList _exportMode;
private DropDownList _helpMode;
private TextBox _description;
private TextBox _titleUrl;
private TextBox _titleIconImageUrl;
private TextBox _catalogIconImageUrl;
private TextBox _helpUrl;
private TextBox _importErrorMessage;
private TextBox _authorizationFilter;
private CheckBox _allowEdit;
private string _allowCloseErrorMessage;
private string _allowConnectErrorMessage;
private string _allowHideErrorMessage;
private string _allowMinimizeErrorMessage;
private string _allowZoneChangeErrorMessage;
private string _exportModeErrorMessage;
private string _helpModeErrorMessage;
private string _descriptionErrorMessage;
private string _titleUrlErrorMessage;
private string _titleIconImageUrlErrorMessage;
private string _catalogIconImageUrlErrorMessage;
private string _helpUrlErrorMessage;
private string _importErrorMessageErrorMessage;
private string _authorizationFilterErrorMessage;
private string _allowEditErrorMessage;
private const int TextBoxColumns = 30;
[Browsable(false), EditorBrowsable(EditorBrowsableState.Never), Themeable(false)]
public override string DefaultButton {
get { return base.DefaultButton; }
set { base.DefaultButton = value; }
}
public override bool Display {
get {
if (WebPartToEdit != null &&
WebPartToEdit.IsShared &&
WebPartManager != null &&
(WebPartManager.Personalization.Scope == PersonalizationScope.User)) {
return false;
}
return base.Display;
}
}
private bool HasError {
get {
return (_allowCloseErrorMessage != null || _allowConnectErrorMessage != null ||
_allowHideErrorMessage != null || _allowMinimizeErrorMessage != null ||
_allowZoneChangeErrorMessage != null || _exportModeErrorMessage != null ||
_helpModeErrorMessage != null || _descriptionErrorMessage != null ||
_titleUrlErrorMessage != null || _titleIconImageUrlErrorMessage != null ||
_catalogIconImageUrlErrorMessage != null || _helpUrlErrorMessage != null ||
_importErrorMessageErrorMessage != null || _authorizationFilterErrorMessage != null ||
_allowEditErrorMessage != null);
}
}
[
WebSysDefaultValue(SR.BehaviorEditorPart_PartTitle),
]
public override string Title {
get {
string s = (string)ViewState["Title"];
return (s != null) ? s : SR.GetString(SR.BehaviorEditorPart_PartTitle);
}
set {
ViewState["Title"] = value;
}
}
public override bool ApplyChanges() {
WebPart webPart = WebPartToEdit;
Debug.Assert(webPart != null);
if (webPart != null) {
EnsureChildControls();
bool allowLayoutChange = webPart.Zone.AllowLayoutChange;
if (allowLayoutChange) {
try {
webPart.AllowClose = _allowClose.Checked;
}
catch (Exception e) {
_allowCloseErrorMessage = CreateErrorMessage(e.Message);
}
}
try {
webPart.AllowConnect = _allowConnect.Checked;
}
catch (Exception e) {
_allowConnectErrorMessage = CreateErrorMessage(e.Message);
}
if (allowLayoutChange) {
try {
webPart.AllowHide = _allowHide.Checked;
}
catch (Exception e) {
_allowHideErrorMessage = CreateErrorMessage(e.Message);
}
}
if (allowLayoutChange) {
try {
webPart.AllowMinimize = _allowMinimize.Checked;
}
catch (Exception e) {
_allowMinimizeErrorMessage = CreateErrorMessage(e.Message);
}
}
if (allowLayoutChange) {
try {
webPart.AllowZoneChange = _allowZoneChange.Checked;
}
catch (Exception e) {
_allowZoneChangeErrorMessage = CreateErrorMessage(e.Message);
}
}
try {
TypeConverter exportModeConverter = TypeDescriptor.GetConverter(typeof(WebPartExportMode));
webPart.ExportMode = (WebPartExportMode)exportModeConverter.ConvertFromString(_exportMode.SelectedValue);
}
catch (Exception e) {
_exportModeErrorMessage = CreateErrorMessage(e.Message);
}
try {
TypeConverter helpModeConverter = TypeDescriptor.GetConverter(typeof(WebPartHelpMode));
webPart.HelpMode = (WebPartHelpMode)helpModeConverter.ConvertFromString(_helpMode.SelectedValue);
}
catch (Exception e) {
_helpModeErrorMessage = CreateErrorMessage(e.Message);
}
try {
webPart.Description = _description.Text;
}
catch (Exception e) {
_descriptionErrorMessage = CreateErrorMessage(e.Message);
}
string value = _titleUrl.Text;
if (CrossSiteScriptingValidation.IsDangerousUrl(value)) {
_titleUrlErrorMessage = SR.GetString(SR.EditorPart_ErrorBadUrl);
}
else {
try {
webPart.TitleUrl = value;
}
catch (Exception e) {
_titleUrlErrorMessage = CreateErrorMessage(e.Message);
}
}
value = _titleIconImageUrl.Text;
if (CrossSiteScriptingValidation.IsDangerousUrl(value)) {
_titleIconImageUrlErrorMessage = SR.GetString(SR.EditorPart_ErrorBadUrl);
}
else {
try {
webPart.TitleIconImageUrl = value;
}
catch (Exception e) {
_titleIconImageUrlErrorMessage = CreateErrorMessage(e.Message);
}
}
value = _catalogIconImageUrl.Text;
if (CrossSiteScriptingValidation.IsDangerousUrl(value)) {
_catalogIconImageUrlErrorMessage = SR.GetString(SR.EditorPart_ErrorBadUrl);
}
else {
try {
webPart.CatalogIconImageUrl = value;
}
catch (Exception e) {
_catalogIconImageUrlErrorMessage = CreateErrorMessage(e.Message);
}
}
value = _helpUrl.Text;
if (CrossSiteScriptingValidation.IsDangerousUrl(value)) {
_helpUrlErrorMessage = SR.GetString(SR.EditorPart_ErrorBadUrl);
}
else {
try {
webPart.HelpUrl = value;
}
catch (Exception e) {
_helpUrlErrorMessage = CreateErrorMessage(e.Message);
}
}
try {
webPart.ImportErrorMessage = _importErrorMessage.Text;
}
catch (Exception e) {
_importErrorMessageErrorMessage = CreateErrorMessage(e.Message);
}
try {
webPart.AuthorizationFilter = _authorizationFilter.Text;
}
catch (Exception e) {
_authorizationFilterErrorMessage = CreateErrorMessage(e.Message);
}
try {
webPart.AllowEdit = _allowEdit.Checked;
}
catch (Exception e) {
_allowEditErrorMessage = CreateErrorMessage(e.Message);
}
}
return !HasError;
}
protected internal override void CreateChildControls() {
ControlCollection controls = Controls;
controls.Clear();
_allowClose = new CheckBox();
controls.Add(_allowClose);
_allowConnect = new CheckBox();
controls.Add(_allowConnect);
_allowHide = new CheckBox();
controls.Add(_allowHide);
_allowMinimize = new CheckBox();
controls.Add(_allowMinimize);
_allowZoneChange = new CheckBox();
controls.Add(_allowZoneChange);
TypeConverter exportModeConverter = TypeDescriptor.GetConverter(typeof(WebPartExportMode));
_exportMode = new DropDownList();
_exportMode.Items.AddRange(new ListItem[] {
new ListItem(SR.GetString(SR.BehaviorEditorPart_ExportModeNone),
exportModeConverter.ConvertToString(WebPartExportMode.None)),
new ListItem(SR.GetString(SR.BehaviorEditorPart_ExportModeAll),
exportModeConverter.ConvertToString(WebPartExportMode.All)),
new ListItem(SR.GetString(SR.BehaviorEditorPart_ExportModeNonSensitiveData),
exportModeConverter.ConvertToString(WebPartExportMode.NonSensitiveData)),
});
controls.Add(_exportMode);
TypeConverter helpModeConverter = TypeDescriptor.GetConverter(typeof(WebPartHelpMode));
_helpMode = new DropDownList();
_helpMode.Items.AddRange(new ListItem[] {
new ListItem(SR.GetString(SR.BehaviorEditorPart_HelpModeModal),
helpModeConverter.ConvertToString(WebPartHelpMode.Modal)),
new ListItem(SR.GetString(SR.BehaviorEditorPart_HelpModeModeless),
helpModeConverter.ConvertToString(WebPartHelpMode.Modeless)),
new ListItem(SR.GetString(SR.BehaviorEditorPart_HelpModeNavigate),
helpModeConverter.ConvertToString(WebPartHelpMode.Navigate)),
});
controls.Add(_helpMode);
_description = new TextBox();
_description.Columns = TextBoxColumns;
controls.Add(_description);
_titleUrl = new TextBox();
_titleUrl.Columns = TextBoxColumns;
controls.Add(_titleUrl);
_titleIconImageUrl = new TextBox();
_titleIconImageUrl.Columns = TextBoxColumns;
controls.Add(_titleIconImageUrl);
_catalogIconImageUrl = new TextBox();
_catalogIconImageUrl.Columns = TextBoxColumns;
controls.Add(_catalogIconImageUrl);
_helpUrl = new TextBox();
_helpUrl.Columns = TextBoxColumns;
controls.Add(_helpUrl);
_importErrorMessage = new TextBox();
_importErrorMessage.Columns = TextBoxColumns;
controls.Add(_importErrorMessage);
_authorizationFilter = new TextBox();
_authorizationFilter.Columns = TextBoxColumns;
controls.Add(_authorizationFilter);
_allowEdit = new CheckBox();
controls.Add(_allowEdit);
// We don't need viewstate enabled on our child controls. Disable for perf.
foreach (Control c in controls) {
c.EnableViewState = false;
}
}
protected internal override void OnPreRender(EventArgs e) {
base.OnPreRender(e);
// We want to synchronize the EditorPart to the state of the WebPart on every page load,
// so we stay current if the WebPart changes in the background.
if (Display && Visible && !HasError) {
SyncChanges();
}
}
protected internal override void RenderContents(HtmlTextWriter writer) {
if (Page != null) {
Page.VerifyRenderingInServerForm(this);
}
// HACK: Need this for child controls to be created at design-time when control is inside template
EnsureChildControls();
string[] propertyDisplayNames = new string[] {
SR.GetString(SR.BehaviorEditorPart_Description),
SR.GetString(SR.BehaviorEditorPart_TitleLink),
SR.GetString(SR.BehaviorEditorPart_TitleIconImageLink),
SR.GetString(SR.BehaviorEditorPart_CatalogIconImageLink),
SR.GetString(SR.BehaviorEditorPart_HelpLink),
SR.GetString(SR.BehaviorEditorPart_HelpMode),
SR.GetString(SR.BehaviorEditorPart_ImportErrorMessage),
SR.GetString(SR.BehaviorEditorPart_ExportMode),
SR.GetString(SR.BehaviorEditorPart_AuthorizationFilter),
SR.GetString(SR.BehaviorEditorPart_AllowClose),
SR.GetString(SR.BehaviorEditorPart_AllowConnect),
SR.GetString(SR.BehaviorEditorPart_AllowEdit),
SR.GetString(SR.BehaviorEditorPart_AllowHide),
SR.GetString(SR.BehaviorEditorPart_AllowMinimize),
SR.GetString(SR.BehaviorEditorPart_AllowZoneChange),
};
WebControl[] propertyEditors = new WebControl[] {
_description,
_titleUrl,
_titleIconImageUrl,
_catalogIconImageUrl,
_helpUrl,
_helpMode,
_importErrorMessage,
_exportMode,
_authorizationFilter,
_allowClose,
_allowConnect,
_allowEdit,
_allowHide,
_allowMinimize,
_allowZoneChange,
};
string[] errorMessages = new string[] {
_descriptionErrorMessage,
_titleUrlErrorMessage,
_titleIconImageUrlErrorMessage,
_catalogIconImageUrlErrorMessage,
_helpUrlErrorMessage,
_helpModeErrorMessage,
_importErrorMessageErrorMessage,
_exportModeErrorMessage,
_authorizationFilterErrorMessage,
_allowCloseErrorMessage,
_allowConnectErrorMessage,
_allowEditErrorMessage,
_allowHideErrorMessage,
_allowMinimizeErrorMessage,
_allowZoneChangeErrorMessage,
};
RenderPropertyEditors(writer, propertyDisplayNames, null /* propertyDescriptions */,
propertyEditors, errorMessages);
}
public override void SyncChanges() {
WebPart webPart = WebPartToEdit;
Debug.Assert(webPart != null);
if (webPart != null) {
bool allowLayoutChange = webPart.Zone.AllowLayoutChange;
EnsureChildControls();
_allowClose.Checked = webPart.AllowClose;
_allowClose.Enabled = allowLayoutChange;
_allowConnect.Checked = webPart.AllowConnect;
_allowHide.Checked = webPart.AllowHide;
_allowHide.Enabled = allowLayoutChange;
_allowMinimize.Checked = webPart.AllowMinimize;
_allowMinimize.Enabled = allowLayoutChange;
_allowZoneChange.Checked = webPart.AllowZoneChange;
_allowZoneChange.Enabled = allowLayoutChange;
TypeConverter exportModeConverter = TypeDescriptor.GetConverter(typeof(WebPartExportMode));
_exportMode.SelectedValue = exportModeConverter.ConvertToString(webPart.ExportMode);
TypeConverter helpModeConverter = TypeDescriptor.GetConverter(typeof(WebPartHelpMode));
_helpMode.SelectedValue = helpModeConverter.ConvertToString(webPart.HelpMode);
_description.Text = webPart.Description;
_titleUrl.Text = webPart.TitleUrl;
_titleIconImageUrl.Text = webPart.TitleIconImageUrl;
_catalogIconImageUrl.Text = webPart.CatalogIconImageUrl;
_helpUrl.Text = webPart.HelpUrl;
_importErrorMessage.Text = webPart.ImportErrorMessage;
_authorizationFilter.Text = webPart.AuthorizationFilter;
_allowEdit.Checked = webPart.AllowEdit;
}
}
}
}
|