Develop - GciBridge -> GCI -> PreadjustmentUI functions

This commit is contained in:
2026-05-18 19:20:10 +02:00
parent ad2bfd3639
commit ad208f9633
20 changed files with 1771 additions and 305 deletions
@@ -1,4 +1,5 @@
using CordonelPreadjustmentUi.Processes;
using CordonelPreadjustmentUi;
using CordonelPreadjustmentUi.Processes;
using CordonelPreadjustmentUi.Processes.Actions;
using CordonelPreadjustmentUi.Processes.Itinerary;
using System;
@@ -6,16 +7,18 @@ using System.Collections.Generic;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore;
using Xylem.Common.Hardware.WaterMeter.WaterMeterCore.Consts;
using Xylem.Common.Logic.ProductionOrderCore.OrderData;
using Xylem.Common.Ui.CordonelPreadjustmentUi;
using Xylem.Common.Ui.CordonelPreadjustmentUi.Parameters;
using CordonelPreadjustmentUi;
using static Xylem.Common.Hardware.WaterMeter.Genesis.GenesisCore.GenesisMeter;
namespace GenesisCordonelInterface.UI
{
@@ -41,11 +44,18 @@ namespace GenesisCordonelInterface.UI
private Boolean abortIndicator = false;
public Boolean AbortIndicator { get { return abortIndicator; } set { abortIndicator = value; } }
public int TestRunNumber;
public PreAdjustmentControl(PreAdjustmentSettingsContainer Settings = null)
public PreAdjustmentControl(PreAdjustmentSettingsContainer Settings = null, MeterBatch externalMetersBatch = null)//...MF
{
InitializeComponent();
SetSettings(Settings);
rTB_ZeroFlowCal.AutoSize = true;
//...MF
// Use external batch only if supplied
if (externalMetersBatch != null)
{
GlobalMeterBatch = externalMetersBatch;
}
}
public void SetSettings(PreAdjustmentSettingsContainer Settings = null)
{
@@ -120,6 +130,49 @@ namespace GenesisCordonelInterface.UI
}
cb_Metersize.SelectedItem = setM;
//...MF
// Create UI controls for configured meter slots.
//
// Flow:
//
// settings.Meters
// ↓
// create MeterStateControl
// ↓
// position control in UI
// ↓
// check whether slot exists in externally supplied MeterBatch
// ↓
// automatically enable corresponding checkbox
// ↓
// register UI events
// ↓
// add control into internal collection and group box
//
// Notes:
// - allows external GCI workflow to preselect meters
// - keeps UI synchronized with externally injected MeterBatch
// - slots contained in GlobalMeterBatch are automatically checked
//
foreach (var Meter in settings.Meters)
{
var ctl = new MeterStateControl(Meter);
ctl.Location = new Point(5 + ((tmpI - 1) * ctl.Width), 15);
// Check meter if it exists in external MeterBatch
if (GlobalMeterBatch != null &&
GlobalMeterBatch.ListOfMeters != null &&
GlobalMeterBatch.ListOfMeters.Any(m => m.Slot == Meter))
{
ctl.SetChecked(true);
}
MeterStateCtls.Add(ctl);
gB_Meters.Controls.Add(ctl);
ctl.OnRequestDetails += Ctl_MouseEnter;
tmpI = tmpI + 1;
}
}
}
@@ -1694,13 +1747,46 @@ namespace GenesisCordonelInterface.UI
List<IProcess> listOfProgrammParts = new List<IProcess>();
//...MF
bool requiresInternalLoginFlow = true;
requiresInternalLoginFlow =
GlobalMeterBatch.ListOfMeters.All(
m =>
{
var meter = m as GenesisMeter;
return meter == null ||
meter.usePasswordSource !=
PasswordSource.InterfaceInputPassword;
});
listOfProgrammParts.Add(new PrepareTestProcess("PrepareTest", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, string.Empty, string.Empty, 1 * 60));
//...MF
bool requiresInternalConfigFlow = true;
requiresInternalConfigFlow =
GlobalMeterBatch.ListOfMeters.All(
m =>
{
var meter = m as GenesisMeter;
listOfProgrammParts.Add(new LoginProcess("Login", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, PredefinedMessages.WaitUntilLoginFinished(pp.Setting.Culture), PredefinedMessages.LoginFailed(pp.Setting.Culture), 1 * 60));
return meter == null ||
meter.useConfigSource !=
ConfigSource.InterfaceInputConfig;
});
listOfProgrammParts.Add(new FlushProcess("First Flush", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, PredefinedMessages.WaitUntilFlushFinished(pp.Setting.Culture), string.Empty, 2 * 60));
if (requiresInternalConfigFlow)//...MF
{
listOfProgrammParts.Add(new PrepareTestProcess("PrepareTest", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, string.Empty, string.Empty, 1 * 60));
}
if (requiresInternalLoginFlow)//...MF
{
listOfProgrammParts.Add(new LoginProcess("Login", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, PredefinedMessages.WaitUntilLoginFinished(pp.Setting.Culture), PredefinedMessages.LoginFailed(pp.Setting.Culture), 1 * 60));
}
if (requiresInternalConfigFlow)//...MF
{
listOfProgrammParts.Add(new FlushProcess("First Flush", CordonelPreadjustmentUi.PreAdjustmentControl.StatusPanelItems.Detect, PredefinedMessages.WaitUntilFlushFinished(pp.Setting.Culture), string.Empty, 2 * 60));
}
//listOfProgrammParts.Add(new PressureTestProcess("PreussureTest", StatusPanelItems.Prepare, PredefinedMessages.WaitUntilPreparationFinished(pp.Setting.Culture), PredefinedMessages.PreparationFailed(pp.Setting.Culture), 1 * 60));