Merge pull request #8680 from deniz1a/textfields

Some text field improvements.
This commit is contained in:
Oliver Brakmann
2015-07-24 23:00:12 +02:00
5 changed files with 87 additions and 33 deletions

View File

@@ -108,9 +108,29 @@ namespace OpenRA.Mods.Common.Widgets.Logic
panel.Get<ColorBlockWidget>("COLORBLOCK").GetColor = () => Game.Settings.Player.Color.RGB;
}
Action closeAssetBrowser = () =>
{
if (isVideoLoaded)
player.Stop();
Ui.CloseWindow();
onExit();
};
filenameInput = panel.Get<TextFieldWidget>("FILENAME_INPUT");
filenameInput.TakeKeyboardFocus();
filenameInput.OnTextEdited = () => ApplyFilter(filenameInput.Text);
filenameInput.OnEscKey = filenameInput.YieldKeyboardFocus;
filenameInput.OnEscKey = () =>
{
if (filenameInput.Text.Length == 0)
closeAssetBrowser();
else
{
filenameInput.Text = "";
filenameInput.OnTextEdited();
}
return true;
};
var frameContainer = panel.GetOrNull("FRAME_SELECTOR");
if (frameContainer != null)
@@ -218,13 +238,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var closeButton = panel.GetOrNull<ButtonWidget>("CLOSE_BUTTON");
if (closeButton != null)
closeButton.OnClick = () =>
{
if (isVideoLoaded)
player.Stop();
Ui.CloseWindow();
onExit();
};
closeButton.OnClick = closeAssetBrowser;
}
void SelectNextFrame()

View File

@@ -523,9 +523,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
chatLabel = lobby.Get<LabelWidget>("LABEL_CHATTYPE");
var chatTextField = lobby.Get<TextFieldWidget>("CHAT_TEXTFIELD");
chatTextField.TakeKeyboardFocus();
chatTextField.OnEnterKey = () =>
{
if (chatTextField.Text.Length == 0)
@@ -538,6 +536,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
chatTextField.Text = "";
return true;
};
chatTextField.OnTabKey = () =>
{
var previousText = chatTextField.Text;
@@ -550,6 +549,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
return true;
};
chatTextField.OnEscKey = () => { chatTextField.Text = ""; return true; };
chatPanel = lobby.Get<ScrollPanelWidget>("CHAT_DISPLAY");
chatTemplate = chatPanel.Get("CHAT_TEMPLATE");
chatPanel.RemoveChildren();

View File

@@ -257,23 +257,35 @@ namespace OpenRA.Mods.Common.Widgets.Logic
name.IsDisabled = () => orderManager.LocalClient.IsReady;
name.Text = c.Name;
var escPressed = false;
name.OnLoseFocus = () =>
{
if (escPressed)
{
escPressed = false;
return;
}
name.Text = name.Text.Trim();
if (name.Text.Length == 0)
name.Text = c.Name;
if (name.Text == c.Name)
return;
name.Text = Settings.SanitizedPlayerName(name.Text);
orderManager.IssueOrder(Order.Command("name " + name.Text));
Game.Settings.Player.Name = name.Text;
Game.Settings.Save();
else if (name.Text != c.Name)
{
name.Text = Settings.SanitizedPlayerName(name.Text);
orderManager.IssueOrder(Order.Command("name " + name.Text));
Game.Settings.Player.Name = name.Text;
Game.Settings.Save();
}
};
name.OnEnterKey = () => { name.YieldKeyboardFocus(); return true; };
name.OnEscKey = () =>
{
name.Text = c.Name;
escPressed = true;
name.YieldKeyboardFocus();
return true;
};
}
public static void SetupNameWidget(Widget parent, Session.Slot s, Session.Client c)

View File

@@ -191,14 +191,30 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var frameLimitTextfield = panel.Get<TextFieldWidget>("FRAME_LIMIT_TEXTFIELD");
frameLimitTextfield.Text = ds.MaxFramerate.ToString();
var escPressed = false;
frameLimitTextfield.OnLoseFocus = () =>
{
if (escPressed)
{
escPressed = false;
return;
}
int fps;
Exts.TryParseIntegerInvariant(frameLimitTextfield.Text, out fps);
ds.MaxFramerate = fps.Clamp(1, 1000);
frameLimitTextfield.Text = ds.MaxFramerate.ToString();
};
frameLimitTextfield.OnEnterKey = () => { frameLimitTextfield.YieldKeyboardFocus(); return true; };
frameLimitTextfield.OnEscKey = () =>
{
frameLimitTextfield.Text = ds.MaxFramerate.ToString();
escPressed = true;
frameLimitTextfield.YieldKeyboardFocus();
return true;
};
frameLimitTextfield.IsDisabled = () => !ds.CapFramerate;
// Player profile
@@ -207,11 +223,31 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var nameTextfield = panel.Get<TextFieldWidget>("PLAYERNAME");
nameTextfield.IsDisabled = () => worldRenderer.World.Type != WorldType.Shellmap;
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
nameTextfield.OnEnterKey = () => { nameTextfield.YieldKeyboardFocus(); return true; };
nameTextfield.OnLoseFocus = () =>
{
nameTextfield.Text = Settings.SanitizedPlayerName(nameTextfield.Text);
ps.Name = nameTextfield.Text;
if (escPressed)
{
escPressed = false;
return;
}
nameTextfield.Text = nameTextfield.Text.Trim();
if (nameTextfield.Text.Length == 0)
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
else
{
nameTextfield.Text = Settings.SanitizedPlayerName(nameTextfield.Text);
ps.Name = nameTextfield.Text;
}
};
nameTextfield.OnEnterKey = () => { nameTextfield.YieldKeyboardFocus(); return true; };
nameTextfield.OnEscKey = () =>
{
nameTextfield.Text = Settings.SanitizedPlayerName(ps.Name);
escPressed = true;
nameTextfield.YieldKeyboardFocus();
return true;
};
var colorPreview = panel.Get<ColorPreviewManagerWidget>("COLOR_MANAGER");
@@ -477,16 +513,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
BindHotkeyPref(kv, ks, developerTemplate, hotkeyList);
}
return () =>
{
// Remove focus from the selected hotkey widget
// This is a bit of a hack, but works
if (Ui.KeyboardFocusWidget != null && panel.GetOrNull(Ui.KeyboardFocusWidget.Id) != null)
{
Ui.KeyboardFocusWidget.YieldKeyboardFocus();
Ui.KeyboardFocusWidget = null;
}
};
return () => { };
}
Action ResetInputPanel(Widget panel)

View File

@@ -222,7 +222,7 @@ namespace OpenRA.Mods.Common.Widgets
bool wasDisabled;
public override void Tick()
{
// Remove the blicking cursor when disabled
// Remove the blinking cursor when disabled
var isDisabled = IsDisabled();
if (isDisabled != wasDisabled)
{