From 061e85ca6b55aa25f8b1bc26e1421e053e5269a7 Mon Sep 17 00:00:00 2001 From: Marek Frniak Date: Tue, 9 Jun 2026 08:53:54 +0200 Subject: [PATCH] Develop - GciBridge -> GCI -> PreadjustmentUI functions 6 - first successful processes - without CalibParams DB reader and CalibParams DB writer --- .../API/InterfaceGCIToLaatzen.cs | 9 +- .../API/InterfaceOutsideToGCI.cs | 6 + .../BridgeComponents/GciBridge/GciBridge.cs | 27 + .../GciBridge/UI/Debug/MeterGridManager.cs | 481 ++++++++++++++++++ .../PreadjustmentActionsView.Designer.cs | 80 ++- .../PreadjustmentActionsView.cs | 124 +++-- 6 files changed, 672 insertions(+), 55 deletions(-) create mode 100644 TBF/Rig/BridgeComponents/GciBridge/UI/Debug/MeterGridManager.cs diff --git a/GenesisCordonelInterface/API/InterfaceGCIToLaatzen.cs b/GenesisCordonelInterface/API/InterfaceGCIToLaatzen.cs index 4261caae6..5d0b8649a 100644 --- a/GenesisCordonelInterface/API/InterfaceGCIToLaatzen.cs +++ b/GenesisCordonelInterface/API/InterfaceGCIToLaatzen.cs @@ -1684,7 +1684,6 @@ namespace GenesisCordonelInterface.API { var ctl = new MeterStateControl(slot.Slot); - ctl.SetChecked(true); ctl.IsEnabled = true; controls.Add(ctl); @@ -2039,6 +2038,14 @@ namespace GenesisCordonelInterface.API } } + public bool PreAdjustment_PushTemperature(double temperature) + { + _progressProcess.PushedTestBenchTemp = temperature; + _progressProcess.TempretureSelected = true; + + return true; + } + /// /// Creates temperature calibration process instance based on current configuration. /// diff --git a/GenesisCordonelInterface/API/InterfaceOutsideToGCI.cs b/GenesisCordonelInterface/API/InterfaceOutsideToGCI.cs index 35e8033b7..33556bc07 100644 --- a/GenesisCordonelInterface/API/InterfaceOutsideToGCI.cs +++ b/GenesisCordonelInterface/API/InterfaceOutsideToGCI.cs @@ -620,6 +620,12 @@ namespace GenesisCordonelInterface.API return _innerMeterAPI.PreAdjustment_TemperatureCalibrationAsync(slot, token); } + public bool PreAdjustment_PushTemperature( + double temperature) + { + return _innerMeterAPI.PreAdjustment_PushTemperature(temperature); + } + public Task PreAdjustment_OffsetTestAsync( int slot, CancellationToken token = default) diff --git a/TBF/Rig/BridgeComponents/GciBridge/GciBridge.cs b/TBF/Rig/BridgeComponents/GciBridge/GciBridge.cs index 79473de67..d27516c06 100644 --- a/TBF/Rig/BridgeComponents/GciBridge/GciBridge.cs +++ b/TBF/Rig/BridgeComponents/GciBridge/GciBridge.cs @@ -1665,6 +1665,33 @@ namespace TBF.Rig.BridgeComponents.GciBridge } } + public bool PreAdjustment_PushTemperature( + double temperature) + { + const string operation = nameof(PreAdjustment_PushTemperature); + + try + { + EnsureExternalInterface(); + + log.InfoFormat( + "{0}: {1}. Temperature={2}", + Name, + operation, + temperature); + + return gciExternalInterface.PreAdjustment_PushTemperature(temperature); + } + catch (Exception ex) + { + log.Error( + string.Format("{0}: {1} failed.", Name, operation), + ex); + + return false; + } + } + #endregion #region ================================== PreAdjustment OFFSET TEST bridge ================================== diff --git a/TBF/Rig/BridgeComponents/GciBridge/UI/Debug/MeterGridManager.cs b/TBF/Rig/BridgeComponents/GciBridge/UI/Debug/MeterGridManager.cs new file mode 100644 index 000000000..451ab33fb --- /dev/null +++ b/TBF/Rig/BridgeComponents/GciBridge/UI/Debug/MeterGridManager.cs @@ -0,0 +1,481 @@ +using Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Windows.Forms; +using PublicModels = GenesisCordonelInterface.API.PublicModels; + +namespace TBF.Rig.BridgeComponents.GciBridge.UI.Grid +{ + public class MeterGridManager + { + private readonly DataGridView grid; + + public MeterGridManager(DataGridView grid) + { + this.grid = grid ?? throw new ArgumentNullException(nameof(grid)); + EnableDoubleBuffering(grid); + } + + public void Init(List comPorts) + { + grid.SuspendLayout(); + + try + { + grid.AutoGenerateColumns = false; + grid.Columns.Clear(); + + grid.AllowUserToAddRows = false; + grid.AllowUserToDeleteRows = false; + grid.RowHeadersVisible = true; + + CreateColumns(comPorts); + ConfigureReadOnlyColumns(); + ConfigureSelection(); + } + finally + { + grid.ResumeLayout(); + } + + grid.Focus(); + grid.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText; + } + + private void CreateColumns(List comPorts) + { + var configs = MeterGridConfigProvider + .GetDefault() + .OrderBy(x => x.DisplayIndex); + + foreach (var config in configs) + { + DataGridViewColumn column; + + switch (config.ColumnType) + { + case MeterGridConfigProvider.MeterGridColumnType.CheckBox: + column = new DataGridViewCheckBoxColumn(); + break; + + default: + column = new DataGridViewTextBoxColumn(); + break; + } + + column.Name = config.Name; + column.HeaderText = config.HeaderText; + column.Width = config.Width; + column.ReadOnly = config.ReadOnly; + column.DisplayIndex = config.DisplayIndex; + + grid.Columns.Add(column); + } + + grid.Columns.Add(CreateComPortColumn("RequestPort", "RequestPort", comPorts)); + grid.Columns.Add(CreateRequestPortTypeColumn()); + grid.Columns.Add(CreateComPortColumn("StreamingPort", "StreamingPort", comPorts)); + + grid.Columns.Add(CreateButtonColumn("DetectRequest", "DetectRequest", "...")); + grid.Columns.Add(CreateButtonColumn("DetectStreaming", "DetectStreaming", "...")); + } + + private void ConfigureReadOnlyColumns() + { + foreach (DataGridViewColumn col in grid.Columns) + { + col.ReadOnly = + col.Name != "Selected" && + col.Name != "RequestPort" && + col.Name != "RequestPortType" && + col.Name != "StreamingPort" && + col.Name != "DetectRequest" && + col.Name != "DetectStreaming"; + } + } + + private void ConfigureSelection() + { + grid.MultiSelect = true; + grid.SelectionMode = DataGridViewSelectionMode.FullRowSelect; + + grid.CellContentClick -= Grid_CellContentClick; + grid.CellContentClick += Grid_CellContentClick; + + grid.CurrentCellDirtyStateChanged -= Grid_CurrentCellDirtyStateChanged; + grid.CurrentCellDirtyStateChanged += Grid_CurrentCellDirtyStateChanged; + } + + public void UpdateComPortItems(List comPorts) + { + UpdateComPortColumnItems("RequestPort", comPorts); + UpdateComPortColumnItems("StreamingPort", comPorts); + } + + public void Update(List meters) + { + grid.SuspendLayout(); + + try + { + foreach (var meter in meters) + { + var row = FindOrCreateRow(meter.Slot); + + SetCell(row, "Slot", meter.Slot); + SetCell(row, "Selected", meter.Selected); + SetCell(row, "PcbId", meter.PcbId); + SetCell(row, "IsConnected", meter.IsConnected); + SetCell(row, "IsLoggedOn", meter.IsLoggedOn); + SetCell(row, "RequestPort", meter.RequestPort); + SetCell(row, "RequestPortType", NormalizeRequestPortType(meter.RequestPortType)); + SetCell(row, "StreamingPort", meter.StreamingPort); + SetCell(row, "FwVersion", meter.FwVersion); + SetCell(row, "InterfaceVersion", meter.InterfaceVersion); + } + } + finally + { + grid.ResumeLayout(); + } + } + + public void UpdateSlots(List slots) + { + grid.SuspendLayout(); + + try + { + foreach (var slot in slots) + { + var row = FindOrCreateRow(slot.SlotId); + + SetCell(row, "Slot", slot.SlotId); + SetCell(row, "PcbId", slot.PcbId); + SetCell(row, "RequestPort", slot.RequestPort == null ? "" : slot.RequestPort.PortName); + SetCell(row, "RequestPortType", MapRequestPortTypeBack(slot.RequestPort == null ? null : slot.RequestPort.Type)); + SetCell(row, "StreamingPort", slot.StreamingPort == null ? "" : slot.StreamingPort.PortName); + SetCell(row, "IsConnected", false); + SetCell(row, "IsLoggedOn", false); + SetCell(row, "FwVersion", ""); + SetCell(row, "InterfaceVersion", ""); + } + } + finally + { + grid.ResumeLayout(); + } + } + + public void AddEmptySlotRow() + { + AddSlotRow(GetNextSlotId()); + } + + public void AddSlotRow() + { + AddSlotRow(GetNextSlotId()); + } + + public void AddSlotRow(int slotId) + { + if (ContainsSlot(slotId)) + throw new Exception($"Slot {slotId} already exists."); + + int idx = grid.Rows.Add(); + var row = grid.Rows[idx]; + + SetCell(row, "Slot", slotId); + SetCell(row, "Selected", false); + SetCell(row, "RequestPort", ""); + SetCell(row, "RequestPortType", "IRDA"); + SetCell(row, "StreamingPort", ""); + SetCell(row, "PcbId", ""); + SetCell(row, "IsConnected", false); + SetCell(row, "IsLoggedOn", false); + SetCell(row, "FwVersion", ""); + SetCell(row, "InterfaceVersion", ""); + } + + public List GetGridData() + { + var list = new List(); + + foreach (DataGridViewRow row in grid.Rows) + { + if (row.IsNewRow) + continue; + + if (row.Cells["Slot"].Value == null) + continue; + + list.Add(new PublicModels.MeterBatchDebugStatus + { + Slot = Convert.ToInt32(row.Cells["Slot"].Value), + Selected = GetBool(row, "Selected"), + PcbId = GetString(row, "PcbId"), + IsConnected = GetBool(row, "IsConnected"), + IsLoggedOn = GetBool(row, "IsLoggedOn"), + RequestPort = GetString(row, "RequestPort"), + RequestPortType = NormalizeRequestPortType(GetString(row, "RequestPortType")), + StreamingPort = GetString(row, "StreamingPort"), + FwVersion = GetString(row, "FwVersion"), + InterfaceVersion = GetString(row, "InterfaceVersion") + }); + } + + return list; + } + + public List GetSelectedGridData() + { + return GetGridData() + .Where(x => x.Selected) + .ToList(); + } + + public int GetSlotFromRow(int rowIndex) + { + if (rowIndex < 0) + throw new ArgumentOutOfRangeException(nameof(rowIndex)); + + return Convert.ToInt32(grid.Rows[rowIndex].Cells["Slot"].Value); + } + + public string GetColumnName(int columnIndex) + { + return grid.Columns[columnIndex].Name; + } + + public void ClearSlots() + { + grid.Rows.Clear(); + } + + public int GetNextSlotId() + { + var existingSlots = grid.Rows + .Cast() + .Where(r => !r.IsNewRow) + .Where(r => r.Cells["Slot"].Value != null) + .Select(r => Convert.ToInt32(r.Cells["Slot"].Value)) + .ToList(); + + if (existingSlots.Count == 0) + return 1; + + return existingSlots.Max() + 1; + } + + private bool ContainsSlot(int slotId) + { + return grid.Rows + .Cast() + .Any(r => + !r.IsNewRow && + r.Cells["Slot"].Value != null && + Convert.ToInt32(r.Cells["Slot"].Value) == slotId); + } + + private DataGridViewRow FindOrCreateRow(int slot) + { + foreach (DataGridViewRow row in grid.Rows) + { + if (!row.IsNewRow && + row.Cells["Slot"].Value != null && + Convert.ToInt32(row.Cells["Slot"].Value) == slot) + { + return row; + } + } + + int idx = grid.Rows.Add(); + var newRow = grid.Rows[idx]; + newRow.Cells["Slot"].Value = slot; + return newRow; + } + + private void SetCell(DataGridViewRow row, string colName, object value) + { + if (!grid.Columns.Contains(colName)) + return; + + if (value == null) + value = ""; + + if (colName == "RequestPortType") + value = NormalizeRequestPortType(Convert.ToString(value)); + + var cell = row.Cells[colName]; + + if (!Equals(cell.Value, value)) + cell.Value = value; + } + + private string GetString(DataGridViewRow row, string colName) + { + if (!grid.Columns.Contains(colName)) + return ""; + + return Convert.ToString(row.Cells[colName].Value); + } + + private bool GetBool(DataGridViewRow row, string colName) + { + if (!grid.Columns.Contains(colName)) + return false; + + if (row.Cells[colName].Value == null) + return false; + + return Convert.ToBoolean(row.Cells[colName].Value); + } + + private DataGridViewComboBoxColumn CreateComPortColumn( + string name, + string headerText, + List comPorts) + { + return new DataGridViewComboBoxColumn + { + Name = name, + HeaderText = headerText, + DataSource = new List(comPorts ?? new List()), + FlatStyle = FlatStyle.Flat, + DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton + }; + } + + private DataGridViewComboBoxColumn CreateRequestPortTypeColumn() + { + return new DataGridViewComboBoxColumn + { + Name = "RequestPortType", + HeaderText = "RequestPortType", + DataSource = new List { "", "IRDA", "UART", "RFID" }, + FlatStyle = FlatStyle.Flat, + DisplayStyle = DataGridViewComboBoxDisplayStyle.DropDownButton + }; + } + + private DataGridViewButtonColumn CreateButtonColumn( + string name, + string headerText, + string text) + { + return new DataGridViewButtonColumn + { + Name = name, + HeaderText = headerText, + Text = text, + UseColumnTextForButtonValue = true + }; + } + + private void UpdateComPortColumnItems(string columnName, List comPorts) + { + var col = grid.Columns[columnName] as DataGridViewComboBoxColumn; + if (col == null) + return; + + col.DataSource = null; + col.DataSource = new List(comPorts ?? new List()); + } + + private string NormalizeRequestPortType(string value) + { + if (string.IsNullOrWhiteSpace(value)) + return ""; + + string normalized = value.Trim(); + + if (normalized.Equals("RFID", StringComparison.OrdinalIgnoreCase) || + normalized.IndexOf("RfidSerialPort", StringComparison.OrdinalIgnoreCase) >= 0) + return "RFID"; + + if (normalized.Equals("UART", StringComparison.OrdinalIgnoreCase) || + normalized.IndexOf("UartSerialPort", StringComparison.OrdinalIgnoreCase) >= 0) + return "UART"; + + if (normalized.Equals("IRDA", StringComparison.OrdinalIgnoreCase) || + normalized.Equals("IrDA", StringComparison.OrdinalIgnoreCase) || + normalized.IndexOf("IrdaSerialPort", StringComparison.OrdinalIgnoreCase) >= 0) + return "IRDA"; + + return ""; + } + + public bool RemoveSlot(int slotId) + { + grid.SuspendLayout(); + + try + { + foreach (DataGridViewRow row in grid.Rows) + { + if (row.IsNewRow) + continue; + + if (row.Cells["Slot"].Value == null) + continue; + + if (Convert.ToInt32(row.Cells["Slot"].Value) == slotId) + { + grid.Rows.Remove(row); + return true; + } + } + + return false; + } + finally + { + grid.ResumeLayout(); + } + } + + private string MapRequestPortTypeBack(string fullType) + { + return NormalizeRequestPortType(fullType); + } + + private void EnableDoubleBuffering(DataGridView dgv) + { + typeof(DataGridView) + .GetProperty( + "DoubleBuffered", + BindingFlags.Instance | BindingFlags.NonPublic) + ?.SetValue(dgv, true, null); + } + + private void Grid_CurrentCellDirtyStateChanged(object sender, EventArgs e) + { + if (grid.IsCurrentCellDirty) + { + grid.CommitEdit(DataGridViewDataErrorContexts.Commit); + } + } + + private void Grid_CellContentClick(object sender, DataGridViewCellEventArgs e) + { + if (e.RowIndex < 0) + return; + + if (grid.Columns[e.ColumnIndex].Name != "Selected") + return; + + bool clickedValue = Convert.ToBoolean( + grid.Rows[e.RowIndex].Cells["Selected"].Value); + + foreach (DataGridViewRow row in grid.SelectedRows) + { + if (row.Index == e.RowIndex) + continue; + + row.Cells["Selected"].Value = clickedValue; + } + } + } +} \ No newline at end of file diff --git a/TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.Designer.cs b/TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.Designer.cs index 42016c8c8..e5a4f3b2f 100644 --- a/TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.Designer.cs +++ b/TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.Designer.cs @@ -24,6 +24,11 @@ private void InitializeComponent() { this.grpSlots = new System.Windows.Forms.GroupBox(); + this.pushTestBenchTempButton = new System.Windows.Forms.Button(); + this.pushedTestBenchTempTextBox = new System.Windows.Forms.TextBox(); + this.label8 = new System.Windows.Forms.Label(); + this.cb_Metersize = new System.Windows.Forms.ComboBox(); + this.l_SettingsPreparationMetersize = new System.Windows.Forms.Label(); this.label7 = new System.Windows.Forms.Label(); this.label6 = new System.Windows.Forms.Label(); this.label5 = new System.Windows.Forms.Label(); @@ -40,13 +45,14 @@ this.amplitudeTestActionButton = new System.Windows.Forms.Button(); this.btnCancel = new System.Windows.Forms.Button(); this.txtLog = new System.Windows.Forms.TextBox(); - this.cb_Metersize = new System.Windows.Forms.ComboBox(); - this.l_SettingsPreparationMetersize = new System.Windows.Forms.Label(); this.grpSlots.SuspendLayout(); this.SuspendLayout(); // // grpSlots // + this.grpSlots.Controls.Add(this.pushTestBenchTempButton); + this.grpSlots.Controls.Add(this.pushedTestBenchTempTextBox); + this.grpSlots.Controls.Add(this.label8); this.grpSlots.Controls.Add(this.cb_Metersize); this.grpSlots.Controls.Add(this.l_SettingsPreparationMetersize); this.grpSlots.Controls.Add(this.label7); @@ -71,6 +77,50 @@ this.grpSlots.Text = "Slots by selection in the table"; this.grpSlots.Enter += new System.EventHandler(this.grpSlots_Enter); // + // pushTestBenchTempButton + // + this.pushTestBenchTempButton.Location = new System.Drawing.Point(593, 186); + this.pushTestBenchTempButton.Name = "pushTestBenchTempButton"; + this.pushTestBenchTempButton.Size = new System.Drawing.Size(81, 21); + this.pushTestBenchTempButton.TabIndex = 121; + this.pushTestBenchTempButton.Text = "Push temp"; + this.pushTestBenchTempButton.Click += new System.EventHandler(this.pushTestBenchTempButton_Click); + // + // pushedTestBenchTempTextBox + // + this.pushedTestBenchTempTextBox.Location = new System.Drawing.Point(550, 186); + this.pushedTestBenchTempTextBox.Name = "pushedTestBenchTempTextBox"; + this.pushedTestBenchTempTextBox.Size = new System.Drawing.Size(37, 20); + this.pushedTestBenchTempTextBox.TabIndex = 120; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(440, 189); + this.label8.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(105, 13); + this.label8.TabIndex = 118; + this.label8.Text = "Pushed temperature:"; + // + // cb_Metersize + // + this.cb_Metersize.FormattingEnabled = true; + this.cb_Metersize.Location = new System.Drawing.Point(74, 30); + this.cb_Metersize.Name = "cb_Metersize"; + this.cb_Metersize.Size = new System.Drawing.Size(73, 21); + this.cb_Metersize.TabIndex = 117; + // + // l_SettingsPreparationMetersize + // + this.l_SettingsPreparationMetersize.AutoSize = true; + this.l_SettingsPreparationMetersize.Location = new System.Drawing.Point(14, 36); + this.l_SettingsPreparationMetersize.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); + this.l_SettingsPreparationMetersize.Name = "l_SettingsPreparationMetersize"; + this.l_SettingsPreparationMetersize.Size = new System.Drawing.Size(55, 13); + this.l_SettingsPreparationMetersize.TabIndex = 116; + this.l_SettingsPreparationMetersize.Text = "Metersize:"; + // // label7 // this.label7.AutoSize = true; @@ -157,6 +207,7 @@ this.completionActionButton.Size = new System.Drawing.Size(150, 28); this.completionActionButton.TabIndex = 3; this.completionActionButton.Text = "Completition"; + this.completionActionButton.Click += new System.EventHandler(this.completionActionButton_Click); // // offsetTestActionButton // @@ -165,6 +216,7 @@ this.offsetTestActionButton.Size = new System.Drawing.Size(150, 28); this.offsetTestActionButton.TabIndex = 5; this.offsetTestActionButton.Text = "Offset test"; + this.offsetTestActionButton.Click += new System.EventHandler(this.offsetTestActionButton_Click); // // preparationActionButton // @@ -191,7 +243,7 @@ this.temperatureCalibrationActionButton.Size = new System.Drawing.Size(150, 28); this.temperatureCalibrationActionButton.TabIndex = 2; this.temperatureCalibrationActionButton.Text = "Temperature calibration"; - this.temperatureCalibrationActionButton.Click += new System.EventHandler(this.amplitudeTestActionButton_Click); + this.temperatureCalibrationActionButton.Click += new System.EventHandler(this.temperatureCalibrationActionButton_Click); // // amplitudeTestActionButton // @@ -200,6 +252,7 @@ this.amplitudeTestActionButton.Size = new System.Drawing.Size(150, 28); this.amplitudeTestActionButton.TabIndex = 18; this.amplitudeTestActionButton.Text = "Amplitude test"; + this.amplitudeTestActionButton.Click += new System.EventHandler(this.amplitudeTestActionButton_Click); // // btnCancel // @@ -225,24 +278,6 @@ this.txtLog.TabIndex = 5; this.txtLog.WordWrap = false; // - // cb_Metersize - // - this.cb_Metersize.FormattingEnabled = true; - this.cb_Metersize.Location = new System.Drawing.Point(74, 30); - this.cb_Metersize.Name = "cb_Metersize"; - this.cb_Metersize.Size = new System.Drawing.Size(73, 21); - this.cb_Metersize.TabIndex = 117; - // - // l_SettingsPreparationMetersize - // - this.l_SettingsPreparationMetersize.AutoSize = true; - this.l_SettingsPreparationMetersize.Location = new System.Drawing.Point(14, 36); - this.l_SettingsPreparationMetersize.Margin = new System.Windows.Forms.Padding(2, 0, 2, 0); - this.l_SettingsPreparationMetersize.Name = "l_SettingsPreparationMetersize"; - this.l_SettingsPreparationMetersize.Size = new System.Drawing.Size(55, 13); - this.l_SettingsPreparationMetersize.TabIndex = 116; - this.l_SettingsPreparationMetersize.Text = "Metersize:"; - // // PreadjustmentActionsView // this.BackColor = System.Drawing.SystemColors.Control; @@ -271,5 +306,8 @@ private System.Windows.Forms.Label label6; private System.Windows.Forms.ComboBox cb_Metersize; private System.Windows.Forms.Label l_SettingsPreparationMetersize; + private System.Windows.Forms.Button pushTestBenchTempButton; + private System.Windows.Forms.TextBox pushedTestBenchTempTextBox; + private System.Windows.Forms.Label label8; } } \ No newline at end of file diff --git a/TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.cs b/TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.cs index 395f3f81e..06924bdc4 100644 --- a/TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.cs +++ b/TBF/Rig/BridgeComponents/GciBridge/UI/StaraTuraAPI_GciBridge/PreadjustmentActionsView.cs @@ -1,13 +1,17 @@ -using CordonelPreadjustmentUi; +using Common; +using CordonelPreadjustmentUi; using CordonelPreadjustmentUi.Processes.Itinerary; using GenesisCordonelInterface.API; using GenesisCordonelInterface.UI; using System; using System.Collections.Generic; +using System.Drawing; +using System.Globalization; using System.Linq; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; +using TBF.UiBridge; using Xylem.Common.Hardware.WaterMeter.WaterMeterCore; using Xylem.Common.Logic.ProductionOrderCore.OrderData; using Xylem.Common.Ui.CordonelPreadjustmentUi; @@ -25,6 +29,10 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge private readonly Action _addSlotAction; private readonly Action _saveAction; + public event EventHandler OnAbort; + + private readonly System.Windows.Forms.Timer _tempRequestTimer = new System.Windows.Forms.Timer(); + private bool _tempButtonHighlight; public PreadjustmentActionsView( MainView mainview, GciBridge bridge, @@ -41,6 +49,10 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge LoadRegisterComboBoxes(); + InitGciHandlers(); + + // + cb_Metersize.Items.Clear(); foreach (MeterSize size in (MeterSize[])Enum.GetValues(typeof(MeterSize))) { @@ -52,6 +64,25 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge setM = _mainView._gciApi._innerMeterAPI._settings.MeterSize; } cb_Metersize.SelectedItem = setM; + + // + + _tempRequestTimer.Interval = 500; + + _tempRequestTimer.Tick += (s, e) => + { + _tempButtonHighlight = !_tempButtonHighlight; + + pushTestBenchTempButton.BackColor = + _tempButtonHighlight + ? Color.Red + : SystemColors.Control; + }; + } + + private void InitGciHandlers() + { + } private void AddSlot() @@ -73,7 +104,7 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge if (slots.Count == 0) throw new Exception("No selected slots in grid."); - + return slots; } @@ -92,7 +123,8 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge private void btnCancel_Click(object sender, EventArgs e) { - _cts?.Cancel(); + OnAbort?.Invoke(null, new EventArgsMeterSuccsessfull(new List()));//stop Laatzen + _cts?.Cancel();//stop StaraTura Log("Cancel requested."); } @@ -147,11 +179,11 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge btnCancel.Enabled = busy; } - private void LogResult(string methodName, object result) + /*private void LogResult(string methodName, object result) { Log(methodName + " result:"); Log(result == null ? "" : result.ToString()); - } + }*/ private void Log(string message) { @@ -162,6 +194,17 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge Environment.NewLine); } + private void Log(int slot, string message) + { + txtLog.AppendText( + DateTime.Now.ToString("HH:mm:ss.fff") + + " " + + $"Slot: {slot}" + + " - " + + message + + Environment.NewLine); + } + private void LoadRegisterComboBoxes() { @@ -271,6 +314,13 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge token); }); } + private void pushTestBenchTempButton_Click(object sender, EventArgs e) + { + _bridge.PreAdjustment_PushTemperature(Convert.ToDouble(pushedTestBenchTempTextBox.Text)); + + _tempRequestTimer.Stop(); + pushTestBenchTempButton.BackColor = SystemColors.Control; + } private void offsetTestActionButton_Click( object sender, @@ -300,18 +350,48 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge private ProcessProgress CreatePreparationProgress() { - return new ProcessProgress + ProcessProgress pp = new ProcessProgress { Setting = new PreAdjustmentSettingsContainer { - TempOnly = false, - Culture = Thread.CurrentThread.CurrentCulture, - MeterSize = (MeterSize)cb_Metersize.SelectedItem + Culture = new CultureInfo("en-US"), + MeterSize = (MeterSize)cb_Metersize.SelectedItem, + OffsetTestSettlingTime = 0 }, - IsAutomaticMode = false + IsAutomaticMode = false, }; + + pp.OnRequestTempretureSelection += RequestTempretureSelection; + pp.OnDebugMessageChanged += DebugMessageChanged; + + OnAbort += (o, args) => + { + pp.StopSequence = true; + pp.CancellationSource.Cancel(); + }; + + return pp; + + } + + private void DebugMessageChanged(object sender, EventArgsDebug e) + { + BeginInvoke(new Action(() => + { + Log(e.Value); + })); + } + + private void RequestTempretureSelection(object sender, EventArgs e) + { + BeginInvoke(new Action(() => + { + Log("Temperature requesting, please set actual value"); + + _tempRequestTimer.Start(); + })); } private List CreateMeterControls(IEnumerable slots) @@ -332,27 +412,6 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge return controls; } - private PreAdjustmentSettingsContainer CreatePreAdjustmentSettings(IEnumerable slots) - { - var settings = - new PreAdjustmentSettingsContainer(); - - settings.Meters = - slots.Select(s => s.Slot).ToList(); - - settings.TempMeters = - new List(); - - settings.NumberOfPaths = 2; - settings.TempOnly = false; - settings.Culture = - Thread.CurrentThread.CurrentCulture; - - return settings; - } - - - private void writeRegisterButton_Click(object sender, EventArgs e) { /*ExecuteAsync(async token => @@ -421,8 +480,7 @@ namespace TBF.Rig.BridgeComponents.GciBridge.UI.StaraTuraAPI_GciBridge return; } - var pp = - CreatePreparationProgress(); + var pp = CreatePreparationProgress(); foreach (var selectedSlot in selectedSlots) {