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