actually populate the replay browser; fix listbox ContentHeight not being reset.
This commit is contained in:
@@ -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<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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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" */
|
||||
|
||||
Reference in New Issue
Block a user