From 17e3ef131c904bc346453b6bbda0cc7cac832300 Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Wed, 10 Nov 2010 10:58:08 +1300 Subject: [PATCH] actually populate the replay browser; fix listbox ContentHeight not being reset. --- .../Delegates/ReplayBrowserDelegate.cs | 36 +++++++++++++++++++ .../Delegates/ServerBrowserDelegate.cs | 1 + 2 files changed, 37 insertions(+) diff --git a/OpenRA.Game/Widgets/Delegates/ReplayBrowserDelegate.cs b/OpenRA.Game/Widgets/Delegates/ReplayBrowserDelegate.cs index dd656b8570..b2bae16d4a 100644 --- a/OpenRA.Game/Widgets/Delegates/ReplayBrowserDelegate.cs +++ b/OpenRA.Game/Widgets/Delegates/ReplayBrowserDelegate.cs @@ -8,6 +8,8 @@ */ #endregion +using System.IO; +using System.Drawing; namespace OpenRA.Widgets.Delegates { public class ReplayBrowserDelegate : IWidgetDelegate @@ -22,6 +24,40 @@ namespace OpenRA.Widgets.Delegates Widget.CloseWindow(); return true; }; + + /* find some replays? */ + var rl = widget.GetWidget("REPLAY_LIST"); + var replayDir = Path.Combine(Game.SupportDir, "Replays"); + + var template = widget.GetWidget("REPLAY_TEMPLATE"); + currentReplay = null; + + rl.Children.Clear(); + rl.ContentHeight = 0; + var offset = template.Bounds.Y; + foreach (var replayFile in Directory.GetFiles(replayDir, "*.rep")) + AddReplay(rl, replayFile, template, ref offset); + } + + string currentReplay = null; + + void AddReplay(ListBoxWidget list, string filename, LabelWidget template, ref int offset) + { + var entry = template.Clone() as LabelWidget; + entry.Id = "REPLAY_"; + entry.GetText = () => " {0}".F(Path.GetFileName(filename)); + entry.GetBackground = () => (currentReplay == filename) ? "dialog2" : null; + entry.OnMouseDown = mi => { currentReplay = filename; return true; }; + entry.Parent = list; + entry.Bounds = new Rectangle(entry.Bounds.X, offset, template.Bounds.Width, template.Bounds.Height); + entry.IsVisible = () => true; + list.AddChild(entry); + + if (offset == template.Bounds.Y) + currentReplay = filename; + + offset += template.Bounds.Height; + list.ContentHeight += template.Bounds.Height; } } } diff --git a/OpenRA.Mods.RA/Widgets/Delegates/ServerBrowserDelegate.cs b/OpenRA.Mods.RA/Widgets/Delegates/ServerBrowserDelegate.cs index 5690a8d0c5..b31a6d2e90 100644 --- a/OpenRA.Mods.RA/Widgets/Delegates/ServerBrowserDelegate.cs +++ b/OpenRA.Mods.RA/Widgets/Delegates/ServerBrowserDelegate.cs @@ -158,6 +158,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates r.GetWidget("JOINSERVER_PROGRESS_TITLE").Visible = false; + sl.ContentHeight = 0; int offset = ServerTemplate.Bounds.Y; int i = 0; foreach (var loop in games.Where(g => g.State == 1)) /* only "waiting for players" */