From ed85ebc41abdd416ac423bc497813c6a2ebba5dd Mon Sep 17 00:00:00 2001 From: Pankaj Bhojwani Date: Tue, 11 Feb 2025 17:44:41 -0800 Subject: [PATCH] a few more --- .../ActionsViewModel.cpp | 26 +++++- .../TerminalSettingsEditor/ActionsViewModel.h | 4 + .../ActionsViewModel.idl | 2 + .../ArgsTemplateSelectors.cpp | 6 +- .../ArgsTemplateSelectors.h | 2 + .../ArgsTemplateSelectors.idl | 2 + .../TerminalSettingsEditor/EditAction.xaml | 30 +++++++ .../Resources/en-US/Resources.resw | 80 +++++++++++++++++-- .../CascadiaSettings.cpp | 34 +++++++- .../TerminalSettingsModel/EnumMappings.cpp | 3 + .../TerminalSettingsModel/EnumMappings.h | 3 + .../TerminalSettingsModel/EnumMappings.idl | 3 + src/cascadia/UIHelpers/Converters.cpp | 18 +++++ src/cascadia/UIHelpers/Converters.h | 2 + src/cascadia/UIHelpers/Converters.idl | 2 + 15 files changed, 203 insertions(+), 14 deletions(-) diff --git a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp index 6f9bd289db..f05a3ecba9 100644 --- a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp +++ b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp @@ -26,15 +26,19 @@ using namespace winrt::Microsoft::Terminal::Settings::Model; #define INITIALIZE_ENUM_LIST_AND_VALUE(enumMappingsName, enumType, resourceSectionAndType, resourceProperty) \ std::vector enumList; \ const auto mappings = winrt::Microsoft::Terminal::Settings::Model::EnumMappings::enumMappingsName(); \ - const auto unboxedValue = unbox_value(value); \ + enumType unboxedValue; \ + if (value) \ + { \ + unboxedValue = unbox_value(value); \ + } \ for (const auto [enumKey, enumValue] : mappings) \ { \ const auto enumName = LocalizedNameForEnumName(resourceSectionAndType, enumKey, resourceProperty); \ auto entry = winrt::make(enumName, winrt::box_value(enumValue)); \ enumList.emplace_back(entry); \ - if (unboxedValue == enumValue) \ + if (value && unboxedValue == enumValue) \ { \ - EnumValue(entry); \ + EnumValue(entry); \ } \ } \ std::sort(enumList.begin(), enumList.end(), EnumEntryReverseComparator()); \ @@ -261,6 +265,22 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { INITIALIZE_ENUM_LIST_AND_VALUE(ResizeDirection, Model::ResizeDirection, L"Actions_ResizeDirection", L"Content"); } + else if (_type == L"Model::FocusDirection") + { + INITIALIZE_ENUM_LIST_AND_VALUE(FocusDirection, Model::FocusDirection, L"Actions_FocusDirection", L"Content"); + } + else if (_type == L"SettingsTarget") + { + INITIALIZE_ENUM_LIST_AND_VALUE(SettingsTarget, Model::SettingsTarget, L"Actions_SettingsTarget", L"Content"); + } + else if (_type == L"MoveTabDirection") + { + INITIALIZE_ENUM_LIST_AND_VALUE(MoveTabDirection, Model::MoveTabDirection, L"Actions_MoveTabDirection", L"Content"); + } + // todo: + // copyformat (flags) + // color (weird type), optional color + // optional uint32 (kinda defaults it to 0 right now which is incorrect...) } void ArgWrapper::EnumValue(const Windows::Foundation::IInspectable& enumValue) diff --git a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.h b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.h index d042dabd85..2510d569e5 100644 --- a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.h +++ b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.h @@ -180,6 +180,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation void DoubleBindBack(const double newValue) { Value(box_value(static_cast(newValue))); }; + void DoubleOptionalBindBack(const double newValue) { Value(box_value(static_cast(newValue))); }; + + void FloatBindBack(const double newValue) { Value(box_value(static_cast(newValue))); }; + void BoolBindBack(const Windows::Foundation::IReference newValue) { if (newValue) diff --git a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.idl b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.idl index c2845fe975..ae1100c6ab 100644 --- a/src/cascadia/TerminalSettingsEditor/ActionsViewModel.idl +++ b/src/cascadia/TerminalSettingsEditor/ActionsViewModel.idl @@ -85,6 +85,8 @@ namespace Microsoft.Terminal.Settings.Editor Windows.Foundation.Collections.IObservableVector EnumList { get; }; void StringBindBack(String newValue); void DoubleBindBack(Double newValue); + void DoubleOptionalBindBack(Double newValue); + void FloatBindBack(Double newValue); void BoolBindBack(Windows.Foundation.IReference newValue); } diff --git a/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.cpp b/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.cpp index fa6a1dcdfc..777a9efabf 100644 --- a/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.cpp +++ b/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.cpp @@ -34,6 +34,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { return UInt32Template(); } + else if (argType == L"float") + { + return FloatTemplate(); + } else if (argType == L"bool") { if (argWrapper.Required()) @@ -49,7 +53,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation { return UInt32Template(); } - else if (argType == L"Model::ResizeDirection") + else if (argType == L"Model::ResizeDirection" || argType == L"Model::FocusDirection" || argType == L"SettingsTarget" || argType == L"MoveTabDirection") { return EnumTemplate(); } diff --git a/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.h b/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.h index de961d0136..a75cf82ba6 100644 --- a/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.h +++ b/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.h @@ -15,6 +15,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation Windows::UI::Xaml::DataTemplate SelectTemplateCore(const winrt::Windows::Foundation::IInspectable&); WINRT_PROPERTY(winrt::Windows::UI::Xaml::DataTemplate, UInt32Template); + WINRT_PROPERTY(winrt::Windows::UI::Xaml::DataTemplate, UInt32OptionalTemplate); + WINRT_PROPERTY(winrt::Windows::UI::Xaml::DataTemplate, FloatTemplate); WINRT_PROPERTY(winrt::Windows::UI::Xaml::DataTemplate, StringTemplate); WINRT_PROPERTY(winrt::Windows::UI::Xaml::DataTemplate, BoolTemplate); WINRT_PROPERTY(winrt::Windows::UI::Xaml::DataTemplate, BoolOptionalTemplate); diff --git a/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.idl b/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.idl index 3e2c97bd53..a534c0e1be 100644 --- a/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.idl +++ b/src/cascadia/TerminalSettingsEditor/ArgsTemplateSelectors.idl @@ -8,6 +8,8 @@ namespace Microsoft.Terminal.Settings.Editor ArgsTemplateSelectors(); Windows.UI.Xaml.DataTemplate UInt32Template; + Windows.UI.Xaml.DataTemplate UInt32OptionalTemplate; + Windows.UI.Xaml.DataTemplate FloatTemplate; Windows.UI.Xaml.DataTemplate StringTemplate; Windows.UI.Xaml.DataTemplate BoolTemplate; Windows.UI.Xaml.DataTemplate BoolOptionalTemplate; diff --git a/src/cascadia/TerminalSettingsEditor/EditAction.xaml b/src/cascadia/TerminalSettingsEditor/EditAction.xaml index e113114e71..0d234e522b 100644 --- a/src/cascadia/TerminalSettingsEditor/EditAction.xaml +++ b/src/cascadia/TerminalSettingsEditor/EditAction.xaml @@ -239,6 +239,34 @@ + + + + + + + + + + + + + + + + @@ -286,6 +314,8 @@ Down An option to choose from for the "resize direction". Down option. - - Send input - One of the possible shortcut action types. This represents the "Send input" action. + + None + An option to choose from for the "focus direction". None option. - - Close tab - One of the possible shortcut action types. This represents the "Close tab" action. + + Left + An option to choose from for the "focus direction". Left option. + + + Right + An option to choose from for the "focus direction". Right option. + + + Up + An option to choose from for the "focus direction". Up option. + + + Down + An option to choose from for the "focus direction". Down option. + + + Previous + An option to choose from for the "focus direction". Previous option. + + + Previous In Order + An option to choose from for the "focus direction". Previous in order option. + + + Next In Order + An option to choose from for the "focus direction". Next in order option. + + + First + An option to choose from for the "focus direction". First option. + + + Parent + An option to choose from for the "focus direction". Parent option. + + + Child + An option to choose from for the "focus direction". Child option. + + + Settings File + An option to choose from for the "settings target". Targets the settings file. + + + Defaults File + An option to choose from for the "settings target". Targets the defaults file. + + + All Files + An option to choose from for the "settings target". Targets all files. + + + Settings UI + An option to choose from for the "settings target". Targets the settings UI. + + + Directory + An option to choose from for the "settings target". Targets the directory. + + + None + An option to choose from for the "move tab direction". No movement. + + + Forward + An option to choose from for the "move tab direction". Moves the tab forward. + + + Backward + An option to choose from for the "move tab direction". Moves the tab backward. Input your desired keyboard shortcut. diff --git a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp index 75e5f8f99e..88e3817f94 100644 --- a/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/CascadiaSettings.cpp @@ -998,18 +998,44 @@ Model::IActionArgs CascadiaSettings::GetEmptyArgsForAction(Model::ShortcutAction { switch (shortcutAction) { + case Model::ShortcutAction::CopyText: + return winrt::make(); + case Model::ShortcutAction::MovePane: + return winrt::make(); case Model::ShortcutAction::SwitchToTab: return winrt::make(); case Model::ShortcutAction::ResizePane: return winrt::make(); + case Model::ShortcutAction::MoveFocus: + return winrt::make(); + case Model::ShortcutAction::SwapPane: + return winrt::make(); + case Model::ShortcutAction::AdjustFontSize: + return winrt::make(); case Model::ShortcutAction::SendInput: return winrt::make(); - case Model::ShortcutAction::MovePane: - return winrt::make(); - case Model::ShortcutAction::CopyText: - return winrt::make(); + case Model::ShortcutAction::OpenSettings: + return winrt::make(); case Model::ShortcutAction::SetFocusMode: return winrt::make(); + case Model::ShortcutAction::SetFullScreen: + return winrt::make(); + case Model::ShortcutAction::SetMaximized: + return winrt::make(); + case Model::ShortcutAction::SetColorScheme: + return winrt::make(); + case Model::ShortcutAction::RenameTab: + return winrt::make(); + case Model::ShortcutAction::ExecuteCommandline: + return winrt::make(); + case Model::ShortcutAction::CloseOtherTabs: + return winrt::make(); + case Model::ShortcutAction::CloseTabsAfter: + return winrt::make(); + case Model::ShortcutAction::CloseTab: + return winrt::make(); + case Model::ShortcutAction::MoveTab: + return winrt::make(); default: return nullptr; } diff --git a/src/cascadia/TerminalSettingsModel/EnumMappings.cpp b/src/cascadia/TerminalSettingsModel/EnumMappings.cpp index bbf0c6d8a4..ce3e4fd8d5 100644 --- a/src/cascadia/TerminalSettingsModel/EnumMappings.cpp +++ b/src/cascadia/TerminalSettingsModel/EnumMappings.cpp @@ -55,6 +55,9 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation // Actions DEFINE_ENUM_MAP(Microsoft::Terminal::Settings::Model::ResizeDirection, ResizeDirection); + DEFINE_ENUM_MAP(Microsoft::Terminal::Settings::Model::FocusDirection, FocusDirection); + DEFINE_ENUM_MAP(Microsoft::Terminal::Settings::Model::SettingsTarget, SettingsTarget); + DEFINE_ENUM_MAP(Microsoft::Terminal::Settings::Model::MoveTabDirection, MoveTabDirection); // FontWeight is special because the JsonUtils::ConversionTrait for it // creates a FontWeight object, but we need to use the uint16_t value. diff --git a/src/cascadia/TerminalSettingsModel/EnumMappings.h b/src/cascadia/TerminalSettingsModel/EnumMappings.h index 74bfc5929d..97bf464fd6 100644 --- a/src/cascadia/TerminalSettingsModel/EnumMappings.h +++ b/src/cascadia/TerminalSettingsModel/EnumMappings.h @@ -52,6 +52,9 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation // Actions static winrt::Windows::Foundation::Collections::IMap ResizeDirection(); + static winrt::Windows::Foundation::Collections::IMap FocusDirection(); + static winrt::Windows::Foundation::Collections::IMap SettingsTarget(); + static winrt::Windows::Foundation::Collections::IMap MoveTabDirection(); }; } diff --git a/src/cascadia/TerminalSettingsModel/EnumMappings.idl b/src/cascadia/TerminalSettingsModel/EnumMappings.idl index da16e5bafb..df7732fcbf 100644 --- a/src/cascadia/TerminalSettingsModel/EnumMappings.idl +++ b/src/cascadia/TerminalSettingsModel/EnumMappings.idl @@ -34,5 +34,8 @@ namespace Microsoft.Terminal.Settings.Model // Actions static Windows.Foundation.Collections.IMap ResizeDirection { get; }; + static Windows.Foundation.Collections.IMap FocusDirection { get; }; + static Windows.Foundation.Collections.IMap SettingsTarget { get; }; + static Windows.Foundation.Collections.IMap MoveTabDirection { get; }; } } diff --git a/src/cascadia/UIHelpers/Converters.cpp b/src/cascadia/UIHelpers/Converters.cpp index 4360a6878d..2ee402394c 100644 --- a/src/cascadia/UIHelpers/Converters.cpp +++ b/src/cascadia/UIHelpers/Converters.cpp @@ -121,6 +121,24 @@ namespace winrt::Microsoft::Terminal::UI::implementation return winrt::unbox_value(value); } + uint32_t Converters::UnboxUInt32Optional(const Windows::Foundation::IInspectable& value) + { + const auto unboxed = winrt::unbox_value>(value); + if (unboxed) + { + return unboxed.Value(); + } + else + { + return 0; + } + } + + float Converters::UnboxFloat(const Windows::Foundation::IInspectable& value) + { + return winrt::unbox_value(value); + } + bool Converters::UnboxBool(const Windows::Foundation::IInspectable& value) { return winrt::unbox_value(value); diff --git a/src/cascadia/UIHelpers/Converters.h b/src/cascadia/UIHelpers/Converters.h index 89cdabbf24..c562a05784 100644 --- a/src/cascadia/UIHelpers/Converters.h +++ b/src/cascadia/UIHelpers/Converters.h @@ -33,6 +33,8 @@ namespace winrt::Microsoft::Terminal::UI::implementation // Unboxing static winrt::hstring UnboxString(const Windows::Foundation::IInspectable& value); static uint32_t UnboxUInt32(const Windows::Foundation::IInspectable& value); + static uint32_t UnboxUInt32Optional(const Windows::Foundation::IInspectable& value); + static float UnboxFloat(const Windows::Foundation::IInspectable& value); static bool UnboxBool(const Windows::Foundation::IInspectable& value); static winrt::Windows::Foundation::IReference UnboxBoolOptional(const Windows::Foundation::IInspectable& value); }; diff --git a/src/cascadia/UIHelpers/Converters.idl b/src/cascadia/UIHelpers/Converters.idl index b20385e5dc..9e5131cf7a 100644 --- a/src/cascadia/UIHelpers/Converters.idl +++ b/src/cascadia/UIHelpers/Converters.idl @@ -31,6 +31,8 @@ namespace Microsoft.Terminal.UI // Unboxing static String UnboxString(Object value); static UInt32 UnboxUInt32(Object value); + static UInt32 UnboxUInt32Optional(Object value); + static Single UnboxFloat(Object value); static Boolean UnboxBool(Object value); static Windows.Foundation.IReference UnboxBoolOptional(Object value); }