105 lines
5.6 KiB
C#
105 lines
5.6 KiB
C#
using System;
|
|
using System.Linq;
|
|
using System.Reactive.Disposables;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using System.Windows.Input;
|
|
using Intromat.ViewModels;
|
|
using ReactiveUI;
|
|
|
|
namespace Intromat.Views
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for ExplorerView.xaml
|
|
/// </summary>
|
|
public partial class ExplorerView : IViewFor<ExplorerViewModel>
|
|
{
|
|
public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(ExplorerViewModel), typeof(ExplorerView), new PropertyMetadata(null));
|
|
private readonly MenuItem _newModuleButton;
|
|
private readonly MenuItem _renameModuleButton;
|
|
private readonly MenuItem _deleteModuleButton;
|
|
private readonly MenuItem _createModuleFolderButton;
|
|
private readonly MenuItem _renameFolderButton;
|
|
private readonly MenuItem _deleteFolderButton;
|
|
private readonly MenuItem _createSubFolderButton;
|
|
private readonly MenuItem _createModuleFileButton;
|
|
private readonly MenuItem _createSubFileButton;
|
|
private readonly MenuItem _renameFileButton;
|
|
private readonly MenuItem _deleteFileButton;
|
|
|
|
public ExplorerView()
|
|
{
|
|
InitializeComponent();
|
|
|
|
var projectMenu = (ContextMenu)Resources["projectMenu"];
|
|
var projectMenuItems = projectMenu.Items.OfType<MenuItem>().ToList();
|
|
_newModuleButton = projectMenuItems.First(c => c.Name == nameof(_newModuleButton));
|
|
|
|
var moduleMenu = (ContextMenu)Resources["moduleMenu"];
|
|
var moduleMenuItems = moduleMenu.Items.OfType<MenuItem>().ToList();
|
|
_renameModuleButton = moduleMenuItems.First(c => c.Name == nameof(_renameModuleButton));
|
|
_deleteModuleButton = moduleMenuItems.First(c => c.Name == nameof(_deleteModuleButton));
|
|
_createModuleFolderButton = moduleMenuItems.First(c => c.Name == nameof(_createModuleFolderButton));
|
|
_createModuleFileButton = moduleMenuItems.First(c => c.Name == nameof(_createModuleFileButton));
|
|
|
|
var folderMenu = (ContextMenu)Resources["folderMenu"];
|
|
var folderMenuItems = folderMenu.Items.OfType<MenuItem>().ToList();
|
|
_renameFolderButton = folderMenuItems.First(c => c.Name == nameof(_renameFolderButton));
|
|
_deleteFolderButton = folderMenuItems.First(c => c.Name == nameof(_deleteFolderButton));
|
|
_createSubFolderButton = folderMenuItems.First(c => c.Name == nameof(_createSubFolderButton));
|
|
_createSubFileButton = folderMenuItems.First(c => c.Name == nameof(_createSubFileButton));
|
|
|
|
var documentMenu = (ContextMenu)Resources["documentMenu"];
|
|
var documentMenuItems = documentMenu.Items.OfType<MenuItem>().ToList();
|
|
_renameFileButton = documentMenuItems.First(c => c.Name == nameof(_renameFileButton));
|
|
_deleteFileButton = documentMenuItems.First(c => c.Name == nameof(_deleteFileButton));
|
|
|
|
this.WhenActivated(d =>
|
|
{
|
|
_treeView.ItemsSource = ViewModel!.TreeRoot;
|
|
_treeView.Events().MouseDoubleClick.Subscribe(OnTreeViewDoubleClicked);
|
|
projectMenu.Events().DataContextChanged.Subscribe(args => ViewModel.CurrentProject = (ProjectViewModel)args.NewValue);
|
|
moduleMenu.Events().DataContextChanged.Subscribe(args => ViewModel.CurrentModule = (ModuleViewModel)args.NewValue);
|
|
folderMenu.Events().DataContextChanged.Subscribe(args => ViewModel.CurrentFolder = (FolderViewModel)args.NewValue);
|
|
documentMenu.Events().DataContextChanged.Subscribe(args => ViewModel.CurrentFile = (FileViewModel)args.NewValue);
|
|
|
|
this.BindCommand(ViewModel, vm => vm.NewModule, v => v._newModuleButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.RenameModule, v => v._renameModuleButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.DeleteModule, v => v._deleteModuleButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.NewModuleFolder, v => v._createModuleFolderButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.NewSubFolder, v => v._createSubFolderButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.RenameFolder, v => v._renameFolderButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.DeleteFolder, v => v._deleteFolderButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.NewFile, v => v._createModuleFileButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.NewFile, v => v._createSubFileButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.RenameFile, v => v._renameFileButton).DisposeWith(d);
|
|
this.BindCommand(ViewModel, vm => vm.DeleteFile, v => v._deleteFileButton).DisposeWith(d);
|
|
});
|
|
}
|
|
|
|
object? IViewFor.ViewModel
|
|
{
|
|
get => ViewModel;
|
|
set => ViewModel = (ExplorerViewModel?)value;
|
|
}
|
|
|
|
public ExplorerViewModel? ViewModel
|
|
{
|
|
get => (ExplorerViewModel?)GetValue(ViewModelProperty);
|
|
set => SetValue(ViewModelProperty, value);
|
|
}
|
|
|
|
private void OnTreeViewDoubleClicked(MouseButtonEventArgs args)
|
|
{
|
|
var vm = ((FrameworkElement)args.OriginalSource).DataContext;
|
|
if (vm is FileViewModel fileVm)
|
|
{
|
|
var mainVm = ViewModel!.MainViewModel;
|
|
if (mainVm.Files.All(d => d != fileVm))
|
|
mainVm.Files.Add(fileVm);
|
|
|
|
mainVm.ActiveFile = fileVm;
|
|
}
|
|
}
|
|
}
|
|
} |