buyMissingPlexDialog.py (6673B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\wallet\buyMissingPlexDialog.py 2 import carbonui 3 import carbonui.text.styles 4 from carbonui import Align, TextAlign, ButtonStyle, ButtonVariant, Density, TextColor 5 from carbonui.control.button import Button 6 from carbonui.control.checkbox import Checkbox 7 from carbonui.control.window import Window 8 from carbonui.decorative.divider_line import DividerLine 9 from carbonui.primitives.container import Container 10 from carbonui.primitives.containerAutoSize import ContainerAutoSize 11 from carbonui.primitives.layoutGrid import LayoutGrid 12 from eve.client.script.ui import eveColor 13 from eve.common.lib import appConst 14 from eve.common.script.util.eveFormat import FmtISK 15 from fastcheckout.const import FROM_BUY_MISSING_PLEX_WND 16 from inventorycommon.typeHelpers import GetAveragePrice 17 from localization import GetByLabel 18 from plex.client.api.repository import get_repository 19 from plex.client.api.signal import on_balance_changed 20 from shipfitting.multiBuyUtil import BuyMultipleTypesWithQty 21 22 class BuyMissingPlexDialog(Window): 23 default_windowID = 'BuyMissingPlexDialog' 24 default_fixedWidth = 512 25 default_height = 400 26 default_iconNum = 'res:/UI/Texture/Plex/plex_128_gradient_yellow.png' 27 default_isCollapseable = False 28 default_isMinimizable = False 29 default_isStackable = False 30 default_isLockable = False 31 default_isLightBackgroundConfigurable = False 32 default_isOverlayable = False 33 default_useDefaultPos = True 34 35 def __init__(self, required_amount, **kwargs): 36 super(BuyMissingPlexDialog, self).__init__(**kwargs) 37 self.required_amount = required_amount 38 self.construct_top(required_amount) 39 self.construct_bottom() 40 self.update_headline_text() 41 self.connect_signals() 42 43 def Close(self, setClosed = False, *args, **kwds): 44 try: 45 self.disconnect_signals() 46 finally: 47 super(BuyMissingPlexDialog, self).Close(setClosed, *args, **kwds) 48 49 def connect_signals(self): 50 self.content.on_size_changed.connect(self.on_content_size_changed) 51 on_balance_changed.connect(self.on_plex_amount_changed) 52 53 def disconnect_signals(self): 54 self.content.on_size_changed.disconnect(self.on_content_size_changed) 55 on_balance_changed.disconnect(self.on_plex_amount_changed) 56 57 def on_content_size_changed(self, width, height): 58 _, height = self.GetWindowSizeForContentSize(height=height) 59 self.SetFixedHeight(height) 60 61 def update_headline_text(self): 62 amount = self.get_required_plex_amount() 63 self.headline.text = GetByLabel('UI/Wallet/MissingPlex', amount_missing=int(amount)) 64 65 def construct_content_cont(self): 66 return ContainerAutoSize(parent=self.sr.maincontainer, name='main', align=Align.TOTOP, padding=self.content_padding) 67 68 def construct_bottom(self): 69 bottom_cont = ContainerAutoSize(name='bottomCont', parent=self.content, align=Align.TOTOP, padTop=32) 70 layout_grid = LayoutGrid(parent=bottom_cont, columns=3, cellSpacing=(16, 16)) 71 self.isk_container = ContainerAutoSize(align=Align.TOPLEFT, width=200) 72 layout_grid.AddCell(self.isk_container, bgColor=(0, 0, 0, 0.3), cellPadding=8) 73 self.reconstruct_isk_container() 74 carbonui.text.styles.TextBody(parent=layout_grid, align=Align.TOPLEFT, text=GetByLabel('UI/Common/Or'), top=14) 75 self.nes_container = ContainerAutoSize(align=Align.TOPLEFT, width=200) 76 layout_grid.AddCell(self.nes_container, bgColor=(0, 0, 0, 0.3), cellPadding=8) 77 self.reconstruct_nes_container() 78 self.construct_buttons(layout_grid) 79 80 def construct_buttons(self, layout_grid): 81 Button(parent=layout_grid, align=Align.TOTOP, label=GetByLabel('UI/Wallet/BuyOnMarket'), func=self.on_market_button, variant=ButtonVariant.PRIMARY, padTop=16, density=Density.EXPANDED) 82 layout_grid.AddCell() 83 Button(parent=layout_grid, align=Align.TOTOP, label=GetByLabel('UI/Wallet/BuyInNES'), func=self.on_nes_button, variant=ButtonVariant.PRIMARY, style=ButtonStyle.MONETIZATION, padTop=16, density=Density.EXPANDED) 84 85 def on_nes_button(self, *args): 86 sm.GetService('fastCheckoutClientService').buy_plex(log_context=FROM_BUY_MISSING_PLEX_WND) 87 self.Close() 88 89 def construct_top(self, required_amount): 90 self.headline = carbonui.text.styles.TextHeadline(parent=self.content, align=Align.TOTOP, textAlign=TextAlign.CENTER, color=eveColor.DANGER_RED) 91 DividerLine(parent=self.content, align=Align.TOTOP, padTop=16) 92 self.subtract_wallet_checkbox = Checkbox(parent=ContainerAutoSize(parent=self.content, align=Align.TOTOP, padTop=16), text=GetByLabel('UI/Wallet/SubtractPlexInWallet'), align=Align.CENTERTOP, callback=self.on_subtract_wallet_checkbox, checked=True) 93 94 def on_subtract_wallet_checkbox(self, *args): 95 self.update() 96 97 def on_plex_amount_changed(self, *args): 98 self.update() 99 100 def update(self): 101 self.update_headline_text() 102 self.reconstruct_isk_container() 103 104 def on_market_button(self, *args): 105 self.Close() 106 sm.StartService('marketutils').Buy(appConst.typePlex, quantity=self.get_required_plex_amount()) 107 108 def get_required_plex_amount(self): 109 amount = self.required_amount 110 if self.subtract_wallet_checkbox.checked: 111 amount -= get_repository().get_balance() 112 amount = max(1, amount) 113 return amount 114 115 def reconstruct_isk_container(self): 116 self.isk_container.Flush() 117 carbonui.text.styles.TextBody(parent=Container(parent=self.isk_container, align=Align.TOTOP, bgColor=(1, 1, 1, 0.1), height=32), align=Align.CENTERLEFT, text=GetByLabel('UI/Wallet/PLEXForISK'), left=8) 118 price = GetAveragePrice(appConst.typePlex) or 100 119 if price: 120 price *= self.get_required_plex_amount() 121 carbonui.text.styles.TextBody(parent=self.isk_container, align=Align.TOTOP, text=GetByLabel('UI/SkillTrading/EstimatedPrice', price=FmtISK(price, False)), padTop=8) 122 self.isk_container.SetSizeAutomatically() 123 124 def reconstruct_nes_container(self): 125 self.nes_container.Flush() 126 carbonui.text.styles.TextBody(parent=Container(parent=self.nes_container, align=Align.TOTOP, bgColor=(1, 1, 1, 0.1), height=32), align=Align.CENTERLEFT, text=GetByLabel('UI/Wallet/PLEXInNES'), left=4) 127 carbonui.text.styles.TextBody(parent=self.nes_container, align=Align.TOTOP, padTop=8, color=TextColor.SECONDARY, text=GetByLabel('UI/Wallet/PlexPackagesInNES')) 128 self.nes_container.SetSizeAutomatically()