using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Linq; using System.Windows.Controls; using ActiproSoftware.Windows.Controls.Shell; using JD.Asset.Types.Map; using Orbit.Module.View; using Plume.Core.Logging; using Plume.WPF.Commands; using Plume.WPF.Mvvm; namespace Orbit.Module.ViewModel { public class FolderExplorerViewModel : BindableBase, IPhotoshopContext { private int _selectedIndexTopFolders; public ILogger Logger { get; } public ObservableCollection TopFolders { get; set; } = new ObservableCollection(); public ICollection SelectedItems { get; } = new List(); public int SelectedIndexTopFolders { get => _selectedIndexTopFolders; set => SetProperty(ref _selectedIndexTopFolders, value); } public Map SelectedMap { get; set; } public IEnumerable SelectedFiles { get { return SelectedItems.Select(x => x.FileSystemPath); } } public DelegateCommand ShowImageViewer { get; } public FolderExplorerViewModel(ILogger logger) { Logger = logger ?? throw new ArgumentNullException(nameof(logger)); ShowImageViewer = new DelegateCommand(OnShowImageViewer); } public void OnSelectionChanged(SelectionChangedEventArgs selectionChangedEventArgs) { foreach (ShellObjectViewModel removedItem in selectionChangedEventArgs.RemovedItems) SelectedItems.Remove(removedItem); foreach (ShellObjectViewModel addedItem in selectionChangedEventArgs.AddedItems) SelectedItems.Add(addedItem); } public void OnSelectedMapChanged(Map map) { SelectedMap = map; TopFolders.Clear(); if (SelectedMap != null) { TopFolders.Add(new DirectoryInfo(SelectedMap.MenuArtFolder)); TopFolders.Add(new DirectoryInfo(SelectedMap.BackgroundFolder)); } int currentSelected = _selectedIndexTopFolders; SelectedIndexTopFolders = currentSelected == -1 ? 0 : currentSelected; } public void Refresh() { OnPropertyChanged(nameof(SelectedIndexTopFolders)); } private void OnShowImageViewer() { if (!SelectedFiles.Any()) return; var imageViewer = new ImageViewer { Owner = System.Windows.Application.Current.MainWindow }; imageViewer.Show(); var imageViewerVm = new ImageViewerViewModel(); imageViewer.DataContext = imageViewerVm; var _ = imageViewerVm.Initialize(SelectedFiles.Last()); } } }