431 lines
15 KiB
C#
431 lines
15 KiB
C#
//------------------------------------------------------------------------------
|
|
// <copyright file="ObjectListFieldsPage.cs" company="Microsoft">
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
//------------------------------------------------------------------------------
|
|
|
|
namespace System.Web.UI.Design.MobileControls
|
|
{
|
|
using System;
|
|
using System.Collections;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.Design;
|
|
using System.Diagnostics;
|
|
using System.Drawing;
|
|
using System.Web.UI.MobileControls;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.Design;
|
|
using System.Web.UI.Design.MobileControls.Util;
|
|
|
|
using DesignTimeData = System.Web.UI.Design.DesignTimeData;
|
|
using Button = System.Windows.Forms.Button;
|
|
using Label = System.Windows.Forms.Label;
|
|
using ComboBox = System.Windows.Forms.ComboBox;
|
|
using TextBox = System.Windows.Forms.TextBox;
|
|
|
|
/// <summary>
|
|
/// The Choices page for the StyleSheet control.
|
|
/// </summary>
|
|
/// <internalonly/>
|
|
[
|
|
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 sealed class ObjectListFieldsPage : ListComponentEditorPage
|
|
{
|
|
private CheckBox _ckbAutoGenerateFields;
|
|
private CheckBox _ckbVisible;
|
|
private TextBox _txtDataFormatString;
|
|
private TextBox _txtTitle;
|
|
private UnsettableComboBox _cmbDataField;
|
|
private ObjectList _objectList;
|
|
|
|
public ObjectListFieldsPage()
|
|
{
|
|
Y = 52;
|
|
CaseSensitive = false;
|
|
TreeViewTitle = SR.GetString(SR.ObjectListFieldsPage_FieldNameCaption);
|
|
AddButtonTitle = SR.GetString(SR.ObjectListFieldsPage_NewFieldBtnCaption);
|
|
DefaultName = SR.GetString(SR.ObjectListFieldsPage_DefaultFieldName);
|
|
MessageTitle = SR.GetString(SR.ObjectListFieldsPage_ErrorMessageTitle);
|
|
EmptyNameMessage = SR.GetString(SR.ObjectListFieldsPage_EmptyNameError);
|
|
// DuplicateNameMessage = SR.GetString(SR.ObjectListFieldsPage_DuplicateNameError);
|
|
}
|
|
|
|
protected override String HelpKeyword
|
|
{
|
|
get
|
|
{
|
|
return "net.Mobile.ObjectListProperties.Fields";
|
|
}
|
|
}
|
|
|
|
protected override void InitForm()
|
|
{
|
|
base.InitForm();
|
|
|
|
this._objectList = (ObjectList)Component;
|
|
|
|
this.CommitOnDeactivate = true;
|
|
this.Icon = new Icon(
|
|
typeof(System.Web.UI.Design.MobileControls.MobileControlDesigner),
|
|
"Fields.ico"
|
|
);
|
|
this.Size = new Size(402, 300);
|
|
this.Text = SR.GetString(SR.ObjectListFieldsPage_Title);
|
|
|
|
_ckbAutoGenerateFields = new CheckBox();
|
|
_cmbDataField = new UnsettableComboBox();
|
|
_ckbVisible = new CheckBox();
|
|
_txtDataFormatString = new TextBox();
|
|
_txtTitle = new TextBox();
|
|
|
|
_ckbAutoGenerateFields.SetBounds(4, 4, 396, LabelHeight);
|
|
_ckbAutoGenerateFields.Text = SR.GetString(SR.ObjectListFieldsPage_AutoGenerateFieldsCaption);
|
|
_ckbAutoGenerateFields.FlatStyle = FlatStyle.System;
|
|
_ckbAutoGenerateFields.CheckedChanged += new EventHandler(this.OnSetPageDirty);
|
|
_ckbAutoGenerateFields.TabIndex = 0;
|
|
|
|
GroupLabel grplblFieldList = new GroupLabel();
|
|
grplblFieldList.SetBounds(4, 32, 392, LabelHeight);
|
|
grplblFieldList.Text = SR.GetString(SR.ObjectListFieldsPage_FieldListGroupLabel);
|
|
grplblFieldList.TabIndex = 1;
|
|
grplblFieldList.TabStop = false;
|
|
|
|
TreeList.TabIndex = 2;
|
|
|
|
Label lblDataField = new Label();
|
|
lblDataField.SetBounds(X, Y, ControlWidth, LabelHeight);
|
|
lblDataField.Text = SR.GetString(SR.ObjectListFieldsPage_DataFieldCaption);
|
|
lblDataField.TabStop = false;
|
|
lblDataField.TabIndex = Index;
|
|
|
|
Y += LabelHeight;
|
|
_cmbDataField.SetBounds(X, Y, ControlWidth, CmbHeight);
|
|
_cmbDataField.DropDownStyle = ComboBoxStyle.DropDown;
|
|
_cmbDataField.Sorted = true;
|
|
_cmbDataField.NotSetText = SR.GetString(SR.ObjectListFieldsPage_NoneComboEntry);
|
|
_cmbDataField.TextChanged += new EventHandler(this.OnPropertyChanged);
|
|
_cmbDataField.SelectedIndexChanged += new EventHandler(this.OnPropertyChanged);
|
|
_cmbDataField.TabIndex = Index + 1;
|
|
|
|
Y += CellSpace;
|
|
Label lblDataFormatString = new Label();
|
|
lblDataFormatString.SetBounds(X, Y, ControlWidth, LabelHeight);
|
|
lblDataFormatString.Text = SR.GetString(SR.ObjectListFieldsPage_DataFormatStringCaption);
|
|
lblDataFormatString.TabStop = false;
|
|
lblDataFormatString.TabIndex = Index + 2;
|
|
|
|
Y += LabelHeight;
|
|
_txtDataFormatString.SetBounds(X, Y, ControlWidth, CmbHeight);
|
|
_txtDataFormatString.TextChanged += new EventHandler(this.OnPropertyChanged);
|
|
_txtDataFormatString.TabIndex = Index + 3;
|
|
|
|
Y += CellSpace;
|
|
Label lblTitle = new Label();
|
|
lblTitle.SetBounds(X, Y, ControlWidth, LabelHeight);
|
|
lblTitle.Text = SR.GetString(SR.ObjectListFieldsPage_TitleCaption);
|
|
lblTitle.TabStop = false;
|
|
lblTitle.TabIndex = Index + 4;
|
|
|
|
Y += LabelHeight;
|
|
_txtTitle.SetBounds(X, Y, ControlWidth, CmbHeight);
|
|
_txtTitle.TextChanged += new EventHandler(this.OnPropertyChanged);
|
|
_txtTitle.TabIndex = Index + 5;
|
|
|
|
Y += CellSpace;
|
|
_ckbVisible.SetBounds(X, Y, ControlWidth, CmbHeight);
|
|
_ckbVisible.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
|
_ckbVisible.Text = SR.GetString(SR.ObjectListFieldsPage_VisibleCaption);
|
|
_ckbVisible.CheckedChanged += new EventHandler(this.OnPropertyChanged);
|
|
_ckbVisible.TabIndex = Index + 6;
|
|
|
|
this.Controls.AddRange(new Control[] {
|
|
_ckbAutoGenerateFields,
|
|
grplblFieldList,
|
|
lblDataField,
|
|
_cmbDataField,
|
|
lblDataFormatString,
|
|
_txtDataFormatString,
|
|
lblTitle,
|
|
_txtTitle,
|
|
_ckbVisible
|
|
});
|
|
}
|
|
|
|
protected override void InitPage()
|
|
{
|
|
base.InitPage();
|
|
|
|
_cmbDataField.Items.Clear();
|
|
_cmbDataField.SelectedIndex = -1;
|
|
_cmbDataField.EnsureNotSetItem();
|
|
_txtDataFormatString.Text = String.Empty;
|
|
_txtTitle.Text = String.Empty;
|
|
_ckbVisible.Checked = true;
|
|
_ckbAutoGenerateFields.Checked = _objectList.AutoGenerateFields;
|
|
|
|
LoadDataSourceFields();
|
|
}
|
|
|
|
private void LoadDataSourceFields()
|
|
{
|
|
using (new LoadingModeResource(this))
|
|
{
|
|
PropertyDescriptorCollection props = null;
|
|
ObjectListDesigner objectListDesigner = (ObjectListDesigner)GetBaseDesigner();
|
|
|
|
IEnumerable dataSource = ((IDataSourceProvider)objectListDesigner).GetResolvedSelectedDataSource();
|
|
if (dataSource != null)
|
|
{
|
|
props = DesignTimeData.GetDataFields(dataSource);
|
|
}
|
|
|
|
if (props != null)
|
|
{
|
|
foreach (PropertyDescriptor propDesc in props)
|
|
{
|
|
_cmbDataField.Items.Add(propDesc.Name);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void LoadItems()
|
|
{
|
|
using (new LoadingModeResource(this))
|
|
{
|
|
foreach (ObjectListField field in _objectList.Fields)
|
|
{
|
|
FieldTreeNode newNode = new FieldTreeNode(field.Name, field);
|
|
TreeList.TvList.Nodes.Add(newNode);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void LoadItemProperties()
|
|
{
|
|
using (new LoadingModeResource(this))
|
|
{
|
|
if (CurrentNode != null)
|
|
{
|
|
FieldTreeNode currentFieldNode = (FieldTreeNode)CurrentNode;
|
|
|
|
_cmbDataField.Text = currentFieldNode.DataField;
|
|
_txtDataFormatString.Text = currentFieldNode.DataFormatString;
|
|
_txtTitle.Text = currentFieldNode.Title;
|
|
_ckbVisible.Checked = currentFieldNode.Visible;
|
|
}
|
|
else
|
|
{
|
|
_cmbDataField.Text = String.Empty;
|
|
_txtDataFormatString.Text = String.Empty;
|
|
_txtTitle.Text = String.Empty;
|
|
_ckbVisible.Checked = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnSetPageDirty(Object source, EventArgs e)
|
|
{
|
|
if (IsLoading())
|
|
{
|
|
return;
|
|
}
|
|
SetDirty();
|
|
}
|
|
|
|
protected override void OnClickAddButton(Object source, EventArgs e)
|
|
{
|
|
if (IsLoading())
|
|
{
|
|
return;
|
|
}
|
|
|
|
FieldTreeNode newNode = new FieldTreeNode(GetNewName());
|
|
TreeList.TvList.Nodes.Add(newNode);
|
|
|
|
TreeList.TvList.SelectedNode = newNode;
|
|
CurrentNode = newNode;
|
|
newNode.Dirty = true;
|
|
newNode.BeginEdit();
|
|
|
|
LoadItemProperties();
|
|
|
|
SetDirty();
|
|
}
|
|
|
|
protected override void OnPropertyChanged(Object source, EventArgs e)
|
|
{
|
|
if (IsLoading())
|
|
{
|
|
return;
|
|
}
|
|
|
|
// This means there are no fields yet. Do nothing
|
|
if (CurrentNode == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
FieldTreeNode currentFieldNode = (FieldTreeNode)CurrentNode;
|
|
|
|
if (source == _cmbDataField)
|
|
{
|
|
currentFieldNode.DataField = _cmbDataField.Text;
|
|
}
|
|
else if (source == _txtDataFormatString)
|
|
{
|
|
currentFieldNode.DataFormatString = _txtDataFormatString.Text;
|
|
}
|
|
else if (source == _txtTitle)
|
|
{
|
|
currentFieldNode.Title = _txtTitle.Text;
|
|
}
|
|
else if (source == _ckbVisible)
|
|
{
|
|
currentFieldNode.Visible = _ckbVisible.Checked;
|
|
}
|
|
|
|
SetDirty();
|
|
CurrentNode.Dirty = true;
|
|
}
|
|
|
|
protected override void SaveComponent()
|
|
{
|
|
// Delegate to base implementation first!
|
|
// This will properly close ListTreeNode editing mode.
|
|
base.SaveComponent();
|
|
|
|
_objectList.Fields.Clear();
|
|
|
|
foreach (FieldTreeNode fieldNode in TreeList.TvList.Nodes)
|
|
{
|
|
if (fieldNode.Dirty)
|
|
{
|
|
fieldNode.RuntimeField.Name = fieldNode.Name;
|
|
fieldNode.RuntimeField.DataField = fieldNode.DataField;
|
|
fieldNode.RuntimeField.DataFormatString = fieldNode.DataFormatString;
|
|
fieldNode.RuntimeField.Title = fieldNode.Title;
|
|
fieldNode.RuntimeField.Visible = fieldNode.Visible;
|
|
}
|
|
|
|
Debug.Assert(fieldNode.RuntimeField != null);
|
|
_objectList.Fields.AddAt(-1, fieldNode.RuntimeField);
|
|
}
|
|
|
|
_objectList.AutoGenerateFields = _ckbAutoGenerateFields.Checked;
|
|
|
|
TypeDescriptor.Refresh(_objectList);
|
|
}
|
|
|
|
protected override void UpdateControlsEnabling()
|
|
{
|
|
TreeList.TvList.Enabled =
|
|
_cmbDataField.Enabled =
|
|
_txtDataFormatString.Enabled =
|
|
_txtTitle.Enabled =
|
|
_ckbVisible.Enabled = (TreeList.TvList.SelectedNode != null);
|
|
}
|
|
|
|
[
|
|
System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
|
|
Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
|
|
]
|
|
private class FieldTreeNode : ListTreeNode
|
|
{
|
|
private ObjectListField _runtimeField;
|
|
|
|
private String _dataField;
|
|
private String _dataFormatString;
|
|
private String _title;
|
|
private bool _visible;
|
|
|
|
internal FieldTreeNode(String fieldID) : this(fieldID, new ObjectListField())
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
internal FieldTreeNode(String fieldID, ObjectListField runtimeField) : base(fieldID)
|
|
{
|
|
Debug.Assert(fieldID != null, "invalid ID for ObjectListField");
|
|
Debug.Assert(runtimeField != null, "null ObjectListField");
|
|
|
|
this._runtimeField = runtimeField;
|
|
|
|
LoadAttributes();
|
|
}
|
|
|
|
private void LoadAttributes()
|
|
{
|
|
this.DataField = RuntimeField.DataField;
|
|
this.DataFormatString = RuntimeField.DataFormatString;
|
|
this.Title = RuntimeField.Title;
|
|
this.Visible = RuntimeField.Visible;
|
|
}
|
|
|
|
internal ObjectListField RuntimeField
|
|
{
|
|
get
|
|
{
|
|
return _runtimeField;
|
|
}
|
|
}
|
|
|
|
internal String DataField
|
|
{
|
|
get
|
|
{
|
|
return _dataField;
|
|
}
|
|
|
|
set
|
|
{
|
|
_dataField = value;
|
|
}
|
|
}
|
|
|
|
internal String DataFormatString
|
|
{
|
|
get
|
|
{
|
|
return _dataFormatString;
|
|
}
|
|
|
|
set
|
|
{
|
|
_dataFormatString = value;
|
|
}
|
|
}
|
|
|
|
internal String Title
|
|
{
|
|
get
|
|
{
|
|
return _title;
|
|
}
|
|
|
|
set
|
|
{
|
|
_title = value;
|
|
}
|
|
}
|
|
|
|
internal bool Visible
|
|
{
|
|
get
|
|
{
|
|
return _visible;
|
|
}
|
|
|
|
set
|
|
{
|
|
_visible = value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|