Files
inf3/src/Gui/ChatInputBox.cs

82 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WorldOfPeacecraft
{
public class ChatInputBox : TextBox
{
private LinkedList<string> InputHistory = new LinkedList<string>();
private LinkedListNode<string> CurrentHistoryEntry;
public delegate void ChatMessageSubmittedEventHandler (string message);
public event ChatMessageSubmittedEventHandler ChatMessageSubmitted;
public ChatInputBox ()
{
this.KeyDown += KeyDownEvent;
this.KeyPress += KeyPressEvent;
}
private void KeyPressEvent (object o, KeyPressEventArgs args)
{
// Supress the "ding"-sound
if (args.KeyChar == (char)Keys.Return) {
args.Handled = true;
}
}
private void KeyDownEvent (object o, KeyEventArgs args)
{
if (args.KeyCode == Keys.Return) {
if (this.Text != "") {
string message = this.Text;
this.Text = "";
if (CurrentHistoryEntry == null) {
InputHistory.AddLast (message);
} else {
CurrentHistoryEntry.Value = message;
CurrentHistoryEntry = null;
}
if (ChatMessageSubmitted != null) {
this.ChatMessageSubmitted (message);
}
}
args.Handled = true;
} else if (args.KeyCode == Keys.Up) {
if (InputHistory.Count > 0) {
if (CurrentHistoryEntry == null) {
CurrentHistoryEntry = InputHistory.Last;
if (this.Text != "") {
InputHistory.AddLast (this.Text);
}
this.Text = CurrentHistoryEntry.Value;
args.Handled = true;
} else {
if (CurrentHistoryEntry != InputHistory.First) {
CurrentHistoryEntry.Value = this.Text;
CurrentHistoryEntry = CurrentHistoryEntry.Previous;
this.Text = CurrentHistoryEntry.Value;
args.Handled = true;
}
}
}
} else if (args.KeyCode == Keys.Down) {
if (CurrentHistoryEntry != null) {
CurrentHistoryEntry.Value = this.Text;
CurrentHistoryEntry = CurrentHistoryEntry.Next;
if (CurrentHistoryEntry == null) {
this.Text = "";
} else {
this.Text = CurrentHistoryEntry.Value;
}
}
} else if (args.KeyCode == Keys.Escape) {
((Gui)this.Parent.Parent).FocusMap();
args.Handled = true;
}
}
}
}