diff --git a/src/cascadia/TerminalSettingsEditor/Appearances.h b/src/cascadia/TerminalSettingsEditor/Appearances.h index d8e5afa9965..c34e7d7ff61 100644 --- a/src/cascadia/TerminalSettingsEditor/Appearances.h +++ b/src/cascadia/TerminalSettingsEditor/Appearances.h @@ -131,16 +131,16 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation bool IsCustomFontWeight(); WINRT_PROPERTY(Windows::Foundation::Collections::IObservableVector, FontWeightList); - GETSET_BINDABLE_ENUM_SETTING(CursorShape, Microsoft::Terminal::Core::CursorStyle, Appearance(), CursorShape); + GETSET_BINDABLE_ENUM_SETTING(CursorShape, Microsoft::Terminal::Core::CursorStyle, Appearance().CursorShape); WINRT_PROPERTY(Windows::Foundation::Collections::IObservableVector, ColorSchemeList, nullptr); WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); DEPENDENCY_PROPERTY(Editor::AppearanceViewModel, Appearance); WINRT_PROPERTY(Editor::ProfileViewModel, SourceProfile, nullptr); - GETSET_BINDABLE_ENUM_SETTING(BackgroundImageStretchMode, Windows::UI::Xaml::Media::Stretch, Appearance(), BackgroundImageStretchMode); + GETSET_BINDABLE_ENUM_SETTING(BackgroundImageStretchMode, Windows::UI::Xaml::Media::Stretch, Appearance().BackgroundImageStretchMode); - GETSET_BINDABLE_ENUM_SETTING(IntenseTextStyle, Microsoft::Terminal::Settings::Model::IntenseStyle, Appearance(), IntenseTextStyle); + GETSET_BINDABLE_ENUM_SETTING(IntenseTextStyle, Microsoft::Terminal::Settings::Model::IntenseStyle, Appearance().IntenseTextStyle); private: bool _ShowAllFonts; diff --git a/src/cascadia/TerminalSettingsEditor/GlobalAppearance.h b/src/cascadia/TerminalSettingsEditor/GlobalAppearance.h index 236c8478778..7e48178baf4 100644 --- a/src/cascadia/TerminalSettingsEditor/GlobalAppearance.h +++ b/src/cascadia/TerminalSettingsEditor/GlobalAppearance.h @@ -26,8 +26,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void OnNavigatedTo(const winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs& e); WINRT_PROPERTY(Editor::GlobalAppearancePageNavigationState, State, nullptr); - GETSET_BINDABLE_ENUM_SETTING(Theme, winrt::Windows::UI::Xaml::ElementTheme, State().Globals(), Theme); - GETSET_BINDABLE_ENUM_SETTING(TabWidthMode, winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode, State().Globals(), TabWidthMode); + GETSET_BINDABLE_ENUM_SETTING(Theme, winrt::Windows::UI::Xaml::ElementTheme, State().Globals().Theme); + GETSET_BINDABLE_ENUM_SETTING(TabWidthMode, winrt::Microsoft::UI::Xaml::Controls::TabViewWidthMode, State().Globals().TabWidthMode); public: // LanguageDisplayConverter maps the given BCP 47 tag to a localized string. diff --git a/src/cascadia/TerminalSettingsEditor/Interaction.h b/src/cascadia/TerminalSettingsEditor/Interaction.h index b541dc394f6..6ce233a08f4 100644 --- a/src/cascadia/TerminalSettingsEditor/Interaction.h +++ b/src/cascadia/TerminalSettingsEditor/Interaction.h @@ -26,8 +26,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation WINRT_PROPERTY(Editor::InteractionPageNavigationState, State, nullptr); - GETSET_BINDABLE_ENUM_SETTING(TabSwitcherMode, Model::TabSwitcherMode, State().Globals(), TabSwitcherMode); - GETSET_BINDABLE_ENUM_SETTING(CopyFormat, winrt::Microsoft::Terminal::Control::CopyFormat, State().Globals(), CopyFormatting); + GETSET_BINDABLE_ENUM_SETTING(TabSwitcherMode, Model::TabSwitcherMode, State().Globals().TabSwitcherMode); + GETSET_BINDABLE_ENUM_SETTING(CopyFormat, winrt::Microsoft::Terminal::Control::CopyFormat, State().Globals().CopyFormatting); }; } diff --git a/src/cascadia/TerminalSettingsEditor/Launch.h b/src/cascadia/TerminalSettingsEditor/Launch.h index 1a439ba3d65..c33a4351f79 100644 --- a/src/cascadia/TerminalSettingsEditor/Launch.h +++ b/src/cascadia/TerminalSettingsEditor/Launch.h @@ -33,9 +33,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation WINRT_PROPERTY(Editor::LaunchPageNavigationState, State, nullptr); - GETSET_BINDABLE_ENUM_SETTING(FirstWindowPreference, Model::FirstWindowPreference, State().Settings().GlobalSettings(), FirstWindowPreference); - GETSET_BINDABLE_ENUM_SETTING(LaunchMode, Model::LaunchMode, State().Settings().GlobalSettings(), LaunchMode); - GETSET_BINDABLE_ENUM_SETTING(WindowingBehavior, Model::WindowingMode, State().Settings().GlobalSettings(), WindowingBehavior); + GETSET_BINDABLE_ENUM_SETTING(FirstWindowPreference, Model::FirstWindowPreference, State().Settings().GlobalSettings().FirstWindowPreference); + GETSET_BINDABLE_ENUM_SETTING(LaunchMode, Model::LaunchMode, State().Settings().GlobalSettings().LaunchMode); + GETSET_BINDABLE_ENUM_SETTING(WindowingBehavior, Model::WindowingMode, State().Settings().GlobalSettings().WindowingBehavior); }; } diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp index 7076b093197..d7e05e2b2ab 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp @@ -115,6 +115,22 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Opacity(1.0); } } + else if (viewModelProperty == L"AntialiasingMode") + { + _NotifyChanges(L"CurrentAntiAliasingMode"); + } + else if (viewModelProperty == L"CloseOnExit") + { + _NotifyChanges(L"CurrentCloseOnExitMode"); + } + else if (viewModelProperty == L"BellStyle") + { + _NotifyChanges(L"IsBellStyleFlagSet"); + } + else if (viewModelProperty == L"ScrollState") + { + _NotifyChanges(L"CurrentScrollState"); + } }); // Do the same for the starting directory diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h index 0cce255e8c2..b27c308d7a5 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h @@ -77,12 +77,6 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void DeleteUnfocusedAppearance(); bool AtlasEngineAvailable() const noexcept; - WINRT_PROPERTY(bool, IsBaseLayer, false); - WINRT_PROPERTY(IHostedInWindow, WindowRoot, nullptr); - GETSET_BINDABLE_ENUM_SETTING(AntiAliasingMode, Microsoft::Terminal::Control::TextAntialiasingMode, _profile, AntialiasingMode); - GETSET_BINDABLE_ENUM_SETTING(CloseOnExitMode, Microsoft::Terminal::Settings::Model::CloseOnExitMode, _profile, CloseOnExit); - GETSET_BINDABLE_ENUM_SETTING(ScrollState, Microsoft::Terminal::Control::ScrollbarState, _profile, ScrollState); - PERMANENT_OBSERVABLE_PROJECTED_SETTING(_profile, Guid); PERMANENT_OBSERVABLE_PROJECTED_SETTING(_profile, ConnectionType); OBSERVABLE_PROJECTED_SETTING(_profile, Name); @@ -110,6 +104,12 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation OBSERVABLE_PROJECTED_SETTING(_profile, BellStyle); OBSERVABLE_PROJECTED_SETTING(_profile, UseAtlasEngine); + WINRT_PROPERTY(bool, IsBaseLayer, false); + WINRT_PROPERTY(IHostedInWindow, WindowRoot, nullptr); + GETSET_BINDABLE_ENUM_SETTING(AntiAliasingMode, Microsoft::Terminal::Control::TextAntialiasingMode, AntialiasingMode); + GETSET_BINDABLE_ENUM_SETTING(CloseOnExitMode, Microsoft::Terminal::Settings::Model::CloseOnExitMode, CloseOnExit); + GETSET_BINDABLE_ENUM_SETTING(ScrollState, Microsoft::Terminal::Control::ScrollbarState, ScrollState); + TYPED_EVENT(DeleteProfile, Editor::ProfileViewModel, Editor::DeleteProfileEventArgs); private: diff --git a/src/cascadia/TerminalSettingsEditor/Profiles.cpp b/src/cascadia/TerminalSettingsEditor/Profiles.cpp index 1b54ecb2b62..995691998b3 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles.cpp +++ b/src/cascadia/TerminalSettingsEditor/Profiles.cpp @@ -56,24 +56,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // Subscribe to some changes in the view model // These changes should force us to update our own set of "Current" members, // and propagate those changes to the UI - _ViewModelChangedRevoker = _Profile.PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { - const auto settingName{ args.PropertyName() }; - if (settingName == L"AntialiasingMode") - { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentAntiAliasingMode" }); - } - else if (settingName == L"CloseOnExit") - { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentCloseOnExitMode" }); - } - else if (settingName == L"BellStyle") - { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"IsBellStyleFlagSet" }); - } - else if (settingName == L"ScrollState") - { - _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentScrollState" }); - } + _ViewModelChangedRevoker = _Profile.PropertyChanged(winrt::auto_revoke, [=](auto&&, auto&&) { _previewControl.UpdateControlSettings(_Profile.TermSettings(), _Profile.TermSettings()); }); diff --git a/src/cascadia/TerminalSettingsEditor/Utils.h b/src/cascadia/TerminalSettingsEditor/Utils.h index 55bb48e02b0..db8bf640544 100644 --- a/src/cascadia/TerminalSettingsEditor/Utils.h +++ b/src/cascadia/TerminalSettingsEditor/Utils.h @@ -49,29 +49,29 @@ // of EnumEntries so that we may display all possible values of the given // enum type and its localized names. It also provides a getter and setter // for the setting we wish to bind to. -#define GETSET_BINDABLE_ENUM_SETTING(name, enumType, settingsModelName, settingNameInModel) \ -public: \ - winrt::Windows::Foundation::Collections::IObservableVector name##List() \ - { \ - return _##name##List; \ - } \ - \ - winrt::Windows::Foundation::IInspectable Current##name() \ - { \ - return winrt::box_value(_##name##Map.Lookup(settingsModelName.settingNameInModel())); \ - } \ - \ - void Current##name(const winrt::Windows::Foundation::IInspectable& enumEntry) \ - { \ - if (auto ee = enumEntry.try_as()) \ - { \ - auto setting = winrt::unbox_value(ee.EnumValue()); \ - settingsModelName.settingNameInModel(setting); \ - } \ - } \ - \ -private: \ - winrt::Windows::Foundation::Collections::IObservableVector _##name##List; \ +#define GETSET_BINDABLE_ENUM_SETTING(name, enumType, viewModelSettingGetSet) \ +public: \ + winrt::Windows::Foundation::Collections::IObservableVector name##List() \ + { \ + return _##name##List; \ + } \ + \ + winrt::Windows::Foundation::IInspectable Current##name() \ + { \ + return winrt::box_value(_##name##Map.Lookup(viewModelSettingGetSet())); \ + } \ + \ + void Current##name(const winrt::Windows::Foundation::IInspectable& enumEntry) \ + { \ + if (auto ee = enumEntry.try_as()) \ + { \ + auto setting = winrt::unbox_value(ee.EnumValue()); \ + viewModelSettingGetSet(setting); \ + } \ + } \ + \ +private: \ + winrt::Windows::Foundation::Collections::IObservableVector _##name##List; \ winrt::Windows::Foundation::Collections::IMap _##name##Map; // This macro defines a dependency property for a WinRT class.