Example #1
0
 /// <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();
            }
        }