Fold new converter into existing code better

This commit is contained in:
Carlos Zamora
2026-05-12 15:08:00 -07:00
parent b0c1611673
commit 84390c5b27
10 changed files with 48 additions and 46 deletions

View File

@@ -64,7 +64,7 @@
<local:ColorToBrushConverter x:Key="ColorToBrushConverter" />
<local:ColorToStringConverter x:Key="ColorToStringConverter" />
<local:EmptyStringToVisibilityConverter x:Key="EmptyStringToVisibilityConverter" />
<mtu:StringNotEmptyToVisibilityConverter x:Key="StringNotEmptyToVisibilityConverter" />
<Color x:Key="DeleteButtonColor">Firebrick</Color>
@@ -1240,7 +1240,7 @@
ContentTransitions="{TemplateBinding ContentTransitions}" />
<TextBlock Style="{StaticResource SettingsPageItemDescriptionStyle}"
Text="{Binding Tag, RelativeSource={RelativeSource Mode=TemplatedParent}}"
Visibility="{Binding Tag, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource EmptyStringToVisibilityConverter}}" />
Visibility="{Binding Tag, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource StringNotEmptyToVisibilityConverter}}" />
</StackPanel>
<FontIcon Grid.Column="1"
Margin="20,0,8,0"

View File

@@ -107,8 +107,8 @@
<SubType>Code</SubType>
</ClInclude>
<ClInclude Include="SegoeFluentIconList.h" />
<ClInclude Include="Converters.h">
<DependentUpon>Converters.idl</DependentUpon>
<ClInclude Include="TerminalColorConverters.h">
<DependentUpon>TerminalColorConverters.idl</DependentUpon>
<SubType>Code</SubType>
</ClInclude>
<ClInclude Include="ColorSchemeViewModel.h">
@@ -309,8 +309,8 @@
<DependentUpon>ActionsViewModel.idl</DependentUpon>
<SubType>Code</SubType>
</ClCompile>
<ClCompile Include="Converters.cpp">
<DependentUpon>Converters.idl</DependentUpon>
<ClCompile Include="TerminalColorConverters.cpp">
<DependentUpon>TerminalColorConverters.idl</DependentUpon>
<SubType>Code</SubType>
</ClCompile>
<ClCompile Include="ColorSchemeViewModel.cpp">
@@ -432,7 +432,7 @@
</Midl>
<Midl Include="ProfileViewModel.idl" />
<Midl Include="ActionsViewModel.idl" />
<Midl Include="Converters.idl" />
<Midl Include="TerminalColorConverters.idl" />
<Midl Include="ColorSchemeViewModel.idl" />
<Midl Include="ColorSchemesPageViewModel.idl" />
<Midl Include="InteractionViewModel.idl" />

View File

@@ -29,7 +29,7 @@
<Midl Include="LaunchViewModel.idl" />
<Midl Include="EnumEntry.idl" />
<Midl Include="SettingContainer.idl" />
<Midl Include="Converters.idl" />
<Midl Include="TerminalColorConverters.idl" />
<Midl Include="NewTabMenuViewModel.idl" />
</ItemGroup>
<ItemGroup>

View File

@@ -2,10 +2,9 @@
// Licensed under the MIT license.
#include "pch.h"
#include "Converters.h"
#include "TerminalColorConverters.h"
#include "ColorToBrushConverter.g.cpp"
#include "ColorToStringConverter.g.cpp"
#include "EmptyStringToVisibilityConverter.g.cpp"
using namespace winrt::Microsoft::Terminal::Settings::Model;
@@ -33,22 +32,4 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
{
throw hresult_not_implemented();
}
Windows::Foundation::IInspectable EmptyStringToVisibilityConverter::Convert(Windows::Foundation::IInspectable const& value, Windows::UI::Xaml::Interop::TypeName const& /*targetType*/, Windows::Foundation::IInspectable const& /*parameter*/, hstring const& /*language*/)
{
hstring text;
if (value)
{
if (const auto& str{ value.try_as<hstring>() })
{
text = *str;
}
}
return winrt::box_value(text.empty() ? Windows::UI::Xaml::Visibility::Collapsed : Windows::UI::Xaml::Visibility::Visible);
}
Windows::Foundation::IInspectable EmptyStringToVisibilityConverter::ConvertBack(Windows::Foundation::IInspectable const& /*value*/, Windows::UI::Xaml::Interop::TypeName const& /*targetType*/, Windows::Foundation::IInspectable const& /*parameter*/, hstring const& /*language*/)
{
throw hresult_not_implemented();
}
}

View File

@@ -5,7 +5,6 @@
#include "ColorToBrushConverter.g.h"
#include "ColorToStringConverter.g.h"
#include "EmptyStringToVisibilityConverter.g.h"
#include "Utils.h"
namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
@@ -25,19 +24,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
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);
};
struct EmptyStringToVisibilityConverter : EmptyStringToVisibilityConverterT<EmptyStringToVisibilityConverter>
{
EmptyStringToVisibilityConverter() = 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::Microsoft::Terminal::Settings::Editor::factory_implementation
{
BASIC_FACTORY(ColorToBrushConverter);
BASIC_FACTORY(ColorToStringConverter);
BASIC_FACTORY(EmptyStringToVisibilityConverter);
}

View File

@@ -12,9 +12,4 @@ namespace Microsoft.Terminal.Settings.Editor
{
ColorToStringConverter();
}
runtimeclass EmptyStringToVisibilityConverter : [default] Windows.UI.Xaml.Data.IValueConverter
{
EmptyStringToVisibilityConverter();
}
}

View File

@@ -4,6 +4,7 @@
#include <til/winrt.h>
#include "Converters.g.cpp"
#include "StringNotEmptyToVisibilityConverter.g.cpp"
#pragma warning(disable : 26497) // We will make these functions constexpr, as they are part of an ABI boundary.
#pragma warning(disable : 26440) // The function ... can be declared as noexcept.
@@ -80,4 +81,22 @@ namespace winrt::Microsoft::Terminal::UI::implementation
{
return fontWeight.Weight;
}
winrt::Windows::Foundation::IInspectable StringNotEmptyToVisibilityConverter::Convert(winrt::Windows::Foundation::IInspectable const& value, winrt::Windows::UI::Xaml::Interop::TypeName const& /*targetType*/, winrt::Windows::Foundation::IInspectable const& /*parameter*/, winrt::hstring const& /*language*/)
{
winrt::hstring text;
if (value)
{
if (const auto& str{ value.try_as<winrt::hstring>() })
{
text = *str;
}
}
return winrt::box_value(Converters::StringNotEmptyToVisibility(text));
}
winrt::Windows::Foundation::IInspectable StringNotEmptyToVisibilityConverter::ConvertBack(winrt::Windows::Foundation::IInspectable const& /*value*/, winrt::Windows::UI::Xaml::Interop::TypeName const& /*targetType*/, winrt::Windows::Foundation::IInspectable const& /*parameter*/, winrt::hstring const& /*language*/)
{
throw winrt::hresult_not_implemented();
}
}

View File

@@ -4,6 +4,7 @@
#pragma once
#include "Converters.g.h"
#include "StringNotEmptyToVisibilityConverter.g.h"
namespace winrt::Microsoft::Terminal::UI::implementation
{
@@ -29,11 +30,18 @@ namespace winrt::Microsoft::Terminal::UI::implementation
static winrt::Windows::UI::Xaml::Media::SolidColorBrush ColorToBrush(winrt::Windows::UI::Color color);
static double FontWeightToDouble(winrt::Windows::UI::Text::FontWeight fontWeight);
};
struct StringNotEmptyToVisibilityConverter : StringNotEmptyToVisibilityConverterT<StringNotEmptyToVisibilityConverter>
{
StringNotEmptyToVisibilityConverter() = default;
winrt::Windows::Foundation::IInspectable Convert(winrt::Windows::Foundation::IInspectable const& value, winrt::Windows::UI::Xaml::Interop::TypeName const& targetType, winrt::Windows::Foundation::IInspectable const& parameter, winrt::hstring const& language);
winrt::Windows::Foundation::IInspectable ConvertBack(winrt::Windows::Foundation::IInspectable const& value, winrt::Windows::UI::Xaml::Interop::TypeName const& targetType, winrt::Windows::Foundation::IInspectable const& parameter, winrt::hstring const& language);
};
}
namespace winrt::Microsoft::Terminal::UI::factory_implementation
{
struct Converters : ConvertersT<Converters, implementation::Converters>
{
};
BASIC_FACTORY(Converters);
BASIC_FACTORY(StringNotEmptyToVisibilityConverter);
}

View File

@@ -27,4 +27,12 @@ namespace Microsoft.Terminal.UI
static Windows.UI.Xaml.Media.SolidColorBrush ColorToBrush(Windows.UI.Color color);
static Double FontWeightToDouble(Windows.UI.Text.FontWeight fontWeight);
}
// IValueConverter wrapper around Converters.StringNotEmptyToVisibility, for use
// in classic {Binding} scenarios (e.g. ControlTemplates) where x:Bind function
// syntax against the static Converters helpers isn't available.
runtimeclass StringNotEmptyToVisibilityConverter : [default] Windows.UI.Xaml.Data.IValueConverter
{
StringNotEmptyToVisibilityConverter();
}
}

View File

@@ -32,6 +32,7 @@
#include <Windows.Graphics.Imaging.Interop.h>
#include <winrt/Windows.UI.Xaml.Controls.h>
#include <winrt/Windows.UI.Xaml.Data.h>
#include <winrt/Windows.UI.Xaml.Markup.h>
#include <winrt/Windows.UI.Xaml.Input.h>
#include <winrt/Windows.UI.Xaml.Media.Imaging.h>