diff --git a/src/cascadia/TerminalSettingsEditor/EditAction.cpp b/src/cascadia/TerminalSettingsEditor/EditAction.cpp new file mode 100644 index 0000000000..295da1d04a --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/EditAction.cpp @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#include "pch.h" +#include "EditAction.h" +#include "EditAction.g.cpp" +#include "LibraryResources.h" +#include "../TerminalSettingsModel/AllShortcutActions.h" + +using namespace winrt::Windows::UI::Xaml; +using namespace winrt::Windows::UI::Xaml::Navigation; + +namespace winrt::Microsoft::Terminal::Settings::Editor::implementation +{ + EditAction::EditAction() + { + InitializeComponent(); + } +} diff --git a/src/cascadia/TerminalSettingsEditor/EditAction.h b/src/cascadia/TerminalSettingsEditor/EditAction.h new file mode 100644 index 0000000000..22be8aa06d --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/EditAction.h @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#pragma once + +#include "EditAction.g.h" +#include "Utils.h" +#include "ViewModelHelpers.h" + +namespace winrt::Microsoft::Terminal::Settings::Editor::implementation +{ + struct EditAction : public HasScrollViewer, EditActionT + { + public: + EditAction(); + + winrt::hstring Ayy() { return L"lmao"; }; + }; +} + +namespace winrt::Microsoft::Terminal::Settings::Editor::factory_implementation +{ + BASIC_FACTORY(EditAction); +} diff --git a/src/cascadia/TerminalSettingsEditor/EditAction.idl b/src/cascadia/TerminalSettingsEditor/EditAction.idl new file mode 100644 index 0000000000..4c110ad630 --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/EditAction.idl @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +namespace Microsoft.Terminal.Settings.Editor +{ + [default_interface] runtimeclass EditAction : Windows.UI.Xaml.Controls.Page + { + EditAction(); + String Ayy { get; }; + } +} diff --git a/src/cascadia/TerminalSettingsEditor/EditAction.xaml b/src/cascadia/TerminalSettingsEditor/EditAction.xaml new file mode 100644 index 0000000000..b59e8a3f7d --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/EditAction.xaml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + diff --git a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj index 836ec79a90..13db29f9a2 100644 --- a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj +++ b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj @@ -44,6 +44,12 @@ Actions.xaml + + NewActions.xaml + + + EditAction.xaml + AddProfile.xaml @@ -136,6 +142,12 @@ Designer + + Designer + + + Designer + Designer @@ -187,6 +199,12 @@ Actions.xaml + + NewActions.xaml + + + EditAction.xaml + AddProfile.xaml @@ -282,6 +300,14 @@ Actions.xaml Code + + NewActions.xaml + Code + + + EditAction.xaml + Code + AddProfile.xaml Code diff --git a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj.filters b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj.filters index 6e8ad60b9e..a2b67f162b 100644 --- a/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj.filters +++ b/src/cascadia/TerminalSettingsEditor/Microsoft.Terminal.Settings.Editor.vcxproj.filters @@ -46,6 +46,8 @@ + + diff --git a/src/cascadia/TerminalSettingsEditor/NewActions.cpp b/src/cascadia/TerminalSettingsEditor/NewActions.cpp new file mode 100644 index 0000000000..76943da37c --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/NewActions.cpp @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#include "pch.h" +#include "NewActions.h" +#include "NewActions.g.cpp" +#include "LibraryResources.h" +#include "../TerminalSettingsModel/AllShortcutActions.h" + +using namespace winrt::Windows::UI::Xaml; +using namespace winrt::Windows::UI::Xaml::Navigation; + +namespace winrt::Microsoft::Terminal::Settings::Editor::implementation +{ + NewActions::NewActions() + { + InitializeComponent(); + + Automation::AutomationProperties::SetName(AddNewButton(), RS_(L"Actions_AddNewTextBlock/Text")); + } + + Automation::Peers::AutomationPeer NewActions::OnCreateAutomationPeer() + { + _ViewModel.OnAutomationPeerAttached(); + return nullptr; + } + + void NewActions::OnNavigatedTo(const NavigationEventArgs& e) + { + _ViewModel = e.Parameter().as(); + + // Subscribe to the view model's FocusContainer event. + // Use the KeyBindingViewModel or index provided in the event to focus the corresponding container + _ViewModel.FocusContainer([this](const auto& /*sender*/, const auto& args) { + if (auto kbdVM{ args.try_as() }) + { + if (const auto& container = KeyBindingsListView().ContainerFromItem(*kbdVM)) + { + container.as().Focus(FocusState::Programmatic); + } + } + else if (const auto& index = args.try_as()) + { + if (const auto& container = KeyBindingsListView().ContainerFromIndex(*index)) + { + container.as().Focus(FocusState::Programmatic); + } + } + }); + + // Subscribe to the view model's UpdateBackground event. + // The view model does not have access to the page resources, so it asks us + // to update the key binding's container background + _ViewModel.UpdateBackground([this](const auto& /*sender*/, const auto& args) { + if (auto kbdVM{ args.try_as() }) + { + if (kbdVM->IsInEditMode()) + { + const auto& containerBackground{ Resources().Lookup(box_value(L"ActionContainerBackgroundEditing")).as() }; + kbdVM->ContainerBackground(containerBackground); + } + else + { + const auto& containerBackground{ Resources().Lookup(box_value(L"ActionContainerBackground")).as() }; + kbdVM->ContainerBackground(containerBackground); + } + } + }); + } + + void NewActions::AddNew_Click(const IInspectable& /*sender*/, const RoutedEventArgs& /*eventArgs*/) + { + _ViewModel.AddNewKeybinding(); + } +} diff --git a/src/cascadia/TerminalSettingsEditor/NewActions.h b/src/cascadia/TerminalSettingsEditor/NewActions.h new file mode 100644 index 0000000000..43719cc8b2 --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/NewActions.h @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#pragma once + +#include "NewActions.g.h" +#include "ActionsViewModel.h" +#include "Utils.h" +#include "ViewModelHelpers.h" + +namespace winrt::Microsoft::Terminal::Settings::Editor::implementation +{ + struct NewActions : public HasScrollViewer, NewActionsT + { + public: + NewActions(); + + void OnNavigatedTo(const winrt::Windows::UI::Xaml::Navigation::NavigationEventArgs& e); + Windows::UI::Xaml::Automation::Peers::AutomationPeer OnCreateAutomationPeer(); + + void AddNew_Click(const IInspectable& sender, const Windows::UI::Xaml::RoutedEventArgs& eventArgs); + + til::property_changed_event PropertyChanged; + WINRT_OBSERVABLE_PROPERTY(Editor::ActionsViewModel, ViewModel, PropertyChanged.raise, nullptr); + }; +} + +namespace winrt::Microsoft::Terminal::Settings::Editor::factory_implementation +{ + BASIC_FACTORY(NewActions); +} diff --git a/src/cascadia/TerminalSettingsEditor/NewActions.idl b/src/cascadia/TerminalSettingsEditor/NewActions.idl new file mode 100644 index 0000000000..d9ce03da07 --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/NewActions.idl @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +import "ActionsViewModel.idl"; + +namespace Microsoft.Terminal.Settings.Editor +{ + [default_interface] runtimeclass NewActions : Windows.UI.Xaml.Controls.Page + { + NewActions(); + ActionsViewModel ViewModel { get; }; + } +} diff --git a/src/cascadia/TerminalSettingsEditor/NewActions.xaml b/src/cascadia/TerminalSettingsEditor/NewActions.xaml new file mode 100644 index 0000000000..a3d0fc421b --- /dev/null +++ b/src/cascadia/TerminalSettingsEditor/NewActions.xaml @@ -0,0 +1,353 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 32 + 15 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +