BizHawk/BizHawk.Client.EmuHawk/HawkDialogFactory.cs

174 lines
3.9 KiB
C#

using System;
using System.Windows.Forms;
namespace BizHawk.Client.EmuHawk
{
public static class HawkDialogFactory
{
public static Type OpenDialogClass = typeof(DefaultOpenFileDialog);
public static Type SaveDialogClass = typeof(DefaultSaveFileDialog);
public static Type FolderBrowserClass = typeof(DefaultFolderBrowserDialog);
public static IOpenFileDialog CreateOpenFileDialog()
{
if(typeof(IOpenFileDialog).IsAssignableFrom(OpenDialogClass))
{
return (IOpenFileDialog)OpenDialogClass.GetConstructor(Type.EmptyTypes).Invoke(null);
}
return new DefaultOpenFileDialog();
}
public static ISaveFileDialog CreateSaveFileDialog()
{
if(typeof(ISaveFileDialog).IsAssignableFrom(SaveDialogClass))
{
return (ISaveFileDialog)SaveDialogClass.GetConstructor(Type.EmptyTypes).Invoke(null);
}
return new DefaultSaveFileDialog();
}
public static IFolderBrowserDialog CreateFolderBrowserDialog()
{
if(typeof(IFolderBrowserDialog).IsAssignableFrom(FolderBrowserClass))
{
return (IFolderBrowserDialog)FolderBrowserClass.GetConstructor(Type.EmptyTypes).Invoke(null);
}
return new DefaultFolderBrowserDialog();
}
}
public class DefaultSaveFileDialog : DefaultOpenFileDialog, ISaveFileDialog
{
public DefaultSaveFileDialog()
{
_capsule = new SaveFileDialog();
}
public string DefaultExt
{
get
{
return ((SaveFileDialog)_capsule).DefaultExt;
}
set
{
((SaveFileDialog)_capsule).DefaultExt = value;
}
}
public bool OverwritePrompt
{
get
{
return ((SaveFileDialog)_capsule).OverwritePrompt;
}
set
{
((SaveFileDialog)_capsule).OverwritePrompt = value;
}
}
}
public class DefaultOpenFileDialog : IOpenFileDialog
{
//Can't extend OpenFileDialog because it's sealed, so I need to encapsulate it.
protected FileDialog _capsule;
public DefaultOpenFileDialog()
{
_capsule = new OpenFileDialog();
}
public string InitialDirectory
{
get { return _capsule.InitialDirectory; }
set { _capsule.InitialDirectory = value; }
}
public string Filter
{
get { return _capsule.Filter; }
set { _capsule.Filter = value; }
}
public bool RestoreDirectory
{
get { return _capsule.RestoreDirectory; }
set { _capsule.RestoreDirectory = value; }
}
public bool Multiselect
{
get
{
if (_capsule is OpenFileDialog)
{
return ((OpenFileDialog)_capsule).Multiselect;
}
return false;
}
set
{
if (_capsule is OpenFileDialog)
{
((OpenFileDialog)_capsule).Multiselect = value;
}
}
}
public bool AddExtension
{
get { return _capsule.AddExtension; }
set { _capsule.AddExtension = value; }
}
public System.Windows.Forms.DialogResult ShowDialog()
{
return _capsule.ShowDialog();
}
public System.Windows.Forms.DialogResult ShowDialog(System.Windows.Forms.Form form)
{
return _capsule.ShowDialog(form);
}
public string FileName
{
get { return _capsule.FileName; }
set { _capsule.FileName = value; }
}
public string[] FileNames
{
get { return _capsule.FileNames; }
}
public string Title
{
get { return _capsule.Title; }
set { _capsule.Title = value; }
}
public int FilterIndex
{
get { return _capsule.FilterIndex; }
set { _capsule.FilterIndex = value; }
}
public void Dispose()
{
_capsule.Dispose();
}
}
public class DefaultFolderBrowserDialog : IFolderBrowserDialog
{
private FolderBrowserDialog _capsule;
public DefaultFolderBrowserDialog()
{
_capsule = new FolderBrowserDialog();
}
public string Description
{
get { return _capsule.Description; }
set { _capsule.Description = value; }
}
public string SelectedPath
{
get { return _capsule.SelectedPath; }
set { _capsule.SelectedPath = value; }
}
public System.Windows.Forms.DialogResult ShowDialog()
{
return _capsule.ShowDialog();
}
}
}