334 lines
9.6 KiB
C#
334 lines
9.6 KiB
C#
///
|
|
/// Copyright (c) 2013-2015 Sensus Metering Systems
|
|
///
|
|
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 Config;
|
|
using Config.Entities;
|
|
using TBF.Resources;
|
|
|
|
namespace TBF.Forms
|
|
{
|
|
public partial class ResultsConfig : Form
|
|
{
|
|
/// <summary>
|
|
/// Required access rights to make changes with this form
|
|
/// </summary>
|
|
const Users.Grp.GID RequiredGroupMembership = Users.Grp.GID.Metrologists;
|
|
public TestsArrangement TestsArrangement;
|
|
public MetersArrangement MetersArrangement;
|
|
public int NrMetersInOneGroup;
|
|
|
|
public IList<Results.ItemSpec> currentlyAvailableItems;
|
|
public IList<Results.ItemSpec> RsltItems_Screen_SingleWM;
|
|
public IList<Results.ItemSpec> RsltItems_Screen_CombinedWM;
|
|
public IList<Results.ItemSpec> RsltItems_Screen_HeatM;
|
|
public IList<Results.ItemSpec> RsltItems_Printer_SingleWM;
|
|
public IList<Results.ItemSpec> RsltItems_Printer_CombinedWM;
|
|
public IList<Results.ItemSpec> RsltItems_Printer_HeatM;
|
|
|
|
MetersKind mtrsKind; /// false = single meter items, true = combined meter items
|
|
Device device; /// Screen, Printer or Disk
|
|
bool unlocked; /// true = changes enabled
|
|
|
|
public ResultsConfig(MetersKind mtrsKind)
|
|
{
|
|
InitializeComponent();
|
|
|
|
this.mtrsKind = mtrsKind;
|
|
device = Device.Screen;
|
|
unlocked = false;
|
|
cancelButton.Visible = false;
|
|
}
|
|
|
|
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;
|
|
nrMetersLabel.Text = Strings.Nr_meters_in_a_group;
|
|
groupBox1.Text = Strings.Water_Meter;
|
|
singleRadioButton.Text = Strings.SingleBtnText;
|
|
combinedRadioButton.Text = Strings.Compound;
|
|
groupBox2.Text = Strings.Device;
|
|
screenRadioButton.Text = Strings.ScreenBtnText;
|
|
printerRadioButton.Text = Strings.PrinterBtnText;
|
|
availableResultsLabel.Text = Strings.Available_results;
|
|
selectedResultsLabel.Text = Strings.Selected_results;
|
|
addButton.Text = Strings.Add;
|
|
removeButton.Text = Strings.Remove;
|
|
removeAllButton.Text = Strings.Remove_all;
|
|
unlockButton.Text = Strings.UnlockBtnText;
|
|
okButton.Text = Strings.CloseBtnText;
|
|
cancelButton.Text = Strings.CancelBtnText;
|
|
}
|
|
|
|
void ResultsConfig_Load(object sender, EventArgs e)
|
|
{
|
|
Localize();
|
|
|
|
singleRadioButton.Checked = (mtrsKind == MetersKind.Single);
|
|
combinedRadioButton.Checked = (mtrsKind == MetersKind.Combined);
|
|
heatRadioButton.Checked = (mtrsKind == MetersKind.HeatMeter);
|
|
|
|
testsRowsRadioButton.Checked = (TestsArrangement == TestsArrangement.Rows);
|
|
testsColumnsRadioButton.Checked = (TestsArrangement == TestsArrangement.Columns);
|
|
|
|
horizontallyRadioButton.Checked = (MetersArrangement == MetersArrangement.Horizontally);
|
|
verticallyRadioButton.Checked = (MetersArrangement == MetersArrangement.Vertically);
|
|
nrMetersTextBox.Text = NrMetersInOneGroup.ToString();
|
|
|
|
RedrawAvailable();
|
|
RedrawSelected();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the list of selected items based on watermeter type and device selections
|
|
/// </summary>
|
|
/// <returns>List of selected result items</returns>
|
|
IList<Results.ItemSpec> GetSelectedItems()
|
|
{
|
|
if (mtrsKind == MetersKind.Combined)
|
|
{
|
|
switch (device)
|
|
{
|
|
default:
|
|
case Device.Screen: return RsltItems_Screen_CombinedWM;
|
|
case Device.Printer: return RsltItems_Printer_CombinedWM;
|
|
}
|
|
}
|
|
else if (mtrsKind == MetersKind.Single)
|
|
{
|
|
switch (device)
|
|
{
|
|
default:
|
|
case Device.Screen: return RsltItems_Screen_SingleWM;
|
|
case Device.Printer: return RsltItems_Printer_SingleWM;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
switch (device)
|
|
{
|
|
default:
|
|
case Device.Screen: return RsltItems_Screen_HeatM;
|
|
case Device.Printer: return RsltItems_Printer_HeatM;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Redraw selected items (right hand side)
|
|
/// </summary>
|
|
void RedrawAvailable()
|
|
{
|
|
availableResultsListBox.Items.Clear();
|
|
currentlyAvailableItems = new List<Results.ItemSpec>();
|
|
foreach (var item in Results.ItemSpec.AllItems)
|
|
{
|
|
if (!GetSelectedItems().Contains(item) &&
|
|
((mtrsKind == MetersKind.Single && item.CanPrintSingle) ||
|
|
(mtrsKind == MetersKind.Combined && item.CanPrintCompoundMeter) ||
|
|
(mtrsKind == MetersKind.HeatMeter && item.CanPrintHeatMeter)))
|
|
{
|
|
currentlyAvailableItems.Add(item);
|
|
availableResultsListBox.Items.Add(item.ClmnHeaderText);
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Redraw selected items (right hand side)
|
|
/// </summary>
|
|
void RedrawSelected()
|
|
{
|
|
selectedResultsListBox.Items.Clear();
|
|
foreach (var item in GetSelectedItems())
|
|
{
|
|
selectedResultsListBox.Items.Add(item.ClmnHeaderText);
|
|
}
|
|
}
|
|
|
|
void unlockButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (!unlocked)
|
|
{
|
|
if (!Users.GlobalData.CurrentUser.IsMemberOf(RequiredGroupMembership))
|
|
{
|
|
if ((new Users.Forms.LoginDlg(RequiredGroupMembership)).ShowDialog() != DialogResult.OK)
|
|
return;
|
|
}
|
|
else if (Program.LocalSettings.AlwaysAskPasswdWhenUnlocking)
|
|
{
|
|
if ((new Users.Forms.LoginDlg(Users.GlobalData.CurrentUser.UserName, RequiredGroupMembership)).ShowDialog() != DialogResult.OK)
|
|
return;
|
|
}
|
|
|
|
if (Program.MainWnd != null) Program.MainWnd.UpdateUser();
|
|
|
|
unlocked = true;
|
|
|
|
///
|
|
/// Unlock user interface controls
|
|
///
|
|
unlockButton.Enabled = false;
|
|
okButton.Text = Strings.OkBtnText;
|
|
cancelButton.Visible = true;
|
|
testsRowsRadioButton.Enabled = true;
|
|
testsColumnsRadioButton.Enabled = true;
|
|
verticallyRadioButton.Enabled = true;
|
|
horizontallyRadioButton.Enabled = true;
|
|
availableResultsListBox.Enabled = true;
|
|
selectedResultsListBox.Enabled = true;
|
|
addButton.Enabled = true;
|
|
removeButton.Enabled = true;
|
|
removeAllButton.Enabled = true;
|
|
}
|
|
}
|
|
|
|
void okButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (testsColumnsRadioButton.Checked) TestsArrangement = TestsArrangement.Columns;
|
|
else TestsArrangement = TestsArrangement.Rows;
|
|
|
|
if (horizontallyRadioButton.Checked) MetersArrangement = MetersArrangement.Horizontally;
|
|
else MetersArrangement = MetersArrangement.Vertically;
|
|
|
|
int nrInGroup;
|
|
if (int.TryParse(nrMetersTextBox.Text, out nrInGroup) && nrInGroup > 0)
|
|
{
|
|
NrMetersInOneGroup = nrInGroup;
|
|
}
|
|
|
|
DialogResult = DialogResult.OK;
|
|
Close();
|
|
}
|
|
|
|
void availableResultsListBox_DoubleClick(object sender, EventArgs e)
|
|
{
|
|
/// Double click works when just one item is selected
|
|
IList<Results.ItemSpec> itemsToRemove = new List<Results.ItemSpec>();
|
|
if (availableResultsListBox.SelectedIndices.Count == 1)
|
|
{
|
|
var item = currentlyAvailableItems[availableResultsListBox.SelectedIndices[0]];
|
|
GetSelectedItems().Add(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 = currentlyAvailableItems[availableResultsListBox.SelectedIndices[i]];
|
|
GetSelectedItems().Add(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)
|
|
{
|
|
GetSelectedItems().RemoveAt(selectedResultsListBox.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 = selectedResultsListBox.SelectedIndices.Count - 1; i >= 0; i--)
|
|
{
|
|
GetSelectedItems().RemoveAt(selectedResultsListBox.SelectedIndices[i]);
|
|
}
|
|
RedrawAvailable();
|
|
RedrawSelected();
|
|
}
|
|
|
|
void removeAllButton_Click(object sender, EventArgs e)
|
|
{
|
|
/// Remove all items from 'Selected' list
|
|
|
|
GetSelectedItems().Clear();
|
|
RedrawAvailable();
|
|
RedrawSelected();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get 'mtrsKind' value from radio buttons
|
|
/// </summary>
|
|
/// <returns>true on 'mtrsKind' change</returns>
|
|
private bool GetMtrsKindFromRadioButtons()
|
|
{
|
|
MetersKind ori = mtrsKind;
|
|
|
|
if (singleRadioButton.Checked) mtrsKind = MetersKind.Single;
|
|
else if (combinedRadioButton.Checked) mtrsKind = MetersKind.Combined;
|
|
else if (heatRadioButton.Checked) mtrsKind = MetersKind.HeatMeter;
|
|
|
|
return (mtrsKind != ori);
|
|
}
|
|
|
|
private void singleRadioButton_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (GetMtrsKindFromRadioButtons())
|
|
{
|
|
RedrawAvailable();
|
|
RedrawSelected();
|
|
}
|
|
}
|
|
|
|
private void combinedRadioButton_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (GetMtrsKindFromRadioButtons())
|
|
{
|
|
RedrawAvailable();
|
|
RedrawSelected();
|
|
}
|
|
}
|
|
|
|
private void heatRadioButton_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (GetMtrsKindFromRadioButtons())
|
|
{
|
|
RedrawAvailable();
|
|
RedrawSelected();
|
|
}
|
|
}
|
|
|
|
private void screenRadioButton_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (screenRadioButton.Checked) device = Device.Screen;
|
|
RedrawAvailable();
|
|
RedrawSelected();
|
|
}
|
|
|
|
private void printerRadioButton_CheckedChanged(object sender, EventArgs e)
|
|
{
|
|
if (printerRadioButton.Checked) device = Device.Printer;
|
|
RedrawAvailable();
|
|
RedrawSelected();
|
|
}
|
|
}
|
|
}
|