2018-01-26 12:55:32 +00:00
|
|
|
|
///
|
|
|
|
|
|
/// Copyright (c) 2016 Sensus Metering Systems
|
|
|
|
|
|
///
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
using log4net;
|
2022-01-23 12:58:54 +00:00
|
|
|
|
using Common.Forms;
|
2018-08-28 07:28:58 +00:00
|
|
|
|
using TracingDB.Entities;
|
|
|
|
|
|
using TracingDB.Resources;
|
2018-01-26 12:55:32 +00:00
|
|
|
|
|
2018-08-28 07:28:58 +00:00
|
|
|
|
namespace TracingDB.Forms
|
2018-01-26 12:55:32 +00:00
|
|
|
|
{
|
|
|
|
|
|
public partial class ResultsConfigDlg : Form
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// ListViewEx columns
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
enum Column
|
|
|
|
|
|
{
|
|
|
|
|
|
Item,
|
|
|
|
|
|
Caption,
|
|
|
|
|
|
Format,
|
|
|
|
|
|
Precision,
|
|
|
|
|
|
Width,
|
|
|
|
|
|
Count,
|
|
|
|
|
|
}
|
|
|
|
|
|
Control[] editors;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public IList<ItemSpec> AvailableItems;
|
|
|
|
|
|
public IList<ItemSpec> SelectedItems;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public bool Compound; /// false = single meter items, true = combined meter items
|
|
|
|
|
|
|
|
|
|
|
|
public ResultsConfigDlg()
|
|
|
|
|
|
{
|
|
|
|
|
|
InitializeComponent();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void Localize()
|
|
|
|
|
|
{
|
|
|
|
|
|
Text = Strings.Configuration;
|
|
|
|
|
|
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;
|
|
|
|
|
|
upButton.Text = Strings.UpBtnText;
|
|
|
|
|
|
downButton.Text = Strings.DownBtnText;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void ResultsConfig_Load(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
Localize();
|
|
|
|
|
|
|
|
|
|
|
|
/// Add columns to ListViewEx
|
|
|
|
|
|
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Item, Width = 120 });
|
|
|
|
|
|
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Caption });
|
|
|
|
|
|
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Format });
|
|
|
|
|
|
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Precision });
|
|
|
|
|
|
selectedResultsListViewEx.Columns.Add(new ColumnHeader { Text = Strings.Width });
|
|
|
|
|
|
|
|
|
|
|
|
editors = new Control[]
|
|
|
|
|
|
{
|
|
|
|
|
|
null,
|
|
|
|
|
|
new TextBox(),
|
|
|
|
|
|
new TextBox(),
|
|
|
|
|
|
new TextBox(),
|
|
|
|
|
|
new TextBox(),
|
|
|
|
|
|
};
|
|
|
|
|
|
foreach (var edi in editors)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (edi != null)
|
|
|
|
|
|
{
|
|
|
|
|
|
edi.Visible = false;
|
|
|
|
|
|
Controls.Add(edi);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
selectedResultsListViewEx.SubItemClicked += new SubItemEventHandler(selectedResultsListViewEx_SubItemClicked);
|
|
|
|
|
|
selectedResultsListViewEx.SubItemEndEditing += new SubItemEndEditingEventHandler(selectedResultsListViewEx_SubItemEndEditing);
|
|
|
|
|
|
|
|
|
|
|
|
RedrawAvailable();
|
|
|
|
|
|
RedrawSelected();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void selectedResultsListViewEx_SubItemClicked(object sender, SubItemEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if ((e.SubItem > 0) && (e.SubItem < (int)Column.Count))
|
|
|
|
|
|
{
|
|
|
|
|
|
selectedResultsListViewEx.StartEditing(editors[e.SubItem], e.Item, e.SubItem);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void selectedResultsListViewEx_SubItemEndEditing(object sender, SubItemEndEditingEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
ListViewItem lvi = e.Item;
|
|
|
|
|
|
ItemSpec item = lvi.Tag as ItemSpec;
|
|
|
|
|
|
|
|
|
|
|
|
switch ((Column)e.SubItem)
|
|
|
|
|
|
{
|
|
|
|
|
|
case Column.Caption: item.Caption = e.DisplayText; return;
|
|
|
|
|
|
case Column.Format: item.Format = e.DisplayText; return;
|
|
|
|
|
|
case Column.Precision: item.Precision = e.DisplayText; return;
|
|
|
|
|
|
|
|
|
|
|
|
case Column.Width:
|
|
|
|
|
|
{
|
|
|
|
|
|
int width;
|
|
|
|
|
|
if (Int32.TryParse(editors[e.SubItem].Text, out width) && width >= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
item.Width = width;
|
|
|
|
|
|
return; /// OK
|
|
|
|
|
|
}
|
|
|
|
|
|
break; /// Error
|
|
|
|
|
|
}
|
|
|
|
|
|
default:
|
|
|
|
|
|
return; /// OK
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
e.DisplayText = e.Item.SubItems[e.SubItem].Text;
|
|
|
|
|
|
e.Cancel = true;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Redraw selected items (right hand side)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
void RedrawAvailable()
|
|
|
|
|
|
{
|
|
|
|
|
|
availableResultsListBox.Items.Clear();
|
|
|
|
|
|
AvailableItems = new List<ItemSpec>();
|
|
|
|
|
|
foreach (var item in ItemSpec.AllItems)
|
|
|
|
|
|
{
|
|
|
|
|
|
AvailableItems.Add(item);
|
|
|
|
|
|
availableResultsListBox.Items.Add(item.Name);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Redraw selected items (right hand side)
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
void RedrawSelected()
|
|
|
|
|
|
{
|
|
|
|
|
|
selectedResultsListViewEx.Items.Clear();
|
|
|
|
|
|
foreach (var item in SelectedItems)
|
|
|
|
|
|
{
|
|
|
|
|
|
ListViewItem lvi = new ListViewItem(item.Name); /// Item
|
|
|
|
|
|
lvi.Tag = item;
|
|
|
|
|
|
lvi.SubItems.Add(item.Caption); /// Header
|
|
|
|
|
|
lvi.SubItems.Add(item.Format); /// Format
|
|
|
|
|
|
lvi.SubItems.Add(item.Precision); /// Precision
|
|
|
|
|
|
lvi.SubItems.Add(item.Width.ToString()); /// Width
|
|
|
|
|
|
|
|
|
|
|
|
selectedResultsListViewEx.Items.Add(lvi);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void UpdateSelectedFromView()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void availableResultsListBox_DoubleClick(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Double click works when just one item is selected
|
|
|
|
|
|
if (availableResultsListBox.SelectedIndices.Count == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
var oriItem = AvailableItems[availableResultsListBox.SelectedIndices[0]];
|
|
|
|
|
|
SelectedItems.Add(oriItem.Clone());
|
|
|
|
|
|
RedrawAvailable();
|
|
|
|
|
|
RedrawSelected();
|
|
|
|
|
|
|
|
|
|
|
|
/// Select the last item
|
|
|
|
|
|
selectedResultsListViewEx.Focus();
|
|
|
|
|
|
selectedResultsListViewEx.Items[SelectedItems.Count - 1].Selected = true;
|
|
|
|
|
|
selectedResultsListViewEx.Items[SelectedItems.Count - 1].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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 oriItem = AvailableItems[availableResultsListBox.SelectedIndices[i]];
|
|
|
|
|
|
SelectedItems.Add(oriItem.Clone());
|
|
|
|
|
|
}
|
|
|
|
|
|
RedrawAvailable();
|
|
|
|
|
|
RedrawSelected();
|
|
|
|
|
|
|
|
|
|
|
|
/// Select the last item
|
|
|
|
|
|
selectedResultsListViewEx.Focus();
|
|
|
|
|
|
selectedResultsListViewEx.Items[SelectedItems.Count - 1].Selected = true;
|
|
|
|
|
|
selectedResultsListViewEx.Items[SelectedItems.Count - 1].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void selectedResultsListBox_DoubleClick(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Double click works when just one item is selected
|
|
|
|
|
|
|
|
|
|
|
|
if (selectedResultsListViewEx.SelectedIndices.Count == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
SelectedItems.RemoveAt(selectedResultsListViewEx.SelectedIndices[0]);
|
|
|
|
|
|
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 = selectedResultsListViewEx.SelectedIndices.Count - 1; i >= 0; i--)
|
|
|
|
|
|
{
|
|
|
|
|
|
SelectedItems.RemoveAt(selectedResultsListViewEx.SelectedIndices[i]);
|
|
|
|
|
|
}
|
|
|
|
|
|
RedrawAvailable();
|
|
|
|
|
|
RedrawSelected();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void removeAllButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Remove all items from 'Selected' list
|
|
|
|
|
|
|
|
|
|
|
|
SelectedItems.Clear();
|
|
|
|
|
|
RedrawAvailable();
|
|
|
|
|
|
RedrawSelected();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void okButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DialogResult = DialogResult.OK;
|
|
|
|
|
|
Close();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void ResultsConfigDlg_KeyPress(object sender, KeyPressEventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
e.Handled = true;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void upButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (selectedResultsListViewEx.SelectedIndices.Count != 1) return;
|
|
|
|
|
|
|
|
|
|
|
|
int selIdx = selectedResultsListViewEx.SelectedIndices[0];
|
|
|
|
|
|
if (selIdx == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Cannot move up
|
|
|
|
|
|
selectedResultsListViewEx.Focus();
|
|
|
|
|
|
selectedResultsListViewEx.Items[0].Selected = true;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ItemSpec tmp = SelectedItems[selIdx - 1];
|
|
|
|
|
|
SelectedItems[selIdx - 1] = SelectedItems[selIdx];
|
|
|
|
|
|
SelectedItems[selIdx] = tmp;
|
|
|
|
|
|
|
|
|
|
|
|
RedrawSelected();
|
|
|
|
|
|
|
|
|
|
|
|
selectedResultsListViewEx.Focus();
|
|
|
|
|
|
selectedResultsListViewEx.Items[selIdx - 1].Selected = true;
|
|
|
|
|
|
selectedResultsListViewEx.Items[selIdx - 1].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void downButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (selectedResultsListViewEx.SelectedIndices.Count != 1) return;
|
|
|
|
|
|
|
|
|
|
|
|
int selIdx = selectedResultsListViewEx.SelectedIndices[0];
|
|
|
|
|
|
if (selIdx == SelectedItems.Count - 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
/// Cannot move down
|
|
|
|
|
|
selectedResultsListViewEx.Focus();
|
|
|
|
|
|
selectedResultsListViewEx.Items[SelectedItems.Count - 1].Selected = true;
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
ItemSpec tmp = SelectedItems[selIdx + 1];
|
|
|
|
|
|
SelectedItems[selIdx + 1] = SelectedItems[selIdx];
|
|
|
|
|
|
SelectedItems[selIdx] = tmp;
|
|
|
|
|
|
|
|
|
|
|
|
RedrawSelected();
|
|
|
|
|
|
|
|
|
|
|
|
selectedResultsListViewEx.Focus();
|
|
|
|
|
|
selectedResultsListViewEx.Items[selIdx + 1].Selected = true;
|
|
|
|
|
|
selectedResultsListViewEx.Items[selIdx + 1].EnsureVisible();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void cancelButton_Click(object sender, EventArgs e)
|
|
|
|
|
|
{
|
|
|
|
|
|
DialogResult = DialogResult.Cancel;
|
|
|
|
|
|
Close();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|