mirror of
https://github.com/microsoft/terminal.git
synced 2026-05-19 03:10:49 +00:00
setting args works
This commit is contained in:
@@ -26,7 +26,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
{
|
||||
if (const auto actionArgsVM{ item.try_as<winrt::Microsoft::Terminal::Settings::Editor::ActionArgsViewModel>() })
|
||||
{
|
||||
const auto shortcutAction = actionArgsVM.SelectedShortcutAction();
|
||||
const auto shortcutAction = actionArgsVM.ShortcutActionType();
|
||||
switch (shortcutAction)
|
||||
{
|
||||
case Microsoft::Terminal::Settings::Model::ShortcutAction::SendInput:
|
||||
|
||||
@@ -117,7 +117,7 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
for (const auto keys : keyChordList)
|
||||
{
|
||||
auto kcVM{ make<KeyChordViewModel>(keys) };
|
||||
_RegisterEvents(kcVM);
|
||||
_RegisterKeyChordVMEvents(kcVM);
|
||||
keyChordVMs.push_back(kcVM);
|
||||
}
|
||||
_KeyChordViewModelList = single_threaded_observable_vector(std::move(keyChordVMs));
|
||||
@@ -127,6 +127,10 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
shortcutActions.emplace_back(L"Send Input");
|
||||
shortcutActions.emplace_back(L"Close Tab");
|
||||
_AvailableShortcutActions = single_threaded_observable_vector(std::move(shortcutActions));
|
||||
|
||||
ActionArgsVM(make<ActionArgsViewModel>(cmd.ActionAndArgs()));
|
||||
_RegisterActionArgsVMEvents(_ActionArgsVM);
|
||||
|
||||
const auto shortcutAction = cmd.ActionAndArgs().Action();
|
||||
switch (shortcutAction)
|
||||
{
|
||||
@@ -141,18 +145,16 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
default:
|
||||
break;
|
||||
}
|
||||
ActionArgsVM(make<ActionArgsViewModel>(cmd));
|
||||
ActionArgsVM(make<ActionArgsViewModel>(cmd.ActionAndArgs()));
|
||||
|
||||
// Add a property changed handler to our own property changed event.
|
||||
// This allows us to propagate changes down to our ActionArgsVM
|
||||
// This allows us to create a new ActionArgsVM when the shortcut action changes
|
||||
PropertyChanged([this](auto&&, const PropertyChangedEventArgs& args) {
|
||||
const auto viewModelProperty{ args.PropertyName() };
|
||||
if (viewModelProperty == L"ProposedShortcutAction")
|
||||
{
|
||||
// todo: this thing doesn't work, ProposedShortcutAction is a boxed string
|
||||
// need a translator between string and enum
|
||||
// todo: need a way to make an "empty" command?
|
||||
Model::Command newCmd{};
|
||||
// todo: maybe just put this logic in the ProposedShortcutAction setter?
|
||||
// todo: need a translator between string and enum
|
||||
Model::ActionAndArgs newActionAndArgs{};
|
||||
const auto actionString = unbox_value<hstring>(ProposedShortcutAction());
|
||||
if (actionString == L"Send Input")
|
||||
@@ -166,8 +168,8 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
newActionAndArgs.Action(Model::ShortcutAction::CloseTab);
|
||||
newActionAndArgs.Args(Model::CloseTabArgs{ index });
|
||||
}
|
||||
newCmd.ActionAndArgs(newActionAndArgs);
|
||||
ActionArgsVM(make<ActionArgsViewModel>(newCmd));
|
||||
_command.ActionAndArgs(newActionAndArgs);
|
||||
ActionArgsVM(make<ActionArgsViewModel>(newActionAndArgs));
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -212,11 +214,11 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
{
|
||||
auto kbdVM{ make_self<KeyChordViewModel>(nullptr) };
|
||||
kbdVM->IsInEditMode(true);
|
||||
_RegisterEvents(*kbdVM);
|
||||
_RegisterKeyChordVMEvents(*kbdVM);
|
||||
KeyChordViewModelList().Append(*kbdVM);
|
||||
}
|
||||
|
||||
void CommandViewModel::_RegisterEvents(Editor::KeyChordViewModel kcVM)
|
||||
void CommandViewModel::_RegisterKeyChordVMEvents(Editor::KeyChordViewModel kcVM)
|
||||
{
|
||||
if (const auto actionsPageVM{ _actionsPageVM.get() })
|
||||
{
|
||||
@@ -234,24 +236,36 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
}
|
||||
}
|
||||
|
||||
ActionArgsViewModel::ActionArgsViewModel(const Model::Command& cmd)
|
||||
void CommandViewModel::_RegisterActionArgsVMEvents(Editor::ActionArgsViewModel actionArgsVM)
|
||||
{
|
||||
const auto shortcutAction = cmd.ActionAndArgs().Action();
|
||||
SelectedShortcutAction(shortcutAction);
|
||||
const auto shortcutArgs = cmd.ActionAndArgs().Args();
|
||||
actionArgsVM.PropertyChanged([this](auto&&, const PropertyChangedEventArgs& args) {
|
||||
const auto viewModelProperty{ args.PropertyName() };
|
||||
if (viewModelProperty == L"ProposedShortcutAction")
|
||||
{
|
||||
//todo: this is a placeholder, don't know if there's any events we need to listen to
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
ActionArgsViewModel::ActionArgsViewModel(const Model::ActionAndArgs actionAndArgs) :
|
||||
_actionAndArgs{ actionAndArgs }
|
||||
{
|
||||
const auto shortcutAction = actionAndArgs.Action();
|
||||
ShortcutActionType(shortcutAction);
|
||||
const auto shortcutArgs = actionAndArgs.Args();
|
||||
switch (shortcutAction)
|
||||
{
|
||||
case ShortcutAction::SendInput:
|
||||
{
|
||||
const auto sendInputArgs = shortcutArgs.as<Model::SendInputArgs>();
|
||||
StringArg1(sendInputArgs.Input());
|
||||
_StringArg1 = sendInputArgs.Input();
|
||||
break;
|
||||
}
|
||||
case ShortcutAction::CloseTab:
|
||||
{
|
||||
const auto closeTabArgs = shortcutArgs.as<Model::CloseTabArgs>();
|
||||
const auto closeTabIndex = closeTabArgs.Index() ? closeTabArgs.Index().Value() : 0;
|
||||
UInt32Arg1(closeTabIndex);
|
||||
_UInt32Arg1 = closeTabIndex;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -259,6 +273,22 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
}
|
||||
}
|
||||
|
||||
void ActionArgsViewModel::StringArg1(const winrt::hstring& newStringArg1)
|
||||
{
|
||||
_StringArg1 = newStringArg1;
|
||||
// todo: translate between "StringArg1" and whatever the actual arg is for this action
|
||||
_actionAndArgs.Args().as<Model::SendInputArgs>().Input(_StringArg1);
|
||||
_NotifyChanges(L"StringArg1");
|
||||
}
|
||||
|
||||
void ActionArgsViewModel::UInt32Arg1(const uint32_t newUInt32Arg1)
|
||||
{
|
||||
_UInt32Arg1 = newUInt32Arg1;
|
||||
// todo: translate between "UInt32Arg1" and whatever the actual arg is for this action
|
||||
_actionAndArgs.Args().as<Model::CloseTabArgs>().Index(_UInt32Arg1);
|
||||
_NotifyChanges(L"UInt32Arg1");
|
||||
}
|
||||
|
||||
KeyChordViewModel::KeyChordViewModel(Control::KeyChord currentKeys)
|
||||
{
|
||||
CurrentKeys(currentKeys);
|
||||
|
||||
@@ -157,17 +157,27 @@ namespace winrt::Microsoft::Terminal::Settings::Editor::implementation
|
||||
private:
|
||||
winrt::Microsoft::Terminal::Settings::Model::Command _command;
|
||||
weak_ref<Editor::ActionsViewModel> _actionsPageVM{ nullptr };
|
||||
void _RegisterEvents(Editor::KeyChordViewModel kcVM);
|
||||
void _RegisterKeyChordVMEvents(Editor::KeyChordViewModel kcVM);
|
||||
void _RegisterActionArgsVMEvents(Editor::ActionArgsViewModel actionArgsVM);
|
||||
};
|
||||
|
||||
struct ActionArgsViewModel : ActionArgsViewModelT<ActionArgsViewModel>, ViewModelHelper<ActionArgsViewModel>
|
||||
{
|
||||
public:
|
||||
ActionArgsViewModel(const Microsoft::Terminal::Settings::Model::Command& cmd);
|
||||
ActionArgsViewModel(const Microsoft::Terminal::Settings::Model::ActionAndArgs actionAndArgs);
|
||||
|
||||
VIEW_MODEL_OBSERVABLE_PROPERTY(Microsoft::Terminal::Settings::Model::ShortcutAction, SelectedShortcutAction, Microsoft::Terminal::Settings::Model::ShortcutAction::AddMark);
|
||||
VIEW_MODEL_OBSERVABLE_PROPERTY(hstring, StringArg1);
|
||||
VIEW_MODEL_OBSERVABLE_PROPERTY(uint32_t, UInt32Arg1);
|
||||
winrt::hstring StringArg1() { return _StringArg1; }
|
||||
void StringArg1(const winrt::hstring& newStringArg1);
|
||||
|
||||
uint32_t UInt32Arg1() { return _UInt32Arg1; }
|
||||
void UInt32Arg1(const uint32_t newUInt32Arg1);
|
||||
|
||||
VIEW_MODEL_OBSERVABLE_PROPERTY(Microsoft::Terminal::Settings::Model::ShortcutAction, ShortcutActionType, Microsoft::Terminal::Settings::Model::ShortcutAction::AddMark);
|
||||
|
||||
private:
|
||||
Model::ActionAndArgs _actionAndArgs{ nullptr };
|
||||
winrt::hstring _StringArg1;
|
||||
uint32_t _UInt32Arg1;
|
||||
};
|
||||
|
||||
struct KeyChordViewModel : KeyChordViewModelT<KeyChordViewModel>, ViewModelHelper<KeyChordViewModel>
|
||||
|
||||
@@ -76,7 +76,7 @@ namespace Microsoft.Terminal.Settings.Editor
|
||||
|
||||
runtimeclass ActionArgsViewModel : Windows.UI.Xaml.Data.INotifyPropertyChanged
|
||||
{
|
||||
Microsoft.Terminal.Settings.Model.ShortcutAction SelectedShortcutAction;
|
||||
Microsoft.Terminal.Settings.Model.ShortcutAction ShortcutActionType;
|
||||
// Args
|
||||
String StringArg1;
|
||||
UInt32 UInt32Arg1;
|
||||
|
||||
@@ -228,7 +228,7 @@ namespace Microsoft.Terminal.Settings.Model
|
||||
{
|
||||
SendInputArgs(String input);
|
||||
|
||||
String Input { get; };
|
||||
String Input;
|
||||
};
|
||||
|
||||
[default_interface] runtimeclass SplitPaneArgs : IActionArgs
|
||||
@@ -307,7 +307,7 @@ namespace Microsoft.Terminal.Settings.Model
|
||||
[default_interface] runtimeclass CloseTabArgs : IActionArgs
|
||||
{
|
||||
CloseTabArgs(UInt32 tabIndex);
|
||||
Windows.Foundation.IReference<UInt32> Index { get; };
|
||||
Windows.Foundation.IReference<UInt32> Index;
|
||||
};
|
||||
|
||||
[default_interface] runtimeclass MoveTabArgs : IActionArgs
|
||||
|
||||
Reference in New Issue
Block a user