405 lines
13 KiB
C#
405 lines
13 KiB
C#
|
//------------------------------------------------------------------------------
|
||
|
// <copyright file="ListItemsPage.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.Windows.Forms;
|
||
|
using System.Windows.Forms.Design;
|
||
|
// using System.Web.UI.Design.Util;
|
||
|
|
||
|
using System.Web.UI.MobileControls;
|
||
|
using System.Web.UI.Design.MobileControls.Util;
|
||
|
|
||
|
using Button = System.Windows.Forms.Button;
|
||
|
using Label = System.Windows.Forms.Label;
|
||
|
using TextBox = System.Windows.Forms.TextBox;
|
||
|
using CheckBox = System.Windows.Forms.CheckBox;
|
||
|
using TreeView = System.Windows.Forms.TreeView;
|
||
|
|
||
|
/// <summary>
|
||
|
/// The Items page for the List 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 ListItemsPage : ListComponentEditorPage
|
||
|
{
|
||
|
private IListDesigner _listDesigner;
|
||
|
private CheckBox _itemsAsLinksCheckBox;
|
||
|
private TextBox _txtValue;
|
||
|
private CheckBox _ckbSelected;
|
||
|
private bool _isBaseControlList;
|
||
|
|
||
|
public ListItemsPage()
|
||
|
{
|
||
|
TreeViewTitle = SR.GetString(SR.ListItemsPage_ItemCaption);
|
||
|
AddButtonTitle = SR.GetString(SR.ListItemsPage_NewItemCaption);
|
||
|
DefaultName = SR.GetString(SR.ListItemsPage_DefaultItemText);
|
||
|
}
|
||
|
|
||
|
protected override String HelpKeyword
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
if (_isBaseControlList)
|
||
|
{
|
||
|
return "net.Mobile.ListProperties.Items";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
return "net.Mobile.SelectionListProperties.Items";
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected override bool FilterIllegalName()
|
||
|
{
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
protected override String GetNewName()
|
||
|
{
|
||
|
return SR.GetString(SR.ListItemsPage_DefaultItemText);
|
||
|
}
|
||
|
|
||
|
protected override void InitForm()
|
||
|
{
|
||
|
Debug.Assert(GetBaseControl() != null);
|
||
|
_isBaseControlList = (GetBaseControl() is List);
|
||
|
this._listDesigner = (IListDesigner)GetBaseDesigner();
|
||
|
|
||
|
Y = (_isBaseControlList ? 52 : 24);
|
||
|
|
||
|
base.InitForm();
|
||
|
|
||
|
this.Text = SR.GetString(SR.ListItemsPage_Title);
|
||
|
this.CommitOnDeactivate = true;
|
||
|
this.Icon = new Icon(
|
||
|
typeof(System.Web.UI.Design.MobileControls.MobileControlDesigner),
|
||
|
"Items.ico"
|
||
|
);
|
||
|
this.Size = new Size(382, 220);
|
||
|
|
||
|
if (_isBaseControlList)
|
||
|
{
|
||
|
_itemsAsLinksCheckBox = new CheckBox();
|
||
|
_itemsAsLinksCheckBox.SetBounds(4, 4, 370, 16);
|
||
|
_itemsAsLinksCheckBox.Text = SR.GetString(SR.ListItemsPage_ItemsAsLinksCaption);
|
||
|
_itemsAsLinksCheckBox.FlatStyle = FlatStyle.System;
|
||
|
_itemsAsLinksCheckBox.CheckedChanged += new EventHandler(this.OnSetPageDirty);
|
||
|
_itemsAsLinksCheckBox.TabIndex = 0;
|
||
|
}
|
||
|
|
||
|
GroupLabel grplblItemList = new GroupLabel();
|
||
|
grplblItemList.SetBounds(4, _isBaseControlList ? 32 : 4, 372, LabelHeight);
|
||
|
grplblItemList.Text = SR.GetString(SR.ListItemsPage_ItemListGroupLabel);
|
||
|
grplblItemList.TabIndex = 1;
|
||
|
grplblItemList.TabStop = false;
|
||
|
|
||
|
TreeList.TabIndex = 2;
|
||
|
|
||
|
Label lblValue = new Label();
|
||
|
lblValue.SetBounds(X, Y, 134, LabelHeight);
|
||
|
lblValue.Text = SR.GetString(SR.ListItemsPage_ItemValueCaption);
|
||
|
lblValue.TabStop = false;
|
||
|
lblValue.TabIndex = Index;
|
||
|
|
||
|
Y += LabelHeight;
|
||
|
_txtValue = new TextBox();
|
||
|
_txtValue.SetBounds(X, Y, 134, CmbHeight);
|
||
|
_txtValue.TextChanged += new EventHandler(this.OnPropertyChanged);
|
||
|
_txtValue.TabIndex = Index + 1;
|
||
|
|
||
|
this.Controls.AddRange(new Control[]
|
||
|
{
|
||
|
grplblItemList,
|
||
|
lblValue,
|
||
|
_txtValue
|
||
|
});
|
||
|
|
||
|
if (_isBaseControlList)
|
||
|
{
|
||
|
this.Controls.Add(_itemsAsLinksCheckBox);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Y += CellSpace;
|
||
|
_ckbSelected = new CheckBox();
|
||
|
_ckbSelected.SetBounds(X, Y, 134, LabelHeight);
|
||
|
_ckbSelected.FlatStyle = System.Windows.Forms.FlatStyle.System;
|
||
|
_ckbSelected.Text = SR.GetString(SR.ListItemsPage_ItemSelectedCaption);
|
||
|
_ckbSelected.CheckedChanged += new EventHandler(this.OnPropertyChanged);
|
||
|
_ckbSelected.TabIndex = Index + 2;
|
||
|
this.Controls.Add(_ckbSelected);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected override void InitPage()
|
||
|
{
|
||
|
base.InitPage();
|
||
|
|
||
|
if (_isBaseControlList)
|
||
|
{
|
||
|
List list = (List)GetBaseControl();
|
||
|
_itemsAsLinksCheckBox.Checked = list.ItemsAsLinks;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_ckbSelected.Checked = false;
|
||
|
}
|
||
|
_txtValue.Text = String.Empty;
|
||
|
}
|
||
|
|
||
|
protected override void LoadItems()
|
||
|
{
|
||
|
using (new LoadingModeResource(this))
|
||
|
{
|
||
|
foreach (MobileListItem item in _listDesigner.Items)
|
||
|
{
|
||
|
ItemTreeNode newNode = new ItemTreeNode(item);
|
||
|
TreeList.TvList.Nodes.Add(newNode);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected override void LoadItemProperties()
|
||
|
{
|
||
|
using (new LoadingModeResource(this))
|
||
|
{
|
||
|
if (CurrentNode != null)
|
||
|
{
|
||
|
ItemTreeNode currentItemNode = (ItemTreeNode)CurrentNode;
|
||
|
_txtValue.Text = currentItemNode.Value;
|
||
|
if (!_isBaseControlList)
|
||
|
{
|
||
|
_ckbSelected.Checked = currentItemNode.Selected;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_txtValue.Text = String.Empty;
|
||
|
if (!_isBaseControlList)
|
||
|
{
|
||
|
_ckbSelected.Checked = false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected override void OnAfterLabelEdit(Object source, NodeLabelEditEventArgs e)
|
||
|
{
|
||
|
base.OnAfterLabelEdit(source, e);
|
||
|
|
||
|
if (!((ItemTreeNode)CurrentNode).ValueSet)
|
||
|
{
|
||
|
_txtValue.Text = ((ItemTreeNode)CurrentNode).Value = CurrentNode.Name;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected override void OnClickAddButton(Object source, EventArgs e)
|
||
|
{
|
||
|
if (IsLoading())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
ItemTreeNode newNode = new ItemTreeNode(GetNewName());
|
||
|
TreeList.TvList.Nodes.Add(newNode);
|
||
|
|
||
|
TreeList.TvList.SelectedNode = newNode;
|
||
|
CurrentNode = newNode;
|
||
|
newNode.Dirty = true;
|
||
|
newNode.BeginEdit();
|
||
|
|
||
|
LoadItemProperties();
|
||
|
|
||
|
SetDirty();
|
||
|
}
|
||
|
|
||
|
private void OnSetPageDirty(Object source, EventArgs e)
|
||
|
{
|
||
|
if (IsLoading())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
SetDirty();
|
||
|
}
|
||
|
|
||
|
protected override void OnPropertyChanged(Object source, EventArgs e)
|
||
|
{
|
||
|
// This means there are no fields yet. Do nothing
|
||
|
if (CurrentNode == null || IsLoading())
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (source is TextBox)
|
||
|
{
|
||
|
((ItemTreeNode)CurrentNode).Value = _txtValue.Text;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Debug.Assert(!_isBaseControlList);
|
||
|
((ItemTreeNode)CurrentNode).Selected = _ckbSelected.Checked;
|
||
|
}
|
||
|
|
||
|
SetDirty();
|
||
|
CurrentNode.Dirty = true;
|
||
|
}
|
||
|
|
||
|
protected override void SaveComponent()
|
||
|
{
|
||
|
// Delegate to base implementation first!
|
||
|
// This will properly close ListTreeNode editing mode.
|
||
|
base.SaveComponent();
|
||
|
|
||
|
_listDesigner.Items.Clear();
|
||
|
|
||
|
foreach (ItemTreeNode itemNode in TreeList.TvList.Nodes)
|
||
|
{
|
||
|
if (itemNode.Dirty)
|
||
|
{
|
||
|
itemNode.RuntimeItem.Text = itemNode.Text;
|
||
|
itemNode.RuntimeItem.Value = itemNode.Value;
|
||
|
if (!_isBaseControlList)
|
||
|
{
|
||
|
itemNode.RuntimeItem.Selected = itemNode.Selected;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_listDesigner.Items.Add(itemNode.RuntimeItem);
|
||
|
}
|
||
|
|
||
|
if (_isBaseControlList)
|
||
|
{
|
||
|
List list = (List)GetBaseControl();
|
||
|
list.ItemsAsLinks = _itemsAsLinksCheckBox.Checked;
|
||
|
TypeDescriptor.Refresh(list);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
SelectionList selectionList = (SelectionList)GetBaseControl();
|
||
|
TypeDescriptor.Refresh(selectionList);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
protected override void UpdateControlsEnabling()
|
||
|
{
|
||
|
if (TreeList.TvList.SelectedNode == null)
|
||
|
{
|
||
|
TreeList.TvList.Enabled = _txtValue.Enabled = false;
|
||
|
_txtValue.Text = String.Empty;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
TreeList.TvList.Enabled = _txtValue.Enabled = true;
|
||
|
}
|
||
|
|
||
|
if (!_isBaseControlList)
|
||
|
{
|
||
|
SelectionList selectionListControl = (SelectionList) GetBaseControl();
|
||
|
if (TreeList.TvList.SelectedNode == null)
|
||
|
{
|
||
|
_ckbSelected.Enabled = false;
|
||
|
_ckbSelected.Checked = false;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
_ckbSelected.Enabled = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Internal object used to store all items properties
|
||
|
/// </summary>
|
||
|
[
|
||
|
System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand,
|
||
|
Flags=System.Security.Permissions.SecurityPermissionFlag.UnmanagedCode)
|
||
|
]
|
||
|
private class ItemTreeNode : ListTreeNode
|
||
|
{
|
||
|
private MobileListItem _runtimeItem;
|
||
|
private String _value;
|
||
|
private bool _selected;
|
||
|
private bool _valueSet = false;
|
||
|
|
||
|
/// <summary>
|
||
|
/// </summary>
|
||
|
internal ItemTreeNode(String itemText) : base(itemText)
|
||
|
{
|
||
|
this._runtimeItem = new MobileListItem();
|
||
|
this._value = null;
|
||
|
this._selected = false;
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// </summary>
|
||
|
internal ItemTreeNode(MobileListItem runtimeItem) : base(runtimeItem.Text)
|
||
|
{
|
||
|
Debug.Assert(runtimeItem != null, "runtimeItem is null");
|
||
|
|
||
|
_valueSet = true;
|
||
|
this._runtimeItem = runtimeItem;
|
||
|
this._value = _runtimeItem.Value;
|
||
|
this._selected = _runtimeItem.Selected;
|
||
|
}
|
||
|
|
||
|
internal MobileListItem RuntimeItem
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return _runtimeItem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal String Value
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return _value;
|
||
|
}
|
||
|
|
||
|
set
|
||
|
{
|
||
|
_value = value;
|
||
|
_valueSet = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal bool Selected
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return _selected;
|
||
|
}
|
||
|
|
||
|
set
|
||
|
{
|
||
|
_selected = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal bool ValueSet
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return _valueSet;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|