Files

1077 lines
37 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.LogicalTree;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using Avalonia.Threading;
using AvaloniaApplication1.DataBase;
using DaireApplication.DataBase;
using DaireApplication.ViewModels;
using DaireApplication.Views;
using DynamicData;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static DaireApplication.Views.MainWindow;
namespace DaireApplication;
public partial class AdvanceSettings : UserControl
{
public Mapping _mapping;
public ConfigrationTable _configration;
public List<Mapping> _mappingRecordes;
MainWindow _mainWindow;
private Process? _keyboardProcess;
public ErrorSettingsTable _error = new();
TextBlock targetText = new TextBlock();
float oldValue = 0;
bool _isDiag;
bool _isSoftware;
public AdvanceSettings(MainWindow mainWindow,bool isDiag=false,bool isSoftware=false)
{
InitializeComponent();
_mainWindow = mainWindow;
_mapping = new Mapping();
_mappingRecordes = _mapping.ReadMappings();
_configration = new();
_isDiag = isDiag;
_isSoftware = isSoftware;
setDefaultValues();
// Remove the old text box event handlers since we're using sliders now
// kp.AddHandler(TextInputEvent, OnTextInputOnlyInteager, RoutingStrategies.Tunnel);
// ki.AddHandler(TextInputEvent, OnTextInputOnlyInteager, RoutingStrategies.Tunnel);
// kd.AddHandler(TextInputEvent, OnTextInputOnlyInteager, RoutingStrategies.Tunnel);
// kl.AddHandler(TextInputEvent, OnTextInputOnlyInteager, RoutingStrategies.Tunnel);
fcThreshold.AddHandler(TextInputEvent, OnTextInput, RoutingStrategies.Tunnel);
heatConRange.AddHandler(TextInputEvent, OnTextInput, RoutingStrategies.Tunnel);
// Remove the old border event handlers since we're using sliders now
// kpBorder.AddHandler(InputElement.PointerPressedEvent, OnTextBoxFocused, RoutingStrategies.Tunnel, handledEventsToo: true);
// kiBorder.AddHandler(InputElement.PointerPressedEvent, OnTextBoxFocused, RoutingStrategies.Tunnel, handledEventsToo: true);
// kdBorder.AddHandler(InputElement.PointerPressedEvent, OnTextBoxFocused, RoutingStrategies.Tunnel, handledEventsToo: true);
// klBorder.AddHandler(InputElement.PointerPressedEvent, OnTextBoxFocused, RoutingStrategies.Tunnel, handledEventsToo: true);
fcThresholdBorder.AddHandler(InputElement.PointerPressedEvent, OnTextBoxFocused, RoutingStrategies.Tunnel, handledEventsToo: true);
heatConRangeBorder.AddHandler(InputElement.PointerPressedEvent, OnTextBoxFocused, RoutingStrategies.Tunnel, handledEventsToo: true);
AttachHandlers(_mainWindow.UserName, CloseApplication);
setDefaultSettings();
}
public AdvanceSettings()
{
InitializeComponent();
}
public void AttachHandlers(Button button, System.EventHandler<Avalonia.Input.HoldingRoutedEventArgs> func)
{
if (button != null)
{
button.Holding += func;
button.PointerPressed += (sender, e) =>
{
// Simulate a long press on any pointer (mouse or touch)
var point = e.GetPosition(button);
func(sender, new HoldingRoutedEventArgs(HoldingState.Started, point, e.Pointer.Type));
};
button.PointerReleased += (sender, e) =>
{
// End simulated long press
var point = e.GetPosition(button);
func(sender, new HoldingRoutedEventArgs(HoldingState.Completed, point, e.Pointer.Type));
};
}
}
public static void CloseApplication(object? sender, RoutedEventArgs e)
{
var lifetime = Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime;
lifetime?.Shutdown(); // This should correctly shut down the application
}
private void HVOChanged(object? sender, RoutedEventArgs e)
{
if (sender is ComboBox comboBox)
{
if (comboBox.SelectedItem is ComboBoxItem selectedItem)
{
// Get the displayed content
//HVO
var result= _mappingRecordes.FindAll(x => x.Address == "1" && x.IsRead==false).Find(c=>c.Name==selectedItem.Content.ToString());
if (result!=null)
{
if (!result.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())))
{
var oldRecord = _mappingRecordes.Find(x => x.Address == "1" && x.IsRead == false && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord!=null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
}
result.BitNumbers.Add(int.Parse(comboBox.Tag.ToString()));
_mapping.UpdateMapping(result);
setDefaultValues();
}
}
else
{
var oldRecord = _mappingRecordes.Find(x => x.Address == "1" && x.IsRead == false && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
}
}
_mappingRecordes = _mapping.ReadMappings();
_mainWindow._mapping = _mappingRecordes;
var configrations = _configration.ReadConfigrations();
var compressor = _mappingRecordes.Find(x => x.Name == "Compressor");
var water = _mappingRecordes.Find(x => x.Name == "Water");
if (compressor != null && water != null)
{
if (compressor.BitNumbers.Count > 0 )
{
configrations[2].FC_out = compressor.BitNumbers.Concat(water.BitNumbers).ToList();
configrations[3].FC_out = compressor.BitNumbers.Concat(water.BitNumbers).ToList();
}
else
{
configrations[2].FC_out = [-1];
configrations[3].FC_out = [-1];
}
if (water.BitNumbers.Count > 0)
{
configrations[2].SC_out = water.BitNumbers;
configrations[3].SC_out = water.BitNumbers;
}
else
{
configrations[2].SC_out = [-1];
configrations[3].SC_out = [-1];
}
_configration.UpdateConfigration(configrations[2]);
_configration.UpdateConfigration(configrations[3]);
}
foreach (var item in configrations)
{
var namedMap = _mappingRecordes.Find(x => x.Name == item.name);
if (namedMap!=null)
{
if (namedMap.BitNumbers.Count>0)
{
item.H_out = namedMap.BitNumbers;
if (namedMap.Name!= "HELIX Heater")
{
item.FC_out = [-1];
item.SC_out = [-1];
}
_configration.UpdateConfigration(item);
}
else
{
item.H_out =[-1];
if (namedMap.Name != "HELIX Heater")
{
item.FC_out = [-1];
item.SC_out = [-1];
}
_configration.UpdateConfigration(item);
}
}
else
{
}
}
configrations[3].H_out = configrations[2].H_out;
_configration.UpdateConfigration(configrations[3]);
_mainWindow.sendConfig = true;
}
}
}
private void TChanged(object? sender, RoutedEventArgs e)
{
if (sender is ComboBox comboBox)
{
if (comboBox.SelectedItem is ComboBoxItem selectedItem)
{
// Get the displayed content
//HVO
var result = _mappingRecordes.Find(c => c.Name.ToLower() == selectedItem.Tag.ToString().ToLower());
if (result != null)
{
if (!result.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())))
{
var oldRecord = _mappingRecordes.Find(x => x.Name.EndsWith("Temp") && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
}
result.BitNumbers.Add(int.Parse(comboBox.Tag.ToString()));
_mapping.UpdateMapping(result);
setDefaultValues();
}
}
else
{
var oldRecord = _mappingRecordes.Find(x => x.Name.EndsWith("Temp") && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
setDefaultValues();
}
}
_mappingRecordes = _mapping.ReadMappings();
_mainWindow._mapping = _mappingRecordes;
}
}
}
private void LOVChanged(object? sender, RoutedEventArgs e)
{
if (sender is ComboBox comboBox)
{
if (comboBox.SelectedItem is ComboBoxItem selectedItem)
{
var result = _mappingRecordes.FindAll(x => x.Address == "2").Find(c => c.Name.ToLower() == selectedItem.Tag.ToString().ToLower());
if (result != null)
{
if (!result.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())))
{
var oldRecord = _mappingRecordes.Find(x => x.Address == "2" && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
}
result.BitNumbers.Add(int.Parse(comboBox.Tag.ToString()));
_mapping.UpdateMapping(result);
setDefaultValues();
}
}
else
{
var oldRecord = _mappingRecordes.Find(x => x.Address == "2" && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
setDefaultValues();
}
}
_mappingRecordes = _mapping.ReadMappings();
_mainWindow._mapping = _mappingRecordes;
}
}
}
private void InChanged(object? sender, RoutedEventArgs e)
{
if (sender is ComboBox comboBox)
{
if (comboBox.SelectedItem is ComboBoxItem selectedItem)
{
// Get the displayed content
//HVO
var result = _mappingRecordes.FindAll(x => x.Address == "1" &&x.IsRead==true).Find(c => c.Name.ToLower() == selectedItem.Content.ToString().ToLower());
if (result != null)
{
if (!result.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())))
{
var oldRecord = _mappingRecordes.Find(x => x.Address == "1" && x.IsRead == true && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
}
result.BitNumbers.Add(int.Parse(comboBox.Tag.ToString()));
_mapping.UpdateMapping(result);
setDefaultValues();
}
}
else
{
var oldRecord = _mappingRecordes.Find(x => x.Address == "1" && x.IsRead == true && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
setDefaultValues();
}
}
_mappingRecordes = _mapping.ReadMappings();
_mainWindow._mapping = _mappingRecordes;
}
}
}
private void MotChanged(object? sender, RoutedEventArgs e)
{
if (sender is ComboBox comboBox)
{
if (comboBox.SelectedItem is ComboBoxItem selectedItem)
{
var result = _mappingRecordes.FindAll(x => x.Address == "3").Find(c => c.Name.ToLower() == selectedItem.Tag.ToString().ToLower());
if (result != null)
{
if (!result.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())))
{
var oldRecord = _mappingRecordes.Find(x => x.Address == "3" && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
}
result.BitNumbers.Add(int.Parse(comboBox.Tag.ToString()));
_mapping.UpdateMapping(result);
setDefaultValues();
}
}
else
{
var oldRecord = _mappingRecordes.Find(x => x.Address == "3" && x.BitNumbers.Contains(int.Parse(comboBox.Tag.ToString())));
if (oldRecord != null)
{
_mapping.DeleteBitNumber(oldRecord.Id, int.Parse(comboBox.Tag.ToString()));
setDefaultValues();
}
}
_mappingRecordes = _mapping.ReadMappings();
_mainWindow._mapping = _mappingRecordes;
}
}
}
private (string? fileName, string args) GetKeyboardCommand()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
return ("osk.exe", "");
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
return ("onboard", ""); // or "florence", "matchbox-keyboard"
return (null, "");
}
private async void OnTextBoxFocused(object? sender, PointerPressedEventArgs e)
{
if (_keyboardProcess is { HasExited: false })
return;
var (fileName, args) = GetKeyboardCommand();
if (fileName is null)
return;
_keyboardProcess = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = fileName,
Arguments = args,
UseShellExecute = true,
WorkingDirectory = "/usr/bin"
},
EnableRaisingEvents = true
};
try
{
_keyboardProcess.Start();
Dispatcher.UIThread.Post(() =>
{
if (sender is Border border)
{
var textbox = border.Child as TextBox;
textbox.SelectionStart = 0;
textbox.SelectionEnd = textbox.Text?.Length ?? 0;
}
});
}
catch
{
// fail silently if keyboard not found
}
}
private async void OnIgnoreInnerPidPopupOverlayPointerPressed(object? sender, RoutedEventArgs e)
{
innerPidPopupOverlay.IsVisible = false;
pidPopupOverlay.IsVisible = true;
}
private async void OnIgnorePidPopupOverlayPointerPressed(object? sender, RoutedEventArgs e)
{
pidPopupOverlay.IsVisible = false;
}
private async void YesBtnClick(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
var configration = _configration.ReadConfigrationById(header.Tag.ToString());
if (configration!=null)
{
// Read values from sliders instead of text boxes
configration.kp = (int)kpSlider.Value;
configration.ki = (int)kiSlider.Value;
configration.kd = (int)kdSlider.Value;
configration.kl = (int)klSlider.Value;
if (string.IsNullOrEmpty(fcThreshold.Text))
{
configration.FC_Threshold = 0;
}
else
{
configration.FC_Threshold = float.Parse(fcThreshold.Text);
}
if (string.IsNullOrEmpty(heatConRange.Text))
{
configration.HeatConRange = 1.0F;
}
else
{
if (float.TryParse(heatConRange.Text, out float value))
{
if (value<1.0)
{
configration.HeatConRange = 1.0F;
}
else
{
configration.HeatConRange = float.Parse(heatConRange.Text);
}
}
else
{
configration.HeatConRange = 1.0F;
}
}
_configration.UpdateConfigration(configration);
_mainWindow.sendConfig = true;
CloseKeyboard();
innerPidPopupOverlay.IsVisible = false;
pidPopupOverlay.IsVisible = true;
}
}
}
private async void showPidPopUp(object? sender, RoutedEventArgs e)
{
pidPopupOverlay.IsVisible = true;
}
private async void showInnerPid(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
var configratipn = _configration.ReadConfigrationById(button.Tag.ToString());
pidPopupOverlay.IsVisible = false;
header.Text = button.Content.ToString();
header.Tag = button.Tag;
// Set slider values instead of text box values
kpSlider.Value = configratipn.kp;
kiSlider.Value = configratipn.ki;
kdSlider.Value = configratipn.kd;
klSlider.Value = configratipn.kl;
// Update the display values
kpSliderValue.Text = configratipn.kp.ToString();
kiSliderValue.Text = configratipn.ki.ToString();
kdSliderValue.Text = configratipn.kd.ToString();
klSliderValue.Text = configratipn.kl.ToString();
fcThreshold.Text = configratipn.FC_Threshold.ToString("0.0");
heatConRange.Text = configratipn.HeatConRange.ToString("0.0");
innerPidPopupOverlay.IsVisible = true;
}
}
// KP Slider and Button Event Handlers
private void KpSliderValueChanged(object? sender, RoutedEventArgs e)
{
if (kpSliderValue != null && sender is Slider slider)
{
kpSliderValue.Text = ((int)slider.Value).ToString();
}
}
private void KpMinusClick(object? sender, RoutedEventArgs e)
{
if (kpSlider.Value > kpSlider.Minimum)
{
kpSlider.Value--;
}
}
private void KpPlusClick(object? sender, RoutedEventArgs e)
{
if (kpSlider.Value < kpSlider.Maximum)
{
kpSlider.Value++;
}
}
// KI Slider and Button Event Handlers
private void KiSliderValueChanged(object? sender, RoutedEventArgs e)
{
if (kiSliderValue != null && sender is Slider slider)
{
kiSliderValue.Text = ((int)slider.Value).ToString();
}
}
private void KiMinusClick(object? sender, RoutedEventArgs e)
{
if (kiSlider.Value > kiSlider.Minimum)
{
kiSlider.Value--;
}
}
private void KiPlusClick(object? sender, RoutedEventArgs e)
{
if (kiSlider.Value < kiSlider.Maximum)
{
kiSlider.Value++;
}
}
// KD Slider and Button Event Handlers
private void KdSliderValueChanged(object? sender, RoutedEventArgs e)
{
if (kdSliderValue != null && sender is Slider slider)
{
kdSliderValue.Text = ((int)slider.Value).ToString();
}
}
private void KdMinusClick(object? sender, RoutedEventArgs e)
{
if (kdSlider.Value > kdSlider.Minimum)
{
kdSlider.Value--;
}
}
private void KdPlusClick(object? sender, RoutedEventArgs e)
{
if (kdSlider.Value < kdSlider.Maximum)
{
kdSlider.Value++;
}
}
// KL Slider and Button Event Handlers
private void KlSliderValueChanged(object? sender, RoutedEventArgs e)
{
if (klSliderValue != null && sender is Slider slider)
{
klSliderValue.Text = ((int)slider.Value).ToString();
}
}
private void KlMinusClick(object? sender, RoutedEventArgs e)
{
if (klSlider.Value > klSlider.Minimum)
{
klSlider.Value--;
}
}
private void KlPlusClick(object? sender, RoutedEventArgs e)
{
if (klSlider.Value < klSlider.Maximum)
{
klSlider.Value++;
}
}
private void OnTextInput(object? sender, TextInputEventArgs e)
{
if (sender is TextBox textBox)
{
string newText = textBox.Text + e.Text;
if (!Regex.IsMatch(newText, @"^\d*\.?\d*$"))
{
e.Handled = true;
}
}
}
private void OnTextInputOnlyInteager(object? sender, TextInputEventArgs e)
{
if (sender is TextBox textBox)
{
string newText = textBox.Text + e.Text;
if (!Regex.IsMatch(newText, @"^\d*$"))
{
e.Handled = true;
}
}
}
private async void gridButtonClick(object? sender, RoutedEventArgs e)
{
var error = _error.ReadErrorSettings()[0];
if (gridValue.Text == "50Hz")
{
error.gridFreq = 60;
_error.UpdateError(error);
setDefaultValues();
}
else
{
error.gridFreq = 50;
_error.UpdateError(error);
setDefaultValues();
}
}
private async void supplyButtonClick(object? sender, RoutedEventArgs e)
{
var error = _error.ReadErrorSettings()[0];
int bit = 11;
if (phasesNumberValue.Text == "3-Phases")
{
error.phaseNumber = 1;
_error.UpdateError(error);
setDefaultValues();
_mainWindow.holdingRegister.resetError |= (ushort)(1 << bit);
}
else
{
error.phaseNumber = 3;
_error.UpdateError(error);
_mainWindow.holdingRegister.resetError &= (ushort)~(1 << bit);
setDefaultValues();
}
await _mainWindow.WriteToSerialAsync("supplyButtonClick");
}
private async void voltageButtonClick(object? sender, RoutedEventArgs e)
{
var error = _error.ReadErrorSettings()[0];
int bit = 12;
if (voltageNumberValue.Text.Contains("220"))
{
error.phaseVoltage = 110;
_error.UpdateError(error);
setDefaultValues();
_mainWindow.holdingRegister.resetError |= (ushort)(1 << bit);
}
else
{
error.phaseVoltage =220;
_error.UpdateError(error);
_mainWindow.holdingRegister.resetError &= (ushort)~(1 << bit);
setDefaultValues();
}
await _mainWindow.WriteToSerialAsync("voltageButtonClick");
}
private async void extPowerClick(object? sender, RoutedEventArgs e)
{
var error = _error.ReadErrorSettings()[0];
if (extPowerValue.Text == "Yes")
{
error.extPower = false;
_error.UpdateError(error);
setDefaultValues();
}
else
{
error.extPower = true;
_error.UpdateError(error);
setDefaultValues();
}
}
private void setDefaultValues()
{
_mappingRecordes = _mapping.ReadMappings();
var allHVOComboBox= this.GetLogicalDescendants()
.OfType<ComboBox>()
.Where(cb => cb.Classes.Contains("HVO"))
.ToList();
//HVO
for (int i = 0; i < allHVOComboBox.Count; i++)
{
var result = _mappingRecordes.FindAll(x => x.Address == "1" && x.IsRead==false ).Find(c => c.BitNumbers.Contains(int.Parse(allHVOComboBox[i].Tag.ToString())));
if (result != null)
{
allHVOComboBox[i].SelectedIndex = result.Id - 11;
}
else
{
allHVOComboBox[i].SelectedIndex = 6;
}
}
// IN
var allINComboBox = this.GetLogicalDescendants()
.OfType<ComboBox>()
.Where(cb => cb.Classes.Contains("in"))
.ToList();
for (int i = 0; i < allINComboBox.Count; i++)
{
var result = _mappingRecordes.FindAll(x => x.Address == "1"&&x.IsRead==true).Find(c => c.BitNumbers.Contains(int.Parse(allINComboBox[i].Tag.ToString())));
if (result != null)
{
allINComboBox[i].SelectedIndex = result.Id - 1;
}
else
{
allINComboBox[i].SelectedIndex = 3;
}
}
//LOV
var allLOVComboBox = this.GetLogicalDescendants()
.OfType<ComboBox>()
.Where(cb => cb.Classes.Contains("lov"))
.ToList();
for (int i = 0; i < allLOVComboBox.Count; i++)
{
var result = _mappingRecordes.FindAll(x => x.Address == "2" && x.IsRead == false).Find(c => c.BitNumbers.Contains(int.Parse(allLOVComboBox[i].Tag.ToString())));
if (result != null)
{
allLOVComboBox[i].SelectedIndex = result.Id - 8;
}
else
{
allLOVComboBox[i].SelectedIndex = 3;
}
}
// T
var allTComboBox = this.GetLogicalDescendants()
.OfType<ComboBox>()
.Where(cb => cb.Classes.Contains("T"))
.ToList();
for (int i = 0; i < allTComboBox.Count; i++)
{
var result = _mappingRecordes.FindAll(x => x.Name.EndsWith("Temp")).Find(c => c.BitNumbers.Contains(int.Parse(allTComboBox[i].Tag.ToString())));
if (result != null)
{
allTComboBox[i].SelectedIndex = result.Id - 4;
}
else
{
allTComboBox[i].SelectedIndex = 5;
}
}
// MOT
var allMotComboBox = this.GetLogicalDescendants()
.OfType<ComboBox>()
.Where(cb => cb.Classes.Contains("mot"))
.ToList();
for (int i = 0; i < allMotComboBox.Count; i++)
{
var result = _mappingRecordes.FindAll(x => x.Address == "3" && x.IsRead==false).Find(c => c.BitNumbers.Contains(int.Parse(allMotComboBox[i].Tag.ToString())));
if (result != null)
{
allMotComboBox[i].SelectedIndex = result.Id - 17;
}
else
{
allMotComboBox[i].SelectedIndex = 2;
}
}
var error = _error.ReadErrorSettings()[0];
phasesNumberValue.Text = $"{error.phaseNumber}-Phases";
voltageNumberValue.Text = $"{error.phaseVoltage} V";
gridValue.Text = $"{error.gridFreq}Hz";
extPowerValue.Text = error.extPower ? "Yes" : "No";
var config = _configration.ReadConfigrations()[0];
i_neutValue.Text = config.i_neut.ToString("0.0");
i_mot1Value.Text = config.i_mot1.ToString("0.0");
i_mot2Value.Text = config.i_mot2.ToString("0.0");
}
private void OnPopupOverlayPointerPressed(object sender, PointerPressedEventArgs e)
{
targetText.Text = oldValue.ToString("0.0");
keyBoardPopup.IsVisible = false;
}
private void OnKeyClick(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
if (button.Content == ".")
{
if (Char.IsDigit(targetText.Text[0]) && !targetText.Text.Contains(button.Content.ToString()))
{
targetText.Text += button.Content;
}
}
else
{
targetText.Text += button.Content;
if (float.Parse(targetText.Text) > 20.0)
{
targetText.Text = "20.0";
}
}
}
}
private void OnBackClick(object? sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(targetText.Text))
{
// Remove the last character from the text box
targetText.Text = targetText.Text.Remove(targetText.Text.Length - 1, 1);
//number = number.Remove(number.Length - 1);
}
}
private void EnterClick(object? sender, RoutedEventArgs e)
{
var config = _configration.ReadConfigrations()[0];
if (targetText.Name== "i_mot2Value")
{
config.i_mot2 = float.Parse(targetText.Text);
}
else if (targetText.Name == "i_mot1Value")
{
config.i_mot1 = float.Parse(targetText.Text);
}
else
{
config.i_neut = float.Parse(targetText.Text);
}
_configration.UpdateConfigration(config);
setDefaultValues();
_mainWindow.sendConfig = true;
keyBoardPopup.IsVisible = false;
}
private void ShowNumberKeyBoard(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
if (button.Name=="i_mot2")
{
targetText = i_mot2Value;
}
else if (button.Name == "i_mot1")
{
targetText = i_mot1Value;
}
else if (button.Name== "i_neut")
{
targetText = i_neutValue;
}
oldValue = float.Parse(targetText.Text);
targetText.Text = "";
keyBoardPopup.IsVisible = true;
}
}
private void OnKeyUp(object? sender, KeyEventArgs e)
{
if (sender is TextBox textBox)
{
if (textBox != null && float.TryParse(textBox.Text, out float value))
{
if (textBox.Name== "heatConRange")
{
if (value > 25.0)
{
textBox.Text = "25.0";
}
}
else
{
if (value > 100)
{
textBox.Text = "100";
}
}
// Check if the value exceeds 100 and reset to 100 if necessary.
}
}
}
private void InnerPopupPointerPressed(object? sender, PointerPressedEventArgs e)
{
e.Handled = true;
}
private void CloseKeyboard()
{
try
{
if (_keyboardProcess != null)
{
// Kill the keyboard process
_keyboardProcess.Kill();
_keyboardProcess.Dispose();
_keyboardProcess = null;
// Force kill any remaining keyboard processes
var processKill = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "killall",
Arguments = "-9 onboard matchbox-keyboard florence", // Common Linux on-screen keyboards
UseShellExecute = false,
CreateNoWindow = true
}
};
processKill.Start();
processKill.WaitForExit(1000);
processKill.Dispose();
}
}
catch (Exception ex)
{
Console.WriteLine($"Error closing keyboard: {ex.Message}");
}
}
private void setDefaultSettings()
{
_mainWindow.minimizeBtn.IsVisible = false;
var stackPanel = _mainWindow.HomeTrack.Parent as StackPanel;
//Set Track Up
_mainWindow.HomeTrack.IsVisible = true;
_mainWindow.HomePolygon.Stroke = Avalonia.Media.Brushes.Black;
_mainWindow.RecipeSelTrack.IsVisible = false;
_mainWindow.RunInterfaceTrack.IsVisible = false;
_mainWindow.RecipePanelTrack.IsVisible = false;
_mainWindow.RecipeEditTrack.IsVisible = false;
if (_isDiag||_isSoftware)
{
if (_isDiag)
{
_mainWindow.DiagnosticsTrack.IsVisible = true;
_mainWindow.DiagnosticsPolygon.Stroke = Avalonia.Media.Brushes.Black;
}
else if (_isSoftware)
{
_mainWindow.SoftwareTrack.IsVisible = true;
_mainWindow.SoftwarePolygon.Stroke = Avalonia.Media.Brushes.Black;
}
_mainWindow.SettingTrack.IsVisible = false;
}
else
{
_mainWindow.DiagnosticsTrack.IsVisible = false;
_mainWindow.SoftwareTrack.IsVisible = false;
_mainWindow.SettingTrack.IsVisible = true;
_mainWindow.SettingPolygon.Stroke = Avalonia.Media.Brushes.Black;
}
// Remove the button from its current position
stackPanel.Children.Remove(_mainWindow.AdvanceSettingsTrack);
// Add it back at the end of the StackPanel
stackPanel.Children.Add(_mainWindow.AdvanceSettingsTrack);
_mainWindow.AdvanceSettingsTrack.IsVisible = true;
_mainWindow.AdvanceSettingsPolygon.Stroke = Brush.Parse("#A4275D");
_mainWindow.TitleBtn.IsVisible = true;
_mainWindow.Title.Text = "DR-62664A";
//Set Footer
_mainWindow.footerMsg.IsVisible = true;
_mainWindow.footerMsg.Text = "Map Inputs And Outputs, And Set The Board Internal Values";
_mainWindow.footerMsg.Foreground = Brush.Parse("#A4275D");
_mainWindow.footer.Background = Brush.Parse("#f2f2f2");
_mainWindow.footerDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
_mainWindow.footerTime.Text = DateTime.Now.ToString("hh:mm tt");
_mainWindow.footerDateContainer.IsVisible = true;
_mainWindow.footerStartBtn.IsVisible = false;
_mainWindow.adminBtns.IsVisible = false;
}
}