private void SpawnItem(RequestItem requested)
        {
            if (requested.isPawn)
            {
                for (var i = 0; i < requested.amount; ++i)
                {
                    var pawn = PawnGenerator.GeneratePawn(requested.item.pawnDef, Faction.OfPlayer);
                    pawn.gender = requested.item.gender;
                    var spawnSpot = CellFinder.RandomSpawnCellForPawnNear(traderPawn.Position, traderPawn.Map);
                    GenSpawn.Spawn(pawn, spawnSpot, traderPawn.Map);
                }
            }
            else if (requested.item.type.HasQuality())
            {
                for (var i = 0; i < requested.amount; ++i)
                {
                    var thing = ThingMaker.MakeThing(requested.item.def, requested.item.stuffDef);
                    thing.SetRandomQualityWeighted();

                    if (requested.item.type == ThingType.Buildings)
                    {
                        var minifiedThing = thing.MakeMinified();
                        if (minifiedThing.Stuff != requested.item.stuffDef)
                        {
                            minifiedThing.SetStuffDirect(requested.item.stuffDef);
                        }

                        if (!GenPlace.TryPlaceThing(minifiedThing, traderPawn.Position, traderPawn.Map,
                                                    ThingPlaceMode.Near))
                        {
                            Log.Error("Could not spawn " + thing.LabelCap + " near trader!");
                        }
                    }
                    else
                    {
                        if (!GenPlace.TryPlaceThing(thing, traderPawn.Position, traderPawn.Map, ThingPlaceMode.Near))
                        {
                            Log.Error("Could not spawn " + thing.LabelCap + " near trader!");
                        }
                    }
                }
            }
            else
            {
                var thing = ThingMaker.MakeThing(requested.item.def, requested.item.stuffDef);
                thing.stackCount = requested.amount;
                if (!GenPlace.TryPlaceThing(thing, traderPawn.Position, traderPawn.Map, ThingPlaceMode.Near))
                {
                    Log.Error("Could not spawn " + thing.LabelCap + " near trader!");
                }
            }
        }
        private void DrawRequestedItem(Rect rowRect, RequestItem requested, int index)
        {
            float removeItemButtonSize = 24;

            Text.Font = GameFont.Small;
            var price = requested.pricePerItem * requested.amount;

            if (index % 2 == 1)
            {
                Widgets.DrawLightHighlight(rowRect);
            }

            GUI.BeginGroup(rowRect);


            // Draw item icon
            float x        = 0;
            float iconSize = 27;

            Text.Anchor = TextAnchor.MiddleLeft;
            var iconArea = new Rect(x, 0, iconSize, iconSize);

            Widgets.ThingIcon(iconArea, requested.item.tradeable.FirstThingTrader);

            x += iconSize + (iconSize / 4);

            var itemNameArea = new Rect(x, 0, rowRect.width - offsetFromRight - x, rowRect.height);
            var itemTitle    = requested.item.thing.LabelCapNoCount;

            if (requested.isPawn)
            {
                itemTitle += " (" + requested.item.GenderString() + ")";
            }
            else if (requested.item.type.HasQuality() && itemTitle.IndexOf("(normal", StringComparison.Ordinal) != -1)
            {
                itemTitle = itemTitle.Substring(0, itemTitle.IndexOf("(normal)", StringComparison.Ordinal));
            }

            itemTitle += " x" + requested.amount;
            Widgets.Label(itemNameArea, itemTitle);

            x = rowRect.width - offsetFromRight;
            Widgets.DrawLineVertical(x, 0, rowRect.height);

            x += 10;
            var itemPriceArea = new Rect(x, 0, offsetFromRight - 10 - removeItemButtonSize, rowRect.height);

            Widgets.Label(itemPriceArea, price.ToStringMoney("F2"));

            var removeItemArea = new Rect(rowRect.width - removeItemButtonSize, 0, removeItemButtonSize,
                                          removeItemButtonSize);
            var isBeingTraded = !requested.removed;

            Widgets.Checkbox(removeItemArea.position, ref isBeingTraded, removeItemButtonSize);
            requested.removed = !isBeingTraded;

            if (requested.removed)
            {
                Widgets.DrawLineHorizontal(itemNameArea.x, rowRect.height / 2, Text.CalcSize(itemTitle).x);
                Widgets.DrawLineHorizontal(itemPriceArea.x, rowRect.height / 2,
                                           Text.CalcSize(price.ToStringMoney("F2")).x);
            }

            GUI.color = Color.white;
            GUI.EndGroup();
        }