actually populate the replay browser; fix listbox ContentHeight not being reset.

This commit is contained in:
Chris Forbes
2010-11-10 10:58:08 +13:00
parent 2c13ebc6e7
commit 17e3ef131c
2 changed files with 37 additions and 0 deletions

View File

@@ -8,6 +8,8 @@
*/ */
#endregion #endregion
using System.IO;
using System.Drawing;
namespace OpenRA.Widgets.Delegates namespace OpenRA.Widgets.Delegates
{ {
public class ReplayBrowserDelegate : IWidgetDelegate public class ReplayBrowserDelegate : IWidgetDelegate
@@ -22,6 +24,40 @@ namespace OpenRA.Widgets.Delegates
Widget.CloseWindow(); Widget.CloseWindow();
return true; return true;
}; };
/* find some replays? */
var rl = widget.GetWidget<ListBoxWidget>("REPLAY_LIST");
var replayDir = Path.Combine(Game.SupportDir, "Replays");
var template = widget.GetWidget<LabelWidget>("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;
} }
} }
} }

View File

@@ -158,6 +158,7 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
r.GetWidget("JOINSERVER_PROGRESS_TITLE").Visible = false; r.GetWidget("JOINSERVER_PROGRESS_TITLE").Visible = false;
sl.ContentHeight = 0;
int offset = ServerTemplate.Bounds.Y; int offset = ServerTemplate.Bounds.Y;
int i = 0; int i = 0;
foreach (var loop in games.Where(g => g.State == 1)) /* only "waiting for players" */ foreach (var loop in games.Where(g => g.State == 1)) /* only "waiting for players" */