mirror of
https://github.com/JosefNemec/Playnite.git
synced 2026-01-09 06:11:22 +08:00
235 lines
9.0 KiB
C#
235 lines
9.0 KiB
C#
using Playnite.Common;
|
|
using Playnite.Controls;
|
|
using Playnite.DesktopApp.ViewModels;
|
|
using Playnite.DesktopApp.Windows;
|
|
using Playnite.SDK;
|
|
using Playnite.ViewModels;
|
|
using Playnite.Windows;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using System.Windows;
|
|
|
|
namespace Playnite.DesktopApp
|
|
{
|
|
public class DesktopDialogs : IDialogsFactory
|
|
{
|
|
private readonly SynchronizationContext context;
|
|
|
|
public DesktopDialogs()
|
|
{
|
|
context = SynchronizationContext.Current;
|
|
}
|
|
|
|
private T Invoke<T>(Func<T> action)
|
|
{
|
|
T result = default(T);
|
|
context.Send((a) =>
|
|
{
|
|
result = action();
|
|
}, null);
|
|
|
|
return result;
|
|
}
|
|
|
|
private void Invoke(Action action)
|
|
{
|
|
context.Send((a) =>
|
|
{
|
|
action();
|
|
}, null);
|
|
}
|
|
|
|
public string SaveFile(string filter)
|
|
{
|
|
return Invoke(() => SystemDialogs.SaveFile(WindowManager.CurrentWindow, filter));
|
|
}
|
|
|
|
public string SaveFile(string filter, string initialDir)
|
|
{
|
|
return Invoke(() => SystemDialogs.SaveFile(WindowManager.CurrentWindow, filter, initialDir));
|
|
}
|
|
|
|
public string SaveFile(string filter, bool promptOverwrite)
|
|
{
|
|
return Invoke(() => SystemDialogs.SaveFile(WindowManager.CurrentWindow, filter, promptOverwrite));
|
|
}
|
|
|
|
public string SaveFile(string filter, bool promptOverwrite, string initialDir)
|
|
{
|
|
return Invoke(() => SystemDialogs.SaveFile(WindowManager.CurrentWindow, filter, promptOverwrite, initialDir));
|
|
}
|
|
|
|
public string SelectFile(string filter)
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectFile(WindowManager.CurrentWindow, filter));
|
|
}
|
|
|
|
public string SelectFile(string filter, string initialDir)
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectFile(WindowManager.CurrentWindow, filter, initialDir));
|
|
}
|
|
|
|
public List<string> SelectFiles(string filter)
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectFiles(WindowManager.CurrentWindow, filter));
|
|
}
|
|
|
|
public List<string> SelectFiles(string filter, string initialDir)
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectFiles(WindowManager.CurrentWindow, filter, initialDir));
|
|
}
|
|
|
|
public string SelectFolder()
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectFolder(WindowManager.CurrentWindow));
|
|
}
|
|
|
|
public string SelectFolder(string initialDir)
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectFolder(WindowManager.CurrentWindow, initialDir));
|
|
}
|
|
|
|
public string SelectIconFile()
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectIconFile(WindowManager.CurrentWindow));
|
|
}
|
|
|
|
public string SelectIconFile(string initialDir)
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectIconFile(WindowManager.CurrentWindow, initialDir));
|
|
}
|
|
|
|
public string SelectImagefile()
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectImageFile(WindowManager.CurrentWindow));
|
|
}
|
|
|
|
public string SelectImagefile(string initialDir)
|
|
{
|
|
return Invoke(() => SystemDialogs.SelectImageFile(WindowManager.CurrentWindow, initialDir));
|
|
}
|
|
|
|
public StringSelectionDialogResult SelectString(string messageBoxText, string caption, string defaultInput)
|
|
{
|
|
return Invoke(() => new MessageBoxWindow().ShowInput(WindowManager.CurrentWindow, messageBoxText, caption, defaultInput));
|
|
}
|
|
|
|
public StringSelectionDialogResult SelectString(string messageBoxText, string caption, string defaultInput, List<MessageBoxToggle> options)
|
|
{
|
|
return Invoke(() => new MessageBoxWindow().ShowInput(WindowManager.CurrentWindow, messageBoxText, caption, defaultInput, options));
|
|
}
|
|
|
|
public MessageBoxResult ShowMessage(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult, MessageBoxOptions options)
|
|
{
|
|
return Invoke(() => new MessageBoxWindow().Show(WindowManager.CurrentWindow, messageBoxText, caption, button, icon, defaultResult, options));
|
|
}
|
|
|
|
public MessageBoxResult ShowMessage(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult)
|
|
{
|
|
return ShowMessage(messageBoxText, caption, button, icon, defaultResult, MessageBoxOptions.None);
|
|
}
|
|
|
|
public MessageBoxResult ShowMessage(string messageBoxText, string caption, MessageBoxButton button, MessageBoxImage icon)
|
|
{
|
|
return ShowMessage(messageBoxText, caption, button, icon, MessageBoxResult.None, MessageBoxOptions.None);
|
|
}
|
|
|
|
public MessageBoxResult ShowMessage(string messageBoxText, string caption, MessageBoxButton button)
|
|
{
|
|
return ShowMessage(messageBoxText, caption, button, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None);
|
|
}
|
|
|
|
public MessageBoxResult ShowMessage(string messageBoxText, string caption)
|
|
{
|
|
return ShowMessage(messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None);
|
|
}
|
|
|
|
public MessageBoxResult ShowMessage(string messageBoxText)
|
|
{
|
|
return ShowMessage(messageBoxText, string.Empty, MessageBoxButton.OK, MessageBoxImage.None, MessageBoxResult.None, MessageBoxOptions.None);
|
|
}
|
|
|
|
public void ShowSelectableString(string messageBoxText, string caption, string inputText)
|
|
{
|
|
Invoke(() => new MessageBoxWindow().ShowInputReadOnly(WindowManager.CurrentWindow, messageBoxText, caption, inputText));
|
|
}
|
|
|
|
public MessageBoxResult ShowErrorMessage(string messageBoxText, string caption)
|
|
{
|
|
return ShowMessage(messageBoxText, caption, MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
|
|
public MessageBoxResult ShowErrorMessage(string messageBoxText)
|
|
{
|
|
return ShowMessage(messageBoxText, string.Empty, MessageBoxButton.OK, MessageBoxImage.Error);
|
|
}
|
|
|
|
public MessageBoxOption ShowMessage(string messageBoxText, string caption, MessageBoxImage icon, List<MessageBoxOption> options)
|
|
{
|
|
return Invoke(() => new MessageBoxWindow().ShowCustom(WindowManager.CurrentWindow, messageBoxText, caption, icon, options));
|
|
}
|
|
|
|
public ImageFileOption ChooseImageFile(List<ImageFileOption> files, string caption = null, double itemWidth = 240, double itemHeight = 180)
|
|
{
|
|
return Invoke(() =>
|
|
{
|
|
var model = new ImageSelectionViewModel(files, new ImageSelectionWindowFactory(), caption, itemWidth, itemHeight);
|
|
if (model.OpenView() == true)
|
|
{
|
|
return model.SelectedImage;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
|
|
public GenericItemOption ChooseItemWithSearch(List<GenericItemOption> items, Func<string, List<GenericItemOption>> searchFunction, string defaultSearch = null, string caption = null)
|
|
{
|
|
return Invoke(() =>
|
|
{
|
|
var model = new ItemSelectionWithSearchViewModel(new ItemSelectionWithSearchWindowFactory(), searchFunction, defaultSearch, caption);
|
|
if (model.OpenView() == true)
|
|
{
|
|
return model.SelectedResult;
|
|
}
|
|
else
|
|
{
|
|
return null;
|
|
}
|
|
});
|
|
}
|
|
|
|
public GlobalProgressResult ActivateGlobalProgress(Action<GlobalProgressActionArgs> progresAction, GlobalProgressOptions progressArgs)
|
|
{
|
|
return Invoke(() => GlobalProgress.ActivateProgress(progresAction, progressArgs));
|
|
}
|
|
|
|
public GlobalProgressResult ActivateGlobalProgress(Func<GlobalProgressActionArgs, Task> progresAction, GlobalProgressOptions progressArgs)
|
|
{
|
|
return Invoke(() => GlobalProgress.ActivateProgress(progresAction, progressArgs));
|
|
}
|
|
|
|
public Window CreateWindow(WindowCreationOptions options)
|
|
{
|
|
return new WindowBase()
|
|
{
|
|
ShowMaximizeButton = options.ShowMaximizeButton,
|
|
ShowMinimizeButton = options.ShowMinimizeButton,
|
|
ShowCloseButton = options.ShowCloseButton,
|
|
Style = ResourceProvider.GetResource("StandardWindowStyle") as Style
|
|
};
|
|
}
|
|
|
|
public Window GetCurrentAppWindow()
|
|
{
|
|
return WindowManager.CurrentWindow;
|
|
}
|
|
}
|
|
}
|