Files

388 lines
15 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Avalonia;
using Avalonia.Controls;
using Avalonia.Controls.Documents;
using Avalonia.Controls.Shapes;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using Avalonia.Media;
using AvaloniaApplication1.DataBase;
using DaireApplication.DataBase;
using DaireApplication.ViewModels;
using DaireApplication.Views;
using System;
using System.Drawing;
using System.Reflection.PortableExecutable;
using System.Threading;
namespace DaireApplication;
public partial class Settings : UserControl
{
Button controllButton = new Button();
private MainWindow? _mainWindow;
private UserTable? _currentUser;
public RecipeTable? _recipeTable;
private MachineTable _machine;
public string ActiveColor { get; set; } = "#A4275D";
public string PassiveColor { get; set; } = "#666666";
public Settings()
{
InitializeComponent();
}
public Settings(MainWindow mainWindow, UserTable currentUser,RecipeTable recipeTable)
{
_currentUser = currentUser;
_mainWindow = mainWindow;
_recipeTable = recipeTable;
_machine = new MachineTable();
_machine = _machine.ReadMachine();
InitializeComponent();
setDefaultSettings();
setDafaultValues();
mixerBtn.Click += _mainWindow.MotorClick;
fountainBtn.Click += _mainWindow.FountainClick;
}
private void toggelOnOffClick(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
var StackPanel = button.Content as StackPanel;
var Label = StackPanel.Children;
var underLine = Label[2] as Avalonia.Controls.Shapes.Rectangle;
var titelLable = Label[0] as Label;
if (Label[1] is Label targetLable)
{
if (targetLable.Content == "ON")
{
if (titelLable.Content == "MOLD HEATER")
{
_mainWindow.moldHeaterMotor = 0;
}
if (titelLable.Content == "VIBRATION")
{
_mainWindow.vibrationMotor = 0;
}
if (titelLable.Content == "VIB. HEATER")
{
_mainWindow.vibHeaterMotor = 0;
}
}
else
{
if (titelLable.Content == "MOLD HEATER")
{
_mainWindow.moldHeaterMotor = 1;
}
if (titelLable.Content == "VIBRATION")
{
_mainWindow.vibrationMotor = 1;
}
if (titelLable.Content == "VIB. HEATER")
{
_mainWindow.vibHeaterMotor = 1;
}
}
}
}
}
private void PedalBtn(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
var StackPanel = button.Content as StackPanel;
var Label = StackPanel.Children;
var underLine = Label[1] as Avalonia.Controls.Shapes.Rectangle;
if (Label[0] is TextBlock targetLable)
{
if (targetLable.Text == "AUTO")
{
if (_mainWindow.pedalOnTimer!=null )
{
_mainWindow.pedalOnTimer.Change(Timeout.Infinite, Timeout.Infinite);
_mainWindow.pedalOnTimer = null;
_mainWindow.pedalOnSeconds = 0;
}
if (_mainWindow.pedalOffTimer!=null)
{
_mainWindow.pedalOffTimer.Change(Timeout.Infinite, Timeout.Infinite);
_mainWindow.pedalOffTimer = null;
_mainWindow.pedalOffSeconds = 0;
}
_mainWindow.pedalMotor = 0;
targetLable.Text = "MANUAL";
underLine.Fill = Brush.Parse("#666666");
PedalAutoContainer.IsEnabled = false;
_recipeTable.Pedal = true;
}
else
{
_mainWindow.pedalMotor = 1;
_mainWindow.pedalState = -1;
_mainWindow.setPedalTimerOnce = 1;
_mainWindow.pedalOnSeconds = 0;
_mainWindow.pedalOffSeconds = 0;
targetLable.Text = "AUTO";
underLine.Fill = Brush.Parse("#A4275D");
PedalAutoContainer.IsEnabled = true;
_recipeTable.Pedal = false;
}
_recipeTable.UpdateRecipe(_recipeTable);
}
}
}
private void adjustPedalTime(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
if (button.Classes[0].ToString()== "PedalOff")
{
if (button.Content == "")
{
if (Int32.Parse(PedalOffTime.Text) > 0)
{
PedalOffTime.Text = (Int32.Parse(PedalOffTime.Text) - 1).ToString();
}
}
else if (button.Content == "+")
{
PedalOffTime.Text = (Int32.Parse(PedalOffTime.Text) + 1).ToString();
}
_recipeTable.PedalOffTime = Int32.Parse(PedalOffTime.Text);
_recipeTable.UpdateRecipe(_recipeTable);
}
else
{
if (button.Content == "")
{
if (Int32.Parse(PedalOnTime.Text) > 0)
{
PedalOnTime.Text = (Int32.Parse(PedalOnTime.Text) - 1).ToString();
}
}
else if (button.Content == "+")
{
if (int.TryParse(PedalOnTime.Text, out int value))
{
if (value < 9)
{
PedalOnTime.Text = (value + 1).ToString();
}
}
}
_recipeTable.PedalOnTime = Int32.Parse(PedalOnTime.Text);
_recipeTable.UpdateRecipe(_recipeTable);
}
_recipeTable = _recipeTable.ReadRecipesById(_recipeTable.Id.ToString());
}
}
private async void OnIgnorePopupOverlayPointerPressed(object? sender, RoutedEventArgs e)
{
DeletePopupOverlay.IsVisible = false;
}
private async void HideTempErrorPopUp(object? sender, RoutedEventArgs e)
{
_mainWindow.pauseTimer = false;
_mainWindow.pauseTempTracking = false; // Allow process to continue after clicking "No"
_mainWindow.tempWarningAccepted = true; // User accepted the temperature warning
tempErrorPopupOverlay.IsVisible = false;
}
private async void YesBtnClick(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
if (DeletePopupOverlay.Tag=="home")
{
_mainWindow.resetAll();
// rest the board
_mainWindow.restBoard = true;
_mainWindow.UserName.Content = "Select User";
_mainWindow.footerMsg.Text = "";
_mainWindow.ContentArea.Content = new Home(_mainWindow);
}
else if (DeletePopupOverlay.Tag == "recipeSel")
{
_mainWindow.resetAll();
// rest the board
_mainWindow.restBoard = true;
_mainWindow.footerMsg.Text = "";
_mainWindow.ContentArea.Content = new Recipe(_mainWindow, Program.currentUser);
}
}
}
private async void ErrorYesBtnClick(object? sender, RoutedEventArgs e)
{
if (sender is Button button)
{
//_mainWindow.pause = true;
//_mainWindow.pauseTempTracking = true;
//_mainWindow.pauseTimer = true;
// stop the recipe
_mainWindow.startRecipe = 0;
_mainWindow.Heating = 0;
_mainWindow.cooling = 0;
_mainWindow.pouring = 0;
_mainWindow.PumbOn = -1;
_mainWindow.pedalMotor = -1;
if (_mainWindow.heatingTimer != null)
{
_mainWindow.heatingTimer.Change(Timeout.Infinite, Timeout.Infinite);
_mainWindow.heatingSeconds = 0;
}
if (_mainWindow.coolingTimer != null)
{
_mainWindow.coolingTimer.Change(Timeout.Infinite, Timeout.Infinite);
_mainWindow.coolingSeconds = 0;
}
if (_mainWindow.pouringTimer != null)
{
_mainWindow.pouringTimer.Change(Timeout.Infinite, Timeout.Infinite);
_mainWindow.pouringSeconds = 0;
}
var fount = _mainWindow._mapping.Find(x => x.Name.ToLower() == "Pump".ToLower());
if (fount != null)
{
if (fount.BitNumbers.Count > 0)
{
foreach (var bit in fount.BitNumbers)
{
_mainWindow.holdingRegister.motor &= (ushort)~(1 << bit);
}
}
}
_mainWindow.holdingRegister.setTemp1 = -10000;
_mainWindow.holdingRegister.setTemp2 = -10000;
_mainWindow.holdingRegister.setTemp3 = -10000;
_mainWindow.holdingRegister.setTemp4 = -10000;
await _mainWindow.WriteToSerialAsync("ErrorYesBtnClick");
tempErrorPopupOverlay.IsVisible = false;
_mainWindow.footerMsg.Text = "Recipe Stoped";
_mainWindow.recipeStartBtn.Content = "START RECIPE";
}
}
private void setDefaultSettings()
{
//Set Track Up
_mainWindow.HomeTrack.IsVisible = true;
//_mainWindow.HomePolygon.Stroke = Avalonia.Media.Brushes.Black;
_mainWindow.RecipeSelTrack.IsVisible = true;
_mainWindow.RecipeSelPolygon.Stroke = Avalonia.Media.Brushes.Black;
_mainWindow.RunInterfaceTrack.IsVisible = true;
_mainWindow.RunInterfacePolygon.Stroke = Brush.Parse("#A4275D");
_mainWindow.RecipePanelTrack.IsVisible = false;
_mainWindow.RecipeEditTrack.IsVisible = false;
_mainWindow.SettingTrack.IsVisible = false;
_mainWindow.DiagnosticsTrack.IsVisible = false;
_mainWindow.TitleBtn.IsVisible = true;
_mainWindow.Title.Text = _recipeTable.Name;
//Set Footer
_mainWindow.footerMsg.Text = "Ready";
_mainWindow.footerMsg.MaxWidth = 500;
_mainWindow.footer.Background = Avalonia.Media.Brushes.WhiteSmoke;
_mainWindow.footerMsg.Foreground = Avalonia.Media.Brushes.Green;
_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 = true;
_mainWindow.adminBtns.IsVisible = false;
}
private void setDafaultValues()
{
//Recipe Settings
heatingValue.Content = _recipeTable.HeatingGoal;
coolingValue.Content = _recipeTable.CoolingGoal;
pouringValue.Content = _recipeTable.PouringGoal;
//tankTemp
TankTempValue.Content = _recipeTable?.TankTemp;
//mixer
var mixerChildren= MixerSP.Children;
var mixerLable = mixerChildren[1] as Label;
mixerLable.Content = _recipeTable.Mixer.Value ? "ON" : "OFF";
var mixerUnderLine = mixerChildren[2] as Avalonia.Controls.Shapes.Rectangle;
mixerUnderLine.Fill = _recipeTable.Mixer.Value ? Brush.Parse(ActiveColor) : Brush.Parse(PassiveColor);
//pedal
var pedalChildren = PedalSP.Children;
var pedalText = pedalChildren[0] as TextBlock;
var pedalUnderLine = pedalChildren[1] as Avalonia.Controls.Shapes.Rectangle;
if (_recipeTable.Pedal.Value)
{
pedalText.Text = "MANUAL";
pedalUnderLine.Fill = Brush.Parse(PassiveColor);
PedalAutoContainer.IsEnabled = false;
}
else
{
pedalText.Text = "AUTO";
pedalUnderLine.Fill = Brush.Parse(ActiveColor);
PedalAutoContainer.IsEnabled = true;
}
PedalOffTime.Text = _recipeTable.PedalOffTime.ToString();
PedalOnTime.Text = _recipeTable.PedalOnTime.ToString();
//fountain Temp
FountainTempValue.Content = _recipeTable?.FountainTemp;
//fountain
var fountainChildren = FountainSP.Children;
var fountainLable = fountainChildren[1] as Label;
fountainLable.Content = _recipeTable.Fountain.Value ? "ON" : "OFF";
var fountainUnderLine = fountainChildren[2] as Avalonia.Controls.Shapes.Rectangle;
fountainUnderLine.Fill = _recipeTable.Fountain.Value ? Brush.Parse(ActiveColor) : Brush.Parse(PassiveColor);
//mold Heater
var moldHeaterChildren = MoldHeaterSP.Children;
var moldHeaterLable = moldHeaterChildren[1] as Label;
moldHeaterLable.Content = _recipeTable.MoldHeater.Value ? "ON" : "OFF";
var moldHeaterUnderLine = moldHeaterChildren[2] as Avalonia.Controls.Shapes.Rectangle;
moldHeaterUnderLine.Fill = _recipeTable.MoldHeater.Value ? Brush.Parse(ActiveColor) : Brush.Parse(PassiveColor);
// vibration
var vibrationChildren = VibrationSP.Children;
var vibrationLable = vibrationChildren[1] as Label;
vibrationLable.Content = _recipeTable.Vibration.Value ? "ON" : "OFF";
var vibrationUnderLine = vibrationChildren[2] as Avalonia.Controls.Shapes.Rectangle;
vibrationUnderLine.Fill = _recipeTable.Vibration.Value ? Brush.Parse(ActiveColor) : Brush.Parse(PassiveColor);
// vib heater
var vibHeaterChildren = VibHeaterSP.Children;
var vibHeaterLable = vibHeaterChildren[1] as Label;
vibHeaterLable.Content = _recipeTable.VibHeater.Value ? "ON" : "OFF";
var vibHeaterUnderLine = vibHeaterChildren[2] as Avalonia.Controls.Shapes.Rectangle;
vibHeaterUnderLine.Fill = _recipeTable.VibHeater.Value ? Brush.Parse(ActiveColor) : Brush.Parse(PassiveColor);
}
}