Initial commit
This commit is contained in:
103
Source/Game/Cabrito/Console/ConsoleInputTextBox.cs
Normal file
103
Source/Game/Cabrito/Console/ConsoleInputTextBox.cs
Normal file
@@ -0,0 +1,103 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FlaxEditor;
|
||||
using FlaxEngine;
|
||||
using FlaxEngine.GUI;
|
||||
|
||||
namespace Cabrito
|
||||
{
|
||||
public class ConsoleInputTextBox : ConsoleTextBoxBase
|
||||
{
|
||||
public override string TextPrefix { get => Console.LinePrefix; }
|
||||
|
||||
private ConsoleContentTextBox contentBox;
|
||||
|
||||
public ConsoleInputTextBox() : base()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public ConsoleInputTextBox(ConsoleContentTextBox contentBox, float x, float y, float width, float height) : base(x, y, width, height)
|
||||
{
|
||||
this.contentBox = contentBox;
|
||||
IsMultiline = true; // Not really but behaves better than single-line box
|
||||
}
|
||||
|
||||
public override bool OnCharInput(char c)
|
||||
{
|
||||
// Ignore any characters generated by the key which opens the console
|
||||
var consoleKeyMappings = Input.ActionMappings.Where(x => x.Name == "Console" && x.Key != KeyboardKeys.None);
|
||||
foreach (var mapping in consoleKeyMappings)
|
||||
{
|
||||
if (Input.GetKey(mapping.Key))
|
||||
return true;
|
||||
}
|
||||
|
||||
return base.OnCharInput(c);
|
||||
}
|
||||
|
||||
public override bool OnKeyDown(KeyboardKeys key)
|
||||
{
|
||||
var consoleKeyMappings = Input.ActionMappings.Where(x => x.Name == "Console" && x.Key != KeyboardKeys.None);
|
||||
bool shiftDown = Root.GetKey(KeyboardKeys.Shift);
|
||||
bool ctrlDown = Root.GetKey(KeyboardKeys.Control);
|
||||
|
||||
if (consoleKeyMappings.Any(x => x.Key == key))
|
||||
{
|
||||
Clear();
|
||||
return true;
|
||||
}
|
||||
else if (key == KeyboardKeys.Escape)
|
||||
{
|
||||
Console.Close();
|
||||
Clear();
|
||||
return true;
|
||||
}
|
||||
else if (key == KeyboardKeys.Return)
|
||||
{
|
||||
Console.Execute(Text);
|
||||
Clear();
|
||||
return true;
|
||||
}
|
||||
else if (key == KeyboardKeys.ArrowUp || key == KeyboardKeys.ArrowDown)
|
||||
{
|
||||
// TODO: implement input history
|
||||
return true;
|
||||
}
|
||||
else if (key == KeyboardKeys.PageUp || key == KeyboardKeys.PageDown)
|
||||
{
|
||||
return contentBox.OnKeyDown(key);
|
||||
}
|
||||
|
||||
return base.OnKeyDown(key);
|
||||
}
|
||||
|
||||
public override void OnLostFocus()
|
||||
{
|
||||
// Avoids reseting the caret location
|
||||
var oldEditing = _isEditing;
|
||||
_isEditing = false;
|
||||
base.OnLostFocus();
|
||||
_isEditing = oldEditing;
|
||||
}
|
||||
|
||||
public override bool OnMouseDown(Vector2 location, MouseButton button)
|
||||
{
|
||||
base.OnMouseDown(location, button);
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool OnMouseWheel(Vector2 location, float delta)
|
||||
{
|
||||
return contentBox.OnMouseWheel(location, delta);
|
||||
}
|
||||
|
||||
public override void Draw()
|
||||
{
|
||||
Profiler.BeginEvent("ConsoleInputTextBoxDraw");
|
||||
base.Draw();
|
||||
Profiler.EndEvent();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user