// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. #pragma once #include "MainPage.g.h" #include "Breadcrumb.g.h" #include "Utils.h" namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { struct Breadcrumb : BreadcrumbT { Breadcrumb(IInspectable tag, winrt::hstring label, BreadcrumbSubPage subPage) : _Tag{ tag }, _Label{ label }, _SubPage{ subPage } {} hstring ToString() { return _Label; } WINRT_PROPERTY(IInspectable, Tag); WINRT_PROPERTY(winrt::hstring, Label); WINRT_PROPERTY(BreadcrumbSubPage, SubPage); }; struct MainPage : MainPageT { MainPage() = delete; MainPage(const Model::CascadiaSettings& settings); void UpdateSettings(const Model::CascadiaSettings& settings); void SettingsNav_Loaded(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void SettingsNav_ItemInvoked(const Microsoft::UI::Xaml::Controls::NavigationView& sender, const Microsoft::UI::Xaml::Controls::NavigationViewItemInvokedEventArgs& args); void SaveButton_Click(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void ResetButton_Click(const Windows::Foundation::IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& args); void BreadcrumbBar_ItemClicked(const Microsoft::UI::Xaml::Controls::BreadcrumbBar& sender, const Microsoft::UI::Xaml::Controls::BreadcrumbBarItemClickedEventArgs& args); void SetHostingWindow(uint64_t hostingWindow) noexcept; bool TryPropagateHostingWindow(IInspectable object) noexcept; uint64_t GetHostingWindow() const noexcept; winrt::Windows::UI::Xaml::Media::Brush BackgroundBrush(); Windows::Foundation::Collections::IObservableVector Breadcrumbs() noexcept; Editor::ExtensionsViewModel ExtensionsVM() const noexcept { return _extensionsVM; } til::typed_event OpenJson; til::typed_event> ShowLoadWarningsDialog; private: Windows::Foundation::Collections::IObservableVector _breadcrumbs; Windows::Foundation::Collections::IObservableVector _menuItemSource; size_t _originalNumItems = 0u; Model::CascadiaSettings _settingsSource; Model::CascadiaSettings _settingsClone; std::optional _hostingHwnd; void _InitializeProfilesList(); void _CreateAndNavigateToNewProfile(const uint32_t index, const Model::Profile& profile); winrt::Microsoft::UI::Xaml::Controls::NavigationViewItem _CreateProfileNavViewItem(const Editor::ProfileViewModel& profile); void _DeleteProfile(const Windows::Foundation::IInspectable sender, const Editor::DeleteProfileEventArgs& args); void _AddProfileHandler(const winrt::guid profileGuid); void _SetupProfileEventHandling(const winrt::Microsoft::Terminal::Settings::Editor::ProfileViewModel profile); void _PreNavigateHelper(); void _Navigate(hstring clickedItemTag, BreadcrumbSubPage subPage); void _Navigate(const Editor::ProfileViewModel& profile, BreadcrumbSubPage subPage); void _Navigate(const Editor::NewTabMenuEntryViewModel& ntmEntryVM, BreadcrumbSubPage subPage); void _Navigate(const Editor::ExtensionPackageViewModel& extPkgVM, BreadcrumbSubPage subPage); void _NavigateToProfileHandler(const IInspectable& sender, winrt::guid profileGuid); void _NavigateToColorSchemeHandler(const IInspectable& sender, const IInspectable& args); void _UpdateBackgroundForMica(); void _MoveXamlParsedNavItemsIntoItemSource(); winrt::Microsoft::Terminal::Settings::Editor::ColorSchemesPageViewModel _colorSchemesPageVM{ nullptr }; winrt::Microsoft::Terminal::Settings::Editor::NewTabMenuViewModel _newTabMenuPageVM{ nullptr }; winrt::Microsoft::Terminal::Settings::Editor::ExtensionsViewModel _extensionsVM{ nullptr }; Windows::UI::Xaml::Data::INotifyPropertyChanged::PropertyChanged_revoker _profileViewModelChangedRevoker; Windows::UI::Xaml::Data::INotifyPropertyChanged::PropertyChanged_revoker _colorSchemesPageViewModelChangedRevoker; Windows::UI::Xaml::Data::INotifyPropertyChanged::PropertyChanged_revoker _ntmViewModelChangedRevoker; Windows::UI::Xaml::Data::INotifyPropertyChanged::PropertyChanged_revoker _extensionsViewModelChangedRevoker; }; } namespace winrt::Microsoft::Terminal::Settings::Editor::factory_implementation { BASIC_FACTORY(MainPage); }