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.ComponentModel;
|
||||||
|
using System.Linq;
|
||||||
using Avalonia.Controls;
|
using Avalonia.Controls;
|
||||||
using Avalonia.Interactivity;
|
using Avalonia.Interactivity;
|
||||||
using Avalonia.Media;
|
using Avalonia.Media;
|
||||||
@@ -31,9 +32,19 @@ public partial class AlarmsView : UserControl
|
|||||||
if (grid == null) return;
|
if (grid == null) return;
|
||||||
|
|
||||||
var contextMenu = new ContextMenu();
|
var contextMenu = new ContextMenu();
|
||||||
|
|
||||||
var ackItem = new MenuItem { Header = "Acknowledge..." };
|
var ackItem = new MenuItem { Header = "Acknowledge..." };
|
||||||
ackItem.Click += OnAcknowledgeClicked;
|
ackItem.Click += OnAcknowledgeClicked;
|
||||||
contextMenu.Items.Add(ackItem);
|
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;
|
contextMenu.Opening += OnContextMenuOpening;
|
||||||
grid.ContextMenu = contextMenu;
|
grid.ContextMenu = contextMenu;
|
||||||
}
|
}
|
||||||
@@ -61,7 +72,27 @@ public partial class AlarmsView : UserControl
|
|||||||
private void OnContextMenuOpening(object? sender, CancelEventArgs e)
|
private void OnContextMenuOpening(object? sender, CancelEventArgs e)
|
||||||
{
|
{
|
||||||
var grid = this.FindControl<DataGrid>("AlarmsGrid");
|
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;
|
e.Cancel = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,4 +109,24 @@ public partial class AlarmsView : UserControl
|
|||||||
var ackWindow = new AckAlarmWindow(vm, alarm);
|
var ackWindow = new AckAlarmWindow(vm, alarm);
|
||||||
ackWindow.ShowDialog(parentWindow);
|
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