Beispiel #1
0
        private void DrawConfigurableItemName(Rect region, [NotNull] TableSettingsItem <PawnKindItem> item)
        {
            if (item.EditingName)
            {
                var fieldRect = new Rect(region.x, region.y, region.width - region.height, region.height);

                if (UiHelper.TextField(fieldRect, item.Data.Name, out string result))
                {
                    item.Data.Name = result.ToToolkit();
                    item.Data.PawnData.CustomName = true;
                }

                if (item.Data.PawnData.CustomName && UiHelper.FieldButton(fieldRect, Textures.Reset, _resetPawnNameTooltip))
                {
                    item.Data.PawnData.CustomName = false;
                }
            }
            else
            {
                UiHelper.Label(region, item.Data.Name);
            }

            GUI.color = new Color(1f, 1f, 1f, 0.7f);

            if (UiHelper.FieldButton(region, item.EditingName ? Widgets.CheckboxOffTex : Textures.Edit, item.EditingName ? _closePawnNameTooltip : _editPawnNameTooltip))
            {
                item.EditingName = !item.EditingName;
            }

            GUI.color = Color.white;
        }
Beispiel #2
0
 /// <inheritdoc cref="TableWorker{T}.EnsureExists"/>
 public override void EnsureExists(TableSettingsItem <EventItem> data)
 {
     if (!InternalData.Any(i => i.Data.DefName.Equals(data.Data.DefName)))
     {
         InternalData.Add(data);
     }
 }
Beispiel #3
0
        /// <inheritdoc cref="TraitTableWorker.DrawTrait"/>
        protected override void DrawTrait(Rect canvas, TableSettingsItem <TraitItem> trait)
        {
            var nameMouseOverRect = new Rect(NameHeaderRect.x, canvas.y, NameHeaderRect.width, RowLineHeight);
            var nameRect          = new Rect(NameHeaderTextRect.x, canvas.y, NameHeaderTextRect.width, RowLineHeight);
            var addPriceRect      = new Rect(AddPriceHeaderTextRect.x, canvas.y, AddPriceHeaderTextRect.width, RowLineHeight);
            var removePriceRect   = new Rect(RemovePriceHeaderTextRect.x, canvas.y, RemovePriceHeaderTextRect.width, RowLineHeight);

            UiHelper.Label(nameRect, trait.Data.Name);

            if (!trait.EditingName)
            {
                Widgets.DrawHighlightIfMouseover(nameMouseOverRect);

                var builder = new StringBuilder();
                builder.AppendLine(trait.Data.Description);
                builder.AppendLine();

                foreach (string i in trait.Data.Stats)
                {
                    builder.AppendLine($"- {i}");
                }

                TooltipHandler.TipRegion(nameMouseOverRect, builder.ToString());
            }

            if (trait.Data.CanAdd)
            {
                UiHelper.Label(addPriceRect, trait.Data.CostToAdd.ToString("N0"));
            }

            if (trait.Data.CanRemove)
            {
                UiHelper.Label(removePriceRect, trait.Data.CostToRemove.ToString("N0"));
            }
        }
Beispiel #4
0
        private void DrawRightExpandedSettingsColumn(Rect canvas, [NotNull] TableSettingsItem <ThingItem> item)
        {
            var  row   = 0;
            bool proxy = item.Data.ItemData !.HasQuantityLimit;

            if (UiHelper.LabeledPaintableCheckbox(
                    new Rect(0f, 0f, canvas.width - (item.Data.ItemData !.HasQuantityLimit ? Mathf.FloorToInt(canvas.width * 0.2f) + 2f : 0f), RowLineHeight),
                    _quantityLimitText,
                    ref proxy
                    ))
            {
                item.Data.ItemData.HasQuantityLimit = proxy;
            }

            if (item.Data.ItemData.HasQuantityLimit)
            {
                var quantityBuffer = item.Data.ItemData.QuantityLimit.ToString();
                var quantityField  = new Rect(Mathf.FloorToInt(canvas.width * 0.8f), 0, Mathf.FloorToInt(canvas.width * 0.2f), RowLineHeight);

                int proxy2 = item.Data.ItemData.QuantityLimit;

                if (SettingsHelper.DrawNumberField(quantityField, ref proxy2, ref quantityBuffer, out int newValue, 1f))
                {
                    item.Data.ItemData.QuantityLimit = newValue;
                }

                if (UiHelper.FieldButton(quantityField, Textures.Stack, _stackLimitTooltip))
                {
                    item.Data.ItemData.QuantityLimit = item.Data.Thing?.stackLimit ?? item.Data.ItemData.QuantityLimit;
                }
            }

            if (item.Data.Thing is { IsStuff : true })
Beispiel #5
0
        private void DrawConfigurableEventName(Rect canvas, [NotNull] TableSettingsItem <EventItem> ev)
        {
            if (ev.EditingName)
            {
                var fieldRect = new Rect(canvas.x, canvas.y, canvas.width - canvas.height, canvas.height);

                if (UiHelper.TextField(fieldRect, ev.Data.Name, out string result))
                {
                    ev.Data.Name = result !.ToToolkit();
                }

                if (!ev.Data.Name.NullOrEmpty() && UiHelper.FieldButton(fieldRect, Textures.Reset, _resetEventNameTooltip))
                {
                    ev.Data.Incident.abbreviation = ev.Data.GetDefaultAbbreviation();
                }
            }
            else
            {
                UiHelper.Label(canvas, ev.Data.Name);
            }

            GUI.color = new Color(1f, 1f, 1f, 0.7f);

            if (UiHelper.FieldButton(canvas, ev.EditingName ? Widgets.CheckboxOffTex : Textures.Edit, ev.EditingName ? _closeEventNameTooltip : _editEventNameTooltip))
            {
                ev.EditingName = !ev.EditingName;
            }

            GUI.color = Color.white;
        }
Beispiel #6
0
        /// <inheritdoc cref="PawnTableWorker.DrawKind"/>
        protected override void DrawKind(Rect region, TableSettingsItem <PawnKindItem> item)
        {
            var nameRect  = new Rect(NameHeaderTextRect.x, region.y, NameHeaderTextRect.width, RowLineHeight);
            var priceRect = new Rect(PriceHeaderTextRect.x, region.y, PriceHeaderTextRect.width, RowLineHeight);

            UiHelper.Label(nameRect, item.Data.Name);

            if (item.Data.Enabled)
            {
                UiHelper.Label(priceRect, item.Data.Cost.ToString("N0"));
            }
        }
Beispiel #7
0
        private static int GetLineSpan([NotNull] TableSettingsItem <EventItem> ev)
        {
            if (!ev.SettingsVisible)
            {
                return(1);
            }

            if (!ev.Data.HasSettingsEmbed && ev.Data.HasSettings)
            {
                return(Mathf.RoundToInt(BaseExpandedLineSpan + 1));
            }

            return(ev.Data.HasSettingsEmbed ? Mathf.RoundToInt(ev.Data.SettingsEmbed !.LineSpan + BaseExpandedLineSpan + 1) : Mathf.RoundToInt(BaseExpandedLineSpan + 1));
        }
Beispiel #8
0
        /// <inheritdoc cref="EventTableWorker.DrawEvent"/>
        protected override void DrawEvent(Rect canvas, TableSettingsItem <EventItem> ev)
        {
            var nameRect  = new Rect(NameHeaderTextRect.x, canvas.y, NameHeaderTextRect.width, RowLineHeight);
            var priceRect = new Rect(PriceHeaderTextRect.x, canvas.y, PriceHeaderTextRect.width, RowLineHeight);
            var karmaRect = new Rect(KarmaHeaderTextRect.x, canvas.y, KarmaHeaderTextRect.width, RowLineHeight);

            UiHelper.Label(nameRect, ev.Data.Name);

            if (ev.Data.Enabled)
            {
                UiHelper.Label(priceRect, ev.Data.Cost.ToString("N0"));
            }

            UiHelper.Label(karmaRect, ev.Data.KarmaType.ToString());
        }
Beispiel #9
0
        public bool IsVisible([NotNull] TableSettingsItem <TraitItem> item)
        {
            TraitDef traitDef = item.Data.TraitDef;

            if (traitDef == null)
            {
                return(false);
            }

            if (traitDef.Equals(TorannMagicDefOf.DeathKnight))
            {
                return(_state);
            }

            return(TM_Data.AllClassTraits.Any(i => i.Equals(traitDef)) && _state);
        }
Beispiel #10
0
        private void DrawExpandedSettings(Rect canvas, [NotNull] TableSettingsItem <ThingItem> item)
        {
            float columnWidth     = Mathf.FloorToInt(canvas.width / 2f) - 26f;
            var   leftColumnRect  = new Rect(canvas.x, canvas.y, columnWidth, canvas.height);
            var   rightColumnRect = new Rect(canvas.x + leftColumnRect.width + 52f, canvas.y, columnWidth, canvas.height);

            Widgets.DrawLineVertical(Mathf.FloorToInt(canvas.width / 2f), 0f, canvas.height - 5f);

            GUI.BeginGroup(leftColumnRect);
            DrawLeftExpandedSettingsColumn(leftColumnRect.AtZero(), item);
            GUI.EndGroup();

            GUI.BeginGroup(rightColumnRect);
            DrawRightExpandedSettingsColumn(rightColumnRect.AtZero(), item);
            GUI.EndGroup();
        }
Beispiel #11
0
        /// <inheritdoc cref="ItemTableWorker.DrawItem"/>
        protected override void DrawItem(Rect region, TableSettingsItem <ThingItem> item)
        {
            bool hasIcon = Widgets.CanDrawIconFor(item.Data.Thing);

            var infoRect     = new Rect(hasIcon ? NameHeaderRect.x : NameHeaderTextRect.x, region.y, hasIcon ? NameHeaderRect.width : NameHeaderTextRect.width, region.height);
            var priceRect    = new Rect(PriceHeaderRect.x, region.y, PriceHeaderRect.width, RowLineHeight);
            var categoryRect = new Rect(CategoryHeaderRect.x, region.y, CategoryHeaderRect.width, RowLineHeight);

            if (item.Data.Thing != null && hasIcon)
            {
                UiHelper.DrawThing(infoRect, item.Data.Thing, item.Data.Name, !item.EditingName);
            }

            if (item.Data.Cost > 0)
            {
                UiHelper.Label(priceRect, item.Data.Cost.ToString("N0"));
            }

            UiHelper.Label(categoryRect, item.Data.Category);
        }
Beispiel #12
0
        private void DrawConfigurableTraitName(Rect canvas, [NotNull] TableSettingsItem <TraitItem> trait)
        {
            if (trait.EditingName)
            {
                var fieldRect = new Rect(canvas.x, canvas.y, canvas.width - canvas.height, canvas.height);

                if (UiHelper.TextField(fieldRect, trait.Data.Name, out string result))
                {
                    trait.Data.Name = result.ToToolkit();
                    trait.Data.TraitData !.CustomName = true;
                }

                if (trait.Data.TraitData !.CustomName && UiHelper.FieldButton(fieldRect, Textures.Reset, _resetTraitNameTooltip))
                {
                    trait.Data.TraitData.CustomName = false;
                    trait.Data.Name = trait.Data.GetDefaultName();
                }
            }
            else
            {
                UiHelper.Label(canvas, trait.Data.Name);
            }

            GUI.color = new Color(1f, 1f, 1f, 0.7f);

            if (UiHelper.FieldButton(
                    canvas,
                    trait.EditingName ? Widgets.CheckboxOffTex : Textures.Edit,
                    trait.EditingName ? _closeTraitNameTooltip : _editTraitNameTooltip
                    ))
            {
                trait.EditingName = !trait.EditingName;
            }

            GUI.color = Color.white;
        }
Beispiel #13
0
        /// <summary>
        ///     Draws a <see cref="PawnKindItem"/> in a given row of the
        ///     <see cref="PawnTableWorker"/> area.
        /// </summary>
        /// <param name="region">
        ///     The region to draw the
        ///     <see cref="PawnKindItem"/> in
        /// </param>
        /// <param name="item">
        ///     The <see cref="PawnKindItem"/> to draw in the
        ///     region
        /// </param>
        protected virtual void DrawKind(Rect region, [NotNull] TableSettingsItem <PawnKindItem> item)
        {
            Rect checkboxRect      = LayoutHelper.IconRect(_stateHeaderRect.x + 2f, region.y + 2f, _stateHeaderRect.width - 4f, RowLineHeight - 4f);
            var  nameMouseOverRect = new Rect(NameHeaderRect.x, region.y, NameHeaderRect.width, RowLineHeight);
            var  nameRect          = new Rect(NameHeaderTextRect.x, region.y, NameHeaderTextRect.width, RowLineHeight);
            var  priceRect         = new Rect(PriceHeaderTextRect.x, region.y, PriceHeaderTextRect.width, RowLineHeight);

            Rect settingRect = LayoutHelper.IconRect(
                _expandedHeaderRect.x + 2f,
                region.y + Mathf.FloorToInt(Mathf.Abs(_expandedHeaderRect.width - RowLineHeight) / 2f) + 2f,
                _expandedHeaderRect.width - 4f,
                _expandedHeaderRect.width - 4f
                );

            bool proxy = item.Data.Enabled;

            if (UiHelper.DrawCheckbox(checkboxRect, ref proxy))
            {
                item.Data.Enabled = proxy;
            }

            DrawConfigurableItemName(nameRect, item);

            if (!item.EditingName)
            {
                Widgets.DrawHighlightIfMouseover(nameMouseOverRect);

                var builder = new StringBuilder();

                if (!item.Data.Description.NullOrEmpty())
                {
                    builder.AppendLine(item.Data.Description);
                    builder.AppendLine();
                }

                foreach (string i in item.Data.PawnData.Stats)
                {
                    builder.AppendLine(i);
                }

                TooltipHandler.TipRegion(nameMouseOverRect, builder.ToString());
            }

            if (item.Data.Enabled)
            {
                int cost = item.Data.Cost;
                SettingsHelper.DrawPriceField(priceRect, ref cost);
                item.Data.Cost = cost;
            }

            if (Widgets.ButtonImage(settingRect, Textures.Gear))
            {
                item.SettingsVisible = !item.SettingsVisible;
            }

            if (!item.SettingsVisible)
            {
                return;
            }

            var expandedRect = new Rect(
                NameHeaderRect.x + 10f,
                region.y + RowLineHeight + 10f,
                region.width - checkboxRect.width - settingRect.width - 20f,
                region.height - RowLineHeight - 20f
                );

            GUI.BeginGroup(expandedRect);
            DrawExpandedSettings(expandedRect.AtZero(), item);
            GUI.EndGroup();
        }
Beispiel #14
0
 private void DrawRightExpandedSettingsColumn(Rect region, TableSettingsItem <PawnKindItem> item)
 {
     // unused
 }
Beispiel #15
0
        private void DrawLeftExpandedSettingsColumn(Rect canvas, [NotNull] TableSettingsItem <ThingItem> item)
        {
            var row = 0;

            (Rect karmaLabel, Rect karmaField) = new Rect(0f, row, canvas.width, RowLineHeight).Split();

            SettingsHelper.DrawKarmaField(
                karmaLabel,
                _karmaTypeText,
                karmaField,
                _defaultKarmaTypeText,
                item.Data.Data !.KarmaType,
                k => item.Data.Data.KarmaType = k,
                item.Data.Data.KarmaType != null,
                _resetItemKarmaTooltip
                );

            if (item.Data.Thing?.IsApparel == true)
            {
                row += 1;
                (Rect wearLabel, Rect wearField) = new Rect(0f, row * RowLineHeight, canvas.width, RowLineHeight).Split();

                SettingsHelper.DrawKarmaField(
                    wearLabel,
                    _wearKarmaTypeText,
                    wearField,
                    _defaultKarmaTypeText,
                    item.Data.ItemData !.KarmaTypeForWearing,
                    k => item.Data.ItemData.KarmaTypeForWearing = k,
                    item.Data.ItemData.KarmaTypeForWearing != null,
                    _resetItemKarmaTooltip
                    );
            }

            if (item.Data.Thing?.IsWeapon == true)
            {
                row += 1;
                (Rect equipLabel, Rect equipField) = new Rect(0f, row * RowLineHeight, canvas.width, RowLineHeight).Split();

                SettingsHelper.DrawKarmaField(
                    equipLabel,
                    _equipKarmaTypeText,
                    equipField,
                    _defaultKarmaTypeText,
                    item.Data.ItemData !.KarmaTypeForEquipping,
                    k => item.Data.ItemData.KarmaTypeForEquipping = k,
                    item.Data.ItemData.KarmaTypeForEquipping != null,
                    _resetItemKarmaTooltip
                    );
            }

            if (item.Data.IsUsable)
            {
                row += 1;
                (Rect usableLabel, Rect usableField) = new Rect(0f, row * RowLineHeight, canvas.width, RowLineHeight).Split();

                SettingsHelper.DrawKarmaField(
                    usableLabel,
                    _useKarmaTypeText,
                    usableField,
                    _defaultKarmaTypeText,
                    item.Data.ItemData !.KarmaTypeForUsing,
                    k => item.Data.ItemData.KarmaTypeForUsing = k,
                    item.Data.ItemData.KarmaTypeForUsing != null,
                    _resetItemKarmaTooltip
                    );
            }

            row += 1;
            var weightBuffer = item.Data.ItemData !.Weight.ToString("N1");

            (Rect weightLabel, Rect weightField) = new Rect(0f, row * RowLineHeight, canvas.width, RowLineHeight).Split();
            UiHelper.Label(weightLabel, _purchaseWeightText);

            float proxy = item.Data.ItemData.Weight;

            if (SettingsHelper.DrawNumberField(weightField, ref proxy, ref weightBuffer, out float value))
            {
                item.Data.ItemData.Weight = value;
            }
        }
Beispiel #16
0
        /// <summary>
        ///     Draws the given <see cref="ThingItem"/> at the given region.
        /// </summary>
        /// <param name="region">
        ///     The region to draw the <see cref="ThingItem"/>
        ///     in
        /// </param>
        /// <param name="item">The <see cref="ThingItem"/> to draw</param>
        protected virtual void DrawItem(Rect region, [NotNull] TableSettingsItem <ThingItem> item)
        {
            bool hasIcon = Widgets.CanDrawIconFor(item.Data.Thing);

            Rect checkboxRect = LayoutHelper.IconRect(_stateHeaderRect.x + 2f, region.y + 2f, _stateHeaderRect.width - 4f, RowLineHeight - 4f);
            var  iconRect     = new Rect(NameHeaderRect.x + 4f, region.y + 4f, RowLineHeight - 8f, RowLineHeight - 8f);

            var nameRect = new Rect(
                hasIcon ? NameHeaderRect.x + RowLineHeight : NameHeaderTextRect.x,
                region.y,
                hasIcon ? NameHeaderRect.width - RowLineHeight - 4f : NameHeaderTextRect.width,
                RowLineHeight
                );

            var thingRect = new Rect(
                hasIcon ? NameHeaderRect.x : NameHeaderTextRect.x,
                region.y,
                hasIcon ? NameHeaderRect.width - nameRect.height - 4f : NameHeaderTextRect.width,
                nameRect.height
                );

            var priceRect    = new Rect(PriceHeaderTextRect.x, region.y, PriceHeaderTextRect.width, RowLineHeight);
            var categoryRect = new Rect(CategoryHeaderTextRect.x, region.y, CategoryHeaderTextRect.width, RowLineHeight);

            Rect settingRect = LayoutHelper.IconRect(
                _expandedHeaderRect.x + 2f,
                region.y + Mathf.FloorToInt(Mathf.Abs(_expandedHeaderRect.width - RowLineHeight) / 2f) + 2f,
                _expandedHeaderRect.width - 4f,
                _expandedHeaderRect.width - 4f
                );

            bool proxy = item.Data.Enabled;

            if (UiHelper.DrawCheckbox(checkboxRect, ref proxy))
            {
                item.Data.Enabled = proxy;
                item.Data.Update();
            }

            if (hasIcon)
            {
                Widgets.ThingIcon(iconRect, item.Data.Thing);
            }

            DrawConfigurableItemName(nameRect, item);

            if (!item.EditingName && item.Data.Thing != null && Current.Game != null)
            {
                Widgets.DrawHighlightIfMouseover(thingRect);

                if (Widgets.ButtonInvisible(thingRect))
                {
                    Find.WindowStack.Add(new Dialog_InfoCard(item.Data.Thing));
                }
            }

            if (item.Data.Cost > 0)
            {
                SettingsHelper.DrawPriceField(priceRect, ref item.Data.Item !.price);
            }

            UiHelper.Label(categoryRect, item.Data.Category);

            if (Widgets.ButtonImage(settingRect, Textures.Gear))
            {
                item.SettingsVisible = !item.SettingsVisible;
            }

            if (!item.SettingsVisible)
            {
                return;
            }

            var expandedRect = new Rect(
                NameHeaderRect.x + 10f,
                region.y + RowLineHeight + 10f,
                region.width - checkboxRect.width - settingRect.width - 20f,
                region.height - RowLineHeight - 20f
                );

            GUI.BeginGroup(expandedRect);
            DrawExpandedSettings(expandedRect.AtZero(), item);
            GUI.EndGroup();
        }
Beispiel #17
0
        protected virtual void DrawTrait(Rect canvas, [NotNull] TableSettingsItem <TraitItem> trait)
        {
            var  nameMouseOverRect = new Rect(NameHeaderRect.x, canvas.y, NameHeaderRect.width, RowLineHeight);
            var  nameRect          = new Rect(NameHeaderTextRect.x, canvas.y, NameHeaderTextRect.width, RowLineHeight);
            Rect addCheckRect      = LayoutHelper.IconRect(_addStateHeaderRect.x + 2f, canvas.y + 2f, _addStateHeaderRect.width - 4f, RowLineHeight - 4f);
            var  addPriceRect      = new Rect(AddPriceHeaderTextRect.x, canvas.y, AddPriceHeaderTextRect.width, RowLineHeight);
            Rect removeCheckRect   = LayoutHelper.IconRect(_removeStateHeaderRect.x + 2f, canvas.y + 2f, _removeStateHeaderRect.width - 4f, RowLineHeight - 4f);
            var  removePriceRect   = new Rect(RemovePriceHeaderTextRect.x, canvas.y, RemovePriceHeaderTextRect.width, RowLineHeight);

            Rect settingRect = LayoutHelper.IconRect(
                _expandedHeaderRect.x + 2f,
                canvas.y + Mathf.FloorToInt(Mathf.Abs(_expandedHeaderRect.width - RowLineHeight) / 2f) + 2f,
                _expandedHeaderRect.width - 4f,
                _expandedHeaderRect.width - 4f
                );

            DrawConfigurableTraitName(nameRect, trait);

            if (!trait.EditingName)
            {
                Widgets.DrawHighlightIfMouseover(nameMouseOverRect);

                var builder = new StringBuilder();
                builder.AppendLine(trait.Data.Description);
                builder.AppendLine();

                foreach (string i in trait.Data.Stats)
                {
                    builder.AppendLine(i);
                }

                TooltipHandler.TipRegion(nameMouseOverRect, builder.ToString());
            }

            Widgets.Checkbox(addCheckRect.x, addCheckRect.y, ref trait.Data.CanAdd, addCheckRect.height, paintable: true);

            if (trait.Data.CanAdd)
            {
                SettingsHelper.DrawPriceField(addPriceRect, ref trait.Data.CostToAdd);
            }

            Widgets.Checkbox(removeCheckRect.x, removeCheckRect.y, ref trait.Data.CanRemove, removeCheckRect.height, paintable: true);

            if (trait.Data.CanRemove)
            {
                SettingsHelper.DrawPriceField(removePriceRect, ref trait.Data.CostToRemove);
            }

            if (Widgets.ButtonImage(settingRect, Textures.Gear))
            {
                trait.SettingsVisible = !trait.SettingsVisible;
            }

            if (!trait.SettingsVisible)
            {
                return;
            }

            var expandedRect = new Rect(
                NameHeaderRect.x + 10f,
                canvas.y + RowLineHeight + 10f,
                canvas.width - settingRect.width * 2f - 20f,
                canvas.height - RowLineHeight - 20f
                );

            GUI.BeginGroup(expandedRect);
            DrawExpandedSettings(expandedRect.AtZero(), trait);
            GUI.EndGroup();
        }
Beispiel #18
0
        /// <summary>
        ///     Draws the given <see cref="EventItem"/> in the pre-defined row
        ///     space.
        /// </summary>
        /// <param name="canvas">
        ///     The region to draw the <see cref="EventItem"/>
        ///     in
        /// </param>
        /// <param name="ev">The <see cref="EventItem"/> to draw</param>
        protected virtual void DrawEvent(Rect canvas, [NotNull] TableSettingsItem <EventItem> ev)
        {
            Rect checkboxRect      = LayoutHelper.IconRect(_stateHeaderRect.x + 2f, canvas.y + 2f, _stateHeaderRect.width - 4f, RowLineHeight - 4f);
            var  nameMouseOverRect = new Rect(NameHeaderRect.x, canvas.y, NameHeaderRect.width, RowLineHeight);
            var  nameRect          = new Rect(NameHeaderTextRect.x, canvas.y, NameHeaderTextRect.width, RowLineHeight);
            var  priceRect         = new Rect(PriceHeaderTextRect.x, canvas.y, PriceHeaderTextRect.width, RowLineHeight);
            var  karmaRect         = new Rect(KarmaHeaderTextRect.x, canvas.y, KarmaHeaderTextRect.width, RowLineHeight);

            Rect settingRect = LayoutHelper.IconRect(
                _expandedHeaderRect.x + 2f,
                canvas.y + Mathf.FloorToInt(Mathf.Abs(_expandedHeaderRect.width - RowLineHeight) / 2f) + 2f,
                _expandedHeaderRect.width - 4f,
                _expandedHeaderRect.width - 4f
                );

            bool proxy = ev.Data.Enabled;

            if (UiHelper.DrawCheckbox(checkboxRect, ref proxy))
            {
                if (!ev.Data.Enabled && proxy)
                {
                    Store_IncidentEditor.LoadBackup(ev.Data.Incident);
                }

                ev.Data.Enabled = proxy;

                if (!Store_IncidentEditor.CopyExists(ev.Data.Incident))
                {
                    Store_IncidentEditor.SaveCopy(ev.Data.Incident);
                }
            }

            DrawConfigurableEventName(nameRect, ev);

            if (!ev.EditingName)
            {
                Widgets.DrawHighlightIfMouseover(nameMouseOverRect);

                if (!ev.Data.Incident.description.NullOrEmpty())
                {
                    TooltipHandler.TipRegion(nameMouseOverRect, ev.Data.Incident.description);
                }
            }

            if (ev.Data.Enabled && ev.Data.CostEditable)
            {
                int cost = ev.Data.Cost;
                SettingsHelper.DrawPriceField(priceRect, ref cost);
                ev.Data.Cost = cost;
            }

            UiHelper.Label(karmaRect, ev.Data.KarmaType.ToString());

            if (Widgets.ButtonImage(settingRect, Textures.Gear))
            {
                ev.SettingsVisible = !ev.SettingsVisible;
            }

            if (!ev.SettingsVisible)
            {
                return;
            }

            var expandedRect = new Rect(
                NameHeaderRect.x + 10f,
                canvas.y + RowLineHeight + 10f,
                canvas.width - checkboxRect.width - settingRect.width - 20f,
                canvas.height - RowLineHeight - 20f
                );

            GUI.BeginGroup(expandedRect);
            DrawExpandedSettings(expandedRect.AtZero(), ev);
            GUI.EndGroup();
        }