Introduce setting override tracking and update SettingContainer (#9079)

This PR adds improved override message generation for inheritance in
SUI. The settings model now has an `OriginTag` to be able to denote
where a `Profile` came from. This tag is used in the `SettingContainer`
to generate a more specific override message.

## References
#6800 - SUI Epic
#8919 - SUI Inheritance PR
#8804 - SUI Inheritance (old issue)

## Detailed Description of the Pull Request / Additional comments
- **Terminal Settings Model**
  - Introduced `PROJECTED_SETTING` as a macro to more easily declare the
    functions for each setting
  - Introduced `<setting>OverrideSource` which finds the `Profile` that
    has \<setting\> defined
  - Introduced `OriginTag Profile::Origin {Custom, InBox, Generated}` to
    trace where a profile came from
  - `DefaultProfileUtils` creates profiles for profile generators. So
    that now sets the `Origin` tag to `Generated`
  - `CascadiaSettings::LoadDefaults()` tags all profiles created as
    `InBox`.
  - The view model had to ingest the API change to be able to interact
    with `<setting>OverrideSource`
- **Override Message Generation**
  - The reset button now has a more specific tooltip
  - The reset button now only appears if base layer is being overridden
  - We use the settings model changes to determine the message to
    display for the target

## Validation Steps Performed
Tested the following cases:
- overrides nothing (inherited setting)
- overrides value inherited from...
  - base layer
  - a profile generator
  - in-box profile
- global settings should not have this feature
This commit is contained in:
Carlos Zamora 2021-02-19 15:50:52 -08:00 committed by GitHub
parent dfeb855d18
commit eb0fb3e822
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 500 additions and 511 deletions

View File

@ -50,23 +50,23 @@ namespace winrt::TerminalApp::implementation
void ColorTable(std::array<uint32_t, 16> colors); void ColorTable(std::array<uint32_t, 16> colors);
std::array<uint32_t, 16> ColorTable(); std::array<uint32_t, 16> ColorTable();
GETSET_SETTING(uint32_t, DefaultForeground, DEFAULT_FOREGROUND_WITH_ALPHA); GETSET_SETTING(TerminalApp::TerminalSettings, uint32_t, DefaultForeground, DEFAULT_FOREGROUND_WITH_ALPHA);
GETSET_SETTING(uint32_t, DefaultBackground, DEFAULT_BACKGROUND_WITH_ALPHA); GETSET_SETTING(TerminalApp::TerminalSettings, uint32_t, DefaultBackground, DEFAULT_BACKGROUND_WITH_ALPHA);
GETSET_SETTING(uint32_t, SelectionBackground, DEFAULT_FOREGROUND); GETSET_SETTING(TerminalApp::TerminalSettings, uint32_t, SelectionBackground, DEFAULT_FOREGROUND);
GETSET_SETTING(int32_t, HistorySize, DEFAULT_HISTORY_SIZE); GETSET_SETTING(TerminalApp::TerminalSettings, int32_t, HistorySize, DEFAULT_HISTORY_SIZE);
GETSET_SETTING(int32_t, InitialRows, 30); GETSET_SETTING(TerminalApp::TerminalSettings, int32_t, InitialRows, 30);
GETSET_SETTING(int32_t, InitialCols, 80); GETSET_SETTING(TerminalApp::TerminalSettings, int32_t, InitialCols, 80);
GETSET_SETTING(bool, SnapOnInput, true); GETSET_SETTING(TerminalApp::TerminalSettings, bool, SnapOnInput, true);
GETSET_SETTING(bool, AltGrAliasing, true); GETSET_SETTING(TerminalApp::TerminalSettings, bool, AltGrAliasing, true);
GETSET_SETTING(uint32_t, CursorColor, DEFAULT_CURSOR_COLOR); GETSET_SETTING(TerminalApp::TerminalSettings, uint32_t, CursorColor, DEFAULT_CURSOR_COLOR);
GETSET_SETTING(Microsoft::Terminal::TerminalControl::CursorStyle, CursorShape, Microsoft::Terminal::TerminalControl::CursorStyle::Vintage); GETSET_SETTING(TerminalApp::TerminalSettings, Microsoft::Terminal::TerminalControl::CursorStyle, CursorShape, Microsoft::Terminal::TerminalControl::CursorStyle::Vintage);
GETSET_SETTING(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT); GETSET_SETTING(TerminalApp::TerminalSettings, uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT);
GETSET_SETTING(hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS);
GETSET_SETTING(bool, CopyOnSelect, false); GETSET_SETTING(TerminalApp::TerminalSettings, bool, CopyOnSelect, false);
GETSET_SETTING(bool, FocusFollowMouse, false); GETSET_SETTING(TerminalApp::TerminalSettings, bool, FocusFollowMouse, false);
GETSET_SETTING(Windows::Foundation::IReference<uint32_t>, TabColor, nullptr); GETSET_SETTING(TerminalApp::TerminalSettings, Windows::Foundation::IReference<uint32_t>, TabColor, nullptr);
// When set, StartingTabColor allows to create a terminal with a "sticky" tab color. // When set, StartingTabColor allows to create a terminal with a "sticky" tab color.
// This color is prioritized above the TabColor (that is usually initialized based on profile settings). // This color is prioritized above the TabColor (that is usually initialized based on profile settings).
@ -76,48 +76,42 @@ namespace winrt::TerminalApp::implementation
// TODO: to ensure that this property is not populated during settings reload, // TODO: to ensure that this property is not populated during settings reload,
// we should consider moving this property to a separate interface, // we should consider moving this property to a separate interface,
// passed to the terminal only upon creation. // passed to the terminal only upon creation.
GETSET_SETTING(Windows::Foundation::IReference<uint32_t>, StartingTabColor, nullptr); GETSET_SETTING(TerminalApp::TerminalSettings, Windows::Foundation::IReference<uint32_t>, StartingTabColor, nullptr);
// ------------------------ End of Core Settings ----------------------- // ------------------------ End of Core Settings -----------------------
GETSET_SETTING(hstring, ProfileName); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, ProfileName);
GETSET_SETTING(bool, UseAcrylic, false); GETSET_SETTING(TerminalApp::TerminalSettings, bool, UseAcrylic, false);
GETSET_SETTING(double, TintOpacity, 0.5); GETSET_SETTING(TerminalApp::TerminalSettings, double, TintOpacity, 0.5);
GETSET_SETTING(hstring, Padding, DEFAULT_PADDING); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, Padding, DEFAULT_PADDING);
GETSET_SETTING(hstring, FontFace, DEFAULT_FONT_FACE); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, FontFace, DEFAULT_FONT_FACE);
GETSET_SETTING(int32_t, FontSize, DEFAULT_FONT_SIZE); GETSET_SETTING(TerminalApp::TerminalSettings, int32_t, FontSize, DEFAULT_FONT_SIZE);
GETSET_SETTING(winrt::Windows::UI::Text::FontWeight, FontWeight); GETSET_SETTING(TerminalApp::TerminalSettings, winrt::Windows::UI::Text::FontWeight, FontWeight);
GETSET_SETTING(hstring, BackgroundImage); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, BackgroundImage);
GETSET_SETTING(double, BackgroundImageOpacity, 1.0); GETSET_SETTING(TerminalApp::TerminalSettings, double, BackgroundImageOpacity, 1.0);
GETSET_SETTING(winrt::Windows::UI::Xaml::Media::Stretch, GETSET_SETTING(TerminalApp::TerminalSettings, winrt::Windows::UI::Xaml::Media::Stretch, BackgroundImageStretchMode, winrt::Windows::UI::Xaml::Media::Stretch::UniformToFill);
BackgroundImageStretchMode, GETSET_SETTING(TerminalApp::TerminalSettings, winrt::Windows::UI::Xaml::HorizontalAlignment, BackgroundImageHorizontalAlignment, winrt::Windows::UI::Xaml::HorizontalAlignment::Center);
winrt::Windows::UI::Xaml::Media::Stretch::UniformToFill); GETSET_SETTING(TerminalApp::TerminalSettings, winrt::Windows::UI::Xaml::VerticalAlignment, BackgroundImageVerticalAlignment, winrt::Windows::UI::Xaml::VerticalAlignment::Center);
GETSET_SETTING(winrt::Windows::UI::Xaml::HorizontalAlignment,
BackgroundImageHorizontalAlignment,
winrt::Windows::UI::Xaml::HorizontalAlignment::Center);
GETSET_SETTING(winrt::Windows::UI::Xaml::VerticalAlignment,
BackgroundImageVerticalAlignment,
winrt::Windows::UI::Xaml::VerticalAlignment::Center);
GETSET_SETTING(Microsoft::Terminal::TerminalControl::IKeyBindings, KeyBindings, nullptr); GETSET_SETTING(TerminalApp::TerminalSettings, Microsoft::Terminal::TerminalControl::IKeyBindings, KeyBindings, nullptr);
GETSET_SETTING(hstring, Commandline); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, Commandline);
GETSET_SETTING(hstring, StartingDirectory); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, StartingDirectory);
GETSET_SETTING(hstring, StartingTitle); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, StartingTitle);
GETSET_SETTING(bool, SuppressApplicationTitle); GETSET_SETTING(TerminalApp::TerminalSettings, bool, SuppressApplicationTitle);
GETSET_SETTING(hstring, EnvironmentVariables); GETSET_SETTING(TerminalApp::TerminalSettings, hstring, EnvironmentVariables);
GETSET_SETTING(Microsoft::Terminal::TerminalControl::ScrollbarState, ScrollState, Microsoft::Terminal::TerminalControl::ScrollbarState::Visible); GETSET_SETTING(TerminalApp::TerminalSettings, Microsoft::Terminal::TerminalControl::ScrollbarState, ScrollState, Microsoft::Terminal::TerminalControl::ScrollbarState::Visible);
GETSET_SETTING(Microsoft::Terminal::TerminalControl::TextAntialiasingMode, AntialiasingMode, Microsoft::Terminal::TerminalControl::TextAntialiasingMode::Grayscale); GETSET_SETTING(TerminalApp::TerminalSettings, Microsoft::Terminal::TerminalControl::TextAntialiasingMode, AntialiasingMode, Microsoft::Terminal::TerminalControl::TextAntialiasingMode::Grayscale);
GETSET_SETTING(bool, RetroTerminalEffect, false); GETSET_SETTING(TerminalApp::TerminalSettings, bool, RetroTerminalEffect, false);
GETSET_SETTING(bool, ForceFullRepaintRendering, false); GETSET_SETTING(TerminalApp::TerminalSettings, bool, ForceFullRepaintRendering, false);
GETSET_SETTING(bool, SoftwareRendering, false); GETSET_SETTING(TerminalApp::TerminalSettings, bool, SoftwareRendering, false);
GETSET_SETTING(bool, ForceVTInput, false); GETSET_SETTING(TerminalApp::TerminalSettings, bool, ForceVTInput, false);
GETSET_PROPERTY(hstring, PixelShaderPath); GETSET_PROPERTY(hstring, PixelShaderPath);

View File

@ -277,6 +277,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
} }
} }
// Method Description:
// - updates the content frame to present a view of the profile page
// - NOTE: this does not update the selected item.
// Arguments:
// - profile - the profile object we are getting a view of
void MainPage::_Navigate(const Editor::ProfileViewModel& profile) void MainPage::_Navigate(const Editor::ProfileViewModel& profile)
{ {
_lastProfilesNavState = winrt::make<ProfilePageNavigationState>(profile, _lastProfilesNavState = winrt::make<ProfilePageNavigationState>(profile,

View File

@ -78,6 +78,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<muxc:NavigationViewItemHeader x:Uid="Nav_Profiles"/> <muxc:NavigationViewItemHeader x:Uid="Nav_Profiles"/>
<muxc:NavigationViewItem x:Uid="Nav_ProfileDefaults" <muxc:NavigationViewItem x:Uid="Nav_ProfileDefaults"
x:Name="BaseLayerMenuItem"
Tag="GlobalProfile_Nav"> Tag="GlobalProfile_Nav">
<muxc:NavigationViewItem.Icon> <muxc:NavigationViewItem.Icon>
<FontIcon Glyph="&#xE81E;"/> <FontIcon Glyph="&#xE81E;"/>

View File

@ -6,6 +6,10 @@ import "MainPage.idl";
#include "ViewModelHelpers.idl.h" #include "ViewModelHelpers.idl.h"
#define OBSERVABLE_PROJECTED_PROFILE_SETTING(Type, Name) \
OBSERVABLE_PROJECTED_SETTING(Type, Name); \
Microsoft.Terminal.Settings.Model.Profile Name##OverrideSource { get; }
namespace Microsoft.Terminal.Settings.Editor namespace Microsoft.Terminal.Settings.Editor
{ {
runtimeclass ProfileViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged runtimeclass ProfileViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged
@ -17,44 +21,44 @@ namespace Microsoft.Terminal.Settings.Editor
Boolean UseCustomStartingDirectory { get; }; Boolean UseCustomStartingDirectory { get; };
Boolean BackgroundImageSettingsVisible { get; }; Boolean BackgroundImageSettingsVisible { get; };
OBSERVABLE_PROJECTED_SETTING(String, Name); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Name);
OBSERVABLE_PROJECTED_SETTING(Guid, Guid); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Guid, Guid);
OBSERVABLE_PROJECTED_SETTING(String, Source); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Source);
OBSERVABLE_PROJECTED_SETTING(Guid, ConnectionType); PERMANENT_OBSERVABLE_PROJECTED_SETTING(Guid, ConnectionType);
OBSERVABLE_PROJECTED_SETTING(Boolean, Hidden); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, Hidden);
OBSERVABLE_PROJECTED_SETTING(String, Icon); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Icon);
OBSERVABLE_PROJECTED_SETTING(Microsoft.Terminal.Settings.Model.CloseOnExitMode, CloseOnExit); OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Settings.Model.CloseOnExitMode, CloseOnExit);
OBSERVABLE_PROJECTED_SETTING(String, TabTitle); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, TabTitle);
OBSERVABLE_PROJECTED_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, TabColor); OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, TabColor);
OBSERVABLE_PROJECTED_SETTING(Boolean, SuppressApplicationTitle); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, SuppressApplicationTitle);
OBSERVABLE_PROJECTED_SETTING(Boolean, UseAcrylic); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, UseAcrylic);
OBSERVABLE_PROJECTED_SETTING(Double, AcrylicOpacity); OBSERVABLE_PROJECTED_PROFILE_SETTING(Double, AcrylicOpacity);
OBSERVABLE_PROJECTED_SETTING(Microsoft.Terminal.TerminalControl.ScrollbarState, ScrollState); OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.TerminalControl.ScrollbarState, ScrollState);
OBSERVABLE_PROJECTED_SETTING(String, FontFace); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, FontFace);
OBSERVABLE_PROJECTED_SETTING(Int32, FontSize); OBSERVABLE_PROJECTED_PROFILE_SETTING(Int32, FontSize);
OBSERVABLE_PROJECTED_SETTING(Windows.UI.Text.FontWeight, FontWeight); OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.UI.Text.FontWeight, FontWeight);
OBSERVABLE_PROJECTED_SETTING(String, Padding); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Padding);
OBSERVABLE_PROJECTED_SETTING(String, Commandline); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, Commandline);
OBSERVABLE_PROJECTED_SETTING(String, StartingDirectory); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, StartingDirectory);
OBSERVABLE_PROJECTED_SETTING(String, BackgroundImagePath); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, BackgroundImagePath);
OBSERVABLE_PROJECTED_SETTING(Double, BackgroundImageOpacity); OBSERVABLE_PROJECTED_PROFILE_SETTING(Double, BackgroundImageOpacity);
OBSERVABLE_PROJECTED_SETTING(Windows.UI.Xaml.Media.Stretch, BackgroundImageStretchMode); OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.UI.Xaml.Media.Stretch, BackgroundImageStretchMode);
OBSERVABLE_PROJECTED_SETTING(Microsoft.Terminal.Settings.Model.ConvergedAlignment, BackgroundImageAlignment); OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Settings.Model.ConvergedAlignment, BackgroundImageAlignment);
OBSERVABLE_PROJECTED_SETTING(Microsoft.Terminal.TerminalControl.TextAntialiasingMode, AntialiasingMode); OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.TerminalControl.TextAntialiasingMode, AntialiasingMode);
OBSERVABLE_PROJECTED_SETTING(Boolean, RetroTerminalEffect); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, RetroTerminalEffect);
OBSERVABLE_PROJECTED_SETTING(Boolean, ForceFullRepaintRendering); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, ForceFullRepaintRendering);
OBSERVABLE_PROJECTED_SETTING(Boolean, SoftwareRendering); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, SoftwareRendering);
OBSERVABLE_PROJECTED_SETTING(String, ColorSchemeName); OBSERVABLE_PROJECTED_PROFILE_SETTING(String, ColorSchemeName);
OBSERVABLE_PROJECTED_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, Foreground); OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, Foreground);
OBSERVABLE_PROJECTED_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, Background); OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, Background);
OBSERVABLE_PROJECTED_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, SelectionBackground); OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, SelectionBackground);
OBSERVABLE_PROJECTED_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, CursorColor); OBSERVABLE_PROJECTED_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, CursorColor);
OBSERVABLE_PROJECTED_SETTING(Int32, HistorySize); OBSERVABLE_PROJECTED_PROFILE_SETTING(Int32, HistorySize);
OBSERVABLE_PROJECTED_SETTING(Boolean, SnapOnInput); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, SnapOnInput);
OBSERVABLE_PROJECTED_SETTING(Boolean, AltGrAliasing); OBSERVABLE_PROJECTED_PROFILE_SETTING(Boolean, AltGrAliasing);
OBSERVABLE_PROJECTED_SETTING(Microsoft.Terminal.TerminalControl.CursorStyle, CursorShape); OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.TerminalControl.CursorStyle, CursorShape);
OBSERVABLE_PROJECTED_SETTING(UInt32, CursorHeight); OBSERVABLE_PROJECTED_PROFILE_SETTING(UInt32, CursorHeight);
OBSERVABLE_PROJECTED_SETTING(Microsoft.Terminal.Settings.Model.BellStyle, BellStyle); OBSERVABLE_PROJECTED_PROFILE_SETTING(Microsoft.Terminal.Settings.Model.BellStyle, BellStyle);
} }
runtimeclass DeleteProfileEventArgs runtimeclass DeleteProfileEventArgs

View File

@ -76,6 +76,7 @@ the MIT License. See LICENSE in the project root for license information. -->
x:Name="CommandlineContainer" x:Name="CommandlineContainer"
HasSettingValue="{x:Bind State.Profile.HasCommandline, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasCommandline, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearCommandline}" ClearSettingValue="{x:Bind State.Profile.ClearCommandline}"
SettingOverrideSource="{x:Bind State.Profile.CommandlineOverrideSource, Mode=OneWay}"
Visibility="{x:Bind State.Profile.IsBaseLayer, Mode=OneWay, Converter={StaticResource InvertedBooleanToVisibilityConverter}}" Visibility="{x:Bind State.Profile.IsBaseLayer, Mode=OneWay, Converter={StaticResource InvertedBooleanToVisibilityConverter}}"
Margin="0,0,0,24"> Margin="0,0,0,24">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
@ -92,6 +93,7 @@ the MIT License. See LICENSE in the project root for license information. -->
x:Name="StartingDirectoryContainer" x:Name="StartingDirectoryContainer"
HasSettingValue="{x:Bind State.Profile.HasStartingDirectory, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasStartingDirectory, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearStartingDirectory}" ClearSettingValue="{x:Bind State.Profile.ClearStartingDirectory}"
SettingOverrideSource="{x:Bind State.Profile.StartingDirectoryOverrideSource, Mode=OneWay}"
Margin="0"> Margin="0">
<StackPanel Orientation="Vertical"> <StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
@ -113,7 +115,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Icon--> <!--Icon-->
<local:SettingContainer x:Uid="Profile_Icon" <local:SettingContainer x:Uid="Profile_Icon"
HasSettingValue="{x:Bind State.Profile.HasIcon, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasIcon, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearIcon}"> ClearSettingValue="{x:Bind State.Profile.ClearIcon}"
SettingOverrideSource="{x:Bind State.Profile.IconOverrideSource, Mode=OneWay}">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
<TextBox Text="{x:Bind State.Profile.Icon, Mode=TwoWay}" <TextBox Text="{x:Bind State.Profile.Icon, Mode=TwoWay}"
FontFamily="Segoe UI, Segoe MDL2 Assets" FontFamily="Segoe UI, Segoe MDL2 Assets"
@ -127,7 +130,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Tab Title--> <!--Tab Title-->
<local:SettingContainer x:Uid="Profile_TabTitle" <local:SettingContainer x:Uid="Profile_TabTitle"
HasSettingValue="{x:Bind State.Profile.HasTabTitle, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasTabTitle, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearTabTitle}"> ClearSettingValue="{x:Bind State.Profile.ClearTabTitle}"
SettingOverrideSource="{x:Bind State.Profile.TabTitleOverrideSource, Mode=OneWay}">
<TextBox Text="{x:Bind State.Profile.TabTitle, Mode=TwoWay}" <TextBox Text="{x:Bind State.Profile.TabTitle, Mode=TwoWay}"
Style="{StaticResource TextBoxSettingStyle}"/> Style="{StaticResource TextBoxSettingStyle}"/>
</local:SettingContainer> </local:SettingContainer>
@ -212,6 +216,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_ColorScheme" <local:SettingContainer x:Uid="Profile_ColorScheme"
HasSettingValue="{x:Bind State.Profile.HasColorSchemeName, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasColorSchemeName, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearColorSchemeName}" ClearSettingValue="{x:Bind State.Profile.ClearColorSchemeName}"
SettingOverrideSource="{x:Bind State.Profile.ColorSchemeNameOverrideSource, Mode=OneWay}"
Margin="0"> Margin="0">
<ComboBox ItemsSource="{x:Bind ColorSchemeList, Mode=OneWay}" <ComboBox ItemsSource="{x:Bind ColorSchemeList, Mode=OneWay}"
SelectedItem="{x:Bind CurrentColorScheme, Mode=TwoWay}" SelectedItem="{x:Bind CurrentColorScheme, Mode=TwoWay}"
@ -227,7 +232,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Font Face--> <!--Font Face-->
<local:SettingContainer x:Uid="Profile_FontFace" <local:SettingContainer x:Uid="Profile_FontFace"
HasSettingValue="{x:Bind State.Profile.HasFontFace, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasFontFace, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearFontFace}"> ClearSettingValue="{x:Bind State.Profile.ClearFontFace}"
SettingOverrideSource="{x:Bind State.Profile.FontFaceOverrideSource, Mode=OneWay}">
<TextBox Text="{x:Bind State.Profile.FontFace, Mode=TwoWay}" <TextBox Text="{x:Bind State.Profile.FontFace, Mode=TwoWay}"
Style="{StaticResource TextBoxSettingStyle}"/> Style="{StaticResource TextBoxSettingStyle}"/>
</local:SettingContainer> </local:SettingContainer>
@ -235,7 +241,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Font Size--> <!--Font Size-->
<local:SettingContainer x:Uid="Profile_FontSize" <local:SettingContainer x:Uid="Profile_FontSize"
HasSettingValue="{x:Bind State.Profile.HasFontSize, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasFontSize, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearFontSize}"> ClearSettingValue="{x:Bind State.Profile.ClearFontSize}"
SettingOverrideSource="{x:Bind State.Profile.FontSizeOverrideSource, Mode=OneWay}">
<muxc:NumberBox Value="{x:Bind State.Profile.FontSize, Mode=TwoWay}" <muxc:NumberBox Value="{x:Bind State.Profile.FontSize, Mode=TwoWay}"
Style="{StaticResource NumberBoxSettingStyle}" Style="{StaticResource NumberBoxSettingStyle}"
AcceptsExpression="False" AcceptsExpression="False"
@ -249,7 +256,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_FontWeight" <local:SettingContainer x:Uid="Profile_FontWeight"
x:Name="FontWeightContainer" x:Name="FontWeightContainer"
HasSettingValue="{x:Bind State.Profile.HasFontWeight, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasFontWeight, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearFontWeight}"> ClearSettingValue="{x:Bind State.Profile.ClearFontWeight}"
SettingOverrideSource="{x:Bind State.Profile.FontWeightOverrideSource, Mode=OneWay}">
<StackPanel> <StackPanel>
<ComboBox x:Name="FontWeightComboBox" <ComboBox x:Name="FontWeightComboBox"
ItemsSource="{x:Bind FontWeightList, Mode=OneWay}" ItemsSource="{x:Bind FontWeightList, Mode=OneWay}"
@ -283,7 +291,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Retro Terminal Effect--> <!--Retro Terminal Effect-->
<local:SettingContainer x:Uid="Profile_RetroTerminalEffect" <local:SettingContainer x:Uid="Profile_RetroTerminalEffect"
HasSettingValue="{x:Bind State.Profile.HasRetroTerminalEffect, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasRetroTerminalEffect, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearRetroTerminalEffect}"> ClearSettingValue="{x:Bind State.Profile.ClearRetroTerminalEffect}"
SettingOverrideSource="{x:Bind State.Profile.RetroTerminalEffectOverrideSource, Mode=OneWay}">
<ToggleSwitch IsOn="{x:Bind State.Profile.RetroTerminalEffect, Mode=TwoWay}"/> <ToggleSwitch IsOn="{x:Bind State.Profile.RetroTerminalEffect, Mode=TwoWay}"/>
</local:SettingContainer> </local:SettingContainer>
</StackPanel> </StackPanel>
@ -296,6 +305,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_CursorShape" <local:SettingContainer x:Uid="Profile_CursorShape"
HasSettingValue="{x:Bind State.Profile.HasCursorShape, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasCursorShape, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearCursorShape}" ClearSettingValue="{x:Bind State.Profile.ClearCursorShape}"
SettingOverrideSource="{x:Bind State.Profile.CursorShapeOverrideSource, Mode=OneWay}"
Margin="0"> Margin="0">
<muxc:RadioButtons ItemsSource="{x:Bind CursorShapeList, Mode=OneWay}" <muxc:RadioButtons ItemsSource="{x:Bind CursorShapeList, Mode=OneWay}"
SelectedItem="{x:Bind CurrentCursorShape, Mode=TwoWay}" SelectedItem="{x:Bind CurrentCursorShape, Mode=TwoWay}"
@ -306,6 +316,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_CursorHeight" <local:SettingContainer x:Uid="Profile_CursorHeight"
HasSettingValue="{x:Bind State.Profile.HasCursorHeight, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasCursorHeight, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearCursorHeight}" ClearSettingValue="{x:Bind State.Profile.ClearCursorHeight}"
SettingOverrideSource="{x:Bind State.Profile.CursorHeightOverrideSource, Mode=OneWay}"
Visibility="{x:Bind IsVintageCursor, Mode=OneWay}"> Visibility="{x:Bind IsVintageCursor, Mode=OneWay}">
<muxc:NumberBox Value="{x:Bind State.Profile.CursorHeight, Mode=TwoWay}" <muxc:NumberBox Value="{x:Bind State.Profile.CursorHeight, Mode=TwoWay}"
Style="{StaticResource NumberBoxSettingStyle}" Style="{StaticResource NumberBoxSettingStyle}"
@ -323,6 +334,7 @@ the MIT License. See LICENSE in the project root for license information. -->
x:Name="BackgroundImageContainer" x:Name="BackgroundImageContainer"
HasSettingValue="{x:Bind State.Profile.HasBackgroundImagePath, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasBackgroundImagePath, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearBackgroundImagePath}" ClearSettingValue="{x:Bind State.Profile.ClearBackgroundImagePath}"
SettingOverrideSource="{x:Bind State.Profile.BackgroundImagePathOverrideSource, Mode=OneWay}"
Margin="0"> Margin="0">
<StackPanel Orientation="Vertical"> <StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal"> <StackPanel Orientation="Horizontal">
@ -344,6 +356,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_BackgroundImageStretchMode" <local:SettingContainer x:Uid="Profile_BackgroundImageStretchMode"
HasSettingValue="{x:Bind State.Profile.HasBackgroundImageStretchMode, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasBackgroundImageStretchMode, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearBackgroundImageStretchMode}" ClearSettingValue="{x:Bind State.Profile.ClearBackgroundImageStretchMode}"
SettingOverrideSource="{x:Bind State.Profile.BackgroundImageStretchModeOverrideSource, Mode=OneWay}"
Visibility="{x:Bind State.Profile.BackgroundImageSettingsVisible, Mode=OneWay}"> Visibility="{x:Bind State.Profile.BackgroundImageSettingsVisible, Mode=OneWay}">
<muxc:RadioButtons ItemsSource="{x:Bind BackgroundImageStretchModeList, Mode=OneWay}" <muxc:RadioButtons ItemsSource="{x:Bind BackgroundImageStretchModeList, Mode=OneWay}"
SelectedItem="{x:Bind CurrentBackgroundImageStretchMode, Mode=TwoWay}" SelectedItem="{x:Bind CurrentBackgroundImageStretchMode, Mode=TwoWay}"
@ -354,6 +367,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_BackgroundImageAlignment" <local:SettingContainer x:Uid="Profile_BackgroundImageAlignment"
HasSettingValue="{x:Bind State.Profile.HasBackgroundImageAlignment, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasBackgroundImageAlignment, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearBackgroundImageAlignment}" ClearSettingValue="{x:Bind State.Profile.ClearBackgroundImageAlignment}"
SettingOverrideSource="{x:Bind State.Profile.BackgroundImageAlignmentOverrideSource, Mode=OneWay}"
Visibility="{x:Bind State.Profile.BackgroundImageSettingsVisible, Mode=OneWay}"> Visibility="{x:Bind State.Profile.BackgroundImageSettingsVisible, Mode=OneWay}">
<Grid HorizontalAlignment="Left"> <Grid HorizontalAlignment="Left">
<Grid.RowDefinitions> <Grid.RowDefinitions>
@ -509,6 +523,7 @@ the MIT License. See LICENSE in the project root for license information. -->
x:Name="BackgroundImageOpacityContainer" x:Name="BackgroundImageOpacityContainer"
HasSettingValue="{x:Bind State.Profile.HasBackgroundImageOpacity, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasBackgroundImageOpacity, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearBackgroundImageOpacity}" ClearSettingValue="{x:Bind State.Profile.ClearBackgroundImageOpacity}"
SettingOverrideSource="{x:Bind State.Profile.BackgroundImageOpacityOverrideSource, Mode=OneWay}"
Visibility="{x:Bind State.Profile.BackgroundImageSettingsVisible, Mode=OneWay}"> Visibility="{x:Bind State.Profile.BackgroundImageSettingsVisible, Mode=OneWay}">
<Grid Style="{StaticResource CustomSliderControlGridStyle}"> <Grid Style="{StaticResource CustomSliderControlGridStyle}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@ -533,6 +548,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_UseAcrylic" <local:SettingContainer x:Uid="Profile_UseAcrylic"
HasSettingValue="{x:Bind State.Profile.HasUseAcrylic, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasUseAcrylic, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearUseAcrylic}" ClearSettingValue="{x:Bind State.Profile.ClearUseAcrylic}"
SettingOverrideSource="{x:Bind State.Profile.UseAcrylicOverrideSource, Mode=OneWay}"
Margin="0"> Margin="0">
<ToggleSwitch x:Name="UseAcrylicToggleSwitch" <ToggleSwitch x:Name="UseAcrylicToggleSwitch"
IsOn="{x:Bind State.Profile.UseAcrylic, Mode=TwoWay}"/> IsOn="{x:Bind State.Profile.UseAcrylic, Mode=TwoWay}"/>
@ -543,6 +559,7 @@ the MIT License. See LICENSE in the project root for license information. -->
x:Name="AcrylicOpacityContainer" x:Name="AcrylicOpacityContainer"
HasSettingValue="{x:Bind State.Profile.HasAcrylicOpacity, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasAcrylicOpacity, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearAcrylicOpacity}" ClearSettingValue="{x:Bind State.Profile.ClearAcrylicOpacity}"
SettingOverrideSource="{x:Bind State.Profile.AcrylicOpacityOverrideSource, Mode=OneWay}"
Visibility="{Binding ElementName=UseAcrylicToggleSwitch, Path=IsOn, Mode=OneWay}"> Visibility="{Binding ElementName=UseAcrylicToggleSwitch, Path=IsOn, Mode=OneWay}">
<StackPanel x:Name="AcrylicOpacityControl"> <StackPanel x:Name="AcrylicOpacityControl">
<Grid Style="{StaticResource CustomSliderControlGridStyle}"> <Grid Style="{StaticResource CustomSliderControlGridStyle}">
@ -569,6 +586,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_Padding" <local:SettingContainer x:Uid="Profile_Padding"
HasSettingValue="{x:Bind State.Profile.HasPadding, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasPadding, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearPadding}" ClearSettingValue="{x:Bind State.Profile.ClearPadding}"
SettingOverrideSource="{x:Bind State.Profile.PaddingOverrideSource, Mode=OneWay}"
Margin="0"> Margin="0">
<Grid Style="{StaticResource CustomSliderControlGridStyle}"> <Grid Style="{StaticResource CustomSliderControlGridStyle}">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@ -587,7 +605,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Scrollbar Visibility--> <!--Scrollbar Visibility-->
<local:SettingContainer x:Uid="Profile_ScrollbarVisibility" <local:SettingContainer x:Uid="Profile_ScrollbarVisibility"
HasSettingValue="{x:Bind State.Profile.HasScrollState, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasScrollState, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearScrollState}"> ClearSettingValue="{x:Bind State.Profile.ClearScrollState}"
SettingOverrideSource="{x:Bind State.Profile.ScrollStateOverrideSource, Mode=OneWay}">
<muxc:RadioButtons ItemsSource="{x:Bind ScrollStateList, Mode=OneWay}" <muxc:RadioButtons ItemsSource="{x:Bind ScrollStateList, Mode=OneWay}"
SelectedItem="{x:Bind CurrentScrollState, Mode=TwoWay}" SelectedItem="{x:Bind CurrentScrollState, Mode=TwoWay}"
ItemTemplate="{StaticResource EnumRadioButtonTemplate}"/> ItemTemplate="{StaticResource EnumRadioButtonTemplate}"/>
@ -605,6 +624,7 @@ the MIT License. See LICENSE in the project root for license information. -->
<local:SettingContainer x:Uid="Profile_SuppressApplicationTitle" <local:SettingContainer x:Uid="Profile_SuppressApplicationTitle"
HasSettingValue="{x:Bind State.Profile.HasSuppressApplicationTitle, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasSuppressApplicationTitle, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearSuppressApplicationTitle}" ClearSettingValue="{x:Bind State.Profile.ClearSuppressApplicationTitle}"
SettingOverrideSource="{x:Bind State.Profile.SuppressApplicationTitleOverrideSource, Mode=OneWay}"
Margin="0"> Margin="0">
<ToggleSwitch IsOn="{x:Bind State.Profile.SuppressApplicationTitle, Mode=TwoWay}"/> <ToggleSwitch IsOn="{x:Bind State.Profile.SuppressApplicationTitle, Mode=TwoWay}"/>
</local:SettingContainer> </local:SettingContainer>
@ -612,7 +632,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Antialiasing Mode--> <!--Antialiasing Mode-->
<local:SettingContainer x:Uid="Profile_AntialiasingMode" <local:SettingContainer x:Uid="Profile_AntialiasingMode"
HasSettingValue="{x:Bind State.Profile.HasAntialiasingMode, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasAntialiasingMode, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearAntialiasingMode}"> ClearSettingValue="{x:Bind State.Profile.ClearAntialiasingMode}"
SettingOverrideSource="{x:Bind State.Profile.AntialiasingModeOverrideSource, Mode=OneWay}">
<muxc:RadioButtons ItemsSource="{x:Bind AntiAliasingModeList, Mode=OneWay}" <muxc:RadioButtons ItemsSource="{x:Bind AntiAliasingModeList, Mode=OneWay}"
SelectedItem="{x:Bind CurrentAntiAliasingMode, Mode=TwoWay}" SelectedItem="{x:Bind CurrentAntiAliasingMode, Mode=TwoWay}"
ItemTemplate="{StaticResource EnumRadioButtonTemplate}"/> ItemTemplate="{StaticResource EnumRadioButtonTemplate}"/>
@ -621,21 +642,24 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--AltGr Aliasing--> <!--AltGr Aliasing-->
<local:SettingContainer x:Uid="Profile_AltGrAliasing" <local:SettingContainer x:Uid="Profile_AltGrAliasing"
HasSettingValue="{x:Bind State.Profile.HasAltGrAliasing, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasAltGrAliasing, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearAltGrAliasing}"> ClearSettingValue="{x:Bind State.Profile.ClearAltGrAliasing}"
SettingOverrideSource="{x:Bind State.Profile.AltGrAliasingOverrideSource, Mode=OneWay}">
<ToggleSwitch IsOn="{x:Bind State.Profile.AltGrAliasing, Mode=TwoWay}"/> <ToggleSwitch IsOn="{x:Bind State.Profile.AltGrAliasing, Mode=TwoWay}"/>
</local:SettingContainer> </local:SettingContainer>
<!--Snap On Input--> <!--Snap On Input-->
<local:SettingContainer x:Uid="Profile_SnapOnInput" <local:SettingContainer x:Uid="Profile_SnapOnInput"
HasSettingValue="{x:Bind State.Profile.HasSnapOnInput, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasSnapOnInput, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearSnapOnInput}"> ClearSettingValue="{x:Bind State.Profile.ClearSnapOnInput}"
SettingOverrideSource="{x:Bind State.Profile.SnapOnInputOverrideSource, Mode=OneWay}">
<ToggleSwitch IsOn="{x:Bind State.Profile.SnapOnInput, Mode=TwoWay}"/> <ToggleSwitch IsOn="{x:Bind State.Profile.SnapOnInput, Mode=TwoWay}"/>
</local:SettingContainer> </local:SettingContainer>
<!--History Size--> <!--History Size-->
<local:SettingContainer x:Uid="Profile_HistorySize" <local:SettingContainer x:Uid="Profile_HistorySize"
HasSettingValue="{x:Bind State.Profile.HasHistorySize, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasHistorySize, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearHistorySize}"> ClearSettingValue="{x:Bind State.Profile.ClearHistorySize}"
SettingOverrideSource="{x:Bind State.Profile.HistorySizeOverrideSource, Mode=OneWay}">
<muxc:NumberBox Value="{x:Bind State.Profile.HistorySize, Mode=TwoWay}" <muxc:NumberBox Value="{x:Bind State.Profile.HistorySize, Mode=TwoWay}"
Style="{StaticResource NumberBoxSettingStyle}" Style="{StaticResource NumberBoxSettingStyle}"
SmallChange="10" SmallChange="10"
@ -645,7 +669,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Close On Exit--> <!--Close On Exit-->
<local:SettingContainer x:Uid="Profile_CloseOnExit" <local:SettingContainer x:Uid="Profile_CloseOnExit"
HasSettingValue="{x:Bind State.Profile.HasCloseOnExit, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasCloseOnExit, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearCloseOnExit}"> ClearSettingValue="{x:Bind State.Profile.ClearCloseOnExit}"
SettingOverrideSource="{x:Bind State.Profile.CloseOnExitOverrideSource, Mode=OneWay}">
<muxc:RadioButtons ItemsSource="{x:Bind CloseOnExitModeList, Mode=OneWay}" <muxc:RadioButtons ItemsSource="{x:Bind CloseOnExitModeList, Mode=OneWay}"
SelectedItem="{x:Bind CurrentCloseOnExitMode, Mode=TwoWay}" SelectedItem="{x:Bind CurrentCloseOnExitMode, Mode=TwoWay}"
ItemTemplate="{StaticResource EnumRadioButtonTemplate}"/> ItemTemplate="{StaticResource EnumRadioButtonTemplate}"/>
@ -654,7 +679,8 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--Bell Style--> <!--Bell Style-->
<local:SettingContainer x:Uid="Profile_BellStyle" <local:SettingContainer x:Uid="Profile_BellStyle"
HasSettingValue="{x:Bind State.Profile.HasBellStyle, Mode=OneWay}" HasSettingValue="{x:Bind State.Profile.HasBellStyle, Mode=OneWay}"
ClearSettingValue="{x:Bind State.Profile.ClearBellStyle}"> ClearSettingValue="{x:Bind State.Profile.ClearBellStyle}"
SettingOverrideSource="{x:Bind State.Profile.BellStyleOverrideSource, Mode=OneWay}">
<muxc:RadioButtons ItemsSource="{x:Bind BellStyleList, Mode=OneWay}" <muxc:RadioButtons ItemsSource="{x:Bind BellStyleList, Mode=OneWay}"
SelectedItem="{x:Bind CurrentBellStyle, Mode=TwoWay}" SelectedItem="{x:Bind CurrentBellStyle, Mode=TwoWay}"
ItemTemplate="{StaticResource EnumRadioButtonTemplate}"/> ItemTemplate="{StaticResource EnumRadioButtonTemplate}"/>

View File

@ -829,27 +829,24 @@
<data name="ColorScheme_RenameErrorTip.Title" xml:space="preserve"> <data name="ColorScheme_RenameErrorTip.Title" xml:space="preserve">
<value>This color scheme name is already in use.</value> <value>This color scheme name is already in use.</value>
</data> </data>
<data name="SettingContainer_OverrideIntro" xml:space="preserve">
<value>This overrides the value in {}.</value>
<comment>"{}" is the object being overridden. Generally, it will be the name of another profile.</comment>
</data>
<data name="SettingContainer_ResetButtonHelpText" xml:space="preserve">
<value>Reset</value>
</data>
<data name="SettingContainer_OverrideTarget" xml:space="preserve">
<value>a lower layer</value>
<comment>This is the object of "SettingContainer_OverrideIntro".</comment>
</data>
<data name="Globals_FocusFollowMouse.Header" xml:space="preserve"> <data name="Globals_FocusFollowMouse.Header" xml:space="preserve">
<value>Automatically focus pane on mouse hover</value> <value>Automatically focus pane on mouse hover</value>
</data> </data>
<data name="Globals_DisableAnimationsReversed.Header" xml:space="preserve"> <data name="Globals_DisableAnimationsReversed.Header" xml:space="preserve">
<value>Pane animations</value> <value>Pane animations</value>
</data> </data>
<data name="SettingContainer_OverrideMessageBaseLayer" xml:space="preserve">
<value>Reset to base layer value.</value>
<comment>"base layer" should match Nav_ProfileDefaults.Content's text</comment>
</data>
<data name="ColorScheme_TerminalColorsHeader.Text" xml:space="preserve"> <data name="ColorScheme_TerminalColorsHeader.Text" xml:space="preserve">
<value>Terminal colors</value> <value>Terminal colors</value>
</data> </data>
<data name="ColorScheme_SystemColorsHeader.Text" xml:space="preserve"> <data name="ColorScheme_SystemColorsHeader.Text" xml:space="preserve">
<value>System colors</value> <value>System colors</value>
</data> </data>
<data name="SettingContainer_OverrideMessageFragmentExtension" xml:space="preserve">
<value>Reset to value from: {}</value>
<comment>{} is replaced by the name of another profile or generator.</comment>
</data>
</root> </root>

View File

@ -13,6 +13,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
DependencyProperty SettingContainer::_HeaderProperty{ nullptr }; DependencyProperty SettingContainer::_HeaderProperty{ nullptr };
DependencyProperty SettingContainer::_HelpTextProperty{ nullptr }; DependencyProperty SettingContainer::_HelpTextProperty{ nullptr };
DependencyProperty SettingContainer::_HasSettingValueProperty{ nullptr }; DependencyProperty SettingContainer::_HasSettingValueProperty{ nullptr };
DependencyProperty SettingContainer::_SettingOverrideSourceProperty{ nullptr };
SettingContainer::SettingContainer() SettingContainer::SettingContainer()
{ {
@ -51,37 +52,26 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
xaml_typename<Editor::SettingContainer>(), xaml_typename<Editor::SettingContainer>(),
PropertyMetadata{ box_value(false), PropertyChangedCallback{ &SettingContainer::_OnHasSettingValueChanged } }); PropertyMetadata{ box_value(false), PropertyChangedCallback{ &SettingContainer::_OnHasSettingValueChanged } });
} }
if (!_SettingOverrideSourceProperty)
{
_SettingOverrideSourceProperty =
DependencyProperty::Register(
L"SettingOverrideSource",
xaml_typename<bool>(),
xaml_typename<Editor::SettingContainer>(),
PropertyMetadata{ nullptr });
}
} }
void SettingContainer::_OnHasSettingValueChanged(DependencyObject const& d, DependencyPropertyChangedEventArgs const& args) void SettingContainer::_OnHasSettingValueChanged(DependencyObject const& d, DependencyPropertyChangedEventArgs const& /*args*/)
{ {
// update visibility for override message and reset button
const auto& obj{ d.try_as<Editor::SettingContainer>() }; const auto& obj{ d.try_as<Editor::SettingContainer>() };
const auto& newVal{ unbox_value<bool>(args.NewValue()) }; get_self<SettingContainer>(obj)->_UpdateOverrideSystem();
// update visibility for reset button
if (const auto& resetButton{ obj.GetTemplateChild(L"ResetButton") })
{
if (const auto& elem{ resetButton.try_as<UIElement>() })
{
elem.Visibility(newVal ? Visibility::Visible : Visibility::Collapsed);
}
}
// update visibility for override message
if (const auto& overrideMsg{ obj.GetTemplateChild(L"OverrideMessage") })
{
if (const auto& elem{ overrideMsg.try_as<UIElement>() })
{
elem.Visibility(newVal ? Visibility::Visible : Visibility::Collapsed);
}
}
} }
void SettingContainer::OnApplyTemplate() void SettingContainer::OnApplyTemplate()
{ {
// This message is only populated if `HasSettingValue` is true.
const auto& overrideMsg{ _GenerateOverrideMessageText() };
if (const auto& child{ GetTemplateChild(L"ResetButton") }) if (const auto& child{ GetTemplateChild(L"ResetButton") })
{ {
if (const auto& button{ child.try_as<Controls::Button>() }) if (const auto& button{ child.try_as<Controls::Button>() })
@ -115,37 +105,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
} }
}); });
// apply tooltip and name (automation property) // apply name (automation property)
const auto& name{ RS_(L"SettingContainer_ResetButtonHelpText") }; Automation::AutomationProperties::SetName(child, RS_(L"SettingContainer_OverrideMessageBaseLayer"));
Controls::ToolTipService::SetToolTip(child, box_value(name));
Automation::AutomationProperties::SetName(child, name);
Automation::AutomationProperties::SetHelpText(child, overrideMsg);
// initialize visibility for reset button
button.Visibility(HasSettingValue() ? Visibility::Visible : Visibility::Collapsed);
} }
} }
if (const auto& child{ GetTemplateChild(L"OverrideMessage") }) _UpdateOverrideSystem();
{
if (const auto& tb{ child.try_as<Controls::TextBlock>() })
{
if (!overrideMsg.empty())
{
// Create the override message
// TODO GH#6800: the override target will be replaced with hyperlink/text directing the user to another profile.
tb.Text(overrideMsg);
// initialize visibility for reset button
tb.Visibility(Visibility::Visible);
}
else
{
// we have no message to render
tb.Visibility(Visibility::Collapsed);
}
}
}
if (const auto& content{ Content() }) if (const auto& content{ Content() })
{ {
@ -172,12 +137,72 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
} }
} }
hstring SettingContainer::_GenerateOverrideMessageText() // Method Description:
// - Updates the override system visibility and text
// Arguments:
// - <none>
void SettingContainer::_UpdateOverrideSystem()
{ {
if (HasSettingValue()) if (const auto& child{ GetTemplateChild(L"ResetButton") })
{ {
return hstring{ fmt::format(std::wstring_view{ RS_(L"SettingContainer_OverrideIntro") }, RS_(L"SettingContainer_OverrideTarget")) }; if (const auto& button{ child.try_as<Controls::Button>() })
{
if (HasSettingValue())
{
// We want to be smart about showing the override system.
// Don't just show it if the user explicitly set the setting.
// If the tooltip is empty, we'll hide the entire override system.
hstring tooltip{};
const auto& settingSrc{ SettingOverrideSource() };
if (const auto& profile{ settingSrc.try_as<Model::Profile>() })
{
tooltip = _GenerateOverrideMessage(profile);
}
Controls::ToolTipService::SetToolTip(button, box_value(tooltip));
button.Visibility(tooltip.empty() ? Visibility::Collapsed : Visibility::Visible);
}
else
{
// a value is not being overridden; hide the override system
button.Visibility(Visibility::Collapsed);
}
}
}
}
// Method Description:
// - Helper function for generating the override message
// Arguments:
// - profile: the profile that defines the setting (aka SettingOverrideSource)
// Return Value:
// - text specifying where the setting was defined. If empty, we don't want to show the system.
hstring SettingContainer::_GenerateOverrideMessage(const Model::Profile& profile)
{
const auto originTag{ profile.Origin() };
if (originTag == Model::OriginTag::InBox)
{
// in-box profile
return {};
}
else if (originTag == Model::OriginTag::Generated)
{
// from a dynamic profile generator
return {};
}
else if (originTag == Model::OriginTag::Fragment)
{
// from a fragment extension
return hstring{ fmt::format(std::wstring_view{ RS_(L"SettingContainer_OverrideMessageFragmentExtension") }, profile.Source()) };
}
else
{
// base layer
// TODO GH#3818: When we add profile inheritance as a setting,
// we'll need an extra conditional check to see if this
// is the base layer or some other profile
return RS_(L"SettingContainer_OverrideMessageBaseLayer");
} }
return {};
} }
} }

View File

@ -53,12 +53,14 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
DEPENDENCY_PROPERTY(Windows::Foundation::IInspectable, Header); DEPENDENCY_PROPERTY(Windows::Foundation::IInspectable, Header);
DEPENDENCY_PROPERTY(hstring, HelpText); DEPENDENCY_PROPERTY(hstring, HelpText);
DEPENDENCY_PROPERTY(bool, HasSettingValue); DEPENDENCY_PROPERTY(bool, HasSettingValue);
DEPENDENCY_PROPERTY(IInspectable, SettingOverrideSource);
TYPED_EVENT(ClearSettingValue, Editor::SettingContainer, Windows::Foundation::IInspectable); TYPED_EVENT(ClearSettingValue, Editor::SettingContainer, Windows::Foundation::IInspectable);
private: private:
static void _InitializeProperties(); static void _InitializeProperties();
static void _OnHasSettingValueChanged(Windows::UI::Xaml::DependencyObject const& d, Windows::UI::Xaml::DependencyPropertyChangedEventArgs const& e); static void _OnHasSettingValueChanged(Windows::UI::Xaml::DependencyObject const& d, Windows::UI::Xaml::DependencyPropertyChangedEventArgs const& e);
hstring _GenerateOverrideMessageText(); static hstring _GenerateOverrideMessage(const Model::Profile& profile);
void _UpdateOverrideSystem();
}; };
} }

View File

@ -16,6 +16,9 @@ namespace Microsoft.Terminal.Settings.Editor
Boolean HasSettingValue; Boolean HasSettingValue;
static Windows.UI.Xaml.DependencyProperty HasSettingValueProperty { get; }; static Windows.UI.Xaml.DependencyProperty HasSettingValueProperty { get; };
IInspectable SettingOverrideSource;
static Windows.UI.Xaml.DependencyProperty SettingOverrideSourceProperty { get; };
event Windows.Foundation.TypedEventHandler<SettingContainer, Object> ClearSettingValue; event Windows.Foundation.TypedEventHandler<SettingContainer, Object> ClearSettingValue;
}; };
} }

View File

@ -27,10 +27,6 @@ the MIT License. See LICENSE in the project root for license information. -->
<Setter Property="FontFamily" Value="Segoe MDL2 Assets"/> <Setter Property="FontFamily" Value="Segoe MDL2 Assets"/>
</Style> </Style>
<Style x:Key="SettingContainerOverrideTextStyle" TargetType="TextBlock">
<Setter Property="FontStyle" Value="Italic"/>
</Style>
<Style TargetType="local:SettingContainer"> <Style TargetType="local:SettingContainer">
<Setter Property="Margin" Value="0,24,0,0"/> <Setter Property="Margin" Value="0,24,0,0"/>
<Setter Property="IsTabStop" Value="False"/> <Setter Property="IsTabStop" Value="False"/>
@ -51,10 +47,6 @@ the MIT License. See LICENSE in the project root for license information. -->
<!--This is where the actual setting control will go--> <!--This is where the actual setting control will go-->
<ContentPresenter Content="{TemplateBinding Content}"/> <ContentPresenter Content="{TemplateBinding Content}"/>
<!--The text displayed when a setting is being overridden-->
<TextBlock x:Name="OverrideMessage"
Style="{StaticResource SettingContainerOverrideTextStyle}"/>
</StackPanel> </StackPanel>
</ControlTemplate> </ControlTemplate>
</Setter.Value> </Setter.Value>

View File

@ -65,10 +65,10 @@ public: \
{ \ { \
_NotifyChanges(L"Has" #name, L#name); \ _NotifyChanges(L"Has" #name, L#name); \
} \ } \
} } \
auto name##OverrideSource() { return target.name##OverrideSource(); }
// Defines a setting that reflects another object's same-named // Defines a setting that reflects another object's same-named
// setting, but which cannot be erased. // setting, but which cannot be erased.
#define PERMANENT_OBSERVABLE_PROJECTED_SETTING(target, name) \ #define PERMANENT_OBSERVABLE_PROJECTED_SETTING(target, name) \
_BASE_OBSERVABLE_PROJECTED_SETTING(target, name) \ _BASE_OBSERVABLE_PROJECTED_SETTING(target, name)
void Clear##name() {}

View File

@ -3,11 +3,17 @@
#pragma once #pragma once
#define OBSERVABLE_PROJECTED_SETTING(Type, Name) \ #define _BASE_OBSERVABLE_PROJECTED_SETTING(Type, Name) \
Type Name \ Type Name \
{ \ { \
get; \ get; \
set; \ set; \
}; \ }; \
Boolean Has##Name { get; }; \ Boolean Has##Name { get; }
#define OBSERVABLE_PROJECTED_SETTING(Type, Name) \
_BASE_OBSERVABLE_PROJECTED_SETTING(Type, Name); \
void Clear##Name() void Clear##Name()
#define PERMANENT_OBSERVABLE_PROJECTED_SETTING(Type, Name) \
_BASE_OBSERVABLE_PROJECTED_SETTING(Type, Name)

View File

@ -374,6 +374,13 @@ winrt::Microsoft::Terminal::Settings::Model::CascadiaSettings CascadiaSettings::
resultPtr->_ResolveDefaultProfile(); resultPtr->_ResolveDefaultProfile();
resultPtr->_UpdateActiveProfiles(); resultPtr->_UpdateActiveProfiles();
// tag these profiles as in-box
for (const auto& profile : resultPtr->AllProfiles())
{
const auto& profileImpl{ winrt::get_self<implementation::Profile>(profile) };
profileImpl->Origin(OriginTag::InBox);
}
return *resultPtr; return *resultPtr;
} }
@ -590,6 +597,8 @@ void CascadiaSettings::_ParseAndLayerFragmentFiles(const std::unordered_set<std:
// (we add a new inheritance layer) // (we add a new inheritance layer)
auto childImpl{ matchingProfile->CreateChild() }; auto childImpl{ matchingProfile->CreateChild() };
childImpl->LayerJson(profileStub); childImpl->LayerJson(profileStub);
childImpl->Origin(OriginTag::Fragment);
childImpl->Source(source);
// replace parent in _profiles with child // replace parent in _profiles with child
_allProfiles.SetAt(_FindMatchingProfileIndex(matchingProfile->ToJson()).value(), *childImpl); _allProfiles.SetAt(_FindMatchingProfileIndex(matchingProfile->ToJson()).value(), *childImpl);
@ -606,6 +615,7 @@ void CascadiaSettings::_ParseAndLayerFragmentFiles(const std::unordered_set<std:
// We don't make modifications to the user's settings file yet, that will happen when // We don't make modifications to the user's settings file yet, that will happen when
// _AppendDynamicProfilesToUserSettings() is called later // _AppendDynamicProfilesToUserSettings() is called later
newProfile->Source(source); newProfile->Source(source);
newProfile->Origin(OriginTag::Fragment);
_allProfiles.Append(*newProfile); _allProfiles.Append(*newProfile);
} }
} }

View File

@ -20,14 +20,15 @@ winrt::Microsoft::Terminal::Settings::Model::Profile CreateDefaultProfile(const
const winrt::guid profileGuid{ Microsoft::Console::Utils::CreateV5Uuid(TERMINAL_PROFILE_NAMESPACE_GUID, const winrt::guid profileGuid{ Microsoft::Console::Utils::CreateV5Uuid(TERMINAL_PROFILE_NAMESPACE_GUID,
gsl::as_bytes(gsl::make_span(name))) }; gsl::as_bytes(gsl::make_span(name))) };
auto newProfile = winrt::make<winrt::Microsoft::Terminal::Settings::Model::implementation::Profile>(profileGuid); auto newProfile = winrt::make_self<winrt::Microsoft::Terminal::Settings::Model::implementation::Profile>(profileGuid);
newProfile.Name(name); newProfile->Name(winrt::hstring{ name });
std::wstring iconPath{ PACKAGED_PROFILE_ICON_PATH }; std::wstring iconPath{ PACKAGED_PROFILE_ICON_PATH };
iconPath.append(Microsoft::Console::Utils::GuidToString(profileGuid)); iconPath.append(Microsoft::Console::Utils::GuidToString(profileGuid));
iconPath.append(PACKAGED_PROFILE_ICON_EXTENSION); iconPath.append(PACKAGED_PROFILE_ICON_EXTENSION);
newProfile.Icon(iconPath); newProfile->Icon(winrt::hstring{ iconPath });
newProfile->Origin(winrt::Microsoft::Terminal::Settings::Model::OriginTag::Generated);
return newProfile; return *newProfile;
} }

View File

@ -62,34 +62,34 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
void UnparsedDefaultProfile(const hstring& value); void UnparsedDefaultProfile(const hstring& value);
void ClearUnparsedDefaultProfile(); void ClearUnparsedDefaultProfile();
GETSET_SETTING(int32_t, InitialRows, DEFAULT_ROWS); GETSET_SETTING(Model::GlobalAppSettings, int32_t, InitialRows, DEFAULT_ROWS);
GETSET_SETTING(int32_t, InitialCols, DEFAULT_COLS); GETSET_SETTING(Model::GlobalAppSettings, int32_t, InitialCols, DEFAULT_COLS);
GETSET_SETTING(bool, AlwaysShowTabs, true); GETSET_SETTING(Model::GlobalAppSettings, bool, AlwaysShowTabs, true);
GETSET_SETTING(bool, ShowTitleInTitlebar, true); GETSET_SETTING(Model::GlobalAppSettings, bool, ShowTitleInTitlebar, true);
GETSET_SETTING(bool, ConfirmCloseAllTabs, true); GETSET_SETTING(Model::GlobalAppSettings, bool, ConfirmCloseAllTabs, true);
GETSET_SETTING(winrt::Windows::UI::Xaml::ElementTheme, Theme, winrt::Windows::UI::Xaml::ElementTheme::Default); GETSET_SETTING(Model::GlobalAppSettings, winrt::Windows::UI::Xaml::ElementTheme, Theme, winrt::Windows::UI::Xaml::ElementTheme::Default);
GETSET_SETTING(winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode, TabWidthMode, winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode::Equal); GETSET_SETTING(Model::GlobalAppSettings, winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode, TabWidthMode, winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode::Equal);
GETSET_SETTING(bool, ShowTabsInTitlebar, true); GETSET_SETTING(Model::GlobalAppSettings, bool, ShowTabsInTitlebar, true);
GETSET_SETTING(hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS); GETSET_SETTING(Model::GlobalAppSettings, hstring, WordDelimiters, DEFAULT_WORD_DELIMITERS);
GETSET_SETTING(bool, CopyOnSelect, false); GETSET_SETTING(Model::GlobalAppSettings, bool, CopyOnSelect, false);
GETSET_SETTING(winrt::Microsoft::Terminal::TerminalControl::CopyFormat, CopyFormatting, 0); GETSET_SETTING(Model::GlobalAppSettings, winrt::Microsoft::Terminal::TerminalControl::CopyFormat, CopyFormatting, 0);
GETSET_SETTING(bool, WarnAboutLargePaste, true); GETSET_SETTING(Model::GlobalAppSettings, bool, WarnAboutLargePaste, true);
GETSET_SETTING(bool, WarnAboutMultiLinePaste, true); GETSET_SETTING(Model::GlobalAppSettings, bool, WarnAboutMultiLinePaste, true);
GETSET_SETTING(Model::LaunchPosition, InitialPosition, nullptr, nullptr); GETSET_SETTING(Model::GlobalAppSettings, Model::LaunchPosition, InitialPosition, nullptr, nullptr);
GETSET_SETTING(bool, CenterOnLaunch, false); GETSET_SETTING(Model::GlobalAppSettings, bool, CenterOnLaunch, false);
GETSET_SETTING(Model::LaunchMode, LaunchMode, LaunchMode::DefaultMode); GETSET_SETTING(Model::GlobalAppSettings, Model::LaunchMode, LaunchMode, LaunchMode::DefaultMode);
GETSET_SETTING(bool, SnapToGridOnResize, true); GETSET_SETTING(Model::GlobalAppSettings, bool, SnapToGridOnResize, true);
GETSET_SETTING(bool, ForceFullRepaintRendering, false); GETSET_SETTING(Model::GlobalAppSettings, bool, ForceFullRepaintRendering, false);
GETSET_SETTING(bool, SoftwareRendering, false); GETSET_SETTING(Model::GlobalAppSettings, bool, SoftwareRendering, false);
GETSET_SETTING(bool, ForceVTInput, false); GETSET_SETTING(Model::GlobalAppSettings, bool, ForceVTInput, false);
GETSET_SETTING(bool, DebugFeaturesEnabled, _getDefaultDebugFeaturesValue()); GETSET_SETTING(Model::GlobalAppSettings, bool, DebugFeaturesEnabled, _getDefaultDebugFeaturesValue());
GETSET_SETTING(bool, StartOnUserLogin, false); GETSET_SETTING(Model::GlobalAppSettings, bool, StartOnUserLogin, false);
GETSET_SETTING(bool, AlwaysOnTop, false); GETSET_SETTING(Model::GlobalAppSettings, bool, AlwaysOnTop, false);
GETSET_SETTING(Model::TabSwitcherMode, TabSwitcherMode, Model::TabSwitcherMode::InOrder); GETSET_SETTING(Model::GlobalAppSettings, Model::TabSwitcherMode, TabSwitcherMode, Model::TabSwitcherMode::InOrder);
GETSET_SETTING(bool, DisableAnimations, false); GETSET_SETTING(Model::GlobalAppSettings, bool, DisableAnimations, false);
GETSET_SETTING(hstring, StartupActions, L""); GETSET_SETTING(Model::GlobalAppSettings, hstring, StartupActions, L"");
GETSET_SETTING(bool, FocusFollowMouse, false); GETSET_SETTING(Model::GlobalAppSettings, bool, FocusFollowMouse, false);
GETSET_SETTING(Model::WindowingMode, WindowingBehavior, Model::WindowingMode::UseNew); GETSET_SETTING(Model::GlobalAppSettings, Model::WindowingMode, WindowingBehavior, Model::WindowingMode::UseNew);
private: private:
guid _defaultProfile; guid _defaultProfile;

View File

@ -1,6 +1,8 @@
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
#include "IInheritable.idl.h"
import "ColorScheme.idl"; import "ColorScheme.idl";
import "KeyMapping.idl"; import "KeyMapping.idl";
import "Command.idl"; import "Command.idl";
@ -42,109 +44,36 @@ namespace Microsoft.Terminal.Settings.Model
[default_interface] runtimeclass GlobalAppSettings { [default_interface] runtimeclass GlobalAppSettings {
Guid DefaultProfile; Guid DefaultProfile;
Boolean HasUnparsedDefaultProfile(); INHERITABLE_SETTING(String, UnparsedDefaultProfile);
void ClearUnparsedDefaultProfile();
String UnparsedDefaultProfile;
Boolean HasInitialRows(); INHERITABLE_SETTING(Int32, InitialRows);
void ClearInitialRows(); INHERITABLE_SETTING(Int32, InitialCols);
Int32 InitialRows; INHERITABLE_SETTING(Boolean, AlwaysShowTabs);
INHERITABLE_SETTING(Boolean, ShowTitleInTitlebar);
Boolean HasInitialCols(); INHERITABLE_SETTING(Boolean, ConfirmCloseAllTabs);
void ClearInitialCols(); INHERITABLE_SETTING(Windows.UI.Xaml.ElementTheme, Theme);
Int32 InitialCols; INHERITABLE_SETTING(Microsoft.UI.Xaml.Controls.TabViewWidthMode, TabWidthMode);
INHERITABLE_SETTING(Boolean, ShowTabsInTitlebar);
Boolean HasAlwaysShowTabs(); INHERITABLE_SETTING(String, WordDelimiters);
void ClearAlwaysShowTabs(); INHERITABLE_SETTING(Boolean, CopyOnSelect);
Boolean AlwaysShowTabs; INHERITABLE_SETTING(Microsoft.Terminal.TerminalControl.CopyFormat, CopyFormatting);
INHERITABLE_SETTING(Boolean, WarnAboutLargePaste);
Boolean HasShowTitleInTitlebar(); INHERITABLE_SETTING(Boolean, WarnAboutMultiLinePaste);
void ClearShowTitleInTitlebar(); INHERITABLE_SETTING(LaunchPosition, InitialPosition);
Boolean ShowTitleInTitlebar; INHERITABLE_SETTING(Boolean, CenterOnLaunch);
INHERITABLE_SETTING(LaunchMode, LaunchMode);
Boolean HasConfirmCloseAllTabs(); INHERITABLE_SETTING(Boolean, SnapToGridOnResize);
void ClearConfirmCloseAllTabs(); INHERITABLE_SETTING(Boolean, ForceFullRepaintRendering);
Boolean ConfirmCloseAllTabs; INHERITABLE_SETTING(Boolean, SoftwareRendering);
INHERITABLE_SETTING(Boolean, ForceVTInput);
Boolean HasTheme(); INHERITABLE_SETTING(Boolean, DebugFeaturesEnabled);
void ClearTheme(); INHERITABLE_SETTING(Boolean, StartOnUserLogin);
Windows.UI.Xaml.ElementTheme Theme; INHERITABLE_SETTING(Boolean, AlwaysOnTop);
INHERITABLE_SETTING(TabSwitcherMode, TabSwitcherMode);
Boolean HasTabWidthMode(); INHERITABLE_SETTING(Boolean, DisableAnimations);
void ClearTabWidthMode(); INHERITABLE_SETTING(String, StartupActions);
Microsoft.UI.Xaml.Controls.TabViewWidthMode TabWidthMode; INHERITABLE_SETTING(Boolean, FocusFollowMouse);
INHERITABLE_SETTING(WindowingMode, WindowingBehavior);
Boolean HasShowTabsInTitlebar();
void ClearShowTabsInTitlebar();
Boolean ShowTabsInTitlebar;
Boolean HasWordDelimiters();
void ClearWordDelimiters();
String WordDelimiters;
Boolean HasCopyOnSelect();
void ClearCopyOnSelect();
Boolean CopyOnSelect;
Boolean HasCopyFormatting();
void ClearCopyFormatting();
Microsoft.Terminal.TerminalControl.CopyFormat CopyFormatting;
Boolean HasWarnAboutLargePaste();
void ClearWarnAboutLargePaste();
Boolean WarnAboutLargePaste;
Boolean HasWarnAboutMultiLinePaste();
void ClearWarnAboutMultiLinePaste();
Boolean WarnAboutMultiLinePaste;
Boolean HasInitialPosition();
void ClearInitialPosition();
LaunchPosition InitialPosition;
Boolean HasCenterOnLaunch();
void ClearCenterOnLaunch();
Boolean CenterOnLaunch;
Boolean HasLaunchMode();
void ClearLaunchMode();
LaunchMode LaunchMode;
Boolean HasSnapToGridOnResize();
void ClearSnapToGridOnResize();
Boolean SnapToGridOnResize;
Boolean HasForceFullRepaintRendering();
void ClearForceFullRepaintRendering();
Boolean ForceFullRepaintRendering;
Boolean HasSoftwareRendering();
void ClearSoftwareRendering();
Boolean SoftwareRendering;
Boolean HasForceVTInput();
void ClearForceVTInput();
Boolean ForceVTInput;
Boolean HasDebugFeaturesEnabled();
void ClearDebugFeaturesEnabled();
Boolean DebugFeaturesEnabled;
Boolean HasStartOnUserLogin();
void ClearStartOnUserLogin();
Boolean StartOnUserLogin;
Boolean HasAlwaysOnTop();
void ClearAlwaysOnTop();
Boolean AlwaysOnTop;
Boolean HasTabSwitcherMode();
void ClearTabSwitcherMode();
TabSwitcherMode TabSwitcherMode;
Boolean HasDisableAnimations();
void ClearDisableAnimations();
Boolean DisableAnimations;
Windows.Foundation.Collections.IMapView<String, ColorScheme> ColorSchemes(); Windows.Foundation.Collections.IMapView<String, ColorScheme> ColorSchemes();
void AddColorScheme(ColorScheme scheme); void AddColorScheme(ColorScheme scheme);
@ -153,17 +82,5 @@ namespace Microsoft.Terminal.Settings.Model
KeyMapping KeyMap(); KeyMapping KeyMap();
Windows.Foundation.Collections.IMapView<String, Command> Commands(); Windows.Foundation.Collections.IMapView<String, Command> Commands();
Boolean HasStartupActions();
void ClearStartupActions();
String StartupActions();
Boolean HasFocusFollowMouse();
void ClearFocusFollowMouse();
Boolean FocusFollowMouse;
Boolean HasWindowingBehavior();
void ClearWindowingBehavior();
WindowingMode WindowingBehavior;
} }
} }

View File

@ -83,12 +83,13 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
// Use this macro to quickly implement both getters and the setter for an // Use this macro to quickly implement both getters and the setter for an
// inheritable setting property. This is similar to the GETSET_PROPERTY macro, except... // inheritable setting property. This is similar to the GETSET_PROPERTY macro, except...
// - Has(): checks if the user explicitly set a value for this setting // - Has(): checks if the user explicitly set a value for this setting
// - SourceGetter(): return the object that provides the resolved value
// - Getter(): return the resolved value // - Getter(): return the resolved value
// - Setter(): set the value directly // - Setter(): set the value directly
// - Clear(): clear the user set value // - Clear(): clear the user set value
// - the setting is saved as an optional, where nullopt means // - the setting is saved as an optional, where nullopt means
// that we must inherit the value from our parent // that we must inherit the value from our parent
#define GETSET_SETTING(type, name, ...) \ #define GETSET_SETTING(projectedType, type, name, ...) \
public: \ public: \
/* Returns true if the user explicitly set the value, false otherwise*/ \ /* Returns true if the user explicitly set the value, false otherwise*/ \
bool Has##name() const \ bool Has##name() const \
@ -96,6 +97,22 @@ public: \
return _##name.has_value(); \ return _##name.has_value(); \
} \ } \
\ \
projectedType name##OverrideSource() \
{ \
/*user set value was not set*/ \
/*iterate through parents to find one with a value*/ \
for (auto& parent : _parents) \
{ \
if (auto source{ parent->_get##name##OverrideSourceImpl() }) \
{ \
return source; \
} \
} \
\
/*no value was found*/ \
return nullptr; \
} \
\
/* Returns the resolved value for this setting */ \ /* Returns the resolved value for this setting */ \
/* fallback: user set value --> inherited value --> system set value */ \ /* fallback: user set value --> inherited value --> system set value */ \
type name() const \ type name() const \
@ -138,13 +155,34 @@ private: \
\ \
/*no value was found*/ \ /*no value was found*/ \
return std::nullopt; \ return std::nullopt; \
} \
projectedType _get##name##OverrideSourceImpl() const \
{ \
/*we have a value*/ \
if (_##name) \
{ \
return *this; \
} \
\
/*user set value was not set*/ \
/*iterate through parents to find one with a value*/ \
for (auto& parent : _parents) \
{ \
if (auto source{ parent->_get##name##OverrideSourceImpl() }) \
{ \
return source; \
} \
} \
\
/*no value was found*/ \
return nullptr; \
} }
// This macro is similar to the one above, but is reserved for optional settings // This macro is similar to the one above, but is reserved for optional settings
// like Profile.Foreground (where null is interpreted // like Profile.Foreground (where null is interpreted
// as an acceptable value, rather than "inherit") // as an acceptable value, rather than "inherit")
// "type" is exposed as an IReference // "type" is exposed as an IReference
#define GETSET_NULLABLE_SETTING(type, name, ...) \ #define GETSET_NULLABLE_SETTING(projectedType, type, name, ...) \
public: \ public: \
/* Returns true if the user explicitly set the value, false otherwise*/ \ /* Returns true if the user explicitly set the value, false otherwise*/ \
bool Has##name() const \ bool Has##name() const \
@ -152,6 +190,22 @@ public: \
return _##name.has_value(); \ return _##name.has_value(); \
} \ } \
\ \
projectedType name##OverrideSource() \
{ \
/*user set value was not set*/ \
/*iterate through parents to find one with a value*/ \
for (auto parent : _parents) \
{ \
if (auto source{ parent->_get##name##OverrideSourceImpl() }) \
{ \
return source; \
} \
} \
\
/*no source was found*/ \
return nullptr; \
} \
\
/* Returns the resolved value for this setting */ \ /* Returns the resolved value for this setting */ \
/* fallback: user set value --> inherited value --> system set value */ \ /* fallback: user set value --> inherited value --> system set value */ \
winrt::Windows::Foundation::IReference<type> name() const \ winrt::Windows::Foundation::IReference<type> name() const \
@ -210,4 +264,25 @@ private: \
\ \
/*no value was found*/ \ /*no value was found*/ \
return std::nullopt; \ return std::nullopt; \
} \
projectedType _get##name##OverrideSourceImpl() const \
{ \
/*we have a value*/ \
if (_##name) \
{ \
return *this; \
} \
\
/*user set value was not set*/ \
/*iterate through parents to find one with a value*/ \
for (auto& parent : _parents) \
{ \
if (auto source{ parent->_get##name##OverrideSourceImpl() }) \
{ \
return source; \
} \
} \
\
/*no value was found*/ \
return nullptr; \
} }

View File

@ -0,0 +1,16 @@
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
#pragma once
#define _BASE_INHERITABLE_SETTING(Type, Name) \
Type Name \
{ \
get; \
set; \
}; \
Boolean Has##Name { get; }; \
void Clear##Name()
#define INHERITABLE_SETTING(Type, Name) \
_BASE_INHERITABLE_SETTING(Type, Name)

View File

@ -113,6 +113,7 @@ winrt::com_ptr<Profile> Profile::CopySettings(winrt::com_ptr<Profile> source)
profile->_PixelShaderPath = source->_PixelShaderPath; profile->_PixelShaderPath = source->_PixelShaderPath;
profile->_BackgroundImageAlignment = source->_BackgroundImageAlignment; profile->_BackgroundImageAlignment = source->_BackgroundImageAlignment;
profile->_ConnectionType = source->_ConnectionType; profile->_ConnectionType = source->_ConnectionType;
profile->_Origin = source->_Origin;
return profile; return profile;
} }

View File

@ -67,58 +67,60 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation
hstring ExpandedBackgroundImagePath() const; hstring ExpandedBackgroundImagePath() const;
static guid GetGuidOrGenerateForJson(const Json::Value& json) noexcept; static guid GetGuidOrGenerateForJson(const Json::Value& json) noexcept;
GETSET_SETTING(guid, Guid, _GenerateGuidForProfile(Name(), Source())); GETSET_PROPERTY(OriginTag, Origin, OriginTag::Custom);
GETSET_SETTING(hstring, Name, L"Default");
GETSET_SETTING(hstring, Source); GETSET_SETTING(Model::Profile, guid, Guid, _GenerateGuidForProfile(Name(), Source()));
GETSET_SETTING(bool, Hidden, false); GETSET_SETTING(Model::Profile, hstring, Name, L"Default");
GETSET_SETTING(guid, ConnectionType); GETSET_SETTING(Model::Profile, hstring, Source);
GETSET_SETTING(Model::Profile, bool, Hidden, false);
GETSET_SETTING(Model::Profile, guid, ConnectionType);
// Default Icon: Segoe MDL2 CommandPrompt icon // Default Icon: Segoe MDL2 CommandPrompt icon
GETSET_SETTING(hstring, Icon, L"\uE756"); GETSET_SETTING(Model::Profile, hstring, Icon, L"\uE756");
GETSET_SETTING(CloseOnExitMode, CloseOnExit, CloseOnExitMode::Graceful); GETSET_SETTING(Model::Profile, CloseOnExitMode, CloseOnExit, CloseOnExitMode::Graceful);
GETSET_SETTING(hstring, TabTitle); GETSET_SETTING(Model::Profile, hstring, TabTitle);
GETSET_NULLABLE_SETTING(Windows::UI::Color, TabColor, nullptr); GETSET_NULLABLE_SETTING(Model::Profile, Windows::UI::Color, TabColor, nullptr);
GETSET_SETTING(bool, SuppressApplicationTitle, false); GETSET_SETTING(Model::Profile, bool, SuppressApplicationTitle, false);
GETSET_SETTING(bool, UseAcrylic, false); GETSET_SETTING(Model::Profile, bool, UseAcrylic, false);
GETSET_SETTING(double, AcrylicOpacity, 0.5); GETSET_SETTING(Model::Profile, double, AcrylicOpacity, 0.5);
GETSET_SETTING(Microsoft::Terminal::TerminalControl::ScrollbarState, ScrollState, Microsoft::Terminal::TerminalControl::ScrollbarState::Visible); GETSET_SETTING(Model::Profile, Microsoft::Terminal::TerminalControl::ScrollbarState, ScrollState, Microsoft::Terminal::TerminalControl::ScrollbarState::Visible);
GETSET_SETTING(hstring, FontFace, DEFAULT_FONT_FACE); GETSET_SETTING(Model::Profile, hstring, FontFace, DEFAULT_FONT_FACE);
GETSET_SETTING(int32_t, FontSize, DEFAULT_FONT_SIZE); GETSET_SETTING(Model::Profile, int32_t, FontSize, DEFAULT_FONT_SIZE);
GETSET_SETTING(Windows::UI::Text::FontWeight, FontWeight, DEFAULT_FONT_WEIGHT); GETSET_SETTING(Model::Profile, Windows::UI::Text::FontWeight, FontWeight, DEFAULT_FONT_WEIGHT);
GETSET_SETTING(hstring, Padding, DEFAULT_PADDING); GETSET_SETTING(Model::Profile, hstring, Padding, DEFAULT_PADDING);
GETSET_SETTING(hstring, Commandline, L"cmd.exe"); GETSET_SETTING(Model::Profile, hstring, Commandline, L"cmd.exe");
GETSET_SETTING(hstring, StartingDirectory); GETSET_SETTING(Model::Profile, hstring, StartingDirectory);
GETSET_SETTING(hstring, BackgroundImagePath); GETSET_SETTING(Model::Profile, hstring, BackgroundImagePath);
GETSET_SETTING(double, BackgroundImageOpacity, 1.0); GETSET_SETTING(Model::Profile, double, BackgroundImageOpacity, 1.0);
GETSET_SETTING(Windows::UI::Xaml::Media::Stretch, BackgroundImageStretchMode, Windows::UI::Xaml::Media::Stretch::UniformToFill); GETSET_SETTING(Model::Profile, Windows::UI::Xaml::Media::Stretch, BackgroundImageStretchMode, Windows::UI::Xaml::Media::Stretch::UniformToFill);
GETSET_SETTING(ConvergedAlignment, BackgroundImageAlignment, ConvergedAlignment::Horizontal_Center | ConvergedAlignment::Vertical_Center); GETSET_SETTING(Model::Profile, ConvergedAlignment, BackgroundImageAlignment, ConvergedAlignment::Horizontal_Center | ConvergedAlignment::Vertical_Center);
GETSET_SETTING(Microsoft::Terminal::TerminalControl::TextAntialiasingMode, AntialiasingMode, Microsoft::Terminal::TerminalControl::TextAntialiasingMode::Grayscale); GETSET_SETTING(Model::Profile, Microsoft::Terminal::TerminalControl::TextAntialiasingMode, AntialiasingMode, Microsoft::Terminal::TerminalControl::TextAntialiasingMode::Grayscale);
GETSET_SETTING(bool, RetroTerminalEffect, false); GETSET_SETTING(Model::Profile, bool, RetroTerminalEffect, false);
GETSET_SETTING(hstring, PixelShaderPath, L""); GETSET_SETTING(Model::Profile, hstring, PixelShaderPath, L"");
GETSET_SETTING(bool, ForceFullRepaintRendering, false); GETSET_SETTING(Model::Profile, bool, ForceFullRepaintRendering, false);
GETSET_SETTING(bool, SoftwareRendering, false); GETSET_SETTING(Model::Profile, bool, SoftwareRendering, false);
GETSET_SETTING(hstring, ColorSchemeName, L"Campbell"); GETSET_SETTING(Model::Profile, hstring, ColorSchemeName, L"Campbell");
GETSET_NULLABLE_SETTING(Windows::UI::Color, Foreground, nullptr); GETSET_NULLABLE_SETTING(Model::Profile, Windows::UI::Color, Foreground, nullptr);
GETSET_NULLABLE_SETTING(Windows::UI::Color, Background, nullptr); GETSET_NULLABLE_SETTING(Model::Profile, Windows::UI::Color, Background, nullptr);
GETSET_NULLABLE_SETTING(Windows::UI::Color, SelectionBackground, nullptr); GETSET_NULLABLE_SETTING(Model::Profile, Windows::UI::Color, SelectionBackground, nullptr);
GETSET_NULLABLE_SETTING(Windows::UI::Color, CursorColor, nullptr); GETSET_NULLABLE_SETTING(Model::Profile, Windows::UI::Color, CursorColor, nullptr);
GETSET_SETTING(int32_t, HistorySize, DEFAULT_HISTORY_SIZE); GETSET_SETTING(Model::Profile, int32_t, HistorySize, DEFAULT_HISTORY_SIZE);
GETSET_SETTING(bool, SnapOnInput, true); GETSET_SETTING(Model::Profile, bool, SnapOnInput, true);
GETSET_SETTING(bool, AltGrAliasing, true); GETSET_SETTING(Model::Profile, bool, AltGrAliasing, true);
GETSET_SETTING(Microsoft::Terminal::TerminalControl::CursorStyle, CursorShape, Microsoft::Terminal::TerminalControl::CursorStyle::Bar); GETSET_SETTING(Model::Profile, Microsoft::Terminal::TerminalControl::CursorStyle, CursorShape, Microsoft::Terminal::TerminalControl::CursorStyle::Bar);
GETSET_SETTING(uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT); GETSET_SETTING(Model::Profile, uint32_t, CursorHeight, DEFAULT_CURSOR_HEIGHT);
GETSET_SETTING(Model::BellStyle, BellStyle, BellStyle::Audible); GETSET_SETTING(Model::Profile, Model::BellStyle, BellStyle, BellStyle::Audible);
private: private:
static std::wstring EvaluateStartingDirectory(const std::wstring& directory); static std::wstring EvaluateStartingDirectory(const std::wstring& directory);

View File

@ -1,8 +1,23 @@
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
#include "IInheritable.idl.h"
#define INHERITABLE_PROFILE_SETTING(Type, Name) \
_BASE_INHERITABLE_SETTING(Type, Name); \
Microsoft.Terminal.Settings.Model.Profile Name##OverrideSource { get; }
namespace Microsoft.Terminal.Settings.Model namespace Microsoft.Terminal.Settings.Model
{ {
// This tag is used to identify the context in which the Profile was created
enum OriginTag
{
Custom = 0,
InBox,
Generated,
Fragment
};
enum CloseOnExitMode enum CloseOnExitMode
{ {
Never = 0, Never = 0,
@ -35,160 +50,57 @@ namespace Microsoft.Terminal.Settings.Model
Profile(); Profile();
Profile(Guid guid); Profile(Guid guid);
Boolean HasName(); OriginTag Origin { get; };
void ClearName();
String Name; INHERITABLE_PROFILE_SETTING(String, Name);
Boolean HasGuid(); Boolean HasGuid();
Guid Guid; Guid Guid;
Boolean HasSource(); INHERITABLE_PROFILE_SETTING(String, Source);
void ClearSource();
String Source;
Boolean HasConnectionType(); Boolean HasConnectionType();
Guid ConnectionType; Guid ConnectionType;
Boolean HasHidden(); INHERITABLE_PROFILE_SETTING(Boolean, Hidden);
void ClearHidden(); INHERITABLE_PROFILE_SETTING(String, Icon);
Boolean Hidden; INHERITABLE_PROFILE_SETTING(CloseOnExitMode, CloseOnExit);
INHERITABLE_PROFILE_SETTING(String, TabTitle);
INHERITABLE_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, TabColor);
INHERITABLE_PROFILE_SETTING(Boolean, SuppressApplicationTitle);
INHERITABLE_PROFILE_SETTING(Boolean, UseAcrylic);
INHERITABLE_PROFILE_SETTING(Double, AcrylicOpacity);
INHERITABLE_PROFILE_SETTING(Microsoft.Terminal.TerminalControl.ScrollbarState, ScrollState);
INHERITABLE_PROFILE_SETTING(String, FontFace);
INHERITABLE_PROFILE_SETTING(Int32, FontSize);
INHERITABLE_PROFILE_SETTING(Windows.UI.Text.FontWeight, FontWeight);
INHERITABLE_PROFILE_SETTING(String, Padding);
INHERITABLE_PROFILE_SETTING(String, Commandline);
Boolean HasIcon(); INHERITABLE_PROFILE_SETTING(String, StartingDirectory);
void ClearIcon();
String Icon;
Boolean HasCloseOnExit();
void ClearCloseOnExit();
CloseOnExitMode CloseOnExit;
Boolean HasTabTitle();
void ClearTabTitle();
String TabTitle;
Boolean HasTabColor();
void ClearTabColor();
Windows.Foundation.IReference<Windows.UI.Color> TabColor;
Boolean HasSuppressApplicationTitle();
void ClearSuppressApplicationTitle();
Boolean SuppressApplicationTitle;
Boolean HasUseAcrylic();
void ClearUseAcrylic();
Boolean UseAcrylic;
Boolean HasAcrylicOpacity();
void ClearAcrylicOpacity();
Double AcrylicOpacity;
Boolean HasScrollState();
void ClearScrollState();
Microsoft.Terminal.TerminalControl.ScrollbarState ScrollState;
Boolean HasFontFace();
void ClearFontFace();
String FontFace;
Boolean HasFontSize();
void ClearFontSize();
Int32 FontSize;
Boolean HasFontWeight();
void ClearFontWeight();
Windows.UI.Text.FontWeight FontWeight;
Boolean HasPadding();
void ClearPadding();
String Padding;
Boolean HasCommandline();
void ClearCommandline();
String Commandline;
Boolean HasStartingDirectory();
void ClearStartingDirectory();
String StartingDirectory;
String EvaluatedStartingDirectory { get; }; String EvaluatedStartingDirectory { get; };
Boolean HasBackgroundImagePath(); INHERITABLE_PROFILE_SETTING(String, BackgroundImagePath);
void ClearBackgroundImagePath();
String BackgroundImagePath;
String ExpandedBackgroundImagePath { get; }; String ExpandedBackgroundImagePath { get; };
Boolean HasBackgroundImageOpacity(); INHERITABLE_PROFILE_SETTING(Double, BackgroundImageOpacity);
void ClearBackgroundImageOpacity(); INHERITABLE_PROFILE_SETTING(Windows.UI.Xaml.Media.Stretch, BackgroundImageStretchMode);
Double BackgroundImageOpacity; INHERITABLE_PROFILE_SETTING(ConvergedAlignment, BackgroundImageAlignment);
INHERITABLE_PROFILE_SETTING(Microsoft.Terminal.TerminalControl.TextAntialiasingMode, AntialiasingMode);
Boolean HasBackgroundImageStretchMode(); INHERITABLE_PROFILE_SETTING(Boolean, RetroTerminalEffect);
void ClearBackgroundImageStretchMode(); INHERITABLE_PROFILE_SETTING(String, PixelShaderPath);
Windows.UI.Xaml.Media.Stretch BackgroundImageStretchMode; INHERITABLE_PROFILE_SETTING(Boolean, ForceFullRepaintRendering);
INHERITABLE_PROFILE_SETTING(Boolean, SoftwareRendering);
Boolean HasBackgroundImageAlignment(); INHERITABLE_PROFILE_SETTING(String, ColorSchemeName);
void ClearBackgroundImageAlignment(); INHERITABLE_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, Foreground);
ConvergedAlignment BackgroundImageAlignment; INHERITABLE_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, Background);
INHERITABLE_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, SelectionBackground);
Boolean HasAntialiasingMode(); INHERITABLE_PROFILE_SETTING(Windows.Foundation.IReference<Windows.UI.Color>, CursorColor);
void ClearAntialiasingMode(); INHERITABLE_PROFILE_SETTING(Int32, HistorySize);
Microsoft.Terminal.TerminalControl.TextAntialiasingMode AntialiasingMode; INHERITABLE_PROFILE_SETTING(Boolean, SnapOnInput);
INHERITABLE_PROFILE_SETTING(Boolean, AltGrAliasing);
Boolean HasRetroTerminalEffect(); INHERITABLE_PROFILE_SETTING(Microsoft.Terminal.TerminalControl.CursorStyle, CursorShape);
void ClearRetroTerminalEffect(); INHERITABLE_PROFILE_SETTING(UInt32, CursorHeight);
Boolean RetroTerminalEffect; INHERITABLE_PROFILE_SETTING(BellStyle, BellStyle);
Boolean HasPixelShaderPath();
void ClearPixelShaderPath();
String PixelShaderPath;
Boolean HasForceFullRepaintRendering();
void ClearForceFullRepaintRendering();
Boolean ForceFullRepaintRendering;
Boolean HasSoftwareRendering();
void ClearSoftwareRendering();
Boolean SoftwareRendering;
Boolean HasColorSchemeName();
void ClearColorSchemeName();
String ColorSchemeName;
Boolean HasForeground();
void ClearForeground();
Windows.Foundation.IReference<Windows.UI.Color> Foreground;
Boolean HasBackground();
void ClearBackground();
Windows.Foundation.IReference<Windows.UI.Color> Background;
Boolean HasSelectionBackground();
void ClearSelectionBackground();
Windows.Foundation.IReference<Windows.UI.Color> SelectionBackground;
Boolean HasCursorColor();
void ClearCursorColor();
Windows.Foundation.IReference<Windows.UI.Color> CursorColor;
Boolean HasHistorySize();
void ClearHistorySize();
Int32 HistorySize;
Boolean HasSnapOnInput();
void ClearSnapOnInput();
Boolean SnapOnInput;
Boolean HasAltGrAliasing();
void ClearAltGrAliasing();
Boolean AltGrAliasing;
Boolean HasCursorShape();
void ClearCursorShape();
Microsoft.Terminal.TerminalControl.CursorStyle CursorShape;
Boolean HasCursorHeight();
void ClearCursorHeight();
UInt32 CursorHeight;
Boolean HasBellStyle();
void ClearBellStyle();
BellStyle BellStyle;
} }
} }