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

giftInputPanel.py (7696B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\view\aurumstore\purchasepanels\giftInputPanel.py
      2 import carbonui.const as uiconst
      3 import localization
      4 from carbonui.control.singlelineedits.singleLineEditText import SingleLineEditText
      5 from carbonui.primitives.container import Container
      6 from carbonui.primitives.sprite import Sprite
      7 from carbonui.uianimations import animations
      8 from carbonui.uicore import uicore
      9 from carbonui.util.color import Color
     10 from eve.client.script.ui.control import eveLabel
     11 from carbonui.control.buttonIcon import ButtonIcon
     12 from eve.client.script.ui.control.eveEditPlainText import EditPlainText
     13 from eve.client.script.ui.control.eveLabel import Label
     14 from eve.client.script.ui.control.searchinput import SearchInput
     15 from eve.client.script.ui.shared.userentry import User
     16 from eve.client.script.ui.util import searchUtil
     17 from eve.client.script.ui.view.aurumstore.purchasepanels.basePurchasePanel import BasePurchasePanel
     18 from eve.client.script.ui.view.aurumstore.errorTooltip import ErrorTooltip
     19 from utillib import KeyVal
     20 DEFAULT_PADDING = 10
     21 MAX_SUBJECT_LENGTH = 78
     22 MAX_MESSAGE_LENGTH = 140
     23 MAX_NAME_LENGTH = 64
     24 
     25 class GiftingInputPanel(BasePurchasePanel):
     26     __notifyevents__ = ['OnEndChangeDevice']
     27     default_name = 'giftingInputPanel'
     28 
     29     def ApplyAttributes(self, attributes):
     30         super(GiftingInputPanel, self).ApplyAttributes(attributes)
     31         self.selectedCharacterID = None
     32         self.offer = attributes.offer
     33         self.photoSvc = sm.GetService('photo')
     34         self.construct_layout()
     35         sm.RegisterNotify(self)
     36 
     37     def construct_layout(self):
     38         self.mainContainer = Container(parent=self, padding=(DEFAULT_PADDING,) * 4)
     39         self.construct_search_input()
     40         self.construct_message_input()
     41 
     42     def construct_message_input(self):
     43         self.messageMainContainer = Container(name='MessageMainContainer', parent=self.mainContainer, align=uiconst.TOALL, bgColor=Color.GRAY1, top=5)
     44         subject_container = Container(name='SubjectContainer', parent=self.messageMainContainer, align=uiconst.TOTOP, height=32)
     45         Sprite(parent=subject_container, align=uiconst.TOLEFT, texturePath='res:/UI/Texture/WindowIcons/evemail.png', width=32, height=32, opacity=0.7)
     46         self.subjectEdit = SingleLineEditText(name='SubjectTextEdit', parent=subject_container, align=uiconst.TOALL, maxLength=MAX_SUBJECT_LENGTH, hintText=localization.GetByLabel('UI/VirtualGoodsStore/GiftingSubjectPlaceholder'), isCharacterField=True, bgColor=Color.GRAY1, width=0, top=0)
     47         message_container = Container(name='MessageContainer', parent=self.messageMainContainer, bgColor=Color.GRAY1)
     48         self.characterCounter = Label(text='0/%s' % MAX_MESSAGE_LENGTH, parent=message_container, color=(1.0, 1.0, 1.0, 0.6), fontsize=12, left=5, top=2, align=uiconst.BOTTOMRIGHT, state=uiconst.UI_DISABLED, opacity=0.7)
     49         self.messageEdit = EditPlainText(name='messageTextEdit', parent=message_container, hintText=localization.GetByLabel('UI/VirtualGoodsStore/GiftingMessagePlaceholder'), counterMax=MAX_MESSAGE_LENGTH, maxLength=MAX_MESSAGE_LENGTH, customCounter=self.characterCounter)
     50 
     51     def construct_search_input(self):
     52         self.searchContainer = Container(name='SearchBarContainer', parent=self.mainContainer, align=uiconst.TOTOP, alignMode=uiconst.TOTOP, state=uiconst.UI_PICKCHILDREN, height=32, bgColor=Color.GRAY1)
     53         search_icon_container = Container(parent=self.searchContainer, align=uiconst.TOLEFT, left=5, width=24)
     54         Sprite(name='SearchIcon', parent=search_icon_container, align=uiconst.CENTER, width=24, height=24, texturePath='res:/UI/Texture/Icons/searchMagnifyingGlass.png', opacity=0.5)
     55         self.searchInput = SearchInput(parent=self.searchContainer, align=uiconst.TOALL, GetSearchEntries=self.search, maxLength=MAX_NAME_LENGTH, OnSearchEntrySelected=self.on_search_entry_selected, hintText=localization.GetByLabel('UI/ActivatePlex/SearchHint'), width=0, top=0, padLeft=5, allowBrowsing=True)
     56         self.searchInput.SetHistoryVisibility(False)
     57         self.searchInput.underlay.Close()
     58         self.errorTooltip = ErrorTooltip(errorMessage=localization.GetByLabel('UI/VirtualGoodsStore/Purchase/NoRecipientErrorBody'))
     59         self.entryContainer = Container(name='EntryContainer', parent=self.searchContainer, align=uiconst.TOTOP, state=uiconst.UI_DISABLED, height=32, bgColor=Color.GRAY1, padLeft=5, display=False)
     60         self.entryContainerIcon = Sprite(parent=self.entryContainer, align=uiconst.CENTERLEFT, pos=(0, 0, 32, 32))
     61         clip_container = Container(parent=self.entryContainer, clipChildren=True, padding=(40, 0, 36, 0))
     62         self.entryContainerTitle = eveLabel.EveLabelMediumBold(parent=clip_container, align=uiconst.CENTERLEFT, text='', width=150)
     63         self.entryContainerButton = ButtonIcon(parent=self.entryContainer, texturePath='res:/UI/Texture/Icons/73_16_210.png', align=uiconst.CENTERRIGHT, func=self.reset_search, width=16, height=16, iconSize=16, left=5, state=uiconst.UI_HIDDEN)
     64 
     65     def search(self, search_string):
     66         self.fade_out_error_tooltip()
     67         if len(search_string) < 3:
     68             return []
     69         else:
     70             return searchUtil.SearchCharacters(search_string)
     71 
     72     def on_search_entry_selected(self, result):
     73         if isinstance(result, User):
     74             result = result.sr.node
     75         else:
     76             result = result[0]
     77         self.selectedCharacterID = result.charID
     78         self.entryContainerIcon.texturePath = self.photoSvc.GetPortrait(self.selectedCharacterID, size=64)
     79         self.entryContainerTitle.text = result.label
     80         self.entryContainerButton.SetState(uiconst.UI_NORMAL)
     81         self.searchInput.SetValue('')
     82         self.searchInput.display = False
     83         self.entryContainer.display = True
     84         self.entryContainer.SetState(uiconst.UI_NORMAL)
     85 
     86     def reset_search(self, *args, **kwargs):
     87         self.selectedCharacterID = None
     88         self.searchInput.display = True
     89         self.entryContainer.display = False
     90         uicore.registry.SetFocus(self.searchInput)
     91 
     92     def OnPanelActivated(self):
     93         self.SetState(uiconst.UI_NORMAL)
     94         animations.FadeIn(self)
     95         uicore.registry.SetFocus(self.searchInput)
     96 
     97     def get_gifting_information(self):
     98         if not self.selectedCharacterID:
     99             if not self.errorTooltip.tooltipPanel:
    100                 self.errorTooltip.CreateTooltip(parent=uicore.layer.menu, owner=self.searchInput, idx=0)
    101                 self.errorTooltip.tooltipPanel.SetOpacity(1)
    102             return
    103         return KeyVal(toCharacterID=self.selectedCharacterID, message=self.get_message())
    104 
    105     def get_message(self):
    106         subject = self.subjectEdit.GetValue()
    107         message = self.messageEdit.GetValue(html=0)
    108         if subject or message:
    109             if not subject:
    110                 return message
    111             elif not message:
    112                 return subject
    113             else:
    114                 return '%s\n%s' % (subject, message)
    115         else:
    116             return ''
    117 
    118     def fade_out_error_tooltip(self):
    119         if self.errorTooltip.tooltipPanel:
    120             animations.FadeOut(self.errorTooltip.tooltipPanel, duration=0.5, callback=self.errorTooltip.Close)
    121 
    122     def OnEndChangeDevice(self, *args):
    123         if self.errorTooltip.tooltipPanel:
    124             self.errorTooltip.Close()
    125             self.create_error_tooltip()
    126 
    127     def create_error_tooltip(self):
    128         self.errorTooltip.CreateTooltip(parent=uicore.layer.menu, owner=self.searchInput, idx=0)
    129         self.errorTooltip.tooltipPanel.SetOpacity(1)
    130 
    131     def Close(self):
    132         self.errorTooltip.Close()
    133         super(GiftingInputPanel, self).Close()