|
|
@@ -37,6 +37,8 @@ namespace ControlCatalog.Pages
|
|
|
var openedFileContent = OpenedFileContent;
|
|
|
var openMultiple = OpenMultiple;
|
|
|
var currentFolderBox = CurrentFolderBox;
|
|
|
+ var useSuggestedFilter = UseSuggestedFilter;
|
|
|
+ var suggestedFilterSelector = SuggestedFilterSelector;
|
|
|
|
|
|
currentFolderBox.TextChanged += async (sender, args) =>
|
|
|
{
|
|
|
@@ -76,7 +78,7 @@ namespace ControlCatalog.Pages
|
|
|
}).ToList() ?? new List<FileDialogFilter>();
|
|
|
}
|
|
|
|
|
|
- List<FilePickerFileType>? GetFileTypes()
|
|
|
+ List<FilePickerFileType>? BuildFileTypes()
|
|
|
{
|
|
|
var selectedItem = (FilterSelector.SelectedItem as ComboBoxItem)?.Content
|
|
|
?? "None";
|
|
|
@@ -115,6 +117,64 @@ namespace ControlCatalog.Pages
|
|
|
};
|
|
|
}
|
|
|
|
|
|
+ List<FilePickerFileType>? GetFileTypes()
|
|
|
+ {
|
|
|
+ var types = BuildFileTypes();
|
|
|
+ UpdateSuggestedFilterSelector(types);
|
|
|
+ return types;
|
|
|
+ }
|
|
|
+
|
|
|
+ void UpdateSuggestedFilterSelector(IReadOnlyList<FilePickerFileType>? types)
|
|
|
+ {
|
|
|
+ var previouslySelected = (suggestedFilterSelector.SelectedItem as ComboBoxItem)?.Tag as FilePickerFileType;
|
|
|
+ suggestedFilterSelector.Items.Clear();
|
|
|
+ suggestedFilterSelector.Items.Add(new ComboBoxItem { Content = "First filter", Tag = null });
|
|
|
+
|
|
|
+ var desiredIndex = 0;
|
|
|
+ if (types is { Count: > 0 })
|
|
|
+ {
|
|
|
+ for (var i = 0; i < types.Count; i++)
|
|
|
+ {
|
|
|
+ var type = types[i];
|
|
|
+ var item = new ComboBoxItem { Content = type.Name, Tag = type };
|
|
|
+ suggestedFilterSelector.Items.Add(item);
|
|
|
+
|
|
|
+ if (previouslySelected is not null && ReferenceEquals(previouslySelected, type))
|
|
|
+ {
|
|
|
+ desiredIndex = i + 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ suggestedFilterSelector.SelectedIndex = desiredIndex;
|
|
|
+ }
|
|
|
+
|
|
|
+ FilePickerFileType? GetSuggestedFileType(IReadOnlyList<FilePickerFileType>? types)
|
|
|
+ {
|
|
|
+ if (useSuggestedFilter.IsChecked == true && types is { Count: > 0 })
|
|
|
+ {
|
|
|
+ if (suggestedFilterSelector.SelectedItem is ComboBoxItem { Tag: FilePickerFileType selectedType }
|
|
|
+ && types.Any(t => ReferenceEquals(t, selectedType)))
|
|
|
+ {
|
|
|
+ return selectedType;
|
|
|
+ }
|
|
|
+
|
|
|
+ return types.FirstOrDefault();
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ void UpdateSuggestedFilterSelectorState() =>
|
|
|
+ suggestedFilterSelector.IsEnabled = useSuggestedFilter.IsChecked == true;
|
|
|
+
|
|
|
+ useSuggestedFilter.Checked += (_, _) => UpdateSuggestedFilterSelectorState();
|
|
|
+ useSuggestedFilter.Unchecked += (_, _) => UpdateSuggestedFilterSelectorState();
|
|
|
+ UpdateSuggestedFilterSelectorState();
|
|
|
+
|
|
|
+ FilterSelector.SelectionChanged += (_, _) => UpdateSuggestedFilterSelector(BuildFileTypes());
|
|
|
+ UpdateSuggestedFilterSelector(BuildFileTypes());
|
|
|
+
|
|
|
OpenFile.Click += async delegate
|
|
|
{
|
|
|
// Almost guaranteed to exist
|
|
|
@@ -229,10 +289,12 @@ namespace ControlCatalog.Pages
|
|
|
|
|
|
OpenFilePicker.Click += async delegate
|
|
|
{
|
|
|
+ var fileTypes = GetFileTypes();
|
|
|
var result = await GetStorageProvider().OpenFilePickerAsync(new FilePickerOpenOptions()
|
|
|
{
|
|
|
Title = "Open file",
|
|
|
- FileTypeFilter = GetFileTypes(),
|
|
|
+ FileTypeFilter = fileTypes,
|
|
|
+ SuggestedFileType = GetSuggestedFileType(fileTypes),
|
|
|
SuggestedFileName = "FileName",
|
|
|
SuggestedStartLocation = lastSelectedDirectory,
|
|
|
AllowMultiple = openMultiple.IsChecked == true
|
|
|
@@ -243,10 +305,12 @@ namespace ControlCatalog.Pages
|
|
|
SaveFilePicker.Click += async delegate
|
|
|
{
|
|
|
var fileTypes = GetFileTypes();
|
|
|
+ var suggestedType = GetSuggestedFileType(fileTypes);
|
|
|
var file = await GetStorageProvider().SaveFilePickerAsync(new FilePickerSaveOptions()
|
|
|
{
|
|
|
Title = "Save file",
|
|
|
FileTypeChoices = fileTypes,
|
|
|
+ SuggestedFileType = suggestedType,
|
|
|
SuggestedStartLocation = lastSelectedDirectory,
|
|
|
SuggestedFileName = "FileName",
|
|
|
ShowOverwritePrompt = true
|
|
|
@@ -278,10 +342,12 @@ namespace ControlCatalog.Pages
|
|
|
};
|
|
|
SaveFilePickerWithResult.Click += async delegate
|
|
|
{
|
|
|
+ var saveFileTypes = new[] { FilePickerFileTypes.Json, FilePickerFileTypes.Xml };
|
|
|
var result = await GetStorageProvider().SaveFilePickerWithResultAsync(new FilePickerSaveOptions()
|
|
|
{
|
|
|
Title = "Save file",
|
|
|
- FileTypeChoices = [FilePickerFileTypes.Json, FilePickerFileTypes.Xml],
|
|
|
+ FileTypeChoices = saveFileTypes,
|
|
|
+ SuggestedFileType = GetSuggestedFileType(saveFileTypes),
|
|
|
SuggestedStartLocation = lastSelectedDirectory,
|
|
|
SuggestedFileName = "FileName",
|
|
|
ShowOverwritePrompt = true
|