NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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()