From 1b39db7ab0dd40d3889fd00ba47a51a87755c75a Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Tue, 18 Jul 2023 12:58:55 -0500 Subject: [PATCH] Single commit that adds the whole scratchpad and action --- .../TerminalApp/AppActionHandlers.cpp | 10 ++++ .../TerminalApp/ScratchpadContent.cpp | 54 ++++++++++++++++++ src/cascadia/TerminalApp/ScratchpadContent.h | 37 ++++++++++++ .../TerminalApp/TerminalAppLib.vcxproj | 6 ++ .../TerminalApp/TerminalPaneContent.idl | 5 ++ .../TerminalSettingsModel/ActionAndArgs.cpp | 2 + .../AllShortcutActions.h | 3 +- .../Resources/en-US/Resources.resw | 57 ++++++++++--------- 8 files changed, 146 insertions(+), 28 deletions(-) create mode 100644 src/cascadia/TerminalApp/ScratchpadContent.cpp create mode 100644 src/cascadia/TerminalApp/ScratchpadContent.h diff --git a/src/cascadia/TerminalApp/AppActionHandlers.cpp b/src/cascadia/TerminalApp/AppActionHandlers.cpp index f600453a632..494276081ee 100644 --- a/src/cascadia/TerminalApp/AppActionHandlers.cpp +++ b/src/cascadia/TerminalApp/AppActionHandlers.cpp @@ -5,6 +5,7 @@ #include "App.h" #include "TerminalPage.h" +#include "ScratchpadContent.h" #include "../WinRTUtils/inc/WtExeUtils.h" #include "../../types/inc/utils.hpp" #include "Utils.h" @@ -1301,4 +1302,13 @@ namespace winrt::TerminalApp::implementation } args.Handled(true); } + + void TerminalPage::_HandleOpenScratchpad(const IInspectable& /*sender*/, + const ActionEventArgs& args) + { + auto scratchPane{ winrt::make_self() }; + auto resultPane = std::make_shared(*scratchPane); + _SplitPane(SplitDirection::Automatic, 0.5f, resultPane); + args.Handled(true); + } } diff --git a/src/cascadia/TerminalApp/ScratchpadContent.cpp b/src/cascadia/TerminalApp/ScratchpadContent.cpp new file mode 100644 index 00000000000..a2a0f5dc921 --- /dev/null +++ b/src/cascadia/TerminalApp/ScratchpadContent.cpp @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#include "pch.h" +#include "ScratchpadContent.h" +#include "PaneArgs.h" +#include "ScratchpadContent.g.cpp" + +using namespace winrt::Windows::Foundation; +using namespace winrt::Windows::UI::Xaml; +using namespace winrt::Microsoft::Terminal::Settings::Model; + +namespace winrt::TerminalApp::implementation +{ + ScratchpadContent::ScratchpadContent() + { + _root = winrt::Windows::UI::Xaml::Controls::Grid{}; + _root.VerticalAlignment(VerticalAlignment::Stretch); + _root.HorizontalAlignment(HorizontalAlignment::Stretch); + + auto res = Windows::UI::Xaml::Application::Current().Resources(); + auto bg = res.Lookup(winrt::box_value(L"UnfocusedBorderBrush")); + // _root.Background(Media::SolidColorBrush{ winrt::Windows::UI::Colors::Red() }); + _root.Background(bg.try_as()); + + _box = winrt::Windows::UI::Xaml::Controls::TextBox{}; + _box.Margin({ 10, 10, 10, 10 }); + _box.AcceptsReturn(true); + _box.TextWrapping(TextWrapping::Wrap); + _root.Children().Append(_box); + } + + winrt::Windows::UI::Xaml::FrameworkElement ScratchpadContent::GetRoot() + { + return _root; + } + winrt::Windows::Foundation::Size ScratchpadContent::MinSize() + { + return { 1, 1 }; + } + void ScratchpadContent::Focus(winrt::Windows::UI::Xaml::FocusState reason) + { + _box.Focus(reason); + } + void ScratchpadContent::Close() + { + CloseRequested.raise(*this, nullptr); + } + + NewTerminalArgs ScratchpadContent::GetNewTerminalArgs(const bool /* asContent */) const + { + return nullptr; + } +} diff --git a/src/cascadia/TerminalApp/ScratchpadContent.h b/src/cascadia/TerminalApp/ScratchpadContent.h new file mode 100644 index 00000000000..0193fcfc15e --- /dev/null +++ b/src/cascadia/TerminalApp/ScratchpadContent.h @@ -0,0 +1,37 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#pragma once +#include "ScratchpadContent.g.h" + +namespace winrt::TerminalApp::implementation +{ + struct ScratchpadContent : ScratchpadContentT + { + ScratchpadContent(); + + winrt::Windows::UI::Xaml::FrameworkElement GetRoot(); + + winrt::Windows::Foundation::Size MinSize(); + void Focus(winrt::Windows::UI::Xaml::FocusState reason = winrt::Windows::UI::Xaml::FocusState::Programmatic); + void Close(); + winrt::Microsoft::Terminal::Settings::Model::NewTerminalArgs GetNewTerminalArgs(const bool asContent) const; + + winrt::hstring Title() { return L"Scratchpad"; } + uint64_t TaskbarState() { return 0; } + uint64_t TaskbarProgress() { return 0; } + bool ReadOnly() { return false; } + + til::typed_event<> CloseRequested; + til::typed_event BellRequested; + til::typed_event<> TitleChanged; + til::typed_event<> TabColorChanged; + til::typed_event<> TaskbarProgressChanged; + til::typed_event<> ReadOnlyChanged; + til::typed_event<> FocusRequested; + + private: + winrt::Windows::UI::Xaml::Controls::Grid _root{ nullptr }; + winrt::Windows::UI::Xaml::Controls::TextBox _box{ nullptr }; + }; +} diff --git a/src/cascadia/TerminalApp/TerminalAppLib.vcxproj b/src/cascadia/TerminalApp/TerminalAppLib.vcxproj index a856e9104ac..4a9a6fe7de3 100644 --- a/src/cascadia/TerminalApp/TerminalAppLib.vcxproj +++ b/src/cascadia/TerminalApp/TerminalAppLib.vcxproj @@ -164,6 +164,9 @@ TerminalPaneContent.idl + + TerminalPaneContent.idl + @@ -272,6 +275,9 @@ TerminalPaneContent.idl + + ScratchpadContent.idl + diff --git a/src/cascadia/TerminalApp/TerminalPaneContent.idl b/src/cascadia/TerminalApp/TerminalPaneContent.idl index 1e39f41c168..4f5be007e9e 100644 --- a/src/cascadia/TerminalApp/TerminalPaneContent.idl +++ b/src/cascadia/TerminalApp/TerminalPaneContent.idl @@ -18,4 +18,9 @@ namespace TerminalApp event Windows.Foundation.TypedEventHandler RestartTerminalRequested; } + + + [default_interface] runtimeclass ScratchpadContent : IPaneContent + { + } } diff --git a/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp b/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp index 75ba4487b0c..4096bfc300d 100644 --- a/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp +++ b/src/cascadia/TerminalSettingsModel/ActionAndArgs.cpp @@ -93,6 +93,7 @@ static constexpr std::string_view ColorSelectionKey{ "experimental.colorSelectio static constexpr std::string_view ShowContextMenuKey{ "showContextMenu" }; static constexpr std::string_view ExpandSelectionToWordKey{ "expandSelectionToWord" }; static constexpr std::string_view RestartConnectionKey{ "restartConnection" }; +static constexpr std::string_view OpenScratchpadKey{ "openScratchpad" }; static constexpr std::string_view ActionKey{ "action" }; @@ -424,6 +425,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation { ShortcutAction::ShowContextMenu, RS_(L"ShowContextMenuCommandKey") }, { ShortcutAction::ExpandSelectionToWord, RS_(L"ExpandSelectionToWordCommandKey") }, { ShortcutAction::RestartConnection, RS_(L"RestartConnectionKey") }, + { ShortcutAction::OpenScratchpad, RS_(L"OpenScratchpadKey") }, }; }(); diff --git a/src/cascadia/TerminalSettingsModel/AllShortcutActions.h b/src/cascadia/TerminalSettingsModel/AllShortcutActions.h index 127b0bf2df9..56db36f15d7 100644 --- a/src/cascadia/TerminalSettingsModel/AllShortcutActions.h +++ b/src/cascadia/TerminalSettingsModel/AllShortcutActions.h @@ -106,7 +106,8 @@ ON_ALL_ACTIONS(ShowContextMenu) \ ON_ALL_ACTIONS(ExpandSelectionToWord) \ ON_ALL_ACTIONS(CloseOtherPanes) \ - ON_ALL_ACTIONS(RestartConnection) + ON_ALL_ACTIONS(RestartConnection) \ + ON_ALL_ACTIONS(OpenScratchpad) #define ALL_SHORTCUT_ACTIONS_WITH_ARGS \ ON_ALL_ACTIONS_WITH_ARGS(AdjustFontSize) \ diff --git a/src/cascadia/TerminalSettingsModel/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsModel/Resources/en-US/Resources.resw index 414783c6557..a2220a369ad 100644 --- a/src/cascadia/TerminalSettingsModel/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsModel/Resources/en-US/Resources.resw @@ -1,17 +1,17 @@ - @@ -687,6 +687,9 @@ Restart connection + + Open scratchpad + Select next command output