99#include " FragmentExtensionViewModel.g.h"
1010#include " FragmentProfileViewModel.g.h"
1111#include " FragmentColorSchemeViewModel.g.h"
12+ #include " ExtensionPackageTemplateSelector.g.h"
1213#include " ViewModelHelpers.h"
1314#include " Utils.h"
1415
@@ -20,14 +21,15 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
2021 Extensions ();
2122
2223 void OnNavigatedTo (const Windows::UI::Xaml::Navigation::NavigationEventArgs& e);
23- void ExtensionLoaded (const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args);
24- void ExtensionToggled (const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args);
2524
2625 void ExtensionNavigator_Click (const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args);
2726 void NavigateToProfile_Click (const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args);
2827 void NavigateToColorScheme_Click (const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args);
2928
3029 WINRT_PROPERTY (Editor::ExtensionsViewModel, ViewModel, nullptr );
30+
31+ private:
32+ Editor::ExtensionPackageTemplateSelector _extensionPackageIdentifierTemplateSelector;
3133 };
3234
3335 struct ExtensionsViewModel : ExtensionsViewModelT<ExtensionsViewModel>, ViewModelHelper<ExtensionsViewModel>
@@ -36,57 +38,62 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
3638 ExtensionsViewModel (const Model::CascadiaSettings& settings, const Editor::ColorSchemesPageViewModel& colorSchemesPageVM);
3739
3840 // Properties
39- bool IsExtensionView () const noexcept { return _CurrentExtensionSource != hstring{}; }
40- Windows::Foundation::Collections::IVector<IInspectable> CurrentExtensionFragments () const noexcept ;
41- hstring CurrentExtensionScope () const noexcept ;
42- bool NoActiveExtensions () const noexcept { return _fragmentExtensions.Size () == 0 ; }
41+ Windows::UI::Xaml::DataTemplate CurrentExtensionPackageIdentifierTemplate () const ;
42+ bool IsExtensionView () const noexcept { return _CurrentExtensionPackage != nullptr ; }
43+ bool NoExtensionPackages () const noexcept { return _extensionPackages.Size () == 0 ; }
4344 bool NoProfilesModified () const noexcept { return _profilesModifiedView.Size () == 0 ; }
4445 bool NoProfilesAdded () const noexcept { return _profilesAddedView.Size () == 0 ; }
4546 bool NoSchemesAdded () const noexcept { return _colorSchemesAddedView.Size () == 0 ; }
4647
4748 // Views
48- Windows::Foundation::Collections::IObservableVector<Editor::ExtensionPackageViewModel> ExtensionPackages () const noexcept ;
49+ Windows::Foundation::Collections::IObservableVector<Editor::ExtensionPackageViewModel> ExtensionPackages () const noexcept { return _extensionPackages; }
4950 Windows::Foundation::Collections::IObservableVector<Editor::FragmentProfileViewModel> ProfilesModified () const noexcept { return _profilesModifiedView; }
5051 Windows::Foundation::Collections::IObservableVector<Editor::FragmentProfileViewModel> ProfilesAdded () const noexcept { return _profilesAddedView; }
5152 Windows::Foundation::Collections::IObservableVector<Editor::FragmentColorSchemeViewModel> ColorSchemesAdded () const noexcept { return _colorSchemesAddedView; }
5253
5354 // Methods
5455 void UpdateSettings (const Model::CascadiaSettings& settings, const Editor::ColorSchemesPageViewModel& colorSchemesPageVM);
55- bool GetExtensionState (hstring extensionSource) const ;
56- void SetExtensionState (hstring extensionSource, bool enableExt);
5756 void NavigateToProfile (const guid profileGuid);
5857 void NavigateToColorScheme (const Editor::ColorSchemeViewModel& schemeVM);
5958
59+ static bool GetExtensionState (hstring extensionSource, const Model::CascadiaSettings& settings);
60+ static void SetExtensionState (hstring extensionSource, const Model::CascadiaSettings& settings, bool enableExt);
61+
6062 til::typed_event<IInspectable, guid> NavigateToProfileRequested;
6163 til::typed_event<IInspectable, Editor::ColorSchemeViewModel> NavigateToColorSchemeRequested;
6264
63- VIEW_MODEL_OBSERVABLE_PROPERTY (hstring, CurrentExtensionSource);
65+ VIEW_MODEL_OBSERVABLE_PROPERTY (Editor::ExtensionPackageViewModel, CurrentExtensionPackage, nullptr );
66+ WINRT_PROPERTY (Editor::ExtensionPackageTemplateSelector, ExtensionPackageIdentifierTemplateSelector, nullptr );
6467
6568 private:
6669 Model::CascadiaSettings _settings;
6770 Editor::ColorSchemesPageViewModel _colorSchemesPageVM;
68- std::unordered_set<hstring> _extensionSources;
69- Windows::Foundation::Collections::IVector<Editor::FragmentExtensionViewModel> _fragmentExtensions;
71+ Windows::Foundation::Collections::IObservableVector<Editor::ExtensionPackageViewModel> _extensionPackages;
7072 Windows::Foundation::Collections::IObservableVector<Editor::FragmentProfileViewModel> _profilesModifiedView;
7173 Windows::Foundation::Collections::IObservableVector<Editor::FragmentProfileViewModel> _profilesAddedView;
7274 Windows::Foundation::Collections::IObservableVector<Editor::FragmentColorSchemeViewModel> _colorSchemesAddedView;
73-
74- Windows::Foundation::Collections::IVector<hstring> _DisabledProfileSources () const noexcept { return _settings.GlobalSettings ().DisabledProfileSources (); }
7575 };
7676
7777 struct ExtensionPackageViewModel : ExtensionPackageViewModelT<ExtensionPackageViewModel>, ViewModelHelper<ExtensionPackageViewModel>
7878 {
7979 public:
80- ExtensionPackageViewModel (hstring source, bool enabled) :
81- _source{ source },
82- _enabled{ enabled } {}
83- hstring Source () const noexcept { return _source; }
84- bool Enabled () const noexcept { return _enabled; }
80+ ExtensionPackageViewModel (const Model::ExtensionPackage& pkg, const Model::CascadiaSettings& settings) :
81+ _package{ pkg },
82+ _settings{ settings },
83+ _fragmentExtensions{ single_threaded_observable_vector<Editor::FragmentExtensionViewModel>() } {}
84+
85+ Model::ExtensionPackage Package () const noexcept { return _package; }
86+ hstring Scope () const noexcept ;
87+ bool Enabled () const ;
88+ void Enabled (bool val);
8589 hstring AccessibleName () const noexcept ;
90+ hstring AccessibleNameWithStatus () const noexcept ;
91+ Windows::Foundation::Collections::IObservableVector<Editor::FragmentExtensionViewModel> FragmentExtensions () { return _fragmentExtensions; }
8692
8793 private:
88- hstring _source;
89- bool _enabled;
94+ Model::ExtensionPackage _package;
95+ Model::CascadiaSettings _settings;
96+ Windows::Foundation::Collections::IObservableVector<Editor::FragmentExtensionViewModel> _fragmentExtensions;
9097 };
9198
9299 struct FragmentExtensionViewModel : FragmentExtensionViewModelT<FragmentExtensionViewModel>, ViewModelHelper<FragmentExtensionViewModel>
@@ -124,6 +131,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
124131 Model::Profile Profile () const { return _deducedProfile; };
125132 hstring SourceName () const { return _fragment.Source (); }
126133 hstring Json () const { return _entry.Json (); }
134+ hstring AccessibleName () const noexcept ;
127135
128136 private:
129137 Model::FragmentProfileEntry _entry;
@@ -142,15 +150,29 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
142150 Editor::ColorSchemeViewModel ColorSchemeVM () const { return _deducedSchemeVM; };
143151 hstring SourceName () const { return _fragment.Source (); }
144152 hstring Json () const { return _entry.Json (); }
153+ hstring AccessibleName () const noexcept ;
145154
146155 private:
147156 Model::FragmentColorSchemeEntry _entry;
148157 Model::FragmentSettings _fragment;
149158 Editor::ColorSchemeViewModel _deducedSchemeVM;
150159 };
160+
161+ struct ExtensionPackageTemplateSelector : public ExtensionPackageTemplateSelectorT <ExtensionPackageTemplateSelector>
162+ {
163+ public:
164+ ExtensionPackageTemplateSelector () = default ;
165+
166+ Windows::UI::Xaml::DataTemplate SelectTemplateCore (const Windows::Foundation::IInspectable& item, const Windows::UI::Xaml::DependencyObject& container);
167+ Windows::UI::Xaml::DataTemplate SelectTemplateCore (const Windows::Foundation::IInspectable& item);
168+
169+ WINRT_PROPERTY (Windows::UI::Xaml::DataTemplate, DefaultTemplate, nullptr );
170+ WINRT_PROPERTY (Windows::UI::Xaml::DataTemplate, ComplexTemplate, nullptr );
171+ };
151172};
152173
153174namespace winrt ::Microsoft::Terminal::Settings::Editor::factory_implementation
154175{
155176 BASIC_FACTORY (Extensions);
177+ BASIC_FACTORY (ExtensionPackageTemplateSelector);
156178}
0 commit comments