port from perforce
This commit is contained in:
105
intromat/Intromat/Views/ExplorerView.xaml.cs
Normal file
105
intromat/Intromat/Views/ExplorerView.xaml.cs
Normal file
@@ -0,0 +1,105 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user