port from perforce

This commit is contained in:
2026-04-18 22:31:51 +02:00
commit 8d0ab5b7cc
8409 changed files with 3972376 additions and 0 deletions

View 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;
}
}
}
}