fixes #2799: double click on server to join
This commit is contained in:
@@ -32,6 +32,7 @@ namespace OpenRA.Widgets
|
|||||||
|
|
||||||
// Equivalent to OnMouseUp, but without an input arg
|
// Equivalent to OnMouseUp, but without an input arg
|
||||||
public Action OnClick = () => {};
|
public Action OnClick = () => {};
|
||||||
|
public Action OnDoubleClick = () => {};
|
||||||
public Action<KeyInput> OnKeyPress = _ => {};
|
public Action<KeyInput> OnKeyPress = _ => {};
|
||||||
|
|
||||||
public ButtonWidget()
|
public ButtonWidget()
|
||||||
@@ -93,8 +94,16 @@ namespace OpenRA.Widgets
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
var disabled = IsDisabled();
|
var disabled = IsDisabled();
|
||||||
|
if (Focused && mi.Event == MouseInputEvent.Up && mi.MultiTapCount == 2)
|
||||||
|
{
|
||||||
|
if (!disabled)
|
||||||
|
{
|
||||||
|
OnDoubleClick();
|
||||||
|
return LoseFocus(mi);
|
||||||
|
}
|
||||||
|
}
|
||||||
// Only fire the onMouseUp event if we successfully lost focus, and were pressed
|
// Only fire the onMouseUp event if we successfully lost focus, and were pressed
|
||||||
if (Focused && mi.Event == MouseInputEvent.Up)
|
else if (Focused && mi.Event == MouseInputEvent.Up)
|
||||||
{
|
{
|
||||||
if (Depressed && !disabled)
|
if (Depressed && !disabled)
|
||||||
OnMouseUp(mi);
|
OnMouseUp(mi);
|
||||||
|
|||||||
@@ -52,5 +52,12 @@ namespace OpenRA.Widgets
|
|||||||
w.OnClick = onClick;
|
w.OnClick = onClick;
|
||||||
return w;
|
return w;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ScrollItemWidget Setup(ScrollItemWidget template, Func<bool> isSelected, Action onClick, Action onDoubleClick)
|
||||||
|
{
|
||||||
|
var w = Setup(template, isSelected, onClick);
|
||||||
|
w.OnDoubleClick = onDoubleClick;
|
||||||
|
return w;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -22,6 +22,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
{
|
{
|
||||||
GameServer currentServer;
|
GameServer currentServer;
|
||||||
ScrollItemWidget serverTemplate;
|
ScrollItemWidget serverTemplate;
|
||||||
|
Action OpenLobby;
|
||||||
|
Action OnExit;
|
||||||
|
|
||||||
enum SearchStatus { Fetching, Failed, NoGames, Hidden }
|
enum SearchStatus { Fetching, Failed, NoGames, Hidden }
|
||||||
SearchStatus searchStatus = SearchStatus.Fetching;
|
SearchStatus searchStatus = SearchStatus.Fetching;
|
||||||
@@ -41,6 +43,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
public ServerBrowserLogic(Widget widget, Action openLobby, Action onExit)
|
public ServerBrowserLogic(Widget widget, Action openLobby, Action onExit)
|
||||||
{
|
{
|
||||||
var panel = widget;
|
var panel = widget;
|
||||||
|
OpenLobby = openLobby;
|
||||||
|
OnExit = onExit;
|
||||||
var sl = panel.Get<ScrollPanelWidget>("SERVER_LIST");
|
var sl = panel.Get<ScrollPanelWidget>("SERVER_LIST");
|
||||||
|
|
||||||
// Menu buttons
|
// Menu buttons
|
||||||
@@ -56,17 +60,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
|
|
||||||
var join = panel.Get<ButtonWidget>("JOIN_BUTTON");
|
var join = panel.Get<ButtonWidget>("JOIN_BUTTON");
|
||||||
join.IsDisabled = () => currentServer == null || !currentServer.CanJoin();
|
join.IsDisabled = () => currentServer == null || !currentServer.CanJoin();
|
||||||
join.OnClick = () =>
|
join.OnClick = () => Join(currentServer);
|
||||||
{
|
|
||||||
if (currentServer == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
var host = currentServer.Address.Split(':')[0];
|
|
||||||
var port = int.Parse(currentServer.Address.Split(':')[1]);
|
|
||||||
|
|
||||||
Ui.CloseWindow();
|
|
||||||
ConnectionLogic.Connect(host, port, openLobby, onExit);
|
|
||||||
};
|
|
||||||
|
|
||||||
panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };
|
panel.Get<ButtonWidget>("BACK_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); };
|
||||||
|
|
||||||
@@ -82,6 +76,18 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
ServerList.Query(games => RefreshServerList(panel, games));
|
ServerList.Query(games => RefreshServerList(panel, games));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Join(GameServer server)
|
||||||
|
{
|
||||||
|
if (server == null || !server.CanJoin())
|
||||||
|
return;
|
||||||
|
|
||||||
|
var host = server.Address.Split(':')[0];
|
||||||
|
var port = int.Parse(server.Address.Split(':')[1]);
|
||||||
|
|
||||||
|
Ui.CloseWindow();
|
||||||
|
ConnectionLogic.Connect(host, port, OpenLobby, OnExit);
|
||||||
|
}
|
||||||
|
|
||||||
string GetPlayersLabel(GameServer game)
|
string GetPlayersLabel(GameServer game)
|
||||||
{
|
{
|
||||||
if (game == null || game.Players == 0)
|
if (game == null || game.Players == 0)
|
||||||
@@ -149,7 +155,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
|
|
||||||
var canJoin = game.CanJoin();
|
var canJoin = game.CanJoin();
|
||||||
|
|
||||||
var item = ScrollItemWidget.Setup(serverTemplate, () => currentServer == game, () => currentServer = game);
|
var item = ScrollItemWidget.Setup(serverTemplate, () => currentServer == game, () => currentServer = game, () => Join(game));
|
||||||
|
|
||||||
var preview = item.Get<MapPreviewWidget>("MAP_PREVIEW");
|
var preview = item.Get<MapPreviewWidget>("MAP_PREVIEW");
|
||||||
preview.Map = () => GetMapPreview(game);
|
preview.Map = () => GetMapPreview(game);
|
||||||
|
|||||||
Reference in New Issue
Block a user