common/Production/ProductionUiCordonel/UserControls/UcRadioCheck.xaml.cs
2026-04-23 17:50:07 +02:00

174 lines
6.9 KiB
C#

using System;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Threading;
using Color = System.Drawing.Color;
namespace Xylem.Common.Production.ProductionUiCordonel.UserControls
{
/// <summary>
/// Interaction logic for UcRadioCheck.xaml
/// </summary>
public partial class UcRadioCheck : IUserControl
{
public class UiContainerElement
{
public Int32? Value;
public Color Color;
public UiContainerElement(Int32? value)
{
Value = value;
Color = !value.HasValue ? Color.LightYellow : Color.Transparent;
}
public String GetText()
{
return Value.HasValue ? Value.Value.ToString() : "-";
}
}
public class UiContainer
{
public readonly UiContainerElement rssiPamSirtDbMin;
public readonly UiContainerElement rssiSemiCordonelDbMin;
public readonly UiContainerElement rssiPamSirt;
public readonly UiContainerElement rssiSemiCordonel;
public readonly UiContainerElement rssiPamSirtDbMax;
public readonly UiContainerElement rssiSemiCordonelDbMax;
public UiContainer(Int32? rssiPamSirtDbMin = null, Int32? rssiSemiCordonelDbMin = null, Int32? rssiPamSirt = null,
Int32? rssiSemiCordonel = null, Int32? rssiPamSirtDbMax = null, Int32? rssiSemiCordonelDbMax = null)
{
this.rssiPamSirtDbMin = new UiContainerElement(rssiPamSirtDbMin);
this.rssiSemiCordonelDbMin = new UiContainerElement(rssiSemiCordonelDbMin);
this.rssiPamSirt = new UiContainerElement(rssiPamSirt);
this.rssiSemiCordonel = new UiContainerElement(rssiSemiCordonel);
this.rssiPamSirtDbMax = new UiContainerElement(rssiPamSirtDbMax);
this.rssiSemiCordonelDbMax = new UiContainerElement(rssiSemiCordonelDbMax);
//only when results from semi are present
if (this.rssiPamSirt.Value.HasValue && this.rssiSemiCordonel.Value.HasValue)
{
Boolean success = true;
if (!this.rssiPamSirtDbMin.Value.HasValue || this.rssiPamSirt.Value.Value < this.rssiPamSirtDbMin.Value.Value)
{
success = false;
this.rssiPamSirtDbMin.Color = Color.Tomato;
this.rssiPamSirt.Color = Color.White;
}
if (!this.rssiSemiCordonelDbMin.Value.HasValue || this.rssiSemiCordonel.Value.Value < this.rssiSemiCordonelDbMin.Value.Value)
{
success = false;
this.rssiSemiCordonelDbMin.Color = Color.Tomato;
this.rssiSemiCordonel.Color = Color.White;
}
if (!this.rssiPamSirtDbMax.Value.HasValue || this.rssiPamSirt.Value.Value > this.rssiPamSirtDbMax.Value.Value)
{
success = false;
this.rssiPamSirtDbMax.Color = Color.Tomato;
this.rssiPamSirt.Color = Color.White;
}
if (!this.rssiSemiCordonelDbMax.Value.HasValue || this.rssiSemiCordonel.Value.Value > this.rssiSemiCordonelDbMax.Value.Value)
{
success = false;
this.rssiSemiCordonelDbMax.Color = Color.Tomato;
this.rssiSemiCordonel.Color = Color.White;
}
if (success)
{
this.rssiPamSirt.Color = Color.LightGreen;
this.rssiSemiCordonel.Color = Color.LightGreen;
}
}
}
}
public void SetUi(UiContainer uiContainer)
{
Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
setLbl(lblRssiPamSirtDbMin, uiContainer.rssiPamSirtDbMin);
setLbl(lblRssiSemiCordonelDbMin, uiContainer.rssiSemiCordonelDbMin);
setLbl(lblRssiPamSirt, uiContainer.rssiPamSirt);
setLbl(lblRssiSemiCordonel, uiContainer.rssiSemiCordonel);
setLbl(lblRssiPamSirtDbMax, uiContainer.rssiPamSirtDbMax);
setLbl(lblRssiSemiCordonelDbMax, uiContainer.rssiSemiCordonelDbMax);
}
));
}
private void setLbl(Label lbl, UiContainerElement element)
{
lbl.Content = element.GetText();
lbl.Background =
new SolidColorBrush(System.Windows.Media.Color.FromArgb(element.Color.A, element.Color.R, element.Color.G,
element.Color.B));
}
public event EventHandler OnResetRequested;
public event EventHandler OnDoneRequested;
public UcRadioCheck()
{
InitializeComponent();
lblHeadLine.Content = Properties.Resources.StrLblRadioCheck;
//btnSkip.Content = Properties.Resources.StrBtnSkip;
btnRetry.Content = Properties.Resources.StrBtnRetry;
}
public void Clear()
{
var uiContainer = new UiContainer();
Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
setLbl(lblRssiPamSirtDbMin, uiContainer.rssiPamSirtDbMin);
setLbl(lblRssiSemiCordonelDbMin, uiContainer.rssiSemiCordonelDbMin);
setLbl(lblRssiPamSirt, uiContainer.rssiPamSirt);
setLbl(lblRssiSemiCordonel, uiContainer.rssiSemiCordonel);
setLbl(lblRssiPamSirtDbMax, uiContainer.rssiPamSirtDbMax);
setLbl(lblRssiSemiCordonelDbMax, uiContainer.rssiSemiCordonelDbMax);
}
));
}
private void btnReset_Click(Object sender, RoutedEventArgs e)
{
Clear();
Task.Run(() => { OnResetRequested?.Invoke(sender, e); });
}
private void BtnSkip_Click(Object sender, RoutedEventArgs e)
{
Task.Run(() => { OnDoneRequested?.Invoke(sender, e); });
}
/// <summary>
/// Interaction logic for UcDialog.xaml
/// </summary>
/// <remarks date="2024-Aug-31" author="Thomas Wiedebusch">
/// - Initial
/// </remarks>
internal void SetHeadline(String message)
{
lblHeadLine.Dispatcher.Invoke(DispatcherPriority.Send,
new Action(() =>
{
lblHeadLine.Content = message;
}));
}
}
}