d3b9a780d3
This introduces the ability to set the action for a key binding. A combo box is used to let the user select a new action. ## References #6900 - Actions page Epic #9427 - Actions page design doc #9949 - Actions page PR ## Detailed Description of the Pull Request / Additional comments ### Settings Model Changes - `ActionAndArgs` - new ctor that just takes a `ShortcutAction` - `ActionMap` - `AvailableActions` provides a map of all the "acceptable" actions to choose from. This is a merged list of (1) all `{ "command": X }` style actions and (2) any actions with args that are already defined in the ActionMap (or any parents). - `RegisterKeyBinding` introduces a new unnamed key binding to the action map. ### Editor Changes - XAML - Pretty straightforward, when in edit mode, we replace the text block with a combo box. This combo box just presents the actions you can choose from. - `RebindKeysEventArgs` --> `ModifyKeyBindingEventArgs` - `AvailableActionAndArgs` - stores the list of actions to choose from in the combo box - _Unfortunately_, `KeyBindingViewModel` needs this so that we can populate the combo box - `Actions` stores and maintains this though. We populate this from the settings model on navigation. - `ProposedAction` vs `CurrentAction` - similar to `ProposedKeys` and `Keys`, we need a way to distinguish the value from the settings model and the value of the control (i.e. combo box). - `CurrentAction` --> settings model - `ProposedAction` --> combo box selected item ## Validation Steps Performed - Cancel: - ✔️ change action --> cancel button --> begin editing action again --> original action is selected - Accept: - ✔️ don't change anything - ✔️ change action --> OK! --> Save! - NOTE: The original action is still left as a stub `{ "command": "closePane" }`. This is intentional because we want to prevent all modifications to the command palette. - ✔️ change action & change key chord --> OK! --> Save! - ✔️ change action & change key chord (conflicting key chord) --> OK! --> click ok on flyout --> Save! - NOTE: original action is left as a stub; original key chord explicitly unbound; new command/keys combo added.
38 lines
1.2 KiB
C++
38 lines
1.2 KiB
C++
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT license.
|
|
|
|
#pragma once
|
|
|
|
#include "ActionAndArgs.g.h"
|
|
#include "ActionArgs.h"
|
|
#include "TerminalWarnings.h"
|
|
#include "../inc/cppwinrt_utils.h"
|
|
|
|
namespace winrt::Microsoft::Terminal::Settings::Model::implementation
|
|
{
|
|
struct ActionAndArgs : public ActionAndArgsT<ActionAndArgs>
|
|
{
|
|
static const std::map<std::string_view, ShortcutAction, std::less<>> ActionKeyNamesMap;
|
|
static winrt::com_ptr<ActionAndArgs> FromJson(const Json::Value& json,
|
|
std::vector<SettingsLoadWarnings>& warnings);
|
|
static Json::Value ToJson(const Model::ActionAndArgs& val);
|
|
|
|
ActionAndArgs() = default;
|
|
ActionAndArgs(ShortcutAction action);
|
|
ActionAndArgs(ShortcutAction action, IActionArgs args) :
|
|
_Action{ action },
|
|
_Args{ args } {};
|
|
com_ptr<ActionAndArgs> Copy() const;
|
|
|
|
hstring GenerateName() const;
|
|
|
|
WINRT_PROPERTY(ShortcutAction, Action, ShortcutAction::Invalid);
|
|
WINRT_PROPERTY(IActionArgs, Args, nullptr);
|
|
};
|
|
}
|
|
|
|
namespace winrt::Microsoft::Terminal::Settings::Model::factory_implementation
|
|
{
|
|
BASIC_FACTORY(ActionAndArgs);
|
|
}
|