//------------------------------------------------------------------------------ // // 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.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; /// /// The Choices page for the StyleSheet 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 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()) { } /// /// 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; } } } } }