Push Alpha Version
This commit is contained in:
@@ -7,115 +7,166 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using TcEventLoggerAdsProxyLib;
|
||||
using InfineonHMI.Pages.Views;
|
||||
|
||||
namespace UniperHMI;
|
||||
namespace InfineonHMI;
|
||||
|
||||
public sealed partial class MainWindowVM : ObservableObject, IRecipient<NavigateMessage>, IDisposable
|
||||
{
|
||||
|
||||
[ObservableProperty]
|
||||
private StringControlButtonVM dummyStringVM;
|
||||
[ObservableProperty] private StringControlButtonVM dummyStringVM;
|
||||
|
||||
[ObservableProperty]
|
||||
private Page currentPage;
|
||||
[ObservableProperty] private Page currentPage;
|
||||
|
||||
[ObservableProperty] private Visibility statusBarVisible;
|
||||
|
||||
[ObservableProperty]
|
||||
private bool canNavigateBack;
|
||||
[ObservableProperty] private string breadcrumb;
|
||||
|
||||
[ObservableProperty]
|
||||
private Visibility statusBarVisible;
|
||||
[ObservableProperty] private string actualUser;
|
||||
|
||||
[ObservableProperty]
|
||||
private string breadcrumb;
|
||||
private const string _actualUserPrefix = "Aktueller Benutzer: \n";
|
||||
|
||||
private readonly IAdsManager _adsManager;
|
||||
private readonly IConfiguration _config;
|
||||
private readonly TcEventLogger _eventlogger;
|
||||
|
||||
private readonly IAdsManager _adsManager;
|
||||
private readonly IConfiguration _config;
|
||||
private readonly TcEventLogger _eventlogger;
|
||||
// Last active event
|
||||
[ObservableProperty] private string currentActiveEvent = "";
|
||||
|
||||
// Last active event
|
||||
[ObservableProperty]
|
||||
private string currentActiveEvent = "";
|
||||
private readonly object _lock = new();
|
||||
|
||||
private readonly object _lock = new();
|
||||
// Empty page
|
||||
private readonly Page _emptyPage;
|
||||
|
||||
// Empty page
|
||||
private readonly Page _emptyPage;
|
||||
// Last navigate message
|
||||
private readonly Stack<NavigateMessage> _messageStack = new();
|
||||
NavigateMessage? _currentMessage;
|
||||
|
||||
// Last navigate message
|
||||
private readonly Stack<NavigateMessage> _messageStack = new();
|
||||
NavigateMessage? _currentMessage;
|
||||
// Events page view model
|
||||
[ObservableProperty] EventsPageVM _eventsPageVM;
|
||||
|
||||
// Events page view model
|
||||
[ObservableProperty]
|
||||
EventsPageVM _eventsPageVM;
|
||||
// Settings page viem model
|
||||
SettingsPageVM? _settingsPageVM;
|
||||
|
||||
// Settings page viem model
|
||||
SettingsPageVM? _settingsPageVM;
|
||||
ProductionOverviewPageVM? _productionOverviewPageVM;
|
||||
|
||||
// Hot Coolplate page view model
|
||||
HotCoolPlatePageVM? _hotCoolplatePageVM;
|
||||
private MachineOverviewPageVM? _machineOverviewPageVM;
|
||||
|
||||
// Hot Coolplate page view model
|
||||
HotCoolPlatePageVM? _hotCoolplatePageVM;
|
||||
|
||||
// Chuck Magazin page view model
|
||||
ChuckMagazinPageVM? _chuckMagazinPageVM;
|
||||
|
||||
// Kuka Robot page view model
|
||||
KukaRobotPageVM? _kukaRobotPageVM;
|
||||
ReceipePageVM? _receipePageVM;
|
||||
|
||||
public MainWindowVM(IAdsManager adsManager, IConfiguration config, TcEventLogger eventLogger)
|
||||
{
|
||||
_adsManager = adsManager;
|
||||
_config = config;
|
||||
public MainWindowVM(IAdsManager adsManager, IConfiguration config, TcEventLogger eventLogger)
|
||||
{
|
||||
_adsManager = adsManager;
|
||||
_config = config;
|
||||
|
||||
// Create dummy string
|
||||
DummyStringVM = new StringControlButtonVM();
|
||||
ActualUser = _actualUserPrefix + "---------";
|
||||
// Create dummy string
|
||||
DummyStringVM = new StringControlButtonVM();
|
||||
|
||||
// Create empty page
|
||||
_emptyPage = new();
|
||||
// Create empty page
|
||||
_emptyPage = new();
|
||||
|
||||
// Create events page viewmodel
|
||||
_eventlogger = eventLogger;
|
||||
_eventsPageVM = new(_eventlogger);
|
||||
// Create events page viewmodel
|
||||
_eventlogger = eventLogger;
|
||||
_eventsPageVM = new(_eventlogger);
|
||||
|
||||
CurrentPage = _emptyPage;
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
_messageStack.Push(_currentMessage);
|
||||
CurrentPage = _emptyPage;
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
_messageStack.Push(_currentMessage);
|
||||
|
||||
WeakReferenceMessenger.Default.Register<NavigateMessage>(this);
|
||||
WeakReferenceMessenger.Default.Register<NavigateMessage>(this);
|
||||
|
||||
breadcrumb = "";
|
||||
}
|
||||
breadcrumb = "";
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void SettingsWindow()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
NavigateMessage message = new("", typeof(SettingsPage));
|
||||
Receive(message);
|
||||
}
|
||||
public void NavigateFromOuterPage(NavigateMessage message, NavigateMessage nextMessage)
|
||||
{
|
||||
_currentMessage = message;
|
||||
|
||||
[RelayCommand]
|
||||
public void AutomaticModeClicked()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
NavigateMessage message = new(_config["AutomaticModeVarName"]!, typeof(AutomaticModePage));
|
||||
Receive(message);
|
||||
}
|
||||
Navigate(message, nextMessage);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public void ManualModeClicked()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
NavigateMessage message = new("", typeof(BatteryOverviewPage));
|
||||
Receive(message);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
[RelayCommand]
|
||||
private void SettingsWindow()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
NavigateMessage message = new("", typeof(SettingsPage));
|
||||
Receive(message);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ChangeUserClicked()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void WorkingModeSelectionClicked()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void OverviewWindowClicked()
|
||||
{
|
||||
_messageStack.Clear();
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
NavigateMessage message = new(_config[""]!, typeof(MachineOverviewPage));
|
||||
Receive(message);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ProductionWindowClicked()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
NavigateMessage message = new(_config[""]!, typeof(ProductionOverviewPage));
|
||||
Receive(message);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ProtocolWindowClicked()
|
||||
{
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ReceipesWindowClicked()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
NavigateMessage message = new(_config[""]!, typeof(ReceipePage));
|
||||
Receive(message);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void TrendWindowClicked()
|
||||
{
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void ComponentsWindowClicked()
|
||||
{
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
private void SettingsWindowClicked()
|
||||
{
|
||||
_messageStack.Clear();
|
||||
NavigateMessage message = new("", typeof(SettingsPage));
|
||||
Receive(message);
|
||||
}
|
||||
|
||||
|
||||
[RelayCommand]
|
||||
public void EventsListClicked()
|
||||
{
|
||||
StatusBarVisible = Visibility.Collapsed;
|
||||
@@ -124,68 +175,8 @@ public sealed partial class MainWindowVM : ObservableObject, IRecipient<Navigate
|
||||
NavigateMessage message = new("", typeof(EventsPage));
|
||||
Receive(message);
|
||||
}
|
||||
[RelayCommand]
|
||||
public void KukaRobotClicked()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
NavigateMessage message = new(_config["KukaRobotVarName"]!, typeof(KukaRobotPage));
|
||||
Receive(message);
|
||||
}
|
||||
[RelayCommand]
|
||||
public void HotCoolplateClicked()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
NavigateMessage message = new(_config["HotCoolplateVarName"]!, typeof(HotCoolPlatePage));
|
||||
Receive(message);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public void ChuckMagazinClicked()
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
_messageStack.Clear();
|
||||
_currentMessage = new NavigateMessage("", typeof(Page));
|
||||
NavigateMessage message = new(_config["ChuckMagazinVarName"]!, typeof(ChuckMagazinPage));
|
||||
Receive(message);
|
||||
}
|
||||
|
||||
[RelayCommand]
|
||||
public void NavigateBack()
|
||||
{
|
||||
if (_messageStack.Count == 0)
|
||||
{
|
||||
CanNavigateBack = false;
|
||||
return;
|
||||
}
|
||||
|
||||
_currentMessage = _messageStack.Pop();
|
||||
|
||||
// Update if we can use the navigate back button
|
||||
if (_messageStack.Count > 0)
|
||||
CanNavigateBack = true;
|
||||
else
|
||||
{
|
||||
StatusBarVisible = Visibility.Visible;
|
||||
CanNavigateBack = false;
|
||||
}
|
||||
|
||||
|
||||
// Remove last two entrys from Breadcrumbs
|
||||
int index = -1;
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
index = Breadcrumb.LastIndexOf('>');
|
||||
if (index != -1)
|
||||
Breadcrumb = Breadcrumb[..index];
|
||||
}
|
||||
|
||||
// Navigate to page
|
||||
Navigate(_currentMessage);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Only use for forward traversal!
|
||||
public void Receive(NavigateMessage message)
|
||||
@@ -201,13 +192,11 @@ public sealed partial class MainWindowVM : ObservableObject, IRecipient<Navigate
|
||||
// Save current message for later push
|
||||
_currentMessage = message;
|
||||
|
||||
// Set can navigate back
|
||||
CanNavigateBack = true;
|
||||
|
||||
Navigate(message);
|
||||
}
|
||||
|
||||
private void Navigate(NavigateMessage message)
|
||||
private void Navigate(NavigateMessage message, NavigateMessage? nextMessage = null)
|
||||
{
|
||||
// Dispose current pages viewmodel
|
||||
if (CurrentPage.DataContext is IDisposable viewModel)
|
||||
@@ -219,44 +208,21 @@ public sealed partial class MainWindowVM : ObservableObject, IRecipient<Navigate
|
||||
// Create new page
|
||||
switch (message.type.Name)
|
||||
{
|
||||
case nameof(AutomaticModePage):
|
||||
var automaticModeViewModel = (AutomaticModePageVM)ActivatorUtilities.CreateInstance(App.AppHost!.Services, typeof(AutomaticModePageVM), message.VariableName); //App.AppHost!.Services.GetRequiredService<AutomaticModePageVM>();
|
||||
AutomaticModePage automaticModePage = new() { DataContext = automaticModeViewModel };
|
||||
CurrentPage = automaticModePage;
|
||||
Breadcrumb = "> Automatic";
|
||||
break;
|
||||
case nameof(ProductionOverviewPage):
|
||||
|
||||
case nameof(BatteryOverviewPage):
|
||||
var batteryOverviewPageVM = App.AppHost!.Services.GetRequiredService<BatteryOverviewPageVM>();
|
||||
BatteryOverviewPage batteryOverviewPage = new() { DataContext = batteryOverviewPageVM };
|
||||
CurrentPage = batteryOverviewPage;
|
||||
Breadcrumb = "> Manual";
|
||||
break;
|
||||
if (_productionOverviewPageVM == null || nextMessage != null)
|
||||
_productionOverviewPageVM = new ProductionOverviewPageVM(_adsManager, _config, _eventlogger, nextMessage);
|
||||
ProductionOverviewPage productionOverviewPage = new() { DataContext = _productionOverviewPageVM };
|
||||
CurrentPage = productionOverviewPage;
|
||||
break;
|
||||
|
||||
case nameof(StringOverviewPage):
|
||||
var stringOverviewVM = (StringOverviewPageVM)ActivatorUtilities.CreateInstance(App.AppHost!.Services, typeof(StringOverviewPageVM), message.VariableName);
|
||||
StringOverviewPage stringPage = new() { DataContext = stringOverviewVM };
|
||||
CurrentPage = stringPage;
|
||||
if (message.Header.Length > 0)
|
||||
AppendBreadcrumb(message.Header);
|
||||
break;
|
||||
case nameof(MachineOverviewPage):
|
||||
_machineOverviewPageVM?.Dispose();
|
||||
|
||||
case nameof(ModuleOverviewPage):
|
||||
var moduleOverviewVM = (ModuleOverviewPageVM)ActivatorUtilities.CreateInstance(App.AppHost!.Services, typeof(ModuleOverviewPageVM), message.VariableName);
|
||||
ModuleOverviewPage modulePage = new() { DataContext = moduleOverviewVM };
|
||||
CurrentPage = modulePage;
|
||||
if (message.Header.Length > 0)
|
||||
AppendBreadcrumb(message.Header);
|
||||
break;
|
||||
|
||||
case nameof(UnitOverviewPage):
|
||||
var unitOverviewVM = (UnitOverviewPageVM)ActivatorUtilities.CreateInstance(App.AppHost!.Services, typeof(UnitOverviewPageVM), message.VariableName);
|
||||
unitOverviewVM.UnitName = message.Header;
|
||||
UnitOverviewPage unitPage = new() { DataContext = unitOverviewVM };
|
||||
CurrentPage = unitPage;
|
||||
if (message.Header.Length > 0)
|
||||
AppendBreadcrumb(message.Header);
|
||||
break;
|
||||
_machineOverviewPageVM = new MachineOverviewPageVM(_adsManager, _config,this, new ProductionOverviewPageVM(_adsManager, _config, _eventlogger), _eventlogger);
|
||||
MachineOverviewPage machineOverviewPage = new() { DataContext = _machineOverviewPageVM };
|
||||
CurrentPage = machineOverviewPage;
|
||||
break;
|
||||
|
||||
case nameof(EventsPage):
|
||||
#pragma warning disable MVVMTK0034 // Direct field reference to [ObservableProperty] backing field
|
||||
@@ -276,15 +242,16 @@ public sealed partial class MainWindowVM : ObservableObject, IRecipient<Navigate
|
||||
Breadcrumb = " > Settings";
|
||||
break;
|
||||
|
||||
case nameof(KukaRobotPage):
|
||||
// Create page view model only once
|
||||
if (_kukaRobotPageVM == null)
|
||||
_kukaRobotPageVM = new(_adsManager, "GVL_CONFIG.stRobotConfig");
|
||||
case nameof(ReceipePage):
|
||||
if (_receipePageVM == null)
|
||||
_receipePageVM = new();
|
||||
|
||||
KukaRobotPage kukaRobotPage = new() { DataContext = _kukaRobotPageVM };
|
||||
CurrentPage = kukaRobotPage;
|
||||
Breadcrumb = " > Kuka Roboter";
|
||||
break;
|
||||
ReceipePage receipePage = new() { DataContext = _receipePageVM };
|
||||
CurrentPage = receipePage;
|
||||
Breadcrumb = " > Kuka Roboter";
|
||||
break;
|
||||
|
||||
|
||||
|
||||
case nameof(HotCoolPlatePage):
|
||||
if (_hotCoolplatePageVM == null)
|
||||
@@ -296,15 +263,7 @@ public sealed partial class MainWindowVM : ObservableObject, IRecipient<Navigate
|
||||
break;
|
||||
|
||||
|
||||
case nameof(ChuckMagazinPage):
|
||||
if (_chuckMagazinPageVM == null)
|
||||
_chuckMagazinPageVM = new(_adsManager, "GVL_Config.stChuckMagazinConfig");
|
||||
|
||||
ChuckMagazinPage chuckMagazinPage = new() { DataContext= _chuckMagazinPageVM };
|
||||
CurrentPage = chuckMagazinPage;
|
||||
Breadcrumb = " > Tellermagazin";
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
CurrentPage = new Page();
|
||||
break;
|
||||
@@ -322,7 +281,7 @@ public sealed partial class MainWindowVM : ObservableObject, IRecipient<Navigate
|
||||
[RelayCommand]
|
||||
private void AckAlarms()
|
||||
{
|
||||
_adsManager.WriteValue("GVL_SCADA.stAckAlarmsButton.xRequest", true);
|
||||
_adsManager.WriteValue("GVL_SCADA.stConfirmAlarmsBtn.xRequest", true);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
||||
Reference in New Issue
Block a user