diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.cpp b/src/cascadia/TerminalSettingsEditor/MainPage.cpp index 8e15fdb11a5..c5bf0a96b34 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.cpp +++ b/src/cascadia/TerminalSettingsEditor/MainPage.cpp @@ -311,26 +311,27 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation auto state{ winrt::make(profileVM, _settingsClone.GlobalSettings().ColorSchemes(), *this) }; + _lastProfilesNavState = state; - _profileViewModelChangedRevoker = _lastProfilesNavState.Profile().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { + _profileViewModelChangedRevoker = state.Profile().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { const auto settingName{ args.PropertyName() }; if (settingName == L"CurrentPage") { - const auto currentPage = _lastProfilesNavState.Profile().CurrentPage(); + const auto currentPage = state.Profile().CurrentPage(); if (currentPage == L"Base") { - contentFrame().Navigate(xaml_typename(), _lastProfilesNavState); + contentFrame().Navigate(xaml_typename(), state); _breadcrumbs.Clear(); _breadcrumbs.Append(RS_(L"Nav_ProfileDefaults/Content")); } else if (currentPage == L"Appearance") { - contentFrame().Navigate(xaml_typename(), _lastProfilesNavState); + contentFrame().Navigate(xaml_typename(), state); _breadcrumbs.Append(RS_(L"Profile_Appearance/Header")); } else if (currentPage == L"Advanced") { - contentFrame().Navigate(xaml_typename(), _lastProfilesNavState); + contentFrame().Navigate(xaml_typename(), state); _breadcrumbs.Append(RS_(L"Profile_Advanced/Header")); } } @@ -368,6 +369,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation auto state{ winrt::make(profile, _settingsClone.GlobalSettings().ColorSchemes(), *this) }; + _lastProfilesNavState = state; + _profileViewModelChangedRevoker.revoke(); _breadcrumbs.Clear(); @@ -384,25 +387,25 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation // We decided that it's better for the owner of the BreadcrumbBar to also be responsible // for navigation, so the navigation to Profiles_Advanced/Profiles_Appearance from // Profiles_Base got moved here. - _profileViewModelChangedRevoker = state.Profile().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { + _profileViewModelChangedRevoker = profile.PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { const auto settingName{ args.PropertyName() }; if (settingName == L"CurrentPage") { const auto currentPage = state.Profile().CurrentPage(); if (currentPage == L"Base") { - contentFrame().Navigate(xaml_typename(), _lastProfilesNavState); + contentFrame().Navigate(xaml_typename(), state); _breadcrumbs.Clear(); _breadcrumbs.Append(profile.Name()); } else if (currentPage == L"Appearance") { - contentFrame().Navigate(xaml_typename(), _lastProfilesNavState); + contentFrame().Navigate(xaml_typename(), state); _breadcrumbs.Append(RS_(L"Profile_Appearance/Header")); } else if (currentPage == L"Advanced") { - contentFrame().Navigate(xaml_typename(), _lastProfilesNavState); + contentFrame().Navigate(xaml_typename(), state); _breadcrumbs.Append(RS_(L"Profile_Advanced/Header")); } } diff --git a/src/cascadia/TerminalSettingsEditor/MainPage.h b/src/cascadia/TerminalSettingsEditor/MainPage.h index 6eba3c79475..faf529ba425 100644 --- a/src/cascadia/TerminalSettingsEditor/MainPage.h +++ b/src/cascadia/TerminalSettingsEditor/MainPage.h @@ -50,6 +50,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation winrt::Microsoft::Terminal::Settings::Editor::ColorSchemesPageNavigationState _colorSchemesNavState{ nullptr }; + winrt::Microsoft::Terminal::Settings::Editor::ProfilePageNavigationState _lastProfilesNavState{ nullptr }; Windows::UI::Xaml::Data::INotifyPropertyChanged::PropertyChanged_revoker _profileViewModelChangedRevoker; }; } diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp index 7076b093197..561f3ad2096 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.cpp @@ -137,6 +137,17 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation _defaultAppearanceViewModel.IsDefault(true); } + winrt::hstring ProfileViewModel::CurrentPage() + { + return _currentPage; + } + + void ProfileViewModel::CurrentPage(const winrt::hstring newPage) + { + _currentPage = newPage; + _NotifyChanges(L"CurrentPage"); + } + Model::TerminalSettings ProfileViewModel::TermSettings() const { return Model::TerminalSettings::CreateWithProfile(_appSettings, _profile, nullptr).DefaultSettings(); diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h index 0cce255e8c2..cc4ccfd6008 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.h @@ -77,6 +77,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void DeleteUnfocusedAppearance(); bool AtlasEngineAvailable() const noexcept; + winrt::hstring CurrentPage(); + void CurrentPage(const winrt::hstring newPage); + WINRT_PROPERTY(bool, IsBaseLayer, false); WINRT_PROPERTY(IHostedInWindow, WindowRoot, nullptr); GETSET_BINDABLE_ENUM_SETTING(AntiAliasingMode, Microsoft::Terminal::Control::TextAntialiasingMode, _profile, AntialiasingMode); @@ -119,6 +122,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation winrt::hstring _lastStartingDirectoryPath; Editor::AppearanceViewModel _defaultAppearanceViewModel; Windows::Foundation::Collections::IMapView _Schemes; + winrt::hstring _currentPage; static Windows::Foundation::Collections::IObservableVector _MonospaceFontList; static Windows::Foundation::Collections::IObservableVector _FontList; diff --git a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl index 7215989d626..7fdeac12365 100644 --- a/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl +++ b/src/cascadia/TerminalSettingsEditor/ProfileViewModel.idl @@ -54,6 +54,7 @@ namespace Microsoft.Terminal.Settings.Editor Boolean CanDeleteProfile { get; }; Boolean IsBaseLayer; + String CurrentPage; Boolean UseParentProcessDirectory; Boolean UseCustomStartingDirectory { get; }; AppearanceViewModel DefaultAppearance { get; }; diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.cpp b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.cpp index 4a082d7faf1..3147b47ba90 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.cpp +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.cpp @@ -23,12 +23,13 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Profiles_Advanced::OnNavigatedTo(const NavigationEventArgs& e) { - _State = e.Parameter().as(); + auto state{ e.Parameter().as() }; + _Profile = state.Profile(); // 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 = _State.Profile().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { + _ViewModelChangedRevoker = _Profile.PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { const auto settingName{ args.PropertyName() }; if (settingName == L"AntialiasingMode") { @@ -52,27 +53,27 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation bool Profiles_Advanced::IsBellStyleFlagSet(const uint32_t flag) { - return (WI_EnumValue(_State.Profile().BellStyle()) & flag) == flag; + return (WI_EnumValue(_Profile.BellStyle()) & flag) == flag; } void Profiles_Advanced::SetBellStyleAudible(winrt::Windows::Foundation::IReference on) { - auto currentStyle = State().Profile().BellStyle(); + auto currentStyle = _Profile.BellStyle(); WI_UpdateFlag(currentStyle, Model::BellStyle::Audible, winrt::unbox_value(on)); - State().Profile().BellStyle(currentStyle); + _Profile.BellStyle(currentStyle); } void Profiles_Advanced::SetBellStyleWindow(winrt::Windows::Foundation::IReference on) { - auto currentStyle = State().Profile().BellStyle(); + auto currentStyle = _Profile.BellStyle(); WI_UpdateFlag(currentStyle, Model::BellStyle::Window, winrt::unbox_value(on)); - State().Profile().BellStyle(currentStyle); + _Profile.BellStyle(currentStyle); } void Profiles_Advanced::SetBellStyleTaskbar(winrt::Windows::Foundation::IReference on) { - auto currentStyle = State().Profile().BellStyle(); + auto currentStyle = _Profile.BellStyle(); WI_UpdateFlag(currentStyle, Model::BellStyle::Taskbar, winrt::unbox_value(on)); - State().Profile().BellStyle(currentStyle); + _Profile.BellStyle(currentStyle); } } diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.h b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.h index a8f626e8adb..52fb2e48a99 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.h +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.h @@ -24,9 +24,9 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void SetBellStyleTaskbar(winrt::Windows::Foundation::IReference on); WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_PROPERTY(Editor::ProfilePageNavigationState, State, nullptr); - GETSET_BINDABLE_ENUM_SETTING(AntiAliasingMode, Microsoft::Terminal::Control::TextAntialiasingMode, State().Profile, AntialiasingMode); - GETSET_BINDABLE_ENUM_SETTING(CloseOnExitMode, Microsoft::Terminal::Settings::Model::CloseOnExitMode, State().Profile, CloseOnExit); + WINRT_PROPERTY(Editor::ProfileViewModel, Profile, nullptr); + GETSET_BINDABLE_ENUM_SETTING(AntiAliasingMode, Microsoft::Terminal::Control::TextAntialiasingMode, _Profile, AntialiasingMode); + GETSET_BINDABLE_ENUM_SETTING(CloseOnExitMode, Microsoft::Terminal::Settings::Model::CloseOnExitMode, _Profile, CloseOnExit); private: Windows::UI::Xaml::Data::INotifyPropertyChanged::PropertyChanged_revoker _ViewModelChangedRevoker; diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.idl b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.idl index 8a49a78f8d9..ee9de9816e3 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.idl +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.idl @@ -8,7 +8,7 @@ namespace Microsoft.Terminal.Settings.Editor [default_interface] runtimeclass Profiles_Advanced : Windows.UI.Xaml.Controls.Page, Windows.UI.Xaml.Data.INotifyPropertyChanged { Profiles_Advanced(); - ProfilePageNavigationState State { get; }; + ProfileViewModel Profile { get; }; Boolean IsBellStyleFlagSet(UInt32 flag); void SetBellStyleAudible(Windows.Foundation.IReference on); diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml index 33c84d738e1..e3446c5b68b 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Advanced.xaml @@ -34,24 +34,24 @@ Grid.Row="0" Margin="{StaticResource StandardIndentMargin}" Style="{StaticResource DisclaimerStyle}" - Visibility="{x:Bind State.Profile.IsBaseLayer}" /> + Visibility="{x:Bind Profile.IsBaseLayer}" /> - + ClearSettingValue="{x:Bind Profile.ClearSuppressApplicationTitle}" + HasSettingValue="{x:Bind Profile.HasSuppressApplicationTitle, Mode=OneWay}" + SettingOverrideSource="{x:Bind Profile.SuppressApplicationTitleOverrideSource, Mode=OneWay}"> + - + ClearSettingValue="{x:Bind Profile.ClearAltGrAliasing}" + HasSettingValue="{x:Bind Profile.HasAltGrAliasing, Mode=OneWay}" + SettingOverrideSource="{x:Bind Profile.AltGrAliasingOverrideSource, Mode=OneWay}"> + - + ClearSettingValue="{x:Bind Profile.ClearSnapOnInput}" + HasSettingValue="{x:Bind Profile.HasSnapOnInput, Mode=OneWay}" + SettingOverrideSource="{x:Bind Profile.SnapOnInputOverrideSource, Mode=OneWay}"> + + ClearSettingValue="{x:Bind Profile.ClearHistorySize}" + HasSettingValue="{x:Bind Profile.HasHistorySize, Mode=OneWay}" + SettingOverrideSource="{x:Bind Profile.HistorySizeOverrideSource, Mode=OneWay}"> + Value="{x:Bind Profile.HistorySize, Mode=TwoWay}" /> ()) } + _previewControl{ Control::TermControl(Model::TerminalSettings{}, nullptr, make()) } { InitializeComponent(); INITIALIZE_BINDABLE_ENUM_SETTING(ScrollState, ScrollbarState, winrt::Microsoft::Terminal::Control::ScrollbarState, L"Profile_ScrollbarVisibility", L"Content"); @@ -29,10 +29,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Profiles_Appearance::OnNavigatedTo(const NavigationEventArgs& e) { - _State = e.Parameter().as(); + auto state{ e.Parameter().as() }; + _Profile = state.Profile(); // generate the font list, if we don't have one - if (!_State.Profile().CompleteFontList() || !_State.Profile().MonospaceFontList()) + if (_Profile.CompleteFontList() || !_Profile.MonospaceFontList()) { ProfileViewModel::UpdateFontList(); } @@ -40,29 +41,26 @@ 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 = _State.Profile().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { + _ViewModelChangedRevoker = _Profile.PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& args) { const auto settingName{ args.PropertyName() }; if (settingName == L"ScrollState") { _PropertyChangedHandlers(*this, PropertyChangedEventArgs{ L"CurrentScrollState" }); } - _previewControl.Settings(_State.Profile().TermSettings()); - _previewControl.UpdateSettings(); + _previewControl.UpdateControlSettings(_Profile.TermSettings(), _Profile.TermSettings()); }); // The Appearances object handles updating the values in the settings UI, but // we still need to listen to the changes here just to update the preview control - _AppearanceViewModelChangedRevoker = _State.Profile().DefaultAppearance().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& /*args*/) { - _previewControl.Settings(_State.Profile().TermSettings()); - _previewControl.UpdateSettings(); + _AppearanceViewModelChangedRevoker = _Profile.DefaultAppearance().PropertyChanged(winrt::auto_revoke, [=](auto&&, const PropertyChangedEventArgs& /*args*/) { + _previewControl.UpdateControlSettings(_Profile.TermSettings(), _Profile.TermSettings()); }); - _previewControl.Settings(_State.Profile().TermSettings()); // There is a possibility that the control has not fully initialized yet, // so wait for it to initialize before updating the settings (so we know // that the renderer is set up) _previewControl.Initialized([&](auto&& /*s*/, auto&& /*e*/) { - _previewControl.UpdateSettings(); + _previewControl.UpdateControlSettings(_Profile.TermSettings(), _Profile.TermSettings()); }); } @@ -74,11 +72,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Profiles_Appearance::CreateUnfocusedAppearance_Click(IInspectable const& /*sender*/, RoutedEventArgs const& /*e*/) { - _State.CreateUnfocusedAppearance(); + _Profile.CreateUnfocusedAppearance(); } void Profiles_Appearance::DeleteUnfocusedAppearance_Click(IInspectable const& /*sender*/, RoutedEventArgs const& /*e*/) { - _State.DeleteUnfocusedAppearance(); + _Profile.DeleteUnfocusedAppearance(); } } diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.h b/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.h index deaefa719b6..79fd298091f 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.h +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.h @@ -20,8 +20,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void DeleteUnfocusedAppearance_Click(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::RoutedEventArgs const& e); WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_PROPERTY(Editor::ProfilePageNavigationState, State, nullptr); - GETSET_BINDABLE_ENUM_SETTING(ScrollState, Microsoft::Terminal::Control::ScrollbarState, State().Profile, ScrollState); + WINRT_PROPERTY(Editor::ProfileViewModel, Profile, nullptr); + GETSET_BINDABLE_ENUM_SETTING(ScrollState, Microsoft::Terminal::Control::ScrollbarState, _Profile, ScrollState); private: Microsoft::Terminal::Control::TermControl _previewControl; diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.idl b/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.idl index 7c4c693c37f..8cc859439c6 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.idl +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.idl @@ -8,7 +8,7 @@ namespace Microsoft.Terminal.Settings.Editor [default_interface] runtimeclass Profiles_Appearance : Windows.UI.Xaml.Controls.Page, Windows.UI.Xaml.Data.INotifyPropertyChanged { Profiles_Appearance(); - ProfilePageNavigationState State { get; }; + ProfileViewModel Profile { get; }; IInspectable CurrentScrollState; Windows.Foundation.Collections.IObservableVector ScrollStateList { get; }; diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.xaml b/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.xaml index 2d1b80bbcc8..2eaee3d8aa0 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.xaml +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Appearance.xaml @@ -40,7 +40,7 @@ Grid.Row="0" Margin="{StaticResource StandardIndentMargin}" Style="{StaticResource DisclaimerStyle}" - Visibility="{x:Bind State.Profile.IsBaseLayer}" /> + Visibility="{x:Bind Profile.IsBaseLayer}" /> @@ -53,8 +53,8 @@ BorderBrush="{ThemeResource SystemControlForegroundBaseMediumLowBrush}" BorderThickness="1" /> - + @@ -64,9 +64,9 @@ + ClearSettingValue="{x:Bind Profile.ClearOpacity}" + HasSettingValue="{x:Bind Profile.HasOpacity, Mode=OneWay}" + SettingOverrideSource="{x:Bind Profile.OpacityOverrideSource, Mode=OneWay}"> @@ -75,7 +75,7 @@ + Value="{x:Bind local:Converters.PercentageToPercentageValue(Profile.Opacity), BindBack=Profile.SetAcrylicOpacityPercentageValue, Mode=TwoWay}" /> @@ -85,11 +85,11 @@ + ClearSettingValue="{x:Bind Profile.ClearUseAcrylic}" + HasSettingValue="{x:Bind Profile.HasUseAcrylic, Mode=OneWay}" + SettingOverrideSource="{x:Bind Profile.UseAcrylicOverrideSource, Mode=OneWay}"> + IsOn="{x:Bind Profile.UseAcrylic, Mode=TwoWay}" /> @@ -101,9 +101,9 @@ + ClearSettingValue="{x:Bind Profile.ClearPadding}" + HasSettingValue="{x:Bind Profile.HasPadding, Mode=OneWay}" + SettingOverrideSource="{x:Bind Profile.PaddingOverrideSource, Mode=OneWay}"> @@ -111,7 +111,7 @@ + Value="{x:Bind local:Converters.MaxValueFromPaddingString(Profile.Padding), BindBack=Profile.SetPadding, Mode=TwoWay}" /> @@ -120,9 +120,9 @@ + Visibility="{x:Bind Profile.EditableUnfocusedAppearance, Mode=OneWay}"> - + diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base.cpp b/src/cascadia/TerminalSettingsEditor/Profiles_Base.cpp index 27815605c91..70bd488f860 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base.cpp +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base.cpp @@ -27,10 +27,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Profiles_Base::OnNavigatedTo(const NavigationEventArgs& e) { - _State = e.Parameter().as(); + auto state{ e.Parameter().as() }; + _Profile = state.Profile(); // Check the use parent directory box if the starting directory is empty - if (_State.Profile().StartingDirectory().empty()) + if (_Profile.StartingDirectory().empty()) { StartingDirectoryUseParentCheckbox().IsChecked(true); } @@ -43,18 +44,17 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void Profiles_Base::Appearance_Click(IInspectable const& /*sender*/, RoutedEventArgs const& /*args*/) { - _State.Profile().CurrentPage(L"Appearance"); + _Profile.CurrentPage(L"Appearance"); } void Profiles_Base::Advanced_Click(IInspectable const& /*sender*/, RoutedEventArgs const& /*args*/) { - _State.Profile().CurrentPage(L"Advanced"); + _Profile.CurrentPage(L"Advanced"); } void Profiles_Base::DeleteConfirmation_Click(IInspectable const& /*sender*/, RoutedEventArgs const& /*e*/) { - auto state{ winrt::get_self(_State) }; - state->DeleteProfile(); + winrt::get_self(_Profile)->DeleteProfile(); } fire_and_forget Profiles_Base::Commandline_Click(IInspectable const&, RoutedEventArgs const&) @@ -67,7 +67,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation }; static constexpr winrt::guid clientGuidExecutables{ 0x2E7E4331, 0x0800, 0x48E6, { 0xB0, 0x17, 0xA1, 0x4C, 0xD8, 0x73, 0xDD, 0x58 } }; - const auto parentHwnd{ reinterpret_cast(_State.WindowRoot().GetHostingWindow()) }; + const auto parentHwnd{ reinterpret_cast(winrt::get_self(_Profile)->WindowRoot().GetHostingWindow()) }; auto path = co_await OpenFilePicker(parentHwnd, [](auto&& dialog) { THROW_IF_FAILED(dialog->SetClientGuid(clientGuidExecutables)); try @@ -83,7 +83,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation if (!path.empty()) { - _State.Profile().Commandline(path); + _Profile.Commandline(path); } } @@ -91,18 +91,18 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { auto lifetime = get_strong(); - const auto parentHwnd{ reinterpret_cast(_State.WindowRoot().GetHostingWindow()) }; + const auto parentHwnd{ reinterpret_cast(winrt::get_self(_Profile)->WindowRoot().GetHostingWindow()) }; auto file = co_await OpenImagePicker(parentHwnd); if (!file.empty()) { - _State.Profile().Icon(file); + _Profile.Icon(file); } } fire_and_forget Profiles_Base::StartingDirectory_Click(IInspectable const&, RoutedEventArgs const&) { auto lifetime = get_strong(); - const auto parentHwnd{ reinterpret_cast(_State.WindowRoot().GetHostingWindow()) }; + const auto parentHwnd{ reinterpret_cast(winrt::get_self(_Profile)->WindowRoot().GetHostingWindow()) }; auto folder = co_await OpenFilePicker(parentHwnd, [](auto&& dialog) { static constexpr winrt::guid clientGuidFolderPicker{ 0xAADAA433, 0xB04D, 0x4BAE, { 0xB1, 0xEA, 0x1E, 0x6C, 0xD1, 0xCD, 0xA6, 0x8B } }; THROW_IF_FAILED(dialog->SetClientGuid(clientGuidFolderPicker)); @@ -120,7 +120,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation if (!folder.empty()) { - _State.Profile().StartingDirectory(folder); + _Profile.StartingDirectory(folder); } } } diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base.h b/src/cascadia/TerminalSettingsEditor/Profiles_Base.h index b5c5bbce98b..778a2f675cc 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base.h +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base.h @@ -25,7 +25,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void DeleteConfirmation_Click(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::RoutedEventArgs const& e); WINRT_CALLBACK(PropertyChanged, Windows::UI::Xaml::Data::PropertyChangedEventHandler); - WINRT_PROPERTY(Editor::ProfilePageNavigationState, State, nullptr); + WINRT_PROPERTY(Editor::ProfileViewModel, Profile, nullptr); private: Windows::UI::Xaml::Data::INotifyPropertyChanged::PropertyChanged_revoker _ViewModelChangedRevoker; diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base.idl b/src/cascadia/TerminalSettingsEditor/Profiles_Base.idl index 422db3c18ea..a0cd1b88aba 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base.idl +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base.idl @@ -8,6 +8,6 @@ namespace Microsoft.Terminal.Settings.Editor [default_interface] runtimeclass Profiles_Base : Windows.UI.Xaml.Controls.Page, Windows.UI.Xaml.Data.INotifyPropertyChanged { Profiles_Base(); - ProfilePageNavigationState State { get; }; + ProfileViewModel Profile { get; }; } } diff --git a/src/cascadia/TerminalSettingsEditor/Profiles_Base.xaml b/src/cascadia/TerminalSettingsEditor/Profiles_Base.xaml index ecce8321a06..30a7fd61162 100644 --- a/src/cascadia/TerminalSettingsEditor/Profiles_Base.xaml +++ b/src/cascadia/TerminalSettingsEditor/Profiles_Base.xaml @@ -44,7 +44,7 @@ Grid.Row="0" Margin="{StaticResource StandardIndentMargin}" Style="{StaticResource DisclaimerStyle}" - Visibility="{x:Bind State.Profile.IsBaseLayer}" /> + Visibility="{x:Bind Profile.IsBaseLayer}" /> + Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(Profile.IsBaseLayer), Mode=OneWay}"> + Text="{x:Bind Profile.Name, Mode=TwoWay}" /> + Visibility="{x:Bind local:Converters.InvertedBooleanToVisibility(Profile.IsBaseLayer), Mode=OneWay}"> + Text="{x:Bind Profile.Commandline, Mode=TwoWay}" />