From 770d6b0dd2e6970737ca6305625bcf9bf82381dc Mon Sep 17 00:00:00 2001 From: Carlos Zamora Date: Wed, 26 Feb 2025 16:49:38 -0800 Subject: [PATCH] add DisplayName and Icon to profile generators; improve identifier system --- .../TerminalSettingsEditor/Extensions.cpp | 30 +++- .../TerminalSettingsEditor/Extensions.h | 5 +- .../TerminalSettingsEditor/Extensions.idl | 2 + .../TerminalSettingsEditor/Extensions.xaml | 139 ++++++++++++------ .../TerminalSettingsEditor/MainPage.cpp | 4 +- .../TerminalSettingsEditor/NewTabMenu.cpp | 2 - .../TerminalSettingsEditor/NewTabMenu.h | 1 - .../AzureCloudShellGenerator.cpp | 6 + .../AzureCloudShellGenerator.h | 2 + .../TerminalSettingsModel/CascadiaSettings.h | 2 +- .../CascadiaSettingsSerialization.cpp | 18 ++- .../IDynamicProfileGenerator.h | 2 + .../PowershellCoreProfileGenerator.cpp | 11 ++ .../PowershellCoreProfileGenerator.h | 2 + .../Resources/en-US/Resources.resw | 22 ++- .../SshHostGenerator.cpp | 11 ++ .../TerminalSettingsModel/SshHostGenerator.h | 2 + .../VisualStudioGenerator.cpp | 6 + .../VisualStudioGenerator.h | 2 + .../WslDistroGenerator.cpp | 14 +- .../WslDistroGenerator.h | 2 + 21 files changed, 219 insertions(+), 66 deletions(-) diff --git a/src/cascadia/TerminalSettingsEditor/Extensions.cpp b/src/cascadia/TerminalSettingsEditor/Extensions.cpp index 7a10e470915..48beef8ffea 100644 --- a/src/cascadia/TerminalSettingsEditor/Extensions.cpp +++ b/src/cascadia/TerminalSettingsEditor/Extensions.cpp @@ -24,12 +24,13 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { InitializeComponent(); - _extensionPackageTemplateSelector = Resources().Lookup(box_value(L"ExtensionPackageTemplateSelector")).as(); + _extensionPackageIdentifierTemplateSelector = Resources().Lookup(box_value(L"ExtensionPackageIdentifierTemplateSelector")).as(); } void Extensions::OnNavigatedTo(const NavigationEventArgs& e) { _ViewModel = e.Parameter().as(); + get_self(_ViewModel)->ExtensionPackageIdentifierTemplateSelector(_extensionPackageIdentifierTemplateSelector); } void Extensions::ExtensionNavigator_Click(const IInspectable& sender, const RoutedEventArgs& /*args*/) @@ -98,7 +99,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation } } - _NotifyChanges(L"IsExtensionView"); + _NotifyChanges(L"IsExtensionView", L"CurrentExtensionPackageIdentifierTemplate"); } }); } @@ -183,6 +184,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _colorSchemesAddedView = single_threaded_observable_vector(std::move(colorSchemesAddedTotal)); } + Windows::UI::Xaml::DataTemplate ExtensionsViewModel::CurrentExtensionPackageIdentifierTemplate() const + { + return _ExtensionPackageIdentifierTemplateSelector.SelectTemplate(CurrentExtensionPackage()); + } + // Returns true if the extension is enabled, false otherwise bool ExtensionsViewModel::GetExtensionState(hstring extensionSource, const Model::CascadiaSettings& settings) { @@ -262,13 +268,28 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation } } + // Returns the accessible name for the extension package in the following format: + // ", " hstring ExtensionPackageViewModel::AccessibleName() const noexcept + { + hstring name; + const auto source = _package.Source(); + if (const auto displayName = _package.DisplayName(); !displayName.empty()) + { + return hstring{ fmt::format(FMT_COMPILE(L"{}, {}"), displayName, source) }; + } + return source; + } + + // Returns the accessible name for the extension package with the disabled state (if disabled) in the following format: + // ", : " + hstring ExtensionPackageViewModel::AccessibleNameWithStatus() const noexcept { if (Enabled()) { - return _package.Source(); + return AccessibleName(); } - return hstring{ fmt::format(L"{}: {}", _package.Source(), RS_(L"Extension_StateDisabled/Text")) }; + return hstring{ fmt::format(FMT_COMPILE(L"{}: {}"), AccessibleName(), RS_(L"Extension_StateDisabled/Text")) }; } DataTemplate ExtensionPackageTemplateSelector::SelectTemplateCore(const IInspectable& item, const DependencyObject& /*container*/) @@ -286,7 +307,6 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation } return DefaultTemplate(); } - assert(false); return nullptr; } } diff --git a/src/cascadia/TerminalSettingsEditor/Extensions.h b/src/cascadia/TerminalSettingsEditor/Extensions.h index 7941677fcce..412fb96b416 100644 --- a/src/cascadia/TerminalSettingsEditor/Extensions.h +++ b/src/cascadia/TerminalSettingsEditor/Extensions.h @@ -29,7 +29,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation WINRT_PROPERTY(Editor::ExtensionsViewModel, ViewModel, nullptr); private: - Editor::ExtensionPackageTemplateSelector _extensionPackageTemplateSelector; + Editor::ExtensionPackageTemplateSelector _extensionPackageIdentifierTemplateSelector; }; struct ExtensionsViewModel : ExtensionsViewModelT, ViewModelHelper @@ -38,6 +38,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation ExtensionsViewModel(const Model::CascadiaSettings& settings, const Editor::ColorSchemesPageViewModel& colorSchemesPageVM); // Properties + Windows::UI::Xaml::DataTemplate CurrentExtensionPackageIdentifierTemplate() const; bool IsExtensionView() const noexcept { return _CurrentExtensionPackage != nullptr; } bool NoExtensionPackages() const noexcept { return _extensionPackages.Size() == 0; } bool NoProfilesModified() const noexcept { return _profilesModifiedView.Size() == 0; } @@ -62,6 +63,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation til::typed_event NavigateToColorSchemeRequested; VIEW_MODEL_OBSERVABLE_PROPERTY(Editor::ExtensionPackageViewModel, CurrentExtensionPackage, nullptr); + WINRT_PROPERTY(Editor::ExtensionPackageTemplateSelector, ExtensionPackageIdentifierTemplateSelector, nullptr); private: Model::CascadiaSettings _settings; @@ -85,6 +87,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation bool Enabled() const; void Enabled(bool val); hstring AccessibleName() const noexcept; + hstring AccessibleNameWithStatus() const noexcept; Windows::Foundation::Collections::IObservableVector FragmentExtensions() { return _fragmentExtensions; } private: diff --git a/src/cascadia/TerminalSettingsEditor/Extensions.idl b/src/cascadia/TerminalSettingsEditor/Extensions.idl index a806e5eed2e..7e7a977480c 100644 --- a/src/cascadia/TerminalSettingsEditor/Extensions.idl +++ b/src/cascadia/TerminalSettingsEditor/Extensions.idl @@ -15,6 +15,7 @@ namespace Microsoft.Terminal.Settings.Editor { // Properties ExtensionPackageViewModel CurrentExtensionPackage; + Windows.UI.Xaml.DataTemplate CurrentExtensionPackageIdentifierTemplate { get; }; Boolean IsExtensionView { get; }; Boolean NoExtensionPackages { get; }; Boolean NoProfilesModified { get; }; @@ -40,6 +41,7 @@ namespace Microsoft.Terminal.Settings.Editor Boolean Enabled; String Scope { get; }; String AccessibleName { get; }; + String AccessibleNameWithStatus { get; }; IVector FragmentExtensions { get; }; } diff --git a/src/cascadia/TerminalSettingsEditor/Extensions.xaml b/src/cascadia/TerminalSettingsEditor/Extensions.xaml index 3f92d8acd04..b4a18d29cde 100644 --- a/src/cascadia/TerminalSettingsEditor/Extensions.xaml +++ b/src/cascadia/TerminalSettingsEditor/Extensions.xaml @@ -39,9 +39,47 @@ - + + + + + + + + + + + + + + + + + + + + + + + + @@ -55,8 +93,9 @@ - + + -