388 lines
15 KiB
C#
388 lines
15 KiB
C#
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);
|
||
|
||
|
||
}
|
||
} |