Files
UnrealEngine/Engine/Source/Programs/AutomationTool/Turnkey/Providers/ConsoleIOProvider.cs
2025-05-18 13:04:45 +08:00

117 lines
2.8 KiB
C#

// Copyright Epic Games, Inc. All Rights Reserved.
using System;
using System.Collections.Generic;
using System.Text;
using EpicGames.Core;
namespace Turnkey
{
class ConsoleIOProvider : IOProvider
{
public override void Log(string Message, bool bAppendNewLine)
{
if (bAppendNewLine)
{
Console.WriteLine(Message);
}
else
{
Console.Write(Message);
}
}
public override void PauseForUser(string Message, bool bAppendNewLine)
{
Log(Message, bAppendNewLine);
Log("Press Enter to continue", bAppendNewLine);
Console.ReadLine();
}
public override string ReadInput(string Prompt, string Default, bool bAppendNewLine)
{
TurnkeyUtils.Log("");
Log(Prompt, bAppendNewLine);
if (!string.IsNullOrEmpty(Default))
{
Log("[Default: " + Default + "]", true);
}
string Response = Console.ReadLine();
if (string.IsNullOrWhiteSpace(Response))
{
Response = Default;
}
return Response;
}
public override int ReadInputInt(string Prompt, List<string> Options, bool bIsCancellable, int DefaultValue, bool bAppendNewLine)
{
TurnkeyUtils.Log("");
StringBuilder FullPromptBuilder = new StringBuilder();
// start with given prompt
FullPromptBuilder.Append(Prompt);
if (bAppendNewLine)
{
FullPromptBuilder.AppendLine("");
}
// now add options
int Index = 0;
if (bIsCancellable)
{
FullPromptBuilder.AppendLine(" {0}{1}{2} Cancel", DefaultValue == Index ? "[" : " ", Index, DefaultValue == Index++ ? "]" : ")");
}
// now add the options given
foreach (string Option in Options)
{
// don't make an index for commented lines
if (Option.StartsWith(";"))
{
FullPromptBuilder.AppendLine(" {0}", Option.Substring(1));
}
else
{
FullPromptBuilder.AppendLine(" {0}{1}{2} {3}", DefaultValue == Index ? "[" : " ", Index, DefaultValue == Index++ ? "]" : ")", Option);
}
}
string FullPrompt = FullPromptBuilder.ToString();
// go until good choice
while (true)
{
string ChoiceString = ReadInput(FullPrompt, DefaultValue >= 0 ? DefaultValue.ToString() : null, false);
int Choice;
if (Int32.TryParse(ChoiceString, out Choice) == false || Choice < 0 || Choice >= Options.Count + (bIsCancellable ? 1 : 0))
{
TurnkeyUtils.Log("Invalid choice");
}
else
{
return Choice;
}
}
}
public override bool GetUserConfirmation(string Message, bool bDefaultValue, bool bAppendNewLine)
{
string Prompt = $"{Message} [{(bDefaultValue ? 'Y' : 'y')}/{(bDefaultValue ? 'n' : 'N')}]";
string Result = ReadInput(Prompt, bDefaultValue ? "Y" : "N", bAppendNewLine);
if (string.IsNullOrEmpty(Result))
{
return bDefaultValue;
}
else
{
return string.Equals( Result.Trim(), "Y", StringComparison.OrdinalIgnoreCase );
}
}
}
}