Skip to content

Commit 320d04a

Browse files
committed
Settings Back Button For Nested Pages
When navigating to a nested page e.g. Advanced Options, the Back Button appears for the navigation list now, this follows windows UI, see Windows Settings for a example
1 parent e332c67 commit 320d04a

File tree

3 files changed

+45
-18
lines changed

3 files changed

+45
-18
lines changed

src/cascadia/TerminalSettingsEditor/MainPage.cpp

Lines changed: 41 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
150150
Automation::AutomationProperties::SetHelpText(OpenJsonNavItem(), RS_(L"Nav_OpenJSON/[using:Windows.UI.Xaml.Controls]ToolTipService/ToolTip"));
151151

152152
_breadcrumbs = single_threaded_observable_vector<IInspectable>();
153+
_breadcrumbs.VectorChanged({ this, &MainPage::_OnBreadcrumbsChange });
153154
}
154155

155156
// Method Description:
@@ -683,33 +684,55 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
683684
_settingsClone.WriteSettingsToDisk();
684685
}
685686

687+
void MainPage::BackButton_Click(winrt::Microsoft::UI::Xaml::Controls::NavigationView const& /*args*/, winrt::Microsoft::UI::Xaml::Controls::NavigationViewBackRequestedEventArgs const& /*sender*/)
688+
{
689+
if (_breadcrumbs.Size() < 2)
690+
{
691+
return;
692+
}
693+
const auto previousBreadcrumb = _breadcrumbs.GetAt(_breadcrumbs.Size() - 2).try_as<Breadcrumb>();
694+
_NavigatePreviousPageForBreadcrumb(previousBreadcrumb);
695+
}
696+
686697
void MainPage::ResetButton_Click(const IInspectable& /*sender*/, const RoutedEventArgs& /*args*/)
687698
{
688699
UpdateSettings(_settingsSource);
689700
}
690701

702+
void MainPage::_NavigatePreviousPageForBreadcrumb(const winrt::impl::com_ref<Breadcrumb>& breadcrumb)
703+
{
704+
const auto tag = breadcrumb->Tag();
705+
const auto subPage = breadcrumb->SubPage();
706+
if (const auto profileViewModel = tag.try_as<ProfileViewModel>())
707+
{
708+
_Navigate(*profileViewModel, subPage);
709+
}
710+
else if (const auto ntmEntryViewModel = tag.try_as<NewTabMenuEntryViewModel>())
711+
{
712+
_Navigate(*ntmEntryViewModel, subPage);
713+
}
714+
else if (const auto extPkgViewModel = tag.try_as<ExtensionPackageViewModel>())
715+
{
716+
_Navigate(*extPkgViewModel, subPage);
717+
}
718+
else
719+
{
720+
_Navigate(tag.as<hstring>(), subPage);
721+
}
722+
}
723+
724+
void MainPage::_OnBreadcrumbsChange(IObservableVector<winrt::Windows::Foundation::IInspectable> const& vect, IVectorChangedEventArgs const& /*args*/)
725+
{
726+
const auto settingsNav = SettingsNav();
727+
settingsNav.IsBackButtonVisible(vect.Size() > 1 ? winrt::Microsoft::UI::Xaml::Controls::NavigationViewBackButtonVisible::Visible : winrt::Microsoft::UI::Xaml::Controls::NavigationViewBackButtonVisible::Collapsed);
728+
settingsNav.IsBackEnabled(vect.Size() > 1 ? true : false);
729+
}
730+
691731
void MainPage::BreadcrumbBar_ItemClicked(const Microsoft::UI::Xaml::Controls::BreadcrumbBar& /*sender*/, const Microsoft::UI::Xaml::Controls::BreadcrumbBarItemClickedEventArgs& args)
692732
{
693733
if (gsl::narrow_cast<uint32_t>(args.Index()) < (_breadcrumbs.Size() - 1))
694734
{
695-
const auto tag = args.Item().as<Breadcrumb>()->Tag();
696-
const auto subPage = args.Item().as<Breadcrumb>()->SubPage();
697-
if (const auto profileViewModel = tag.try_as<ProfileViewModel>())
698-
{
699-
_Navigate(*profileViewModel, subPage);
700-
}
701-
else if (const auto ntmEntryViewModel = tag.try_as<NewTabMenuEntryViewModel>())
702-
{
703-
_Navigate(*ntmEntryViewModel, subPage);
704-
}
705-
else if (const auto extPkgViewModel = tag.try_as<ExtensionPackageViewModel>())
706-
{
707-
_Navigate(*extPkgViewModel, subPage);
708-
}
709-
else
710-
{
711-
_Navigate(tag.as<hstring>(), subPage);
712-
}
735+
_NavigatePreviousPageForBreadcrumb(args.Item().as<Breadcrumb>());
713736
}
714737
}
715738

src/cascadia/TerminalSettingsEditor/MainPage.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
3333
void SettingsNav_Loaded(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args);
3434
void SettingsNav_ItemInvoked(const Microsoft::UI::Xaml::Controls::NavigationView& sender, const Microsoft::UI::Xaml::Controls::NavigationViewItemInvokedEventArgs& args);
3535
void SaveButton_Click(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args);
36+
void BackButton_Click(winrt::Microsoft::UI::Xaml::Controls::NavigationView const& args, winrt::Microsoft::UI::Xaml::Controls::NavigationViewBackRequestedEventArgs const& sender);
3637
void ResetButton_Click(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args);
3738
void BreadcrumbBar_ItemClicked(const Microsoft::UI::Xaml::Controls::BreadcrumbBar& sender, const Microsoft::UI::Xaml::Controls::BreadcrumbBarItemClickedEventArgs& args);
3839

@@ -72,6 +73,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
7273
void _Navigate(const Editor::ExtensionPackageViewModel& extPkgVM, BreadcrumbSubPage subPage);
7374
void _NavigateToProfileHandler(const IInspectable& sender, winrt::guid profileGuid);
7475
void _NavigateToColorSchemeHandler(const IInspectable& sender, const IInspectable& args);
76+
void _NavigatePreviousPageForBreadcrumb(const winrt::impl::com_ref<Breadcrumb>& breadcrumb);
77+
void _OnBreadcrumbsChange(Windows::Foundation::Collections::IObservableVector<winrt::Windows::Foundation::IInspectable> const& vect, Windows::Foundation::Collections::IVectorChangedEventArgs const& args);
7578

7679
void _UpdateBackgroundForMica();
7780
void _MoveXamlParsedNavItemsIntoItemSource();

src/cascadia/TerminalSettingsEditor/MainPage.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666

6767
<muxc:NavigationView x:Name="SettingsNav"
6868
Background="{ThemeResource SettingsPageBackground}"
69+
BackRequested="BackButton_Click"
6970
IsBackButtonVisible="Collapsed"
7071
IsSettingsVisible="False"
7172
ItemInvoked="SettingsNav_ItemInvoked"

0 commit comments

Comments
 (0)