Skip to content

Commit 698d862

Browse files
committed
ValidatingFileTypeFilterVector
1 parent 548cbe6 commit 698d862

File tree

5 files changed

+128
-16
lines changed

5 files changed

+128
-16
lines changed

dev/Interop/StoragePickers/FileOpenPicker.cpp

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
#include "PickerCommon.h"
1414
#include "PickFileResult.h"
1515
#include "PickerLocalization.h"
16+
#include "ValidatingFileTypeFilterVector.h"
1617

1718
namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
1819
{
1920
FileOpenPicker::FileOpenPicker(winrt::Microsoft::UI::WindowId const& windowId)
20-
: m_windowId(windowId)
21+
: m_windowId(windowId), m_fileTypeFilter(make<ValidatingFileTypeFilterVector>())
2122
{
2223
THROW_HR_IF(E_NOTIMPL, !::Microsoft::Windows::Storage::Pickers::Feature_StoragePickers::IsEnabled());
23-
m_fileTypeFilter.VectorChanged({ this, &FileOpenPicker::OnFileTypeFilterChanged });
2424
}
2525

2626
winrt::Microsoft::Windows::Storage::Pickers::PickerViewMode FileOpenPicker::ViewMode()
@@ -59,14 +59,7 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
5959
}
6060
winrt::Windows::Foundation::Collections::IVector<hstring> FileOpenPicker::FileTypeFilter()
6161
{
62-
return m_fileTypeFilter.as<winrt::Windows::Foundation::Collections::IVector<hstring>>();
63-
}
64-
65-
void FileOpenPicker::OnFileTypeFilterChanged(
66-
winrt::Windows::Foundation::Collections::IObservableVector<winrt::hstring> const&,
67-
winrt::Windows::Foundation::Collections::IVectorChangedEventArgs const&)
68-
{
69-
PickerCommon::ValidateFileTypeFilter(m_fileTypeFilter.GetView());
62+
return m_fileTypeFilter;
7063
}
7164

7265
void FileOpenPicker::CaptureParameters(PickerCommon::PickerParameters& parameters)

dev/Interop/StoragePickers/FileOpenPicker.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,11 @@ namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
3737
PickerLocationId m_suggestedStartLocation{ PickerLocationId::Unspecified };
3838
winrt::hstring m_commitButtonText{};
3939

40-
winrt::Windows::Foundation::Collections::IObservableVector<hstring> m_fileTypeFilter{
41-
winrt::single_threaded_observable_vector<hstring>()
42-
};
40+
winrt::Windows::Foundation::Collections::IVector<hstring> m_fileTypeFilter;
4341

4442
StoragePickersTelemetryHelper m_telemetryHelper{};
4543

4644
void CaptureParameters(PickerCommon::PickerParameters& parameters);
47-
void OnFileTypeFilterChanged(
48-
winrt::Windows::Foundation::Collections::IObservableVector<winrt::hstring> const&,
49-
winrt::Windows::Foundation::Collections::IVectorChangedEventArgs const&);
5045
};
5146
}
5247
namespace winrt::Microsoft::Windows::Storage::Pickers::factory_implementation

dev/Interop/StoragePickers/StoragePickers.vcxitems

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<ClCompile Include="$(MSBuildThisFileDirectory)PickerLocalization.cpp" />
1919
<ClCompile Include="$(MSBuildThisFileDirectory)PickFileResult.cpp" />
2020
<ClCompile Include="$(MSBuildThisFileDirectory)PickFolderResult.cpp" />
21+
<ClCompile Include="$(MSBuildThisFileDirectory)ValidatingFileTypeFilterVector.cpp" />
2122
</ItemGroup>
2223
<ItemGroup>
2324
<ClInclude Include="$(MSBuildThisFileDirectory)PickerCommon.h" />
@@ -26,6 +27,7 @@
2627
<ClInclude Include="$(MSBuildThisFileDirectory)PickFolderResult.h" />
2728
<ClInclude Include="$(MSBuildThisFileDirectory)StoragePickersTelemetry.h" />
2829
<ClInclude Include="$(MSBuildThisFileDirectory)StoragePickersTelemetryHelper.h" />
30+
<ClInclude Include="$(MSBuildThisFileDirectory)ValidatingFileTypeFilterVector.h" />
2931
</ItemGroup>
3032
<ItemGroup>
3133
<ClCompile Include="$(MSBuildThisFileDirectory)FileOpenPicker.cpp" />
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
// Copyright (c) Microsoft Corporation and Contributors.
2+
// Licensed under the MIT License.
3+
4+
#include "pch.h"
5+
#include "ValidatingFileTypeFilterVector.h"
6+
#include "PickerCommon.h"
7+
8+
namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
9+
{
10+
ValidatingFileTypeFilterVector::ValidatingFileTypeFilterVector()
11+
{
12+
}
13+
14+
void ValidatingFileTypeFilterVector::SetAt(uint32_t index, hstring const& value)
15+
{
16+
PickerCommon::ValidateSingleFileTypeFilterElement(value);
17+
m_innerVector.SetAt(index, value);
18+
}
19+
20+
void ValidatingFileTypeFilterVector::InsertAt(uint32_t index, hstring const& value)
21+
{
22+
PickerCommon::ValidateSingleFileTypeFilterElement(value);
23+
m_innerVector.InsertAt(index, value);
24+
}
25+
26+
void ValidatingFileTypeFilterVector::Append(hstring const& value)
27+
{
28+
PickerCommon::ValidateSingleFileTypeFilterElement(value);
29+
m_innerVector.Append(value);
30+
}
31+
32+
void ValidatingFileTypeFilterVector::ReplaceAll(array_view<hstring const> items)
33+
{
34+
// Validate all items before replacing
35+
for (auto const& item : items)
36+
{
37+
PickerCommon::ValidateSingleFileTypeFilterElement(item);
38+
}
39+
m_innerVector.ReplaceAll(items);
40+
}
41+
42+
hstring ValidatingFileTypeFilterVector::GetAt(uint32_t index) const
43+
{
44+
return m_innerVector.GetAt(index);
45+
}
46+
47+
uint32_t ValidatingFileTypeFilterVector::Size() const
48+
{
49+
return m_innerVector.Size();
50+
}
51+
52+
winrt::Windows::Foundation::Collections::IVectorView<hstring> ValidatingFileTypeFilterVector::GetView() const
53+
{
54+
return m_innerVector.GetView();
55+
}
56+
57+
bool ValidatingFileTypeFilterVector::IndexOf(hstring const& value, uint32_t& index) const
58+
{
59+
return m_innerVector.IndexOf(value, index);
60+
}
61+
62+
void ValidatingFileTypeFilterVector::RemoveAt(uint32_t index)
63+
{
64+
m_innerVector.RemoveAt(index);
65+
}
66+
67+
void ValidatingFileTypeFilterVector::RemoveAtEnd()
68+
{
69+
m_innerVector.RemoveAtEnd();
70+
}
71+
72+
void ValidatingFileTypeFilterVector::Clear()
73+
{
74+
m_innerVector.Clear();
75+
}
76+
77+
uint32_t ValidatingFileTypeFilterVector::GetMany(uint32_t startIndex, array_view<hstring> items) const
78+
{
79+
return m_innerVector.GetMany(startIndex, items);
80+
}
81+
82+
winrt::Windows::Foundation::Collections::IIterator<hstring> ValidatingFileTypeFilterVector::First() const
83+
{
84+
return m_innerVector.First();
85+
}
86+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright (c) Microsoft Corporation and Contributors.
2+
// Licensed under the MIT License.
3+
4+
#pragma once
5+
#include <winrt/Windows.Foundation.Collections.h>
6+
// #include "PickerCommon.h"
7+
8+
namespace winrt::Microsoft::Windows::Storage::Pickers::implementation
9+
{
10+
struct ValidatingFileTypeFilterVector : implements<ValidatingFileTypeFilterVector,
11+
winrt::Windows::Foundation::Collections::IVector<hstring>,
12+
winrt::Windows::Foundation::Collections::IIterable<hstring>>
13+
{
14+
ValidatingFileTypeFilterVector();
15+
16+
// IVector<hstring>
17+
hstring GetAt(uint32_t index) const;
18+
uint32_t Size() const;
19+
winrt::Windows::Foundation::Collections::IVectorView<hstring> GetView() const;
20+
bool IndexOf(hstring const& value, uint32_t& index) const;
21+
void SetAt(uint32_t index, hstring const& value);
22+
void InsertAt(uint32_t index, hstring const& value);
23+
void RemoveAt(uint32_t index);
24+
void Append(hstring const& value);
25+
void RemoveAtEnd();
26+
void Clear();
27+
uint32_t GetMany(uint32_t startIndex, array_view<hstring> items) const;
28+
void ReplaceAll(array_view<hstring const> items);
29+
30+
// IIterable<hstring>
31+
winrt::Windows::Foundation::Collections::IIterator<hstring> First() const;
32+
33+
private:
34+
winrt::Windows::Foundation::Collections::IVector<hstring> m_innerVector{ single_threaded_vector<hstring>() };
35+
};
36+
}

0 commit comments

Comments
 (0)