using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.Input; using Avalonia.Interactivity; using Avalonia.Markup.Xaml; using Avalonia.Media; using AvaloniaApplication1.DataBase; using DaireApplication.DataBase; using DaireApplication.Views; using System; using System.Threading; using System.Threading.Tasks; namespace DaireApplication; public partial class Admin : UserControl { private MainWindow? _mainWindow; private UserTable? _currentUser; private MachineTable _machine; private ConfigrationTable _configration; private CancellationTokenSource _cancellationTokenSource; private bool _isLongPress = false; public Admin() { InitializeComponent(); _machine = new MachineTable(); _machine = _machine.ReadMachine(); } public Admin(MainWindow mainWindow, UserTable currentUser) { _currentUser = currentUser; _mainWindow = mainWindow; _machine = new MachineTable(); _machine = _machine.ReadMachine(); _configration = new(); InitializeComponent(); setDefaultSettings(); setDafaultValues(); AttachHandlers(_mainWindow.logoBtn, AdvanceSettingsView); AttachHandlers(_mainWindow.UserName, CloseApplication); _mainWindow.minimizeBtn.Click += MinimizeButton_Click; } public void AttachHandlers(Button button,System.EventHandler 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)); }; } } private void MinimizeButton_Click(object? sender, RoutedEventArgs e) { _mainWindow.WindowState = Avalonia.Controls.WindowState.Minimized; } public static void CloseApplication(object? sender, RoutedEventArgs e) { var lifetime = Application.Current?.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime; lifetime?.Shutdown(); // This should correctly shut down the application } public void AdvanceSettingsView(object? sender, RoutedEventArgs e) { if (_mainWindow.ContentArea.Content== this ) { _mainWindow.ContentArea.Content = new AdvanceSettings(_mainWindow); } } private async void changeValue(object? sender, RoutedEventArgs e) { if (sender is Button button) { var gridParent = button.Parent as Grid; var stack = gridParent.Children[1] as StackPanel; var targetText = stack.Children[0] as TextBlock; // Handle single click behavior (just increase or decrease by 1) int currentValue = int.TryParse(targetText.Text, out var value) ? value : 0; if (gridParent.Tag.ToString() != "pMint" && gridParent.Tag.ToString() != "aMint") { if (button.Content.ToString() == "+") { targetText.Text = (currentValue + 1).ToString(); } else { if (currentValue>0) { targetText.Text = (currentValue - 1).ToString(); } } } else { if (button.Content.ToString() == "+") { if (currentValue<0) { targetText.Text = (currentValue + 1).ToString(); } } else { targetText.Text = (currentValue - 1).ToString(); } } // Perform machine updates based on the tag MachineTable data = _machine.ReadMachine(); data.Id = _machine.Id; if (gridParent.Tag.ToString() == "pMaxt") data.PumbMaxHeat = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "pMint") data.PumbMinHeat = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "tmt") data.TankMaxHeat = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "pd") data.PumbDelay = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "pht") data.PreHeatingTemp = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "md") data.MixerDelay = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "pouring") data.PouringDelay = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "cooling") data.CoolingDelay = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "heating") data.HeatingDelay = int.Parse(targetText.Text); else if (gridParent.Tag.ToString() == "aMaxt") { data.AbsMaxHeat = int.Parse(targetText.Text); var allConfigrations = _configration.ReadConfigrations(); foreach (var item in allConfigrations) { item.Max = (int)data.AbsMaxHeat; _configration.UpdateConfigration(item); } _mainWindow.sendConfig = true; } else if (gridParent.Tag.ToString() == "aMint") { data.AbsMinHeat = int.Parse(targetText.Text); var coolingConfig = _configration.ReadConfigrationById("3"); //var pumbConfig = _configration.ReadConfigrationById("4"); coolingConfig.Min = (int)data.AbsMinHeat; _configration.UpdateConfigration(coolingConfig); //pumbConfig.Min = 0; //_configration.UpdateConfigration(pumbConfig); _mainWindow.sendConfig = true; } _machine.UpdateMachine(data); _mainWindow._machine = _machine.ReadMachine(); } else if (sender is Border border) { Button button1 = this.FindControl