public static ScrollItemWidget Setup(ScrollItemWidget template, Func<bool> isSelected, Action onClick) { var w = template.Clone() as ScrollItemWidget; w.IsVisible = () => true; w.IsSelected = isSelected; w.OnClick = onClick; return w; }
void LoadGames(ScrollItemWidget gameTemplate, ScrollItemWidget newTemplate, World world) { gameList.RemoveChildren(); if (isSavePanel) { var item = ScrollItemWidget.Setup(newTemplate, () => selectedSave == null, () => Select(null), () => { }); gameList.AddChild(item); } var savePaths = Directory.GetFiles(baseSavePath, "*.orasav", SearchOption.AllDirectories) .OrderByDescending(p => File.GetLastWriteTime(p)) .ToList(); foreach (var savePath in savePaths) { games.Add(savePath); // Create the item manually so the click handlers can refer to itself // This simplifies the rename handling (only needs to update ItemKey) var item = gameTemplate.Clone() as ScrollItemWidget; item.ItemKey = savePath; item.IsVisible = () => true; item.IsSelected = () => selectedSave == item.ItemKey; item.OnClick = () => Select(item.ItemKey); if (isSavePanel) { item.OnDoubleClick = () => Save(world); } else { item.OnDoubleClick = Load; } var title = Path.GetFileNameWithoutExtension(savePath); var label = item.Get <LabelWithTooltipWidget>("TITLE"); WidgetUtils.TruncateLabelToTooltip(label, title); var date = File.GetLastWriteTime(savePath).ToString("yyyy-MM-dd HH:mm:ss"); item.Get <LabelWidget>("DATE").GetText = () => date; gameList.AddChild(item); } }