feat(client-ui): Shelve/Confirm context-menu items with per-item enablement
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using Avalonia.Controls;
|
||||
using Avalonia.Interactivity;
|
||||
using Avalonia.Media;
|
||||
@@ -31,9 +32,19 @@ public partial class AlarmsView : UserControl
|
||||
if (grid == null) return;
|
||||
|
||||
var contextMenu = new ContextMenu();
|
||||
|
||||
var ackItem = new MenuItem { Header = "Acknowledge..." };
|
||||
ackItem.Click += OnAcknowledgeClicked;
|
||||
contextMenu.Items.Add(ackItem);
|
||||
|
||||
var shelveItem = new MenuItem { Header = "Shelve..." };
|
||||
shelveItem.Click += OnShelveClicked;
|
||||
contextMenu.Items.Add(shelveItem);
|
||||
|
||||
var confirmItem = new MenuItem { Header = "Confirm..." };
|
||||
confirmItem.Click += OnConfirmClicked;
|
||||
contextMenu.Items.Add(confirmItem);
|
||||
|
||||
contextMenu.Opening += OnContextMenuOpening;
|
||||
grid.ContextMenu = contextMenu;
|
||||
}
|
||||
@@ -61,7 +72,27 @@ public partial class AlarmsView : UserControl
|
||||
private void OnContextMenuOpening(object? sender, CancelEventArgs e)
|
||||
{
|
||||
var grid = this.FindControl<DataGrid>("AlarmsGrid");
|
||||
if (grid?.SelectedItem is not AlarmEventViewModel alarm || !alarm.CanAcknowledge)
|
||||
if (grid?.SelectedItem is not AlarmEventViewModel alarm)
|
||||
{
|
||||
e.Cancel = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if (grid.ContextMenu is { } menu)
|
||||
{
|
||||
foreach (var item in menu.Items.OfType<MenuItem>())
|
||||
{
|
||||
item.IsEnabled = item.Header switch
|
||||
{
|
||||
"Acknowledge..." => alarm.CanAcknowledge,
|
||||
"Shelve..." => alarm.CanShelve,
|
||||
"Confirm..." => alarm.CanConfirm,
|
||||
_ => true
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
if (!alarm.CanAcknowledge && !alarm.CanShelve && !alarm.CanConfirm)
|
||||
e.Cancel = true;
|
||||
}
|
||||
|
||||
@@ -78,4 +109,24 @@ public partial class AlarmsView : UserControl
|
||||
var ackWindow = new AckAlarmWindow(vm, alarm);
|
||||
ackWindow.ShowDialog(parentWindow);
|
||||
}
|
||||
|
||||
private void OnShelveClicked(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (DataContext is not AlarmsViewModel vm) return;
|
||||
var grid = this.FindControl<DataGrid>("AlarmsGrid");
|
||||
if (grid?.SelectedItem is not AlarmEventViewModel alarm || !alarm.CanShelve) return;
|
||||
var parentWindow = this.FindAncestorOfType<Window>();
|
||||
if (parentWindow == null) return;
|
||||
new ShelveAlarmWindow(vm, alarm).ShowDialog(parentWindow);
|
||||
}
|
||||
|
||||
private void OnConfirmClicked(object? sender, RoutedEventArgs e)
|
||||
{
|
||||
if (DataContext is not AlarmsViewModel vm) return;
|
||||
var grid = this.FindControl<DataGrid>("AlarmsGrid");
|
||||
if (grid?.SelectedItem is not AlarmEventViewModel alarm || !alarm.CanConfirm) return;
|
||||
var parentWindow = this.FindAncestorOfType<Window>();
|
||||
if (parentWindow == null) return;
|
||||
new ConfirmAlarmWindow(vm, alarm).ShowDialog(parentWindow);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user