//------------------------------------------------------------------------------ // // Copyright (c) Microsoft Corporation. All rights reserved. // // // @owner Microsoft // @backupOwner Microsoft //------------------------------------------------------------------------------ using System.Collections.Generic; using System.Web.UI.Design.WebControls.Util; using System.Diagnostics; using System.Drawing; using System.Windows.Forms; namespace System.Web.UI.Design.WebControls { internal partial class EntityDataSourceDataSelectionPanel : WizardPanel { private EntityDataSourceDataSelection _dataSelection; private bool _ignoreEvents; // used when a control is set by the wizard, tells the event handlers to do nothing public EntityDataSourceDataSelectionPanel() { InitializeComponent(); InitializeUI(); InitializeTabIndexes(); } #region General Initialization public void Register(EntityDataSourceDataSelection dataSelection) { _dataSelection = dataSelection; } #endregion #region Control Initialization private void InitializeSizes() { int top = 0; _entitySetLabel.Location = new Point(9, top + 8); _entitySetLabel.Size = new Size(80, 13); top = _entitySetLabel.Bottom; _entitySetComboBox.Location = new Point(12, top + 3); _entitySetComboBox.Size = new Size(502, 21); top = _entitySetComboBox.Bottom; _entityTypeFilterLabel.Location = new Point(9, top + 6); _entityTypeFilterLabel.Size = new Size(118, 13); top = _entityTypeFilterLabel.Bottom; _entityTypeFilterComboBox.Location = new System.Drawing.Point(12, top + 3); _entityTypeFilterComboBox.Size = new System.Drawing.Size(502, 21); top = _entityTypeFilterComboBox.Bottom; _selectLabel.Location = new Point(9, top + 6); _selectLabel.Size = new Size(40, 13); top = _selectLabel.Bottom; _selectAdvancedTextBox.Location = new Point(12, top + 3); _selectAdvancedTextBox.Multiline = true; // set this here so the size will be set properly _selectAdvancedTextBox.Size = new Size(502, 137); // don't need to set top here because the next control has the same location and size _selectSimpleCheckedListBox.Location = _selectAdvancedTextBox.Location; _selectSimpleCheckedListBox.Size = _selectAdvancedTextBox.Size; _selectSimpleCheckedListBox.ColumnWidth = 225; top = _selectSimpleCheckedListBox.Bottom; _insertUpdateDeletePanel.Location = new Point(12, top + 3); _insertUpdateDeletePanel.Size = new Size(502, 69); top = 0; // position of rest of controls are relative to this panel _enableInsertCheckBox.Location = new Point(3, top + 3); _enableInsertCheckBox.Size = new Size(141, 17); top = _enableInsertCheckBox.Bottom; _enableUpdateCheckBox.Location = new Point(3, top + 6); _enableUpdateCheckBox.Size = new Size(149, 17); top = _enableUpdateCheckBox.Bottom; _enableDeleteCheckBox.Location = new Point(3, top + 6); _enableDeleteCheckBox.Size = new Size(145, 17); // if any controls are added, top should be reset to _insertUpdateDeletePanel.Bottom before adding them here } private void InitializeTabIndexes() { _entitySetLabel.TabStop = false; _entitySetComboBox.TabStop = true; _entityTypeFilterLabel.TabStop = false; _entityTypeFilterComboBox.TabStop = true; _selectLabel.TabStop = false; _selectSimpleCheckedListBox.TabStop = true; _selectAdvancedTextBox.TabStop = true; _insertUpdateDeletePanel.TabStop = false; _enableInsertCheckBox.TabStop = true; _enableDeleteCheckBox.TabStop = true; _enableUpdateCheckBox.TabStop = true; int tabIndex = 0; _entitySetLabel.TabIndex = tabIndex += 10; _entitySetComboBox.TabIndex = tabIndex += 10; _entityTypeFilterLabel.TabIndex = tabIndex += 10; _entityTypeFilterComboBox.TabIndex = tabIndex += 10; _selectLabel.TabIndex = tabIndex += 10; _selectSimpleCheckedListBox.TabIndex = tabIndex += 10; _selectAdvancedTextBox.TabIndex = tabIndex += 10; _insertUpdateDeletePanel.TabIndex = tabIndex += 10; _enableInsertCheckBox.TabIndex = tabIndex += 10; _enableUpdateCheckBox.TabIndex = tabIndex += 10; _enableDeleteCheckBox.TabIndex = tabIndex += 10; } private void InitializeUI() { _entitySetLabel.Text = Strings.Wizard_DataSelectionPanel_EntitySetName; _entitySetComboBox.AccessibleName = Strings.Wizard_DataSelectionPanel_EntitySetNameAccessibleName; _entityTypeFilterLabel.Text = Strings.Wizard_DataSelectionPanel_EntityTypeFilter; _entityTypeFilterComboBox.AccessibleName = Strings.Wizard_DataSelectionPanel_EntityTypeFilterAccessibleName; _selectLabel.Text = Strings.Wizard_DataSelectionPanel_Select; _selectSimpleCheckedListBox.AccessibleName = Strings.Wizard_DataSelectionPanel_SelectAccessibleName; _selectAdvancedTextBox.AccessibleName = Strings.Wizard_DataSelectionPanel_SelectAccessibleName; _enableInsertCheckBox.Text = Strings.Wizard_DataSelectionPanel_Insert; _enableInsertCheckBox.AccessibleName = Strings.Wizard_DataSelectionPanel_InsertAccessibleName; _enableDeleteCheckBox.Text = Strings.Wizard_DataSelectionPanel_Delete; _enableDeleteCheckBox.AccessibleName = Strings.Wizard_DataSelectionPanel_DeleteAccessibleName; _enableUpdateCheckBox.Text = Strings.Wizard_DataSelectionPanel_Update; _enableUpdateCheckBox.AccessibleName = Strings.Wizard_DataSelectionPanel_UpdateAccessibleName; this.Caption = Strings.Wizard_DataSelectionPanel_Caption; this.AccessibleName = Strings.Wizard_DataSelectionPanel_Caption; } #endregion #region Control Event Handlers private void OnEnableDeleteCheckBox_CheckedChanged(object sender, EventArgs e) { if (!_ignoreEvents) { _dataSelection.SelectEnableDelete(_enableDeleteCheckBox.Checked); // this property has no effect on the wizard, so don't need to update it } } private void OnEnableInsertCheckBox_CheckedChanged(object sender, EventArgs e) { if (!_ignoreEvents) { _dataSelection.SelectEnableInsert(_enableInsertCheckBox.Checked); // this property has no effect on the wizard, so don't need to update it } } private void OnEnableUpdateCheckBox_CheckedChanged(object sender, EventArgs e) { if (!_ignoreEvents) { _dataSelection.SelectEnableUpdate(_enableUpdateCheckBox.Checked); // this property has no effect on the wizard, so don't need to update it } } private void OnEntitySetComboBox_SelectedIndexChanged(object sender, EventArgs e) { if (!_ignoreEvents) { _dataSelection.SelectEntitySetName(_entitySetComboBox.SelectedItem as EntityDataSourceEntitySetNameItem); _dataSelection.UpdateWizardState(); } } private void OnEntityTypeFilterComboBox_SelectedIndexChanged(object sender, EventArgs e) { if (!_ignoreEvents) { _dataSelection.SelectEntityTypeFilter(_entityTypeFilterComboBox.SelectedItem as EntityDataSourceEntityTypeFilterItem); _dataSelection.UpdateWizardState(); } } private void OnSelectAdvancedTextBox_TextChanged(object sender, EventArgs e) { if (!_ignoreEvents) { _dataSelection.SelectAdvancedSelect(_selectAdvancedTextBox.Text); _dataSelection.UpdateWizardState(); } } private void OnSelectSimpleCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) { if (!_ignoreEvents) { if (e.NewValue == CheckState.Checked) { // if any other box is checked except 'Select All (Entity Value)', clear 'Select All (Entity Value)' if (e.Index != 0) { _selectSimpleCheckedListBox.SetItemChecked(0, false); _dataSelection.SelectEnableInsert(false); _dataSelection.SelectEnableUpdate(false); _dataSelection.SelectEnableDelete(false); } // if 'Select All (Entity Value)' is checked, uncheck all others else { // disable events while we bulk clear the selected items _ignoreEvents = true; // this event occurs before the check state is changed on the current selection, so it won't // uncheck the box that triggered this event foreach (int checkedIndex in _selectSimpleCheckedListBox.CheckedIndices) { _selectSimpleCheckedListBox.SetItemChecked(checkedIndex, false); } _ignoreEvents = false; _dataSelection.ClearAllSelectedProperties(); } // Add the current index to the list of selected properties in temporary state storage _dataSelection.SelectEntityProperty(e.Index); } else { // Remove the current index from the list of selected properties in temporary state storage. _dataSelection.DeselectEntityProperty(e.Index); } _dataSelection.UpdateInsertUpdateDeleteState(); // If there are no longer any properties checked at this point, the Finish button will be disabled _dataSelection.UpdateWizardState(); } } #endregion #region Wizard State Management protected override void OnVisibleChanged(EventArgs e) { base.OnVisibleChanged(e); if (Visible) { _dataSelection.UpdateWizardState(); } } #endregion #region Methods for setting control values public void SetEnableInsertUpdateDelete(bool enableInsert, bool enableUpdate, bool enableDelete) { _ignoreEvents = true; _enableInsertCheckBox.Checked = enableInsert; _enableUpdateCheckBox.Checked = enableUpdate; _enableDeleteCheckBox.Checked = enableDelete; _ignoreEvents = false; } public void SetEnableInsertUpdateDeletePanel(bool enablePanel) { _ignoreEvents = true; _insertUpdateDeletePanel.Enabled = enablePanel; _ignoreEvents = false; } public void SetEntitySetNames(List entitySetNames) { _ignoreEvents = true; _entitySetComboBox.Items.Clear(); _entitySetComboBox.Items.AddRange(entitySetNames.ToArray()); _ignoreEvents = false; } // Populates the CheckedListBox with the specified entityTypeProperties and checks all of the indexes specified in selectedEntityTypeProperties // Expects that 'Select All (Entity Value)' is in the list of properties already public void SetEntityTypeProperties(List entityTypeProperties, List selectedEntityTypeProperties) { Debug.Assert(entityTypeProperties != null && entityTypeProperties.Count > 0, "unexpected null or empty entityTypeProperties"); Debug.Assert(selectedEntityTypeProperties != null && selectedEntityTypeProperties.Count > 0, "unexpected null or empty selectedEntityTypeProperties"); _ignoreEvents = true; // remove any items currently in the list and replace them with the current list and selected properties _selectSimpleCheckedListBox.Items.Clear(); _selectSimpleCheckedListBox.Items.AddRange(entityTypeProperties.ToArray()); foreach (int entityProperty in selectedEntityTypeProperties) { // check all of the items in the list of selected properties _selectSimpleCheckedListBox.SetItemChecked(entityProperty, true); } // Update the controls _selectAdvancedTextBox.Visible = false; _selectSimpleCheckedListBox.Visible = true; _ignoreEvents = false; } public void SetEntityTypeFilters(List entityTypeFilters) { _ignoreEvents = true; _entityTypeFilterComboBox.Items.Clear(); _entityTypeFilterComboBox.Items.AddRange(entityTypeFilters.ToArray()); _ignoreEvents = false; } public void SetSelectedEntityTypeFilter(EntityDataSourceEntityTypeFilterItem selectedEntityTypeFilter) { Debug.Assert(selectedEntityTypeFilter != null, "cannot select null from EntityTypeFilter combobox"); _ignoreEvents = true; _entityTypeFilterComboBox.SelectedItem = selectedEntityTypeFilter; _ignoreEvents = false; } public void SetSelect(string select) { _ignoreEvents = true; _selectAdvancedTextBox.Text = select; _selectAdvancedTextBox.Visible = true; _selectSimpleCheckedListBox.Visible = false; _ignoreEvents = false; } public void SetSelectedEntitySetName(EntityDataSourceEntitySetNameItem selectedEntitySet) { _ignoreEvents = true; if (selectedEntitySet == null) { _entitySetComboBox.SelectedIndex = -1; } else { _entitySetComboBox.SelectedItem = selectedEntitySet; } _ignoreEvents = false; } #endregion } }