diff --git a/doc/cascadia/profiles.schema.json b/doc/cascadia/profiles.schema.json index f3ef769eca5..07e584c6ba7 100644 --- a/doc/cascadia/profiles.schema.json +++ b/doc/cascadia/profiles.schema.json @@ -346,11 +346,13 @@ ], "type": "string" }, - "SplitState": { + "SplitDirection": { "enum": [ - "vertical", - "horizontal", - "auto" + "auto", + "up", + "right", + "down", + "left" ], "type": "string" }, @@ -629,9 +631,9 @@ "properties": { "action": { "type": "string", "pattern": "splitPane" }, "split": { - "$ref": "#/definitions/SplitState", + "$ref": "#/definitions/SplitDirection", "default": "auto", - "description": "The orientation to split the pane in. Possible values:\n -\"auto\" (splits pane based on remaining space)\n -\"horizontal\" (think [-])\n -\"vertical\" (think [|])" + "description": "The orientation to split the pane in. Possible values:\n -\"auto\" (splits pane based on remaining space)\n -\"up\" (think [-] and above)\n -\"down\" (think [-] and below)\n -\"left\" (think [|] and to the left)\n -\"right\"(think [|] and to the right)" }, "splitMode": { "default": "duplicate", diff --git a/src/cascadia/LocalTests_SettingsModel/CommandTests.cpp b/src/cascadia/LocalTests_SettingsModel/CommandTests.cpp index bdc4d569298..e8ab845b306 100644 --- a/src/cascadia/LocalTests_SettingsModel/CommandTests.cpp +++ b/src/cascadia/LocalTests_SettingsModel/CommandTests.cpp @@ -152,6 +152,10 @@ namespace SettingsModelLocalTests { "name": "command4", "command": { "action": "splitPane" } }, { "name": "command5", "command": { "action": "splitPane", "split": "auto" } }, { "name": "command6", "command": { "action": "splitPane", "size": 0.25 } }, + { "name": "command7", "command": { "action": "splitPane", "split": "right" } }, + { "name": "command8", "command": { "action": "splitPane", "split": "left" } }, + { "name": "command9", "command": { "action": "splitPane", "split": "up" } }, + { "name": "command10", "command": { "action": "splitPane", "split": "down" } }, ])" }; const auto commands0Json = VerifyParseSucceeded(commands0String); @@ -160,7 +164,7 @@ namespace SettingsModelLocalTests VERIFY_ARE_EQUAL(0u, commands.Size()); auto warnings = implementation::Command::LayerJson(commands, commands0Json); VERIFY_ARE_EQUAL(0u, warnings.size()); - VERIFY_ARE_EQUAL(5u, commands.Size()); + VERIFY_ARE_EQUAL(9u, commands.Size()); { auto command = commands.Lookup(L"command1"); @@ -170,7 +174,7 @@ namespace SettingsModelLocalTests const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.5, realArgs.SplitSize()); } { @@ -181,7 +185,7 @@ namespace SettingsModelLocalTests const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.5, realArgs.SplitSize()); } { @@ -192,7 +196,7 @@ namespace SettingsModelLocalTests const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.5, realArgs.SplitSize()); } { @@ -203,7 +207,7 @@ namespace SettingsModelLocalTests const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.5, realArgs.SplitSize()); } { @@ -214,9 +218,53 @@ namespace SettingsModelLocalTests const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.25, realArgs.SplitSize()); } + { + auto command = commands.Lookup(L"command7"); + VERIFY_IS_NOT_NULL(command); + VERIFY_IS_NOT_NULL(command.ActionAndArgs()); + VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, command.ActionAndArgs().Action()); + const auto& realArgs = command.ActionAndArgs().Args().try_as(); + VERIFY_IS_NOT_NULL(realArgs); + // Verify the args have the expected value + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); + VERIFY_ARE_EQUAL(0.5, realArgs.SplitSize()); + } + { + auto command = commands.Lookup(L"command8"); + VERIFY_IS_NOT_NULL(command); + VERIFY_IS_NOT_NULL(command.ActionAndArgs()); + VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, command.ActionAndArgs().Action()); + const auto& realArgs = command.ActionAndArgs().Args().try_as(); + VERIFY_IS_NOT_NULL(realArgs); + // Verify the args have the expected value + VERIFY_ARE_EQUAL(SplitDirection::Left, realArgs.SplitDirection()); + VERIFY_ARE_EQUAL(0.5, realArgs.SplitSize()); + } + { + auto command = commands.Lookup(L"command9"); + VERIFY_IS_NOT_NULL(command); + VERIFY_IS_NOT_NULL(command.ActionAndArgs()); + VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, command.ActionAndArgs().Action()); + const auto& realArgs = command.ActionAndArgs().Args().try_as(); + VERIFY_IS_NOT_NULL(realArgs); + // Verify the args have the expected value + VERIFY_ARE_EQUAL(SplitDirection::Up, realArgs.SplitDirection()); + VERIFY_ARE_EQUAL(0.5, realArgs.SplitSize()); + } + { + auto command = commands.Lookup(L"command10"); + VERIFY_IS_NOT_NULL(command); + VERIFY_IS_NOT_NULL(command.ActionAndArgs()); + VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, command.ActionAndArgs().Action()); + const auto& realArgs = command.ActionAndArgs().Args().try_as(); + VERIFY_IS_NOT_NULL(realArgs); + // Verify the args have the expected value + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); + VERIFY_ARE_EQUAL(0.5, realArgs.SplitSize()); + } } void CommandTests::TestSplitPaneBadSize() @@ -244,7 +292,7 @@ namespace SettingsModelLocalTests const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.25, realArgs.SplitSize()); } } @@ -286,8 +334,10 @@ namespace SettingsModelLocalTests const std::string commands0String{ R"([ { "command": { "action": "splitPane", "split": null } }, - { "command": { "action": "splitPane", "split": "vertical" } }, - { "command": { "action": "splitPane", "split": "horizontal" } }, + { "command": { "action": "splitPane", "split": "left" } }, + { "command": { "action": "splitPane", "split": "right" } }, + { "command": { "action": "splitPane", "split": "up" } }, + { "command": { "action": "splitPane", "split": "down" } }, { "command": { "action": "splitPane", "split": "none" } }, { "command": { "action": "splitPane" } }, { "command": { "action": "splitPane", "split": "auto" } }, @@ -301,10 +351,10 @@ namespace SettingsModelLocalTests auto warnings = implementation::Command::LayerJson(commands, commands0Json); VERIFY_ARE_EQUAL(0u, warnings.size()); - // There are only 3 commands here: all of the `"none"`, `"auto"`, + // There are only 5 commands here: all of the `"none"`, `"auto"`, // `"foo"`, `null`, and bindings all generate the same action, // which will generate just a single name for all of them. - VERIFY_ARE_EQUAL(3u, commands.Size()); + VERIFY_ARE_EQUAL(5u, commands.Size()); { auto command = commands.Lookup(L"Split pane"); @@ -314,27 +364,47 @@ namespace SettingsModelLocalTests const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); + } + { + auto command = commands.Lookup(L"Split pane, split: left"); + VERIFY_IS_NOT_NULL(command); + VERIFY_IS_NOT_NULL(command.ActionAndArgs()); + VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, command.ActionAndArgs().Action()); + const auto& realArgs = command.ActionAndArgs().Args().try_as(); + VERIFY_IS_NOT_NULL(realArgs); + // Verify the args have the expected value + VERIFY_ARE_EQUAL(SplitDirection::Left, realArgs.SplitDirection()); + } + { + auto command = commands.Lookup(L"Split pane, split: right"); + VERIFY_IS_NOT_NULL(command); + VERIFY_IS_NOT_NULL(command.ActionAndArgs()); + VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, command.ActionAndArgs().Action()); + const auto& realArgs = command.ActionAndArgs().Args().try_as(); + VERIFY_IS_NOT_NULL(realArgs); + // Verify the args have the expected value + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); } { - auto command = commands.Lookup(L"Split pane, split: vertical"); + auto command = commands.Lookup(L"Split pane, split: up"); VERIFY_IS_NOT_NULL(command); VERIFY_IS_NOT_NULL(command.ActionAndArgs()); VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, command.ActionAndArgs().Action()); const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Up, realArgs.SplitDirection()); } { - auto command = commands.Lookup(L"Split pane, split: horizontal"); + auto command = commands.Lookup(L"Split pane, split: down"); VERIFY_IS_NOT_NULL(command); VERIFY_IS_NOT_NULL(command.ActionAndArgs()); VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, command.ActionAndArgs().Action()); const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); } } void CommandTests::TestLayerOnAutogeneratedName() @@ -360,7 +430,7 @@ namespace SettingsModelLocalTests const auto& realArgs = command.ActionAndArgs().Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); } } diff --git a/src/cascadia/LocalTests_SettingsModel/DeserializationTests.cpp b/src/cascadia/LocalTests_SettingsModel/DeserializationTests.cpp index bff6e7e178c..df4fcb9a289 100644 --- a/src/cascadia/LocalTests_SettingsModel/DeserializationTests.cpp +++ b/src/cascadia/LocalTests_SettingsModel/DeserializationTests.cpp @@ -2130,7 +2130,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -2147,7 +2147,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -2161,7 +2161,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -2175,7 +2175,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -2189,7 +2189,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -2218,7 +2218,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); diff --git a/src/cascadia/LocalTests_SettingsModel/KeyBindingsTests.cpp b/src/cascadia/LocalTests_SettingsModel/KeyBindingsTests.cpp index 946eda0f121..211567e491e 100644 --- a/src/cascadia/LocalTests_SettingsModel/KeyBindingsTests.cpp +++ b/src/cascadia/LocalTests_SettingsModel/KeyBindingsTests.cpp @@ -432,7 +432,7 @@ namespace SettingsModelLocalTests VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, actionAndArgs.Action()); const auto& realArgs = actionAndArgs.Args().as(); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); } { KeyChord kc{ true, false, false, false, static_cast('E'), 0 }; @@ -440,7 +440,7 @@ namespace SettingsModelLocalTests VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, actionAndArgs.Action()); const auto& realArgs = actionAndArgs.Args().as(); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); } { KeyChord kc{ true, false, false, false, static_cast('G'), 0 }; @@ -448,7 +448,7 @@ namespace SettingsModelLocalTests VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, actionAndArgs.Action()); const auto& realArgs = actionAndArgs.Args().as(); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); } { KeyChord kc{ true, false, false, false, static_cast('H'), 0 }; @@ -456,7 +456,7 @@ namespace SettingsModelLocalTests VERIFY_ARE_EQUAL(ShortcutAction::SplitPane, actionAndArgs.Action()); const auto& realArgs = actionAndArgs.Args().as(); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); } } diff --git a/src/cascadia/LocalTests_SettingsModel/TerminalSettingsTests.cpp b/src/cascadia/LocalTests_SettingsModel/TerminalSettingsTests.cpp index 3b2ed8d14cd..498f6822e8c 100644 --- a/src/cascadia/LocalTests_SettingsModel/TerminalSettingsTests.cpp +++ b/src/cascadia/LocalTests_SettingsModel/TerminalSettingsTests.cpp @@ -124,7 +124,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -145,7 +145,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -167,7 +167,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -189,7 +189,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -211,7 +211,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_FALSE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -242,7 +242,7 @@ namespace SettingsModelLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_FALSE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); diff --git a/src/cascadia/LocalTests_TerminalApp/CommandlineTest.cpp b/src/cascadia/LocalTests_TerminalApp/CommandlineTest.cpp index 8384690c4be..a9975b661dc 100644 --- a/src/cascadia/LocalTests_TerminalApp/CommandlineTest.cpp +++ b/src/cascadia/LocalTests_TerminalApp/CommandlineTest.cpp @@ -715,7 +715,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(SplitType::Manual, myArgs.SplitMode()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } @@ -735,7 +735,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Horizontal, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(SplitType::Manual, myArgs.SplitMode()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } @@ -757,7 +757,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Vertical, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(SplitType::Manual, myArgs.SplitMode()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } @@ -799,7 +799,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); VERIFY_IS_FALSE(myArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(myArgs.TerminalArgs().StartingDirectory().empty()); @@ -828,7 +828,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Horizontal, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, myArgs.SplitDirection()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); VERIFY_IS_FALSE(myArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(myArgs.TerminalArgs().StartingDirectory().empty()); @@ -857,7 +857,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); VERIFY_IS_FALSE(myArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(myArgs.TerminalArgs().StartingDirectory().empty()); @@ -1779,7 +1779,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.5f, myArgs.SplitSize()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } @@ -1799,7 +1799,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.3f, myArgs.SplitSize()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } @@ -1820,7 +1820,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.3f, myArgs.SplitSize()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } @@ -1830,7 +1830,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.5f, myArgs.SplitSize()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } @@ -1852,7 +1852,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.3f, myArgs.SplitSize()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } @@ -1862,7 +1862,7 @@ namespace TerminalAppLocalTests VERIFY_IS_NOT_NULL(actionAndArgs.Args()); auto myArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(myArgs); - VERIFY_ARE_EQUAL(SplitState::Automatic, myArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, myArgs.SplitDirection()); VERIFY_ARE_EQUAL(0.7f, myArgs.SplitSize()); VERIFY_IS_NOT_NULL(myArgs.TerminalArgs()); } diff --git a/src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp b/src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp index a7cfa529765..ff83a2ae502 100644 --- a/src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp +++ b/src/cascadia/LocalTests_TerminalApp/SettingsTests.cpp @@ -132,7 +132,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -156,7 +156,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -174,7 +174,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -192,7 +192,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -259,7 +259,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -283,7 +283,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -301,7 +301,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -319,7 +319,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -388,7 +388,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -412,7 +412,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -430,7 +430,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -448,7 +448,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -680,16 +680,16 @@ namespace TerminalAppLocalTests // // ├─ profile0... // | ├─ Split pane, profile: profile0 - // | ├─ Split pane, direction: vertical, profile: profile0 - // | └─ Split pane, direction: horizontal, profile: profile0 + // | ├─ Split pane, direction: right, profile: profile0 + // | └─ Split pane, direction: down, profile: profile0 // ├─ profile1... // | ├─Split pane, profile: profile1 - // | ├─Split pane, direction: vertical, profile: profile1 - // | └─Split pane, direction: horizontal, profile: profile1 + // | ├─Split pane, direction: right, profile: profile1 + // | └─Split pane, direction: down, profile: profile1 // └─ profile2... // ├─ Split pane, profile: profile2 - // ├─ Split pane, direction: vertical, profile: profile2 - // └─ Split pane, direction: horizontal, profile: profile2 + // ├─ Split pane, direction: right, profile: profile2 + // └─ Split pane, direction: down, profile: profile2 const std::string settingsJson{ R"( { @@ -719,8 +719,8 @@ namespace TerminalAppLocalTests "name": "${profile.name}...", "commands": [ { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "auto" } }, - { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "vertical" } }, - { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "horizontal" } } + { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "right" } }, + { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "down" } } ] } ], @@ -762,7 +762,7 @@ namespace TerminalAppLocalTests const auto& realArgs = childActionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -773,7 +773,7 @@ namespace TerminalAppLocalTests VERIFY_IS_FALSE(childCommand.HasNestedCommands()); } { - winrt::hstring childCommandName{ fmt::format(L"Split pane, split: horizontal, profile: {}", name) }; + winrt::hstring childCommandName{ fmt::format(L"Split pane, split: down, profile: {}", name) }; auto childCommand = command.NestedCommands().Lookup(childCommandName); VERIFY_IS_NOT_NULL(childCommand); auto childActionAndArgs = childCommand.ActionAndArgs(); @@ -783,7 +783,7 @@ namespace TerminalAppLocalTests const auto& realArgs = childActionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -794,7 +794,7 @@ namespace TerminalAppLocalTests VERIFY_IS_FALSE(childCommand.HasNestedCommands()); } { - winrt::hstring childCommandName{ fmt::format(L"Split pane, split: vertical, profile: {}", name) }; + winrt::hstring childCommandName{ fmt::format(L"Split pane, split: right, profile: {}", name) }; auto childCommand = command.NestedCommands().Lookup(childCommandName); VERIFY_IS_NOT_NULL(childCommand); auto childActionAndArgs = childCommand.ActionAndArgs(); @@ -804,7 +804,7 @@ namespace TerminalAppLocalTests const auto& realArgs = childActionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -915,16 +915,16 @@ namespace TerminalAppLocalTests // └─ New Pane... // ├─ profile0... // | ├─ Split automatically - // | ├─ Split vertically - // | └─ Split horizontally + // | ├─ Split right + // | └─ Split down // ├─ profile1... // | ├─ Split automatically - // | ├─ Split vertically - // | └─ Split horizontally + // | ├─ Split right + // | └─ Split down // └─ profile2... // ├─ Split automatically - // ├─ Split vertically - // └─ Split horizontally + // ├─ Split right + // └─ Split down const std::string settingsJson{ R"( { @@ -957,8 +957,8 @@ namespace TerminalAppLocalTests "name": "${profile.name}...", "commands": [ { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "auto" } }, - { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "vertical" } }, - { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "horizontal" } } + { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "right" } }, + { "command": { "action": "splitPane", "profile": "${profile.name}", "split": "down" } } ] } ] @@ -1010,7 +1010,7 @@ namespace TerminalAppLocalTests const auto& realArgs = childActionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -1021,7 +1021,7 @@ namespace TerminalAppLocalTests VERIFY_IS_FALSE(childCommand.HasNestedCommands()); } { - winrt::hstring childCommandName{ fmt::format(L"Split pane, split: horizontal, profile: {}", name) }; + winrt::hstring childCommandName{ fmt::format(L"Split pane, split: down, profile: {}", name) }; auto childCommand = command.NestedCommands().Lookup(childCommandName); VERIFY_IS_NOT_NULL(childCommand); auto childActionAndArgs = childCommand.ActionAndArgs(); @@ -1031,7 +1031,7 @@ namespace TerminalAppLocalTests const auto& realArgs = childActionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Horizontal, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Down, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -1042,7 +1042,7 @@ namespace TerminalAppLocalTests VERIFY_IS_FALSE(childCommand.HasNestedCommands()); } { - winrt::hstring childCommandName{ fmt::format(L"Split pane, split: vertical, profile: {}", name) }; + winrt::hstring childCommandName{ fmt::format(L"Split pane, split: right, profile: {}", name) }; auto childCommand = command.NestedCommands().Lookup(childCommandName); VERIFY_IS_NOT_NULL(childCommand); auto childActionAndArgs = childCommand.ActionAndArgs(); @@ -1052,7 +1052,7 @@ namespace TerminalAppLocalTests const auto& realArgs = childActionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Vertical, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Right, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -1127,7 +1127,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -1156,7 +1156,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -1174,7 +1174,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); @@ -1192,7 +1192,7 @@ namespace TerminalAppLocalTests const auto& realArgs = actionAndArgs.Args().try_as(); VERIFY_IS_NOT_NULL(realArgs); // Verify the args have the expected value - VERIFY_ARE_EQUAL(SplitState::Automatic, realArgs.SplitStyle()); + VERIFY_ARE_EQUAL(SplitDirection::Automatic, realArgs.SplitDirection()); VERIFY_IS_NOT_NULL(realArgs.TerminalArgs()); VERIFY_IS_TRUE(realArgs.TerminalArgs().Commandline().empty()); VERIFY_IS_TRUE(realArgs.TerminalArgs().StartingDirectory().empty()); diff --git a/src/cascadia/LocalTests_TerminalApp/TabTests.cpp b/src/cascadia/LocalTests_TerminalApp/TabTests.cpp index 07323750bfa..782ae265f6f 100644 --- a/src/cascadia/LocalTests_TerminalApp/TabTests.cpp +++ b/src/cascadia/LocalTests_TerminalApp/TabTests.cpp @@ -508,7 +508,7 @@ namespace TerminalAppLocalTests Log::Comment(NoThrowString().Format(L"Duplicate the first pane")); result = RunOnUIThread([&page]() { - page->_SplitPane(SplitState::Automatic, SplitType::Duplicate, 0.5f, nullptr); + page->_SplitPane(SplitDirection::Automatic, SplitType::Duplicate, 0.5f, nullptr); VERIFY_ARE_EQUAL(1u, page->_tabs.Size()); auto tab = page->_GetTerminalTabImpl(page->_tabs.GetAt(0)); @@ -526,7 +526,7 @@ namespace TerminalAppLocalTests Log::Comment(NoThrowString().Format(L"Duplicate the pane, and don't crash")); result = RunOnUIThread([&page]() { - page->_SplitPane(SplitState::Automatic, SplitType::Duplicate, 0.5f, nullptr); + page->_SplitPane(SplitDirection::Automatic, SplitType::Duplicate, 0.5f, nullptr); VERIFY_ARE_EQUAL(1u, page->_tabs.Size()); auto tab = page->_GetTerminalTabImpl(page->_tabs.GetAt(0)); @@ -844,7 +844,7 @@ namespace TerminalAppLocalTests // | 1 | 2 | // | | | // ------------------- - page->_SplitPane(SplitState::Vertical, SplitType::Duplicate, 0.5f, nullptr); + page->_SplitPane(SplitDirection::Right, SplitType::Duplicate, 0.5f, nullptr); secondId = tab->_activePane->Id().value(); }); Sleep(250); @@ -862,7 +862,7 @@ namespace TerminalAppLocalTests // | 3 | | // | | | // ------------------- - page->_SplitPane(SplitState::Horizontal, SplitType::Duplicate, 0.5f, nullptr); + page->_SplitPane(SplitDirection::Down, SplitType::Duplicate, 0.5f, nullptr); auto tab = page->_GetTerminalTabImpl(page->_tabs.GetAt(0)); // Split again to make the 3rd tab thirdId = tab->_activePane->Id().value(); @@ -882,7 +882,7 @@ namespace TerminalAppLocalTests // | 3 | 4 | // | | | // ------------------- - page->_SplitPane(SplitState::Horizontal, SplitType::Duplicate, 0.5f, nullptr); + page->_SplitPane(SplitDirection::Down, SplitType::Duplicate, 0.5f, nullptr); auto tab = page->_GetTerminalTabImpl(page->_tabs.GetAt(0)); fourthId = tab->_activePane->Id().value(); }); diff --git a/src/cascadia/TerminalApp/AppActionHandlers.cpp b/src/cascadia/TerminalApp/AppActionHandlers.cpp index 9e19336156b..1ef4c0c8ab4 100644 --- a/src/cascadia/TerminalApp/AppActionHandlers.cpp +++ b/src/cascadia/TerminalApp/AppActionHandlers.cpp @@ -173,7 +173,7 @@ namespace winrt::TerminalApp::implementation } else if (const auto& realArgs = args.ActionArgs().try_as()) { - _SplitPane(realArgs.SplitStyle(), + _SplitPane(realArgs.SplitDirection(), realArgs.SplitMode(), // This is safe, we're already filtering so the value is (0, 1) ::base::saturated_cast(realArgs.SplitSize()), diff --git a/src/cascadia/TerminalApp/AppCommandlineArgs.cpp b/src/cascadia/TerminalApp/AppCommandlineArgs.cpp index 69f609ea8e5..7f2f919a45c 100644 --- a/src/cascadia/TerminalApp/AppCommandlineArgs.cpp +++ b/src/cascadia/TerminalApp/AppCommandlineArgs.cpp @@ -274,18 +274,18 @@ void AppCommandlineArgs::_buildSplitPaneParser() // _getNewTerminalArgs MUST be called before parsing any other options, // as it might clear those options while finding the commandline auto terminalArgs{ _getNewTerminalArgs(subcommand) }; - auto style{ SplitState::Automatic }; + auto style{ SplitDirection::Automatic }; // Make sure to use the `Option`s here to check if they were set - // _getNewTerminalArgs might reset them while parsing a commandline if ((*subcommand._horizontalOption || *subcommand._verticalOption)) { if (_splitHorizontal) { - style = SplitState::Horizontal; + style = SplitDirection::Down; } else if (_splitVertical) { - style = SplitState::Vertical; + style = SplitDirection::Right; } } const auto splitMode{ subcommand._duplicateOption && _splitDuplicate ? SplitType::Duplicate : SplitType::Manual }; diff --git a/src/cascadia/TerminalApp/Pane.cpp b/src/cascadia/TerminalApp/Pane.cpp index 0898f0613eb..f3940e56345 100644 --- a/src/cascadia/TerminalApp/Pane.cpp +++ b/src/cascadia/TerminalApp/Pane.cpp @@ -147,7 +147,8 @@ Pane::BuildStartupState Pane::BuildStartupActions(uint32_t currentId, uint32_t n const auto terminalArgs{ newPane->GetTerminalArgsForPane() }; // When creating a pane the split size is the size of the new pane // and not position. - SplitPaneArgs args{ SplitType::Manual, _splitState, 1. - _desiredSplitPosition, terminalArgs }; + const auto splitDirection = _splitState == SplitState::Horizontal ? SplitDirection::Down : SplitDirection::Right; + SplitPaneArgs args{ SplitType::Manual, splitDirection, 1. - _desiredSplitPosition, terminalArgs }; actionAndArgs.Args(args); return actionAndArgs; @@ -1291,7 +1292,7 @@ void Pane::UpdateSettings(const TerminalSettingsCreateResult& settings, const Pr // - splitType: How the pane should be attached // Return Value: // - the new reference to the child created from the current pane. -std::shared_ptr Pane::AttachPane(std::shared_ptr pane, SplitState splitType) +std::shared_ptr Pane::AttachPane(std::shared_ptr pane, SplitDirection splitType) { // Splice the new pane into the tree const auto [first, _] = _Split(splitType, .5, pane); @@ -2002,7 +2003,7 @@ void Pane::_SetupEntranceAnimation() // Note: // - This method is highly similar to Pane::PreCalculateAutoSplit std::optional Pane::PreCalculateCanSplit(const std::shared_ptr target, - SplitState splitType, + SplitDirection splitType, const float splitSize, const winrt::Windows::Foundation::Size availableSpace) const { @@ -2016,12 +2017,7 @@ std::optional Pane::PreCalculateCanSplit(const std::shared_ptr targe // the available space to calculate which direction to split in. const Size minSize = _GetMinSize(); - if (splitType == SplitState::None) - { - return { false }; - } - - else if (splitType == SplitState::Vertical) + if (splitType == SplitDirection::Left || splitType == SplitDirection::Right) { const auto widthMinusSeparator = availableSpace.Width - CombinedPaneBorderSize; const auto newFirstWidth = widthMinusSeparator * firstPrecent; @@ -2030,7 +2026,7 @@ std::optional Pane::PreCalculateCanSplit(const std::shared_ptr targe return { newFirstWidth > minSize.Width && newSecondWidth > minSize.Width }; } - else if (splitType == SplitState::Horizontal) + else if (splitType == SplitDirection::Up || splitType == SplitDirection::Down) { const auto heightMinusSeparator = availableSpace.Height - CombinedPaneBorderSize; const auto newFirstHeight = heightMinusSeparator * firstPrecent; @@ -2083,8 +2079,8 @@ std::optional Pane::PreCalculateCanSplit(const std::shared_ptr targe // - profile: The profile to associate with the newly created pane. // - control: A TermControl to use in the new pane. // Return Value: -// - The two newly created Panes -std::pair, std::shared_ptr> Pane::Split(SplitState splitType, +// - The two newly created Panes, with the original pane first +std::pair, std::shared_ptr> Pane::Split(SplitDirection splitType, const float splitSize, const Profile& profile, const TermControl& control) @@ -2147,18 +2143,18 @@ bool Pane::ToggleSplitOrientation() // Method Description: // - Converts an "automatic" split type into either Vertical or Horizontal, // based upon the current dimensions of the Pane. -// - If any of the other SplitState values are passed in, they're returned -// unmodified. +// - Similarly, if Up/Down or Left/Right are provided a Horizontal or Vertical +// split type will be returned. // Arguments: -// - splitType: The SplitState to attempt to convert +// - splitType: The SplitDirection to attempt to convert // Return Value: -// - None if splitType was None, otherwise one of Horizontal or Vertical -SplitState Pane::_convertAutomaticSplitState(const SplitState& splitType) const +// - One of Horizontal or Vertical +SplitState Pane::_convertAutomaticOrDirectionalSplitState(const SplitDirection& splitType) const { // Careful here! If the pane doesn't yet have a size, these dimensions will // be 0, and we'll always return Vertical. - if (splitType == SplitState::Automatic) + if (splitType == SplitDirection::Automatic) { // If the requested split type was "auto", determine which direction to // split based on our current dimensions @@ -2166,7 +2162,12 @@ SplitState Pane::_convertAutomaticSplitState(const SplitState& splitType) const gsl::narrow_cast(_root.ActualHeight()) }; return actualSize.Width >= actualSize.Height ? SplitState::Vertical : SplitState::Horizontal; } - return splitType; + if (splitType == SplitDirection::Up || splitType == SplitDirection::Down) + { + return SplitState::Horizontal; + } + // All that is left is Left / Right which are vertical splits + return SplitState::Vertical; } // Method Description: @@ -2177,17 +2178,12 @@ SplitState Pane::_convertAutomaticSplitState(const SplitState& splitType) const // - splitSize: what fraction of the pane the new pane should get // - newPane: the pane to add as a child // Return Value: -// - The two newly created Panes -std::pair, std::shared_ptr> Pane::_Split(SplitState splitType, +// - The two newly created Panes, with the original pane as the first pane. +std::pair, std::shared_ptr> Pane::_Split(SplitDirection splitType, const float splitSize, std::shared_ptr newPane) { - if (splitType == SplitState::None) - { - return { nullptr, nullptr }; - } - - auto actualSplitType = _convertAutomaticSplitState(splitType); + auto actualSplitType = _convertAutomaticOrDirectionalSplitState(splitType); // Lock the create/close lock so that another operation won't concurrently // modify our tree @@ -2218,9 +2214,16 @@ std::pair, std::shared_ptr> Pane::_Split(SplitState // Move the new guid, control into the second. _firstChild = std::make_shared(_profile, _control); _firstChild->_connectionState = std::exchange(_connectionState, ConnectionState::NotConnected); + _secondChild = newPane; + + // If we want the new pane to be the first child, swap the children + if (splitType == SplitDirection::Up || splitType == SplitDirection::Left) + { + std::swap(_firstChild, _secondChild); + } + _profile = nullptr; _control = { nullptr }; - _secondChild = newPane; _CreateRowColDefinitions(); @@ -2239,6 +2242,12 @@ std::pair, std::shared_ptr> Pane::_Split(SplitState // Clear out our ID, only leaves should have IDs _id = {}; + // Regardless of which child the new child is, we want to return the + // original one first. + if (splitType == SplitDirection::Up || splitType == SplitDirection::Left) + { + return { _secondChild, _firstChild }; + } return { _firstChild, _secondChild }; } @@ -2874,10 +2883,10 @@ int Pane::GetLeafPaneCount() const noexcept // - availableSpace: The theoretical space that's available for this pane to be able to split. // Return Value: // - nullopt if `target` is not this pane or a child of this pane, otherwise the -// SplitState that `target` would use for an `Automatic` split given +// SplitDirection that `target` would use for an `Automatic` split given // `availableSpace` -std::optional Pane::PreCalculateAutoSplit(const std::shared_ptr target, - const winrt::Windows::Foundation::Size availableSpace) const +std::optional Pane::PreCalculateAutoSplit(const std::shared_ptr target, + const winrt::Windows::Foundation::Size availableSpace) const { if (_IsLeaf()) { @@ -2885,7 +2894,7 @@ std::optional Pane::PreCalculateAutoSplit(const std::shared_ptr availableSpace.Height ? SplitState::Vertical : SplitState::Horizontal; + return availableSpace.Width > availableSpace.Height ? SplitDirection::Right : SplitDirection::Down; } else { diff --git a/src/cascadia/TerminalApp/Pane.h b/src/cascadia/TerminalApp/Pane.h index 35126c614ad..ab1309f40b9 100644 --- a/src/cascadia/TerminalApp/Pane.h +++ b/src/cascadia/TerminalApp/Pane.h @@ -44,6 +44,13 @@ enum class Borders : int }; DEFINE_ENUM_FLAG_OPERATORS(Borders); +enum class SplitState : int +{ + None = 0, + Horizontal = 1, + Vertical = 2 +}; + class Pane : public std::enable_shared_from_this { public: @@ -93,23 +100,23 @@ class Pane : public std::enable_shared_from_this std::shared_ptr NextPane(const std::shared_ptr pane); std::shared_ptr PreviousPane(const std::shared_ptr pane); - std::pair, std::shared_ptr> Split(winrt::Microsoft::Terminal::Settings::Model::SplitState splitType, + std::pair, std::shared_ptr> Split(winrt::Microsoft::Terminal::Settings::Model::SplitDirection splitType, const float splitSize, const winrt::Microsoft::Terminal::Settings::Model::Profile& profile, const winrt::Microsoft::Terminal::Control::TermControl& control); bool ToggleSplitOrientation(); float CalcSnappedDimension(const bool widthOrHeight, const float dimension) const; - std::optional PreCalculateAutoSplit(const std::shared_ptr target, - const winrt::Windows::Foundation::Size parentSize) const; + std::optional PreCalculateAutoSplit(const std::shared_ptr target, + const winrt::Windows::Foundation::Size parentSize) const; std::optional PreCalculateCanSplit(const std::shared_ptr target, - winrt::Microsoft::Terminal::Settings::Model::SplitState splitType, + winrt::Microsoft::Terminal::Settings::Model::SplitDirection splitType, const float splitSize, const winrt::Windows::Foundation::Size availableSpace) const; void Shutdown(); void Close(); std::shared_ptr AttachPane(std::shared_ptr pane, - winrt::Microsoft::Terminal::Settings::Model::SplitState splitType); + winrt::Microsoft::Terminal::Settings::Model::SplitDirection splitType); std::shared_ptr DetachPane(std::shared_ptr pane); int GetLeafPaneCount() const noexcept; @@ -174,7 +181,7 @@ class Pane : public std::enable_shared_from_this std::shared_ptr _firstChild{ nullptr }; std::shared_ptr _secondChild{ nullptr }; - winrt::Microsoft::Terminal::Settings::Model::SplitState _splitState{ winrt::Microsoft::Terminal::Settings::Model::SplitState::None }; + SplitState _splitState{ SplitState::None }; float _desiredSplitPosition; std::optional _id; @@ -199,7 +206,7 @@ class Pane : public std::enable_shared_from_this bool _HasFocusedChild() const noexcept; void _SetupChildCloseHandlers(); - std::pair, std::shared_ptr> _Split(winrt::Microsoft::Terminal::Settings::Model::SplitState splitType, + std::pair, std::shared_ptr> _Split(winrt::Microsoft::Terminal::Settings::Model::SplitDirection splitType, const float splitSize, std::shared_ptr newPane); @@ -242,9 +249,9 @@ class Pane : public std::enable_shared_from_this LayoutSizeNode _CreateMinSizeTree(const bool widthOrHeight) const; float _ClampSplitPosition(const bool widthOrHeight, const float requestedValue, const float totalSize) const; - winrt::Microsoft::Terminal::Settings::Model::SplitState _convertAutomaticSplitState(const winrt::Microsoft::Terminal::Settings::Model::SplitState& splitType) const; + SplitState _convertAutomaticOrDirectionalSplitState(const winrt::Microsoft::Terminal::Settings::Model::SplitDirection& splitType) const; - std::optional _preCalculateAutoSplit(const std::shared_ptr target, const winrt::Windows::Foundation::Size parentSize) const; + std::optional _preCalculateAutoSplit(const std::shared_ptr target, const winrt::Windows::Foundation::Size parentSize) const; // Function Description: // - Returns true if the given direction can be used with the given split @@ -255,24 +262,24 @@ class Pane : public std::enable_shared_from_this // - Also used for moving focus between panes, which again happens _across_ a separator. // Arguments: // - direction: The Direction to compare - // - splitType: The winrt::TerminalApp::SplitState to compare + // - splitType: The SplitState to compare // Return Value: // - true iff the direction is perpendicular to the splitType. False for - // winrt::TerminalApp::SplitState::None. + // SplitState::None. template static constexpr bool DirectionMatchesSplit(const T& direction, - const winrt::Microsoft::Terminal::Settings::Model::SplitState& splitType) + const SplitState& splitType) { - if (splitType == winrt::Microsoft::Terminal::Settings::Model::SplitState::None) + if (splitType == SplitState::None) { return false; } - else if (splitType == winrt::Microsoft::Terminal::Settings::Model::SplitState::Horizontal) + else if (splitType == SplitState::Horizontal) { return direction == T::Up || direction == T::Down; } - else if (splitType == winrt::Microsoft::Terminal::Settings::Model::SplitState::Vertical) + else if (splitType == SplitState::Vertical) { return direction == T::Left || direction == T::Right; diff --git a/src/cascadia/TerminalApp/TabManagement.cpp b/src/cascadia/TerminalApp/TabManagement.cpp index 31c9fb312a6..3730f7ac7bd 100644 --- a/src/cascadia/TerminalApp/TabManagement.cpp +++ b/src/cascadia/TerminalApp/TabManagement.cpp @@ -289,7 +289,7 @@ namespace winrt::TerminalApp::implementation auto newControl = _InitControl(settings, debugConnection); _RegisterTerminalEvents(newControl); // Split (auto) with the debug tap. - newTabImpl->SplitPane(SplitState::Automatic, 0.5f, profile, newControl); + newTabImpl->SplitPane(SplitDirection::Automatic, 0.5f, profile, newControl); } } @@ -399,7 +399,7 @@ namespace winrt::TerminalApp::implementation try { _SetFocusedTab(tab); - _SplitPane(tab, SplitState::Automatic, SplitType::Duplicate); + _SplitPane(tab, SplitDirection::Automatic, SplitType::Duplicate); } CATCH_LOG(); } diff --git a/src/cascadia/TerminalApp/TerminalPage.cpp b/src/cascadia/TerminalApp/TerminalPage.cpp index 8e252098fc9..79cce0e399f 100644 --- a/src/cascadia/TerminalApp/TerminalPage.cpp +++ b/src/cascadia/TerminalApp/TerminalPage.cpp @@ -827,7 +827,7 @@ namespace winrt::TerminalApp::implementation if (altPressed && !debugTap) { - this->_SplitPane(SplitState::Automatic, + this->_SplitPane(SplitDirection::Automatic, SplitType::Manual, 0.5f, newTerminalArgs); @@ -1468,25 +1468,18 @@ namespace winrt::TerminalApp::implementation // Method Description: // - Split the focused pane either horizontally or vertically, and place the // given TermControl into the newly created pane. - // - If splitType == SplitState::None, this method does nothing. // Arguments: - // - splitType: one value from the TerminalApp::SplitState enum, indicating how the + // - splitDirection: one value from the TerminalApp::SplitDirection enum, indicating how the // new pane should be split from its parent. // - splitMode: value from TerminalApp::SplitType enum, indicating the profile to be used in the newly split pane. // - newTerminalArgs: An object that may contain a blob of parameters to // control which profile is created and with possible other // configurations. See CascadiaSettings::BuildSettings for more details. - void TerminalPage::_SplitPane(const SplitState splitType, + void TerminalPage::_SplitPane(const SplitDirection splitDirection, const SplitType splitMode, const float splitSize, const NewTerminalArgs& newTerminalArgs) { - // Do nothing if we're requesting no split. - if (splitType == SplitState::None) - { - return; - } - const auto focusedTab{ _GetFocusedTabImpl() }; // Do nothing if no TerminalTab is focused @@ -1495,33 +1488,26 @@ namespace winrt::TerminalApp::implementation return; } - _SplitPane(*focusedTab, splitType, splitMode, splitSize, newTerminalArgs); + _SplitPane(*focusedTab, splitDirection, splitMode, splitSize, newTerminalArgs); } // Method Description: // - Split the focused pane of the given tab, either horizontally or vertically, and place the // given TermControl into the newly created pane. - // - If splitType == SplitState::None, this method does nothing. // Arguments: // - tab: The tab that is going to be split. - // - splitType: one value from the TerminalApp::SplitState enum, indicating how the + // - splitDirection: one value from the TerminalApp::SplitDirection enum, indicating how the // new pane should be split from its parent. // - splitMode: value from TerminalApp::SplitType enum, indicating the profile to be used in the newly split pane. // - newTerminalArgs: An object that may contain a blob of parameters to // control which profile is created and with possible other // configurations. See CascadiaSettings::BuildSettings for more details. void TerminalPage::_SplitPane(TerminalTab& tab, - const SplitState splitType, + const SplitDirection splitDirection, const SplitType splitMode, const float splitSize, const NewTerminalArgs& newTerminalArgs) { - // Do nothing if we're requesting no split. - if (splitType == SplitState::None) - { - return; - } - try { TerminalSettingsCreateResult controlSettings{ nullptr }; @@ -1567,8 +1553,8 @@ namespace winrt::TerminalApp::implementation const float contentHeight = ::base::saturated_cast(_tabContent.ActualHeight()); const winrt::Windows::Foundation::Size availableSpace{ contentWidth, contentHeight }; - auto realSplitType = splitType; - if (realSplitType == SplitState::Automatic) + auto realSplitType = splitDirection; + if (realSplitType == SplitDirection::Automatic) { realSplitType = tab.PreCalculateAutoSplit(availableSpace); } diff --git a/src/cascadia/TerminalApp/TerminalPage.h b/src/cascadia/TerminalApp/TerminalPage.h index e296764055f..7302cf6ed92 100644 --- a/src/cascadia/TerminalApp/TerminalPage.h +++ b/src/cascadia/TerminalApp/TerminalPage.h @@ -269,12 +269,12 @@ namespace winrt::TerminalApp::implementation void _Scroll(ScrollDirection scrollDirection, const Windows::Foundation::IReference& rowsToScroll); - void _SplitPane(const Microsoft::Terminal::Settings::Model::SplitState splitType, + void _SplitPane(const Microsoft::Terminal::Settings::Model::SplitDirection splitType, const Microsoft::Terminal::Settings::Model::SplitType splitMode = Microsoft::Terminal::Settings::Model::SplitType::Manual, const float splitSize = 0.5f, const Microsoft::Terminal::Settings::Model::NewTerminalArgs& newTerminalArgs = nullptr); void _SplitPane(TerminalTab& tab, - const Microsoft::Terminal::Settings::Model::SplitState splitType, + const Microsoft::Terminal::Settings::Model::SplitDirection splitType, const Microsoft::Terminal::Settings::Model::SplitType splitMode = Microsoft::Terminal::Settings::Model::SplitType::Manual, const float splitSize = 0.5f, const Microsoft::Terminal::Settings::Model::NewTerminalArgs& newTerminalArgs = nullptr); diff --git a/src/cascadia/TerminalApp/TerminalTab.cpp b/src/cascadia/TerminalApp/TerminalTab.cpp index 5245cb985ef..f5e2ca206ec 100644 --- a/src/cascadia/TerminalApp/TerminalTab.cpp +++ b/src/cascadia/TerminalApp/TerminalTab.cpp @@ -490,40 +490,43 @@ namespace winrt::TerminalApp::implementation // - control: A TermControl to use in the new pane. // Return Value: // - - void TerminalTab::SplitPane(SplitState splitType, + void TerminalTab::SplitPane(SplitDirection splitType, const float splitSize, const Profile& profile, TermControl& control) { // Make sure to take the ID before calling Split() - Split() will clear out the active pane's ID const auto activePaneId = _activePane->Id(); - auto [first, second] = _activePane->Split(splitType, splitSize, profile, control); + // Depending on which direction will be split, the new pane can be + // either the first or second child, but this will always return the + // original pane first. + auto [original, newPane] = _activePane->Split(splitType, splitSize, profile, control); if (activePaneId) { - first->Id(activePaneId.value()); - second->Id(_nextPaneId); + original->Id(activePaneId.value()); + newPane->Id(_nextPaneId); ++_nextPaneId; } else { - first->Id(_nextPaneId); + original->Id(_nextPaneId); ++_nextPaneId; - second->Id(_nextPaneId); + newPane->Id(_nextPaneId); ++_nextPaneId; } - _activePane = first; + _activePane = original; // Add a event handlers to the new panes' GotFocus event. When the pane // gains focus, we'll mark it as the new active pane. - _AttachEventHandlersToControl(second->Id().value(), control); - _AttachEventHandlersToPane(first); - _AttachEventHandlersToPane(second); + _AttachEventHandlersToControl(newPane->Id().value(), control); + _AttachEventHandlersToPane(original); + _AttachEventHandlersToPane(newPane); // Immediately update our tracker of the focused pane now. If we're // splitting panes during startup (from a commandline), then it's // possible that the focus events won't propagate immediately. Updating // the focus here will give the same effect though. - _UpdateActivePane(second); + _UpdateActivePane(newPane); } // Method Description: @@ -609,7 +612,7 @@ namespace winrt::TerminalApp::implementation const auto previousId = _activePane->Id(); // Add the new pane as an automatic split on the active pane. - auto first = _activePane->AttachPane(pane, SplitState::Automatic); + auto first = _activePane->AttachPane(pane, SplitDirection::Automatic); // under current assumptions this condition should always be true. if (previousId) @@ -1515,14 +1518,14 @@ namespace winrt::TerminalApp::implementation // Arguments: // - availableSpace: The theoretical space that's available for this Tab's content // Return Value: - // - The SplitState that we should use for an `Automatic` split given + // - The SplitDirection that we should use for an `Automatic` split given // `availableSpace` - SplitState TerminalTab::PreCalculateAutoSplit(winrt::Windows::Foundation::Size availableSpace) const + SplitDirection TerminalTab::PreCalculateAutoSplit(winrt::Windows::Foundation::Size availableSpace) const { - return _rootPane->PreCalculateAutoSplit(_activePane, availableSpace).value_or(SplitState::Vertical); + return _rootPane->PreCalculateAutoSplit(_activePane, availableSpace).value_or(SplitDirection::Right); } - bool TerminalTab::PreCalculateCanSplit(SplitState splitType, + bool TerminalTab::PreCalculateCanSplit(SplitDirection splitType, const float splitSize, winrt::Windows::Foundation::Size availableSpace) const { diff --git a/src/cascadia/TerminalApp/TerminalTab.h b/src/cascadia/TerminalApp/TerminalTab.h index 5bc0e62ed9b..3dbeaa5aad2 100644 --- a/src/cascadia/TerminalApp/TerminalTab.h +++ b/src/cascadia/TerminalApp/TerminalTab.h @@ -38,7 +38,7 @@ namespace winrt::TerminalApp::implementation std::shared_ptr DetachPane(); void AttachPane(std::shared_ptr pane); - void SplitPane(winrt::Microsoft::Terminal::Settings::Model::SplitState splitType, + void SplitPane(winrt::Microsoft::Terminal::Settings::Model::SplitDirection splitType, const float splitSize, const winrt::Microsoft::Terminal::Settings::Model::Profile& profile, winrt::Microsoft::Terminal::Control::TermControl& control); @@ -51,8 +51,8 @@ namespace winrt::TerminalApp::implementation winrt::fire_and_forget ActivateBellIndicatorTimer(); float CalcSnappedDimension(const bool widthOrHeight, const float dimension) const; - winrt::Microsoft::Terminal::Settings::Model::SplitState PreCalculateAutoSplit(winrt::Windows::Foundation::Size rootSize) const; - bool PreCalculateCanSplit(winrt::Microsoft::Terminal::Settings::Model::SplitState splitType, + winrt::Microsoft::Terminal::Settings::Model::SplitDirection PreCalculateAutoSplit(winrt::Windows::Foundation::Size rootSize) const; + bool PreCalculateCanSplit(winrt::Microsoft::Terminal::Settings::Model::SplitDirection splitType, const float splitSize, winrt::Windows::Foundation::Size availableSpace) const; diff --git a/src/cascadia/TerminalSettingsModel/ActionArgs.cpp b/src/cascadia/TerminalSettingsModel/ActionArgs.cpp index 8d2e24d5822..dd30f354726 100644 --- a/src/cascadia/TerminalSettingsModel/ActionArgs.cpp +++ b/src/cascadia/TerminalSettingsModel/ActionArgs.cpp @@ -399,13 +399,19 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation // This text is intentionally _not_ localized, to attempt to mirror the // exact syntax that the property would have in JSON. - switch (SplitStyle()) + switch (SplitDirection()) { - case SplitState::Vertical: - ss << L"split: vertical, "; + case SplitDirection::Up: + ss << L"split: up, "; break; - case SplitState::Horizontal: - ss << L"split: horizontal, "; + case SplitDirection::Right: + ss << L"split: right, "; + break; + case SplitDirection::Down: + ss << L"split: down, "; + break; + case SplitDirection::Left: + ss << L"split: left, "; break; } diff --git a/src/cascadia/TerminalSettingsModel/ActionArgs.h b/src/cascadia/TerminalSettingsModel/ActionArgs.h index 731ced23776..937b4d834eb 100644 --- a/src/cascadia/TerminalSettingsModel/ActionArgs.h +++ b/src/cascadia/TerminalSettingsModel/ActionArgs.h @@ -674,21 +674,21 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation struct SplitPaneArgs : public SplitPaneArgsT { SplitPaneArgs() = default; - SplitPaneArgs(SplitType splitMode, SplitState style, double size, const Model::NewTerminalArgs& terminalArgs) : + SplitPaneArgs(SplitType splitMode, SplitDirection direction, double size, const Model::NewTerminalArgs& terminalArgs) : _SplitMode{ splitMode }, - _SplitStyle{ style }, + _SplitDirection{ direction }, _SplitSize{ size }, _TerminalArgs{ terminalArgs } {}; - SplitPaneArgs(SplitState style, double size, const Model::NewTerminalArgs& terminalArgs) : - _SplitStyle{ style }, + SplitPaneArgs(SplitDirection direction, double size, const Model::NewTerminalArgs& terminalArgs) : + _SplitDirection{ direction }, _SplitSize{ size }, _TerminalArgs{ terminalArgs } {}; - SplitPaneArgs(SplitState style, const Model::NewTerminalArgs& terminalArgs) : - _SplitStyle{ style }, + SplitPaneArgs(SplitDirection direction, const Model::NewTerminalArgs& terminalArgs) : + _SplitDirection{ direction }, _TerminalArgs{ terminalArgs } {}; SplitPaneArgs(SplitType splitMode) : _SplitMode{ splitMode } {}; - ACTION_ARG(SplitState, SplitStyle, SplitState::Automatic); + ACTION_ARG(Model::SplitDirection, SplitDirection, SplitDirection::Automatic); WINRT_PROPERTY(Model::NewTerminalArgs, TerminalArgs, nullptr); ACTION_ARG(SplitType, SplitMode, SplitType::Manual); ACTION_ARG(double, SplitSize, .5); @@ -705,7 +705,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation auto otherAsUs = other.try_as(); if (otherAsUs) { - return otherAsUs->_SplitStyle == _SplitStyle && + return otherAsUs->_SplitDirection == _SplitDirection && (otherAsUs->_TerminalArgs ? otherAsUs->_TerminalArgs.Equals(_TerminalArgs) : otherAsUs->_TerminalArgs == _TerminalArgs) && otherAsUs->_SplitSize == _SplitSize && @@ -718,7 +718,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation // LOAD BEARING: Not using make_self here _will_ break you in the future! auto args = winrt::make_self(); args->_TerminalArgs = NewTerminalArgs::FromJson(json); - JsonUtils::GetValueForKey(json, SplitKey, args->_SplitStyle); + JsonUtils::GetValueForKey(json, SplitKey, args->_SplitDirection); JsonUtils::GetValueForKey(json, SplitModeKey, args->_SplitMode); JsonUtils::GetValueForKey(json, SplitSizeKey, args->_SplitSize); if (args->SplitSize() >= 1 || args->SplitSize() <= 0) @@ -735,7 +735,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation } const auto args{ get_self(val) }; auto json{ NewTerminalArgs::ToJson(args->_TerminalArgs) }; - JsonUtils::SetValueForKey(json, SplitKey, args->_SplitStyle); + JsonUtils::SetValueForKey(json, SplitKey, args->_SplitDirection); JsonUtils::SetValueForKey(json, SplitModeKey, args->_SplitMode); JsonUtils::SetValueForKey(json, SplitSizeKey, args->_SplitSize); return json; @@ -743,7 +743,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation IActionArgs Copy() const { auto copy{ winrt::make_self() }; - copy->_SplitStyle = _SplitStyle; + copy->_SplitDirection = _SplitDirection; copy->_TerminalArgs = _TerminalArgs.Copy(); copy->_SplitMode = _SplitMode; copy->_SplitSize = _SplitSize; @@ -751,7 +751,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation } size_t Hash() const { - return ::Microsoft::Terminal::Settings::Model::HashUtils::HashProperty(SplitStyle(), TerminalArgs(), SplitMode(), SplitSize()); + return ::Microsoft::Terminal::Settings::Model::HashUtils::HashProperty(SplitDirection(), TerminalArgs(), SplitMode(), SplitSize()); } }; diff --git a/src/cascadia/TerminalSettingsModel/ActionArgs.idl b/src/cascadia/TerminalSettingsModel/ActionArgs.idl index 03b36815d02..21b1b4b0bcb 100644 --- a/src/cascadia/TerminalSettingsModel/ActionArgs.idl +++ b/src/cascadia/TerminalSettingsModel/ActionArgs.idl @@ -41,12 +41,13 @@ namespace Microsoft.Terminal.Settings.Model First }; - enum SplitState + enum SplitDirection { - Automatic = -1, - None = 0, - Vertical = 1, - Horizontal = 2 + Automatic = 0, + Up, + Right, + Down, + Left }; enum SplitType @@ -187,12 +188,12 @@ namespace Microsoft.Terminal.Settings.Model [default_interface] runtimeclass SplitPaneArgs : IActionArgs { - SplitPaneArgs(SplitType splitMode, SplitState split, Double size, NewTerminalArgs terminalArgs); - SplitPaneArgs(SplitState split, Double size, NewTerminalArgs terminalArgs); - SplitPaneArgs(SplitState split, NewTerminalArgs terminalArgs); + SplitPaneArgs(SplitType splitMode, SplitDirection split, Double size, NewTerminalArgs terminalArgs); + SplitPaneArgs(SplitDirection split, Double size, NewTerminalArgs terminalArgs); + SplitPaneArgs(SplitDirection split, NewTerminalArgs terminalArgs); SplitPaneArgs(SplitType splitMode); - SplitState SplitStyle { get; }; + SplitDirection SplitDirection { get; }; NewTerminalArgs TerminalArgs { get; }; SplitType SplitMode { get; }; Double SplitSize { get; }; diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h b/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h index 6a1a6ff61e1..83c791f95ed 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h +++ b/src/cascadia/TerminalSettingsModel/TerminalSettingsSerializationHelpers.h @@ -369,12 +369,16 @@ JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::ResizeDirection) }; // Possible SplitState values -JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::SplitState) +JSON_ENUM_MAPPER(::winrt::Microsoft::Terminal::Settings::Model::SplitDirection) { - JSON_MAPPINGS(3) = { - pair_type{ "vertical", ValueType::Vertical }, - pair_type{ "horizontal", ValueType::Horizontal }, + JSON_MAPPINGS(7) = { pair_type{ "auto", ValueType::Automatic }, + pair_type{ "up", ValueType::Up }, + pair_type{ "right", ValueType::Right }, + pair_type{ "down", ValueType::Down }, + pair_type{ "left", ValueType::Left }, + pair_type{ "vertical", ValueType::Right }, + pair_type{ "horizontal", ValueType::Down }, }; }; diff --git a/src/cascadia/TerminalSettingsModel/defaults.json b/src/cascadia/TerminalSettingsModel/defaults.json index 8f9b3b9d141..efed740ff19 100644 --- a/src/cascadia/TerminalSettingsModel/defaults.json +++ b/src/cascadia/TerminalSettingsModel/defaults.json @@ -337,8 +337,10 @@ // Pane Management { "command": "closePane", "keys": "ctrl+shift+w" }, - { "command": { "action": "splitPane", "split": "horizontal" }, "keys": "alt+shift+-" }, - { "command": { "action": "splitPane", "split": "vertical" }, "keys": "alt+shift+plus" }, + { "command": { "action": "splitPane", "split": "up" } }, + { "command": { "action": "splitPane", "split": "down" }, "keys": "alt+shift+-" }, + { "command": { "action": "splitPane", "split": "left" } }, + { "command": { "action": "splitPane", "split": "right" }, "keys": "alt+shift+plus" }, { "command": { "action": "resizePane", "direction": "down" }, "keys": "alt+shift+down" }, { "command": { "action": "resizePane", "direction": "left" }, "keys": "alt+shift+left" }, { "command": { "action": "resizePane", "direction": "right" }, "keys": "alt+shift+right" }, @@ -431,10 +433,16 @@ "command": { "action": "splitPane", "profile": "${profile.name}", "split": "auto" } }, { - "command": { "action": "splitPane", "profile": "${profile.name}", "split": "vertical" } + "command": { "action": "splitPane", "profile": "${profile.name}", "split": "up" } }, { - "command": { "action": "splitPane", "profile": "${profile.name}", "split": "horizontal" } + "command": { "action": "splitPane", "profile": "${profile.name}", "split": "down" } + }, + { + "command": { "action": "splitPane", "profile": "${profile.name}", "split": "left" } + }, + { + "command": { "action": "splitPane", "profile": "${profile.name}", "split": "right" } } ] }