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 } /// /// Interaction logic for NewFileWindow.xaml /// public partial class NewFileWindow { public NewFileWindow() { InitializeComponent(); Type.SelectedItem = ESupportedFileTypes.Network; } public Func? Result { get; set; } public static Func? 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; } } }