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