New checkboxes (independent from old checkboxes) that support hover and disable.

This commit is contained in:
Paul Chote
2011-05-07 12:07:13 +12:00
parent c15d2f5cfe
commit 5647917fda
3 changed files with 48 additions and 24 deletions

View File

@@ -139,35 +139,27 @@ namespace OpenRA.Mods.Cnc.Widgets
var disconnectButton = lobby.GetWidget<CncMenuButtonWidget>("DISCONNECT_BUTTON"); var disconnectButton = lobby.GetWidget<CncMenuButtonWidget>("DISCONNECT_BUTTON");
disconnectButton.OnClick = onExit; disconnectButton.OnClick = onExit;
var lockTeamsCheckbox = lobby.GetWidget<CheckboxWidget>("LOCKTEAMS_CHECKBOX"); var gameStarting = false;
var lockTeamsCheckbox = lobby.GetWidget<CncCheckboxWidget>("LOCKTEAMS_CHECKBOX");
lockTeamsCheckbox.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.LockTeams; lockTeamsCheckbox.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.LockTeams;
lockTeamsCheckbox.OnChange += _ => lockTeamsCheckbox.IsDisabled = () => !Game.IsHost || gameStarting;
{ lockTeamsCheckbox.OnClick = () => orderManager.IssueOrder(Order.Command(
if (Game.IsHost)
orderManager.IssueOrder(Order.Command(
"lockteams {0}".F(!orderManager.LobbyInfo.GlobalSettings.LockTeams))); "lockteams {0}".F(!orderManager.LobbyInfo.GlobalSettings.LockTeams)));
};
var allowCheats = lobby.GetWidget<CncCheckboxWidget>("ALLOWCHEATS_CHECKBOX");
var allowCheats = lobby.GetWidget<CheckboxWidget>("ALLOWCHEATS_CHECKBOX");
allowCheats.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllowCheats; allowCheats.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllowCheats;
allowCheats.OnChange += _ => allowCheats.IsDisabled = () => !Game.IsHost || gameStarting;
{ allowCheats.OnClick = () => orderManager.IssueOrder(Order.Command(
if (Game.IsHost)
orderManager.IssueOrder(Order.Command(
"allowcheats {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllowCheats))); "allowcheats {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllowCheats)));
};
var startGameButton = lobby.GetWidget<CncMenuButtonWidget>("START_GAME_BUTTON"); var startGameButton = lobby.GetWidget<CncMenuButtonWidget>("START_GAME_BUTTON");
startGameButton.IsVisible = () => Game.IsHost;
startGameButton.IsDisabled = () => gameStarting;
startGameButton.OnClick = () => startGameButton.OnClick = () =>
{ {
mapButton.Visible = false; gameStarting = true;
disconnectButton.Visible = false;
lockTeamsCheckbox.Visible = false;
orderManager.IssueOrder(Order.Command("startgame")); orderManager.IssueOrder(Order.Command("startgame"));
}; };
// Todo: Only show if the map requirements are met for player slots
startGameButton.IsVisible = () => Game.IsHost;
bool teamChat = false; bool teamChat = false;
var chatLabel = lobby.GetWidget<LabelWidget>("LABEL_CHATTYPE"); var chatLabel = lobby.GetWidget<LabelWidget>("LABEL_CHATTYPE");

View File

@@ -23,13 +23,13 @@ namespace OpenRA.Mods.Cnc.Widgets
public CncMenuButtonWidget() public CncMenuButtonWidget()
: base() : base()
{ {
OnMouseUp = mi => { OnClick(); return true; }; OnMouseUp = mi => { if (!IsDisabled()) OnClick(); return true; };
} }
protected CncMenuButtonWidget(CncMenuButtonWidget widget) protected CncMenuButtonWidget(CncMenuButtonWidget widget)
: base(widget) : base(widget)
{ {
OnMouseUp = mi => { OnClick(); return true; }; OnMouseUp = mi => { if (!IsDisabled()) OnClick(); return true; };
} }
public override int2 ChildOrigin { get { return RenderOrigin; } } public override int2 ChildOrigin { get { return RenderOrigin; } }
@@ -50,5 +50,37 @@ namespace OpenRA.Mods.Cnc.Widgets
font.Measure(text).Y / 2), IsDisabled() ? Color.Gray : Color.White); font.Measure(text).Y / 2), IsDisabled() ? Color.Gray : Color.White);
} }
} }
public class CncCheckboxWidget : CncMenuButtonWidget
{
public CncCheckboxWidget()
: base() { }
protected CncCheckboxWidget(CncCheckboxWidget widget)
: base(widget) { }
public Func<bool> IsChecked = () => false;
public int baseLine = 1;
public override void DrawInner()
{
var state = IsDisabled() ? "button-disabled" :
Depressed ? "button-pressed" :
RenderBounds.Contains(Viewport.LastMousePos) ? "button-hover" :
"button";
var font = Game.Renderer.BoldFont;
var rect = RenderBounds;
WidgetUtils.DrawPanel(state, new Rectangle(rect.Location, new Size(Bounds.Height, Bounds.Height)));
var textSize = font.Measure(Text);
font.DrawText(Text,
new float2(rect.Left + rect.Height * 1.5f, RenderOrigin.Y - baseLine + (Bounds.Height - textSize.Y)/2), Color.White);
if (IsChecked())
WidgetUtils.DrawRGBA(
ChromeProvider.GetImage("checkbox", "checked"),
new float2(rect.Left + 2, rect.Top + 2));
}
}
} }

View File

@@ -31,14 +31,14 @@ Container@SERVER_LOBBY:
Y:1 Y:1
Width:192 Width:192
Height:192 Height:192
Checkbox@LOCKTEAMS_CHECKBOX: CncCheckbox@LOCKTEAMS_CHECKBOX:
Id:LOCKTEAMS_CHECKBOX Id:LOCKTEAMS_CHECKBOX
X:PARENT_RIGHT-209 X:PARENT_RIGHT-209
Y:230 Y:230
Width:80 Width:80
Height:20 Height:20
Text: Lock Teams Text: Lock Teams
Checkbox@ALLOWCHEATS_CHECKBOX: CncCheckbox@ALLOWCHEATS_CHECKBOX:
Id:ALLOWCHEATS_CHECKBOX Id:ALLOWCHEATS_CHECKBOX
X:PARENT_RIGHT-209 X:PARENT_RIGHT-209
Y:255 Y:255