tbf/TestBenchFramework/Forms/ResultsConfig.cs
2014-07-28 09:56:40 +02:00

196 lines
5.4 KiB
C#

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
{
Hovno,
Makove,
Count
}
//
public IList<ResultsItem> AvailableItems;
public IList<ResultsItem> SelectedItems;
public ResultsConfig()
{
InitializeComponent();
SelectedItems = new List<ResultsItem>();
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();
}
/// <summary>
/// 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'.
/// </summary>
/// <returns>A list of available items which does not contain the selected items</returns>
IList<ResultsItem> GetListOfAvailableItems()
{
IList<ResultsItem> availableItems = new List<ResultsItem>();
for (ResultsItem item = 0; item < ResultsItem.Count; item++)
{
if (!SelectedItems.Contains(item)) availableItems.Add(item);
}
return availableItems;
}
/// <summary>
/// Redraw selected items (right hand side)
/// </summary>
void RedrawAvailable()
{
availableResultsListBox.Items.Clear();
foreach (var item in AvailableItems) availableResultsListBox.Items.Add(item.ToString());
}
/// <summary>
/// Redraw selected items (right hand side)
/// </summary>
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<ResultsItem> itemsToRemove = new List<ResultsItem>();
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();
}
}
}