private void FillMainRect(Rect mainRect) { Text.Font = GameFont.Small; float height = FirstCommodityY + cachedTradeables.Count * RowInterval; Rect viewRect = new Rect(0f, 0f, mainRect.width - 16f, height); Widgets.BeginScrollView(mainRect, ref scrollPosition, viewRect, true); float num = FirstCommodityY; float num2 = scrollPosition.y - RowInterval; float num3 = scrollPosition.y + mainRect.height; int num4 = 0; for (int i = 0; i < cachedTradeables.Count; i++) { if (num > num2 && num < num3) { Rect rect = new Rect(0f, num, viewRect.width, RowInterval); int countToTransfer = cachedTradeables[i].CountToTransfer; TradeUI.DrawTradeableRow(rect, cachedTradeables[i], num4); if (countToTransfer != cachedTradeables[i].CountToTransfer) { CountToTransferChanged(); } } num += RowInterval; num4++; } Widgets.EndScrollView(); }
public override void DoWindowContents(Rect inRect) { TradeSession.deal.UpdateCurrencyCount(); GUI.BeginGroup(inRect); inRect = inRect.AtZero(); TransferableUIUtility.DoTransferableSorters(sorter1, sorter2, delegate(TransferableSorterDef x) { sorter1 = x; CacheTradeables(); }, delegate(TransferableSorterDef x) { sorter2 = x; CacheTradeables(); }); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperLeft; Widgets.Label(new Rect(0f, SpaceBetweenTraderNameAndTraderKind, inRect.width / 2f, inRect.height / 2f), "NegotiatorTradeDialogInfo".Translate(TradeSession.playerNegotiator.Name.ToStringFull, TradeSession.playerNegotiator.GetStatValue(StatDefOf.TradePriceImprovement, true).ToStringPercent())); float num = inRect.width - 590f; Rect position = new Rect(num, 0f, inRect.width - num, TopAreaHeight); GUI.BeginGroup(position); Text.Font = GameFont.Medium; Rect rect = new Rect(0f, 0f, position.width / 2f, position.height); Text.Anchor = TextAnchor.UpperLeft; Widgets.Label(rect, Faction.OfPlayer.Name.Truncate(rect.width, null)); Rect rect2 = new Rect(position.width / 2f, 0f, position.width / 2f, position.height); Text.Anchor = TextAnchor.UpperRight; string text = TradeSession.trader.TraderName; if (Text.CalcSize(text).x > rect2.width) { Text.Font = GameFont.Small; text = text.Truncate(rect2.width, null); } Widgets.Label(rect2, text); Text.Font = GameFont.Small; Text.Anchor = TextAnchor.UpperRight; Widgets.Label(new Rect(position.width / 2f, SpaceBetweenTraderNameAndTraderKind, position.width / 2f, position.height / 2f), TradeSession.trader.TraderKind.LabelCap); Text.Anchor = TextAnchor.UpperLeft; if (!TradeSession.giftMode) { GUI.color = new Color(1f, 1f, 1f, 0.6f); Text.Font = GameFont.Tiny; Rect rect3 = new Rect(position.width / 2f - 100f - RowInterval, 0f, 200f, position.height); Text.Anchor = TextAnchor.LowerCenter; Widgets.Label(rect3, "PositiveBuysNegativeSells".Translate()); Text.Anchor = TextAnchor.UpperLeft; GUI.color = Color.white; } GUI.EndGroup(); float num2 = 0f; if (cachedCurrencyTradeable != null) { float num3 = inRect.width - 16f; TradeUI.DrawTradeableRow(new Rect(0f, TopAreaHeight, num3, RowInterval), cachedCurrencyTradeable, 1); GUI.color = Color.gray; Widgets.DrawLineHorizontal(0f, 87f, num3); GUI.color = Color.white; num2 = RowInterval; } Rect mainRect = new Rect(0f, TopAreaHeight + num2, inRect.width, inRect.height - TopAreaHeight - 38f - num2 - 20f); FillMainRect(mainRect); Rect rect4 = new Rect(inRect.width / 2f - AcceptButtonSize.x / 2f, inRect.height - 55f, AcceptButtonSize.x, AcceptButtonSize.y); if (Widgets.ButtonText(rect4, TradeSession.giftMode ? ("OfferGifts".Translate() + " (" + FactionGiftUtility.GetGoodwillChange(TradeSession.deal.AllTradeables, TradeSession.trader.Faction).ToStringWithSign() + ")") : "AcceptButton".Translate(), true, true, true)) { void action() { if (TradeSession.deal.TryExecute(out bool flag)) { if (flag) { SoundDefOf.ExecuteTrade.PlayOneShotOnCamera(null); Close(false); return; } Close(true); } } if (TradeSession.deal.DoesTraderHaveEnoughSilver()) { action(); } else { FlashSilver(); SoundDefOf.ClickReject.PlayOneShotOnCamera(null); Find.WindowStack.Add(Dialog_MessageBox.CreateConfirmation("ConfirmTraderShortFunds".Translate(), action, false, null)); } Event.current.Use(); } if (Widgets.ButtonText(new Rect(rect4.x - 10f - OtherBottomButtonSize.x, rect4.y, OtherBottomButtonSize.x, OtherBottomButtonSize.y), "ResetButton".Translate(), true, true, true)) { SoundDefOf.Tick_Low.PlayOneShotOnCamera(null); TradeSession.deal.Reset(); CacheTradeables(); CountToTransferChanged(); } if (Widgets.ButtonText(new Rect(rect4.xMax + 10f, rect4.y, OtherBottomButtonSize.x, OtherBottomButtonSize.y), "CancelButton".Translate(), true, true, true)) { this.Close(true); Event.current.Use(); } float y = OtherBottomButtonSize.y; Rect rect5 = new Rect(inRect.width - y, rect4.y, y, y); if (Widgets.ButtonImageWithBG(rect5, ShowSellableItemsIcon, new Vector2?(new Vector2(ShowSellableItemsIconSize, ShowSellableItemsIconSize)))) { Find.WindowStack.Add(new Dialog_SellableItems(TradeSession.trader)); } TooltipHandler.TipRegionByKey(rect5, "CommandShowSellableItemsDesc"); Faction faction = TradeSession.trader.Faction; if (faction != null && !giftsOnly && !faction.def.permanentEnemy) { Rect rect6 = new Rect(rect5.x - y - 4f, rect4.y, y, y); if (TradeSession.giftMode) { if (Widgets.ButtonImageWithBG(rect6, TradeModeIcon, new Vector2?(new Vector2(TradeModeIconSize, TradeModeIconSize)))) { TradeSession.giftMode = false; TradeSession.deal.Reset(); CacheTradeables(); CountToTransferChanged(); SoundDefOf.Tick_High.PlayOneShotOnCamera(null); } TooltipHandler.TipRegionByKey(rect6, "TradeModeTip"); } else { if (Widgets.ButtonImageWithBG(rect6, GiftModeIcon, new Vector2?(new Vector2(GiftModeIconSize, GiftModeIconSize)))) { TradeSession.giftMode = true; TradeSession.deal.Reset(); CacheTradeables(); CountToTransferChanged(); SoundDefOf.Tick_High.PlayOneShotOnCamera(null); } TooltipHandler.TipRegionByKey(rect6, "GiftModeTip", faction.Name); } } GUI.EndGroup(); }