/// <summary> /// Submit Label Selected Event /// </summary> /// <param name="sender">The Sender</param> /// <param name="args">The Event Arguments</param> protected virtual void OnLabelSelected(object sender, LabelEventArgs args) { try { LabelSelected?.Invoke(sender, args); } catch (Exception caught) { logger.Error("Unexpected Error Submitting Label Selected Event", caught); throw; } }
public override void DoWindowContents(Rect inRect) { Text.Font = GameFont.Small; Rect outRect = new Rect(inRect); outRect.yMin += 20f; outRect.yMax -= 40f; outRect.width -= 16f; Rect viewRect = new Rect(0f, 0f, outRect.width - 16f, items.All().Count() * 35f + 100f); Widgets.BeginScrollView(outRect, ref this.scrollPosition, viewRect, true); try { float num = 0f; bool flag = false; int countSelected = 0; IEnumerable <T> selected = items.All().Where(x => items.IsSelected(x)); foreach (T item in selected) { flag = true; Rect rect = new Rect(0f, num, viewRect.width * 0.6f, 32f); Widgets.Label(rect, items.Label(item)); rect.x = rect.xMax; rect.width = viewRect.width * 0.4f; if (Widgets.ButtonText(rect, LabelSelected.Translate(), true, false, true)) { items.Unselect(item); RimWorld.SoundDefOf.Click.PlayOneShotOnCamera(null); return; } num += 35f; countSelected++; } if (flag) { num += 15f; } bool active = SelectedLimit == -1 || countSelected < SelectedLimit; foreach (T item in items.All().Except(selected)) { Rect rect2 = new Rect(0f, num, viewRect.width * 0.6f, 32f); Widgets.Label(rect2, items.Label(item)); rect2.x = rect2.xMax; rect2.width = viewRect.width * 0.4f; string label = LabelNotSelected.Translate(); if (active && Widgets.ButtonText(rect2, label, true, false, true)) { items.Select(item); RimWorld.SoundDefOf.Click.PlayOneShotOnCamera(null); break; } num += 35f; } } finally { Widgets.EndScrollView(); } }