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

all_ui_members.py (12778B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\Alliances\all_ui_members.py
      2 import localization
      3 import log
      4 from carbon.common.script.util.format import FmtDate
      5 from carbonui import uiconst
      6 from carbonui.primitives.container import Container
      7 from carbonui.uicore import uicore
      8 from carbonui.button.group import ButtonGroup
      9 from carbonui.control.button import Button
     10 from eve.client.script.ui.control.entries.generic import Generic
     11 from eve.client.script.ui.control.entries.util import GetFromClass
     12 from eve.client.script.ui.control import eveIcon, eveLabel, eveScroll
     13 from eve.client.script.ui.shared.neocom.corporation import corpUISignals
     14 from eve.client.script.ui.util import uix
     15 from eveservices.menu import GetMenuService
     16 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     17 
     18 class FormAlliancesMembers(Container):
     19     is_loaded = False
     20 
     21     def Load(self, *args):
     22         if self.is_loaded:
     23             return
     24         self.is_loaded = True
     25         logoLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/Logo')
     26         nameLabel = localization.GetByLabel('UI/Common/Name')
     27         chosenExecLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/ChosenExecutor')
     28         joinedLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Members/Tracking/JoinedColumnHeader')
     29         self.sr.headers = [logoLabel,
     30          nameLabel,
     31          chosenExecLabel,
     32          joinedLabel]
     33         if session.allianceid is not None:
     34             if session.corprole & const.corpRoleDirector == const.corpRoleDirector:
     35                 buttonGroup = ButtonGroup(parent=self)
     36                 buttonGroup.AddButton(localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/DeclareSupport'), self.DeclareSupportForm)
     37             else:
     38                 hintLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/DirectorDeclareWarHint')
     39                 eveLabel.EveLabelMedium(text=hintLabel, parent=self, align=uiconst.TOTOP, state=uiconst.UI_NORMAL)
     40         self.sr.scroll = eveScroll.Scroll(parent=self)
     41         self.sr.scroll.sr.id = 'FormAlliancesMembersScroll'
     42         if session.allianceid is None:
     43             notInAllianceLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/CorpNotInAlliance', corpName=cfg.eveowners.Get(session.corpid).ownerName)
     44             self.sr.scroll.Load(fixedEntryHeight=19, contentList=[], noContentHint=notInAllianceLabel)
     45             return
     46         self.ShowMembers()
     47         corpUISignals.on_alliance_member_changed.connect(self.OnAllianceMemberChanged)
     48 
     49     def SetHint(self, hintstr = None):
     50         if self.sr.scroll:
     51             self.sr.scroll.ShowHint(hintstr)
     52 
     53     def ShowMembers(self):
     54         log.LogInfo('ShowMembers')
     55         try:
     56             sm.GetService('corpui').ShowLoad()
     57             scrolllist = []
     58             headers = []
     59             hint = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/NoMembersFound')
     60             if self is None or self.destroyed:
     61                 log.LogInfo('ShowAllianceApplications Destroyed or None')
     62                 hint = '\xef\xbf\xbd\xef\xbf\xbd s\xef\xbf\xbdst mig ekki.'
     63             elif session.allianceid is None:
     64                 hint = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/CorporationNotInAllianceATM', corpName=cfg.eveowners.Get(session.corpid).ownerName)
     65             else:
     66                 members = sm.GetService('alliance').GetMembers()
     67                 log.LogInfo('ShowMembers len(members):', len(members))
     68                 owners = set()
     69                 for member in members.itervalues():
     70                     owners.add(member.corporationID)
     71 
     72                 if len(owners):
     73                     cfg.eveowners.Prime(owners)
     74                     cfg.corptickernames.Prime(owners)
     75                 for member in members.itervalues():
     76                     self.__AddToList(member, scrolllist)
     77 
     78             self.sr.scroll.adjustableColumns = 1
     79             self.sr.scroll.Load(contentList=scrolllist, headers=self.sr.headers, noContentHint=hint)
     80         finally:
     81             sm.GetService('corpui').HideLoad()
     82 
     83     def __AddToList(self, member, scrolllist):
     84         scrolllist.append(GetFromClass(Corporation, {'label': self.__GetLabel(member.corporationID),
     85          'charIndex': cfg.eveowners.Get(member.corporationID).name,
     86          'member': member,
     87          'GetMenu': self.GetMemberMenu,
     88          'corporationID': member.corporationID}))
     89 
     90     def GetMemberMenu(self, entry):
     91         corpID = entry.sr.node.corporationID
     92         res = GetMenuService().GetMenuFromItemIDTypeID(corpID, const.typeCorporation)
     93         if session.corpid == corpID:
     94             quitAllianceLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/QuitAlliance')
     95             res.append([quitAllianceLabel, [[quitAllianceLabel, self.DeleteMember, [corpID]]]])
     96         else:
     97             kickMemberLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/KickMember')
     98             res.append([kickMemberLabel, [[kickMemberLabel, self.DeleteMember, [corpID]]]])
     99         declareSupportLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/DeclareSupport')
    100         res.append([declareSupportLabel, [[declareSupportLabel, self.DeclareSupport, [corpID]]]])
    101         return res
    102 
    103     def __GetLabel(self, corporationID):
    104         member = sm.GetService('alliance').GetMembers()[corporationID]
    105         corpName = cfg.eveowners.Get(corporationID).ownerName
    106         chosenExecutor = member.chosenExecutorID
    107         if member.chosenExecutorID is None:
    108             chosenExecutor = localization.GetByLabel('UI/Common/Secret')
    109         else:
    110             chosenExecutor = cfg.eveowners.Get(member.chosenExecutorID).ownerName
    111         joinedDate = FmtDate(member.startDate)
    112         return '<t>%s<t>%s<t>%s' % (corpName, chosenExecutor, joinedDate)
    113 
    114     def GetEntry(self, allianceID, corporationID):
    115         for entry in self.sr.scroll.GetNodes():
    116             if entry is None or entry is None:
    117                 continue
    118             if entry.panel is None or entry.panel.destroyed:
    119                 continue
    120             if entry.member.allianceID == allianceID and entry.member.corporationID == corporationID:
    121                 return entry
    122 
    123     def OnAllianceMemberChanged(self, allianceID, corporationID, change):
    124         log.LogInfo('OnAllianceMemberChanged allianceID', allianceID, 'corporationID', corporationID, 'change', change)
    125         if session.allianceid != allianceID:
    126             return
    127         if self.state not in (uiconst.UI_NORMAL, uiconst.UI_PICKCHILDREN):
    128             log.LogInfo('OnAllianceMemberChanged state != UI_NORMAL', self.state)
    129             return
    130         if self.sr.scroll is None:
    131             log.LogInfo('OnAllianceMemberChanged no scroll')
    132             return
    133         bAdd = 1
    134         bRemove = 1
    135         for old, new in change.itervalues():
    136             if old is not None:
    137                 bAdd = 0
    138             if new is not None:
    139                 bRemove = 0
    140 
    141         if bAdd and bRemove:
    142             raise RuntimeError('members::OnAllianceMemberChanged WTF')
    143         if bAdd:
    144             log.LogInfo('OnAllianceMemberChanged adding member')
    145             member = sm.GetService('alliance').GetMembers()[corporationID]
    146             self.SetHint()
    147             scrolllist = []
    148             self.__AddToList(member, scrolllist)
    149             if len(self.sr.scroll.sr.headers) > 0:
    150                 self.sr.scroll.AddEntries(-1, scrolllist)
    151             else:
    152                 self.sr.scroll.Load(contentList=scrolllist, headers=self.sr.headers)
    153         elif bRemove:
    154             log.LogInfo('OnAllianceMemberChanged removing member')
    155             entry = self.GetEntry(allianceID, corporationID)
    156             if entry is not None:
    157                 self.sr.scroll.RemoveEntries([entry])
    158             else:
    159                 log.LogWarn('OnAllianceMemberChanged member not found')
    160         else:
    161             log.LogInfo('OnAllianceMemberChanged updating member')
    162             entry = self.GetEntry(allianceID, corporationID)
    163             if entry is None:
    164                 log.LogWarn('OnAllianceMemberChanged member not found')
    165             if entry is not None:
    166                 label = self.__GetLabel(corporationID)
    167                 entry.panel.sr.node.label = label
    168                 entry.panel.sr.label.text = label
    169 
    170     def DeclareSupportForm(self, *args):
    171         format = []
    172         stati = {}
    173         pledgeLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/PledgeSupportTo')
    174         format.append({'type': 'header',
    175          'text': pledgeLabel,
    176          'frame': 0})
    177         format.append({'type': 'push'})
    178         format.append({'type': 'btline'})
    179         members = sm.GetService('alliance').GetMembers()
    180         myCorp = members[session.corpid]
    181         for member in members.itervalues():
    182             text = cfg.eveowners.Get(member.corporationID).ownerName
    183             format.append({'type': 'checkbox',
    184              'setvalue': member.corporationID == myCorp.chosenExecutorID,
    185              'key': member.corporationID,
    186              'text': text,
    187              'frame': 0,
    188              'group': 'members'})
    189 
    190         format.append({'type': 'btline'})
    191         left = uicore.desktop.width / 2 - 500 / 2
    192         top = uicore.desktop.height / 2 - 400 / 2
    193         declareLabel = localization.GetByLabel('UI/Corporations/CorporationWindow/Alliances/Members/DeclarationExecutorSupport')
    194         retval = uix.HybridWnd(format, declareLabel, 'declareSupport', 1, uiconst.OKCANCEL, [left, top], 500)
    195         if retval is not None:
    196             corpID = retval['members']
    197             sm.GetService('alliance').DeclareExecutorSupport(corpID)
    198 
    199     def DeleteMember(self, corpID):
    200         if corpID == session.corpid:
    201             message = 'AllComfirmKickSelf'
    202         else:
    203             message = 'AllComfirmKickMember'
    204         res = prompt_player_fsd_dialog(message, {}, uiconst.YESNO)
    205         if res == uiconst.ID_YES:
    206             sm.GetService('alliance').DeleteMember(corpID)
    207 
    208     def DeclareSupport(self, corpID):
    209         sm.GetService('alliance').DeclareExecutorSupport(corpID)
    210 
    211 
    212 class Corporation(Generic):
    213     __guid__ = 'listentry.Corporation'
    214     __params__ = ['corporationID', 'label']
    215 
    216     def Startup(self, *args):
    217         self.sr.label = eveLabel.EveLabelMedium(text='', parent=self, left=5, state=uiconst.UI_DISABLED, maxLines=1)
    218         self.sr.icon = Container(parent=self, width=24, height=24, left=2, top=1, align=uiconst.TOPLEFT)
    219         self.sr.events = ('OnClick', 'OnMouseDown', 'OnMouseUp', 'OnDblClick', 'OnMouseHover')
    220         for eventName in self.sr.events:
    221             setattr(self.sr, eventName, None)
    222 
    223     def Load(self, node):
    224         self.sr.node = node
    225         data = node
    226         self.corporationID = data.corporationID
    227         self.confirmOnDblClick = data.Get('confirmOnDblClick', 0)
    228         self.sr.label.text = data.label
    229         self.hint = data.Get('hint', '')
    230         self.sr.icon.state = uiconst.UI_NORMAL
    231         self.sr.icon.Flush()
    232         eveIcon.GetLogoIcon(itemID=data.corporationID, parent=self.sr.icon, acceptNone=False, align=uiconst.TOALL)
    233         for eventName in self.sr.events:
    234             if data.Get(eventName, None):
    235                 self.sr.Set(eventName, data.Get(eventName, None))
    236 
    237         if node.Get('selected', 0):
    238             self.Select()
    239         else:
    240             self.Deselect()
    241         self.sr.label.top = int((self.height - self.sr.label.textheight) / 2)
    242         if data.Get('button', None):
    243             caption, size, function, args = data.button
    244             if self.sr.Get('button%s' % size, None) is None:
    245                 btn = self.sr.Get('button%s' % size, Button(parent=self, label=caption, func=function, align=uiconst.TOPRIGHT))
    246                 btn.top = (node.height - btn.height) / 2 - 3
    247                 setattr(self.sr, 'button%s' % size, btn)
    248             btn = self.sr.Get('button%s' % size, None)
    249             btn.text = '<center>%s' % caption
    250             btn.OnClick = (function, args)
    251             btn.state = uiconst.UI_NORMAL
    252             btn.left = -size + 6
    253         else:
    254             for size in [51, 66, 81]:
    255                 if self.sr.Get('button%s' % size, None):
    256                     self.sr.Get('button%s' % size, None).state = uiconst.UI_HIDDEN
    257 
    258     def GetHeight(self, *args):
    259         node, width = args
    260         node.height = 27
    261         return node.height
    262 
    263     def ShowInfo(self, *args):
    264         sm.GetService('info').ShowInfo(const.typeCorporation, self.sr.node.corporationID)
    265 
    266     def OnDblClick(self, *args):
    267         self.ShowInfo()