using Avalonia.Collections; using CommunityToolkit.Mvvm.Input; using System; using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace ShakerApp.ViewModels { [AttributeUsage(AttributeTargets.Method)] public sealed class MenuClickAttribute:Attribute { public MenuClickAttribute(string key = "") { Key = key; } public string Key { get; } = string.Empty; } internal class MenuViewModel:ViewModelBase { public ICommand Command => new RelayCommand((p) => MenuClick?.Invoke(p)); [AllowNull] public Action MenuClick { get; set; } private bool isMenuVisible = true; public bool IsMenuVisible { get => isMenuVisible; set => SetProperty(ref isMenuVisible, value); } public MenuItemViewModel? this[string key] { get { MenuItemViewModel? menu = null; foreach (var item in Menus) { menu = GetMenuItem(item, key); if(menu!=null)return menu; } return menu; } } private MenuItemViewModel? GetMenuItem(MenuItemViewModel menuItem,string key) { if (menuItem == null ) return null; if(menuItem.Header == key)return menuItem; if( menuItem.Items == null || menuItem.Items.Count == 0)return null; foreach (var item in menuItem.Items) { var tempmenu= GetMenuItem(item, key); if(tempmenu!=null)return tempmenu; } return null; } public AvaloniaList Menus { get; } = new AvaloniaList(); private MenuViewModel() { Menus.Add(GetFileMenu()); Menus.Add(GetDeviceMenu()); Menus.Add(GetTestMenu()); } private MenuItemViewModel GetFileMenu() { return new MenuItemViewModel(new MenuItemViewModel() { Header = "MenuSaveConfig", IconKey = "SaveGeometry", IconVisibile = true, IsEnabled = true, IsSeparator = false, IsVisible = true, }, new MenuItemViewModel() { Header = "MenuLoadConfig", IconKey = "OpenGeometry", IconVisibile = true, IsEnabled = true, IsSeparator = false, IsVisible = true, }, new MenuItemViewModel() { IsSeparator = true, }, new MenuItemViewModel() { Header = "MenuExit", IconKey = "ExitGeometry", IconVisibile = true, IsEnabled = true, IsSeparator = false, IsVisible = true, }) { Header = "MenuFile", }; } private MenuItemViewModel GetDeviceMenu() { return new MenuItemViewModel(new MenuItemViewModel() { Header = "MenuManger", IsEnabled= true, IsVisible= true, },new MenuItemViewModel() { Header = "MenuConnect", IsEnabled= true, IsVisible = false, },new MenuItemViewModel() { Header= "MenuDisConnect", IsEnabled = false, },new MenuItemViewModel() { Header = "MenuDeviceConfig", IsEnabled = false, },new MenuItemViewModel() { IsSeparator= true, },new MenuItemViewModel() { Header = "MenuShakerControl", IsEnabled = false, },new MenuItemViewModel() { IsSeparator = true, },new MenuItemViewModel() { Header = "MenuOilSourceControl", IsEnabled =false, },new MenuItemViewModel() { Header= "CanDebug", IsSeparator =true, IsVisible = true, },new MenuItemViewModel() { Header= "MenuDebug", IsEnabled = false, }) { Header = "MenuDevice", }; } private MenuItemViewModel GetTestMenu() { return new MenuItemViewModel(new MenuItemViewModel()) { Header = "MenuTest", IsEnabled = false, }; } static MenuViewModel() { } public static MenuViewModel Instance { get; } = new MenuViewModel(); } }