using System.Collections.ObjectModel; using System.ComponentModel; using ModpackUpdater.Apps.Manager.Api.Model; using ModpackUpdater.Apps.Manager.LangRes; using PropertyChanged; namespace ModpackUpdater.Apps.Manager.Ui.Models.MainWindow; public class MainWindowViewModel : INotifyPropertyChanged { public event PropertyChangedEventHandler? PropertyChanged; private ObservableCollection? currentTreeNodes; private MainWindowTreeNode? selectedTreeNode; private IWorkspace? currentWorkspace; public bool IsUpdate => selectedTreeNode is ActionSetTreeNode node && node.Infos is UpdateInfo; public ProgressInfos Progress { get; } = new(); public MainWindowGridRow? SelectedGridRow { get; set; } public DynamicDataView CurrentGridRows { get; } = new(FilterGridRows); [AlsoNotifyFor(nameof(CurrentTreeNodes))] public IWorkspace? CurrentWorkspace { get => currentWorkspace; set { currentTreeNodes = null; currentWorkspace = value; } } public ObservableCollection? CurrentTreeNodes { get { if (currentTreeNodes == null && currentWorkspace?.InstallInfos != null && currentWorkspace?.UpdateInfos != null) currentTreeNodes = [ new ActionSetTreeNode(currentWorkspace.InstallInfos), new SimpleMainWindowTreeNode(GeneralLangRes.Updates) { Image = AppGlobals.Symbols.GetImageSource(AppSymbols.update_done), Nodes = [.. currentWorkspace.UpdateInfos.Updates.Select(n => new ActionSetTreeNode(n))], }, ]; return currentTreeNodes; } } public MainWindowTreeNode? SelectedTreeNode { get => selectedTreeNode; set { selectedTreeNode = value; CurrentGridRows.List.Edit(list => { list.Clear(); if (CurrentWorkspace?.InstallInfos != null && selectedTreeNode is ActionSetTreeNode node) list.AddRange(node.Infos.Actions.Select(n => new MainWindowGridRow(n, CurrentWorkspace.InstallInfos))); }); } } private static Func FilterGridRows(string? searchText) { return n => string.IsNullOrWhiteSpace(searchText) || (!string.IsNullOrWhiteSpace(n.Name) && n.Name.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.InheritFrom) && n.InheritFrom.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.InheritedDestPath) && n.InheritedDestPath.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.InheritedId) && n.InheritedId.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.InheritedSide) && n.InheritedSide.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.InheritedSourceType) && n.InheritedSourceType.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.InheritedUpdateType) && n.InheritedUpdateType.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.SourceName) && n.SourceName.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.SourceOwner) && n.SourceOwner.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.SourceRegex) && n.SourceRegex.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.SourceTag) && n.SourceTag.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.SourceUrl) && n.SourceUrl.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.SrcPath) && n.SrcPath.Contains(searchText)) || (!string.IsNullOrWhiteSpace(n.Website) && n.Website.Contains(searchText)) ; } }