diff --git a/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.cpp b/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.cpp new file mode 100644 index 00000000000..24af0da0029 --- /dev/null +++ b/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.cpp @@ -0,0 +1,38 @@ +#include "pch.h" +#include "CommandKeyChordVisibilityConverter.h" +#include "CommandKeyChordVisibilityConverter.g.cpp" + +using namespace winrt::Windows; +using namespace winrt::Windows::UI::Xaml; + +namespace winrt::TerminalApp::implementation +{ + // Method Description: + // - Attempt to convert something into another type. For the + // CommandKeyChordVisibilityConverter, we're gonna check if `value` is a + // string, and try and convert it into a Visibility value. If the input + // param wasn't a string, or was the empty string, we'll return + // Visibility::Collapsed. Otherwise, we'll return Visible. + + // Arguments: + // - value: the input object to attempt to convert into a Visibility. + // Return Value: + // - Visible if the object was a string and wasn't the empty string. + Foundation::IInspectable CommandKeyChordVisibilityConverter::Convert(Foundation::IInspectable const& value, + Windows::UI::Xaml::Interop::TypeName const& /* targetType */, + Foundation::IInspectable const& /* parameter */, + hstring const& /* language */) + { + const auto& name = winrt::unbox_value_or(value, L""); + return winrt::box_value(name.empty() ? Visibility::Collapsed : Visibility::Visible); + } + + // unused for one-way bindings + Foundation::IInspectable CommandKeyChordVisibilityConverter::ConvertBack(Foundation::IInspectable const& /* value */, + Windows::UI::Xaml::Interop::TypeName const& /* targetType */, + Foundation::IInspectable const& /* parameter */, + hstring const& /* language */) + { + throw hresult_not_implemented(); + } +} diff --git a/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.h b/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.h new file mode 100644 index 00000000000..298f6ac0a0f --- /dev/null +++ b/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.h @@ -0,0 +1,27 @@ +#pragma once + +#include "CommandKeyChordVisibilityConverter.g.h" +#include "..\inc\cppwinrt_utils.h" + +namespace winrt::TerminalApp::implementation +{ + struct CommandKeyChordVisibilityConverter : CommandKeyChordVisibilityConverterT + { + CommandKeyChordVisibilityConverter() = default; + + Windows::Foundation::IInspectable Convert(Windows::Foundation::IInspectable const& value, + Windows::UI::Xaml::Interop::TypeName const& targetType, + Windows::Foundation::IInspectable const& parameter, + hstring const& language); + + Windows::Foundation::IInspectable ConvertBack(Windows::Foundation::IInspectable const& value, + Windows::UI::Xaml::Interop::TypeName const& targetType, + Windows::Foundation::IInspectable const& parameter, + hstring const& language); + }; +} + +namespace winrt::TerminalApp::factory_implementation +{ + BASIC_FACTORY(CommandKeyChordVisibilityConverter); +} diff --git a/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.idl b/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.idl new file mode 100644 index 00000000000..b293224e64d --- /dev/null +++ b/src/cascadia/TerminalApp/CommandKeyChordVisibilityConverter.idl @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +namespace TerminalApp +{ + // See https://docs.microsoft.com/en-us/windows/uwp/data-binding/data-binding-quickstart + + // We use the default attribute to declare IValueConverter as the default + // interface. In the listing, CommandKeyChordVisibilityConverter has only a + // constructor, and no methods, so no default interface is generated for it. + // The default attribute is optimal if you won't be adding instance members + // to CommandKeyChordVisibilityConverter, because no QueryInterface will be + // required to call the IValueConverter methods + runtimeclass CommandKeyChordVisibilityConverter : [default] Windows.UI.Xaml.Data.IValueConverter + { + CommandKeyChordVisibilityConverter(); + }; + +} diff --git a/src/cascadia/TerminalApp/CommandPalette.xaml b/src/cascadia/TerminalApp/CommandPalette.xaml index 86cd6e2edce..db795b7e6d2 100644 --- a/src/cascadia/TerminalApp/CommandPalette.xaml +++ b/src/cascadia/TerminalApp/CommandPalette.xaml @@ -19,6 +19,9 @@ the MIT License. See LICENSE in the project root for license information. --> adds it conditionally --> + + +