Skip to content

Commit 52e0974

Browse files
committed
new functionalities
1 parent f62c1ff commit 52e0974

16 files changed

Lines changed: 396 additions & 42 deletions
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Copyright (c) Microsoft Corporation and Contributors.
2+
// Licensed under the MIT License.
3+
4+
// THIS FILE IS AUTOMATICALLY GENERATED; DO NOT EDIT IT
5+
6+
// INPUT FILE: dev\Common\TerminalVelocityFeatures-StoragePickers2.xml
7+
// OPTIONS: -Channel Experimental -Language C++ -Namespace Microsoft.Windows.Storage.Pickers -Path dev\Common\TerminalVelocityFeatures-StoragePickers2.xml -Output dev\Common\TerminalVelocityFeatures-StoragePickers2.h
8+
9+
#if defined(__midlrt)
10+
namespace features
11+
{
12+
feature_name Feature_StoragePickers2 = { DisabledByDefault, FALSE };
13+
}
14+
#endif // defined(__midlrt)
15+
16+
// Feature constants
17+
#define WINDOWSAPPRUNTIME_MICROSOFT_WINDOWS_STORAGE_PICKERS_FEATURE_STORAGEPICKERS2_ENABLED 1
18+
19+
#if defined(__cplusplus)
20+
21+
namespace Microsoft::Windows::Storage::Pickers
22+
{
23+
24+
__pragma(detect_mismatch("ODR_violation_WINDOWSAPPRUNTIME_MICROSOFT_WINDOWS_STORAGE_PICKERS_FEATURE_STORAGEPICKERS2_ENABLED_mismatch", "AlwaysEnabled"))
25+
struct Feature_StoragePickers2
26+
{
27+
static constexpr bool IsEnabled() { return WINDOWSAPPRUNTIME_MICROSOFT_WINDOWS_STORAGE_PICKERS_FEATURE_STORAGEPICKERS2_ENABLED == 1; }
28+
};
29+
30+
} // namespace Microsoft.Windows.Storage.Pickers
31+
32+
#endif // defined(__cplusplus)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?xml version="1.0"?>
2+
<features xmlns="http://microsoft.com/windowsappsdk/TerminalVelocity/20210729/TerminalVelocityFeatures.xsd">
3+
4+
<!-- Copyright (c) Microsoft Corporation. All rights reserved.
5+
Licensed under the MIT License. See LICENSE in the project root for license information.
6+
-->
7+
8+
<!-- See docs/Coding-Guidelines/TerminalVelocity.md for more info. -->
9+
10+
<!-- Enabled variants -->
11+
<feature>
12+
<name>Feature_StoragePickers2</name>
13+
<description>New functionalities in StoragePickers for the WindowsAppRuntime: SuggestedDefaultFolder, FileTypeChoices</description>
14+
<state>AlwaysEnabled</state>
15+
<alwaysDisabledChannelTokens>
16+
<channelToken>Preview</channelToken>
17+
<channelToken>Stable</channelToken>
18+
</alwaysDisabledChannelTokens>
19+
</feature>
20+
</features>

dev/Interop/StoragePickers/FileOpenPicker.cpp

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,46 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
4949
PickerCommon::ValidateStringNoEmbeddedNulls(value);
5050
m_commitButtonText = value;
5151
}
52-
winrt::Windows::Foundation::Collections::IVector<hstring> FileOpenPicker::FileTypeFilter()
52+
winrt::Windows::Foundation::Collections::IMap<winrt::hstring, winrt::Windows::Foundation::Collections::IVector<winrt::hstring>> FileOpenPicker::FileTypeChoices()
53+
{
54+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
55+
return m_fileTypeChoices;
56+
}
57+
winrt::Windows::Foundation::Collections::IVector<winrt::hstring> FileOpenPicker::FileTypeFilter()
5358
{
5459
return m_fileTypeFilter;
5560
}
61+
winrt::hstring FileOpenPicker::SuggestedFolder()
62+
{
63+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
64+
return m_suggestedFolder;
65+
}
66+
void FileOpenPicker::SuggestedFolder(winrt::hstring const& value)
67+
{
68+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
69+
PickerCommon::ValidateFolderPath(value, "SuggestedFolder");
70+
m_suggestedFolder = value;
71+
}
72+
winrt::hstring FileOpenPicker::SuggestedStartFolder()
73+
{
74+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
75+
return m_suggestedStartFolder;
76+
}
77+
void FileOpenPicker::SuggestedStartFolder(winrt::hstring const& value)
78+
{
79+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
80+
PickerCommon::ValidateFolderPath(value, "SuggestedStartFolder");
81+
m_suggestedStartFolder = value;
82+
}
5683

5784
void FileOpenPicker::CaptureParameters(PickerCommon::PickerParameters& parameters)
5885
{
5986
parameters.HWnd = winrt::Microsoft::UI::GetWindowFromWindowId(m_windowId);
6087
parameters.CommitButtonText = m_commitButtonText;
61-
parameters.PickerLocationId = m_suggestedStartLocation;
62-
parameters.CaptureFilterSpec(m_fileTypeFilter.GetView());
88+
parameters.SuggestedFolder = m_suggestedFolder;
89+
parameters.SuggestedStartLocation = m_suggestedStartLocation;
90+
parameters.SuggestedStartFolder = m_suggestedStartFolder;
91+
parameters.CaptureFilterSpecData(m_fileTypeFilter.GetView(), m_fileTypeChoices.GetView());
6392
}
6493

6594
winrt::Windows::Foundation::IAsyncOperation<winrt::Microsoft::Windows::Storage::Pickers::PickFileResult> FileOpenPicker::PickSingleFileAsync()
@@ -87,7 +116,6 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
87116
auto dialog = create_instance<IFileOpenDialog>(CLSID_FileOpenDialog, CLSCTX_INPROC_SERVER);
88117

89118
parameters.ConfigureDialog(dialog);
90-
check_hresult(dialog->SetFileTypeIndex(parameters.FileTypeFilterPara.size()));
91119

92120
{
93121
auto hr = dialog->Show(parameters.HWnd);
@@ -142,7 +170,6 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
142170
auto dialog = create_instance<IFileOpenDialog>(CLSID_FileOpenDialog, CLSCTX_INPROC_SERVER);
143171

144172
parameters.ConfigureDialog(dialog);
145-
check_hresult(dialog->SetFileTypeIndex(parameters.FileTypeFilterPara.size()));
146173

147174
FILEOPENDIALOGOPTIONS dialogOptions;
148175
check_hresult(dialog->GetOptions(&dialogOptions));

dev/Interop/StoragePickers/FileOpenPicker.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "PickerCommon.h"
77
#include "StoragePickersTelemetryHelper.h"
88
#include <winrt/Windows.Foundation.Collections.h>
9+
#include "FileTypeChoicesMap.h"
910
#include "FileTypeFilterVector.h"
1011

1112
namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
@@ -23,7 +24,14 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
2324
winrt::hstring CommitButtonText();
2425
void CommitButtonText(winrt::hstring const& value);
2526

26-
winrt::Windows::Foundation::Collections::IVector<hstring> FileTypeFilter();
27+
winrt::Windows::Foundation::Collections::IVector<winrt::hstring> FileTypeFilter();
28+
winrt::Windows::Foundation::Collections::IMap<winrt::hstring, winrt::Windows::Foundation::Collections::IVector<winrt::hstring>> FileTypeChoices();
29+
30+
winrt::hstring SuggestedFolder();
31+
void SuggestedFolder(winrt::hstring const& value);
32+
33+
winrt::hstring SuggestedStartFolder();
34+
void SuggestedStartFolder(winrt::hstring const& value);
2735

2836
winrt::Windows::Foundation::IAsyncOperation<winrt::Microsoft::Windows::Storage::Pickers::PickFileResult> PickSingleFileAsync();
2937
winrt::Windows::Foundation::IAsyncOperation<winrt::Windows::Foundation::Collections::IVectorView<winrt::Microsoft::Windows::Storage::Pickers::PickFileResult>> PickMultipleFilesAsync();
@@ -34,7 +42,11 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
3442
PickerLocationId m_suggestedStartLocation{ PickerLocationId::Unspecified };
3543
winrt::hstring m_commitButtonText{};
3644

37-
winrt::Windows::Foundation::Collections::IVector<hstring> m_fileTypeFilter{ make<FileTypeFilterVector>() };
45+
winrt::Windows::Foundation::Collections::IVector<winrt::hstring> m_fileTypeFilter{ make<FileTypeFilterVector>() };
46+
winrt::Windows::Foundation::Collections::IMap<winrt::hstring, winrt::Windows::Foundation::Collections::IVector<winrt::hstring>> m_fileTypeChoices{ make<FileTypeChoicesMap>(false) };
47+
48+
winrt::hstring m_suggestedFolder{};
49+
winrt::hstring m_suggestedStartFolder{};
3850

3951
StoragePickersTelemetryHelper m_telemetryHelper{};
4052

dev/Interop/StoragePickers/FileSavePicker.cpp

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,22 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
6363
}
6464
void FileSavePicker::SuggestedFolder(hstring const& value)
6565
{
66-
PickerCommon::ValidateSuggestedFolder(value);
66+
PickerCommon::ValidateFolderPath(value, "SuggestedFolder");
6767
m_suggestedFolder = value;
6868
}
6969

70+
hstring FileSavePicker::SuggestedStartFolder()
71+
{
72+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
73+
return m_suggestedStartFolder;
74+
}
75+
void FileSavePicker::SuggestedStartFolder(hstring const& value)
76+
{
77+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
78+
PickerCommon::ValidateFolderPath(value, "SuggestedStartFolder");
79+
m_suggestedStartFolder = value;
80+
}
81+
7082
hstring FileSavePicker::SuggestedFileName()
7183
{
7284
return m_suggestedFileName;
@@ -82,10 +94,13 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
8294
{
8395
parameters.HWnd = winrt::Microsoft::UI::GetWindowFromWindowId(m_windowId);
8496
parameters.CommitButtonText = m_commitButtonText;
85-
parameters.PickerLocationId = m_suggestedStartLocation;
8697
parameters.SuggestedFileName = m_suggestedFileName;
8798
parameters.SuggestedFolder = m_suggestedFolder;
88-
parameters.CaptureFilterSpec(m_fileTypeChoices.GetView());
99+
parameters.SuggestedStartLocation = m_suggestedStartLocation;
100+
parameters.SuggestedStartFolder = m_suggestedStartFolder;
101+
parameters.CaptureFilterSpecData(
102+
winrt::Windows::Foundation::Collections::IVectorView<winrt::hstring>{},
103+
m_fileTypeChoices.GetView());
89104
}
90105

91106
winrt::Windows::Foundation::IAsyncOperation<winrt::Microsoft::Windows::Storage::Pickers::PickFileResult> FileSavePicker::PickSaveFileAsync()

dev/Interop/StoragePickers/FileSavePicker.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
2929
hstring SuggestedFolder();
3030
void SuggestedFolder(hstring const& value);
3131

32+
hstring SuggestedStartFolder();
33+
void SuggestedStartFolder(hstring const& value);
34+
3235
hstring SuggestedFileName();
3336
void SuggestedFileName(hstring const& value);
3437

@@ -41,6 +44,7 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
4144
winrt::Windows::Foundation::Collections::IMap<hstring, winrt::Windows::Foundation::Collections::IVector<hstring>> m_fileTypeChoices{ make<FileTypeChoicesMap>() };
4245
hstring m_defaultFileExtension{};
4346
hstring m_suggestedFolder{};
47+
hstring m_suggestedStartFolder{};
4448
hstring m_suggestedFileName{};
4549
StoragePickersTelemetryHelper m_telemetryHelper{};
4650

dev/Interop/StoragePickers/FileTypeChoicesMap.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,18 @@
77

88
namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
99
{
10-
FileTypeChoicesMap::FileTypeChoicesMap()
10+
FileTypeChoicesMap::FileTypeChoicesMap(bool forSavePicker)
11+
: ForSavePicker(forSavePicker)
1112
{
1213
}
1314

1415
bool FileTypeChoicesMap::Insert(hstring const& key, winrt::Windows::Foundation::Collections::IVector<hstring> const& value)
1516
{
17+
if (!ForSavePicker)
18+
{
19+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
20+
}
21+
1622
// Create a new FileTypeFilterVector and copy all values from the input vector
1723
auto validatingVector = make<FileTypeFilterVector>();
1824

dev/Interop/StoragePickers/FileTypeChoicesMap.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
1111
winrt::Windows::Foundation::Collections::IMap<hstring, winrt::Windows::Foundation::Collections::IVector<hstring>>,
1212
winrt::Windows::Foundation::Collections::IIterable<winrt::Windows::Foundation::Collections::IKeyValuePair<hstring, winrt::Windows::Foundation::Collections::IVector<hstring>>>>
1313
{
14-
FileTypeChoicesMap();
14+
FileTypeChoicesMap(bool forSavePicker = true);
15+
16+
bool ForSavePicker{ forSavePicker };
1517

1618
// IMap<hstring, IVector<hstring>>
1719
winrt::Windows::Foundation::Collections::IVector<hstring> Lookup(hstring const& key) const;

dev/Interop/StoragePickers/FileTypeFilterVector.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
99
{
10-
FileTypeFilterVector::FileTypeFilterVector()
10+
FileTypeFilterVector::FileTypeFilterVector(bool forSavePicker)
1111
{
1212
}
1313

dev/Interop/StoragePickers/FolderPicker.cpp

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,38 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
4747
PickerCommon::ValidateStringNoEmbeddedNulls(value);
4848
m_commitButtonText = value;
4949
}
50+
hstring FolderPicker::SuggestedFolder()
51+
{
52+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
53+
return m_suggestedFolder;
54+
}
55+
void FolderPicker::SuggestedFolder(hstring const& value)
56+
{
57+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
58+
PickerCommon::ValidateFolderPath(value, "SuggestedFolder");
59+
m_suggestedFolder = value;
60+
}
61+
hstring FolderPicker::SuggestedStartFolder()
62+
{
63+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
64+
return m_suggestedStartFolder;
65+
}
66+
void FolderPicker::SuggestedStartFolder(hstring const& value)
67+
{
68+
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers2::IsEnabled());
69+
PickerCommon::ValidateFolderPath(value, "SuggestedStartFolder");
70+
m_suggestedStartFolder = value;
71+
}
5072

5173
void FolderPicker::CaptureParameters(PickerCommon::PickerParameters& parameters)
5274
{
5375
parameters.HWnd = winrt::Microsoft::UI::GetWindowFromWindowId(m_windowId);
5476
parameters.CommitButtonText = m_commitButtonText;
55-
parameters.PickerLocationId = m_suggestedStartLocation;
77+
parameters.SuggestedFolder = m_suggestedFolder;
78+
parameters.SuggestedStartLocation = m_suggestedStartLocation;
79+
parameters.SuggestedStartFolder = m_suggestedStartFolder;
5680
}
5781

58-
5982
winrt::Windows::Foundation::IAsyncOperation<winrt::Microsoft::Windows::Storage::Pickers::PickFolderResult> FolderPicker::PickSingleFolderAsync()
6083
{
6184
// TODO: remove get strong reference when telementry is safe stop

0 commit comments

Comments
 (0)