//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // //------------------------------------------------------------------------------ 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; /// /// The Items page for the List control. /// /// [ 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; } } } /// /// Internal object used to store all items properties /// [ 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; /// /// internal ItemTreeNode(String itemText) : base(itemText) { this._runtimeItem = new MobileListItem(); this._value = null; this._selected = false; } /// /// 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; } } } } }