90 lines
2.6 KiB
C#
90 lines
2.6 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.Windows;
|
|
using System.Windows.Controls;
|
|
using Intromat.ViewModels;
|
|
|
|
namespace Intromat.Views
|
|
{
|
|
public enum ESupportedFileTypes
|
|
{
|
|
Network,
|
|
Shader
|
|
}
|
|
|
|
/// <summary>
|
|
/// Interaction logic for NewFileWindow.xaml
|
|
/// </summary>
|
|
public partial class NewFileWindow
|
|
{
|
|
public NewFileWindow()
|
|
{
|
|
InitializeComponent();
|
|
Type.SelectedItem = ESupportedFileTypes.Network;
|
|
}
|
|
|
|
public Func<FileViewModel>? Result { get; set; }
|
|
|
|
public static Func<FileViewModel>? Show(Window? owner, MainViewModel mainVm, string? defaultValue = null)
|
|
{
|
|
var window = new NewFileWindow
|
|
{
|
|
MainViewModel = mainVm,
|
|
Owner = owner
|
|
};
|
|
if (defaultValue != null)
|
|
window.FileName.Text = defaultValue;
|
|
window.FileName.SelectAll();
|
|
window.FileName.Focus();
|
|
window.UpdateResult();
|
|
return window.ShowDialog() == true ? window.Result : null;
|
|
}
|
|
|
|
public MainViewModel? MainViewModel { get; set; }
|
|
|
|
private void Type_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
UpdateResult();
|
|
}
|
|
|
|
private void Name_OnTextChanged(object sender, TextChangedEventArgs e)
|
|
{
|
|
UpdateResult();
|
|
}
|
|
|
|
private void UpdateResult()
|
|
{
|
|
if (MainViewModel == null)
|
|
return;
|
|
|
|
var module = MainViewModel.Explorer.CurrentModule!;
|
|
var parent = MainViewModel.Explorer.CurrentFolder!;
|
|
Result = (ESupportedFileTypes)Type.SelectedItem switch
|
|
{
|
|
ESupportedFileTypes.Network => () => new DocumentViewModel(MainViewModel, module, parent, FileName.Text),
|
|
ESupportedFileTypes.Shader => () => new ShaderFileViewModel(MainViewModel, module, parent, FileName.Text),
|
|
_ => throw new NotImplementedException()
|
|
};
|
|
}
|
|
|
|
private void ButtonOK_OnClick(object sender, RoutedEventArgs e)
|
|
{
|
|
DialogResult = true;
|
|
Close();
|
|
}
|
|
|
|
private void ButtonCancel_OnClick(object sender, RoutedEventArgs e)
|
|
{
|
|
DialogResult = false;
|
|
Close();
|
|
}
|
|
|
|
private void NewFileWindow_OnClosing(object sender, CancelEventArgs e)
|
|
{
|
|
if (DialogResult != true)
|
|
Result = null;
|
|
}
|
|
}
|
|
}
|