using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using TBF.Resources; namespace TBF.Forms { public partial class ResultsConfig : Form { /// Arrangement of tests public enum TestsAre { Rows, Columns, } public TestsAre TestsArrangement; /// Arrangement of meters public enum Meters { Vertically, Horizontally, } public Meters MetersArrangement; /// Results items to be selected in the configuration public enum ResultsItem { Abc, Def, Count } // public IList AvailableItems; public IList SelectedItems; public ResultsConfig() { InitializeComponent(); SelectedItems = new List(); AvailableItems = GetListOfAvailableItems(); } void Localize() { Text = Strings.Configuration; testsArangementGroupBox.Text = Strings.Arrangement_of_tests; metersArangementGroupBox.Text = Strings.Arrangement_of_meters; testsRowsRadioButton.Text = Strings.Tests_are_rows; testsColumnsRadioButton.Text = Strings.Tests_are_columns; horizontallyRadioButton.Text = Strings.Horizontally; verticallyRadioButton.Text = Strings.Vertically; availableResultsLabel.Text = Strings.Available_results; selectedResultsLabel.Text = Strings.Selected_results; addButton.Text = Strings.Add; removeButton.Text = Strings.Remove; removeAllButton.Text = Strings.Remove_all; okButton.Text = Strings.OkBtnText; cancelButton.Text = Strings.CancelBtnText; } void ResultsConfig_Load(object sender, EventArgs e) { Localize(); testsRowsRadioButton.Checked = (TestsArrangement == TestsAre.Rows); testsColumnsRadioButton.Checked = (TestsArrangement == TestsAre.Columns); horizontallyRadioButton.Checked = (MetersArrangement == Meters.Horizontally); verticallyRadioButton.Checked = (MetersArrangement == Meters.Vertically); RedrawAvailable(); RedrawSelected(); } /// /// Create a list of available items from the complete list from 'auxBrdUpgInfo' /// and the list of selected items. In this way the order of items in the created list /// is always the same as in the original list in 'auxBrdUpgInfo'. /// /// A list of available items which does not contain the selected items IList GetListOfAvailableItems() { IList availableItems = new List(); for (ResultsItem item = 0; item < ResultsItem.Count; item++) { if (!SelectedItems.Contains(item)) availableItems.Add(item); } return availableItems; } /// /// Redraw selected items (right hand side) /// void RedrawAvailable() { availableResultsListBox.Items.Clear(); foreach (var item in AvailableItems) availableResultsListBox.Items.Add(item.ToString()); } /// /// Redraw selected items (right hand side) /// void RedrawSelected() { selectedResultsListBox.Items.Clear(); foreach (var item in SelectedItems) selectedResultsListBox.Items.Add(item.ToString()); } void okButton_Click(object sender, EventArgs e) { if (testsColumnsRadioButton.Checked) TestsArrangement = TestsAre.Columns; else TestsArrangement = TestsAre.Rows; if (horizontallyRadioButton.Checked) MetersArrangement = Meters.Horizontally; else MetersArrangement = Meters.Vertically; DialogResult = DialogResult.OK; Close(); } private void availableResultsListBox_DoubleClick(object sender, EventArgs e) { /// Double click works when just one item is selected IList itemsToRemove = new List(); if (availableResultsListBox.SelectedIndices.Count == 1) { var item = AvailableItems[availableResultsListBox.SelectedIndices[0]]; SelectedItems.Add(item); AvailableItems.Remove(item); RedrawAvailable(); RedrawSelected(); } } void addButton_Click(object sender, EventArgs e) { /// Append at the end, this code supports multiple selected items, /// although ListBox control settings may limit the max.number of selected items to one. for (int i = availableResultsListBox.SelectedIndices.Count - 1; i >= 0; i--) { var item = AvailableItems[availableResultsListBox.SelectedIndices[i]]; SelectedItems.Add(item); AvailableItems.Remove(item); } RedrawAvailable(); RedrawSelected(); } private void selectedResultsListBox_DoubleClick(object sender, EventArgs e) { /// Double click works when just one item is selected if (selectedResultsListBox.SelectedIndices.Count == 1) { SelectedItems.RemoveAt(selectedResultsListBox.SelectedIndices[0]); AvailableItems = GetListOfAvailableItems(); RedrawAvailable(); RedrawSelected(); } } void removeButton_Click(object sender, EventArgs e) { /// Remove from the list (the last selected item first so that the indexes are not affected) for (int i = selectedResultsListBox.SelectedIndices.Count - 1; i >= 0; i--) { ResultsItem item = SelectedItems[selectedResultsListBox.SelectedIndices[i]]; SelectedItems.Remove(item); } AvailableItems = GetListOfAvailableItems(); RedrawAvailable(); RedrawSelected(); } void removeAllButton_Click(object sender, EventArgs e) { /// Remove all items from 'Selected' list SelectedItems.Clear(); AvailableItems = GetListOfAvailableItems(); RedrawAvailable(); RedrawSelected(); } } }