JD2022-TU1/main/tools/modules/Orbit.Module/ViewModel/FolderExplorerViewModel.cs

88 lines
No EOL
2.8 KiB
C#

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<DirectoryInfo> TopFolders { get; set; } = new ObservableCollection<DirectoryInfo>();
public ICollection<ShellObjectViewModel> SelectedItems { get; } = new List<ShellObjectViewModel>();
public int SelectedIndexTopFolders
{
get => _selectedIndexTopFolders;
set => SetProperty(ref _selectedIndexTopFolders, value);
}
public Map SelectedMap { get; set; }
public IEnumerable<string> 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());
}
}
}