contactsForm.py (29274B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\addressBook\contactsForm.py 2 import math 3 import eveicon 4 from carbonui import AxisAlignment, uiconst 5 from carbonui.button.const import HEIGHT_NORMAL 6 from carbonui.control.buttonIcon import ButtonIcon 7 from carbonui.control.dragResizeCont import DragResizeCont 8 from carbonui.primitives.container import Container 9 from carbonui.primitives.containerAutoSize import ContainerAutoSize 10 from carbonui.primitives.flowcontainer import FlowContainer 11 from carbonui.util.various_unsorted import NiceFilter, SortListOfTuples 12 from carbonui.control.checkbox import Checkbox 13 from eve.client.script.parklife import states 14 from eve.client.script.ui.control.entries.space import Space 15 from eve.client.script.ui.control.entries.util import GetFromClass 16 from eve.client.script.ui.control.listgroup import ListGroup 17 from eve.client.script.ui.shared.neocom.addressBook import contactsConst 18 from eve.client.script.ui.shared.neocom.addressBook.contactsConst import TAB_ALLIANCECONTACTS, TAB_CONTACTS, TAB_CORPCONTACTS 19 from eve.client.script.ui.shared.neocom.addressBook.manageLabels import ManageLabels 20 from eve.client.script.ui.control import eveLabel, eveScroll 21 from eve.client.script.ui.shared.neocom.evemail import MailLabelEntry 22 from eve.client.script.ui.shared.stateFlag import FlagIconWithState 23 from eve.common.lib import appConst as const 24 import localization 25 from eve.client.script.ui.quickFilter import QuickFilterEdit 26 from eve.common.script.sys import idCheckers 27 from menu import MenuLabel 28 from bannedwords.client import bannedwords 29 CONTACTGROUPID_TO_STATEID = {const.contactHighStanding: states.flagStandingHigh, 30 const.contactGoodStanding: states.flagStandingGood, 31 const.contactNeutralStanding: states.flagStandingNeutral, 32 const.contactBadStanding: states.flagStandingBad, 33 const.contactHorribleStanding: states.flagStandingHorrible} 34 35 class ContactListGroup(ListGroup): 36 37 def _ConstructIcon(self): 38 self.sr.icon = FlagIconWithState(parent=self, pos=(4, 0, 12, 12), state=uiconst.UI_DISABLED, align=uiconst.CENTERLEFT) 39 40 def _LoadIconState(self): 41 flagID = CONTACTGROUPID_TO_STATEID[self.sr.node.groupID] 42 self.sr.icon.SetFlagID(flagID) 43 44 def _LoadIconLeft(self): 45 self.sr.icon.left = 6 46 47 def _LoadLabelLeft(self): 48 self.sr.label.left = 26 49 50 51 class ContactsForm(Container): 52 default_contactType = TAB_CONTACTS 53 __notifyevents__ = ['OnContactChange', 54 'OnUnblockContact', 55 'OnNotificationsRefresh', 56 'OnMessageChanged', 57 'OnMyLabelsChanged', 58 'OnEditLabel', 59 'OnSetAllianceStanding', 60 'OnSetCorpStanding'] 61 62 def ApplyAttributes(self, attributes): 63 super(ContactsForm, self).ApplyAttributes(attributes) 64 self.contactType = attributes.get('contactType', self.default_contactType) 65 self.startPos = 0 66 self.group = None 67 self.isInitialized = False 68 69 def Load(self, *args): 70 self.LoadPanel() 71 72 def LoadPanel(self): 73 if self.isInitialized: 74 return 75 self.isInitialized = True 76 self.mainCont = Container(name='mainCont', parent=self, align=uiconst.TOALL, pos=(0, 0, 0, 0)) 77 self.ConstructPaginationCont() 78 systemStatsCont = DragResizeCont(name='systemStatsCont', settingsID='contactsListSplit1', parent=self.mainCont, align=uiconst.TOLEFT_PROP if self.contactType == TAB_CONTACTS else uiconst.TORIGHT_PROP, minSize=0.1, maxSize=0.5, defaultSize=0.33) 79 self.leftCont = Container(name='leftCont', parent=systemStatsCont.mainCont) 80 self.ConstructSearchAndLabelsBtn() 81 self.ConstructNavigationScroll() 82 self.ConstructScroll() 83 self.LoadContactsForm() 84 sm.RegisterNotify(self) 85 86 def ConstructPaginationCont(self): 87 self.paginationCont = ContainerAutoSize(name='paginationCont', parent=self.mainCont, idx=0, align=uiconst.TOBOTTOM, height=24) 88 self.contactFwdBtn = ButtonIcon(parent=self.paginationCont, align=uiconst.TORIGHT, width=self.paginationCont.height, state=uiconst.UI_NORMAL, texturePath=eveicon.navigate_forward, iconSize=16, hint=localization.GetByLabel('UI/Common/Next'), func=self.OnFwdBtn) 89 self.contactBackBtn = ButtonIcon(parent=self.paginationCont, align=uiconst.TORIGHT, width=self.paginationCont.height, state=uiconst.UI_NORMAL, texturePath=eveicon.navigate_back, iconSize=16, hint=localization.GetByLabel('UI/Common/Previous'), func=self.OnBackBtn) 90 self.pageCount = eveLabel.EveLabelMedium(parent=ContainerAutoSize(parent=self.paginationCont, align=uiconst.TORIGHT, padRight=4), state=uiconst.UI_DISABLED, align=uiconst.CENTERLEFT) 91 92 def OnFwdBtn(self): 93 self.BrowseContacts(1) 94 95 def OnBackBtn(self): 96 self.BrowseContacts(-1) 97 98 def ConstructScroll(self): 99 self.scroll = eveScroll.Scroll(name='rightScroll', parent=self.mainCont, padding=(0, 8, 0, 0)) 100 self.scroll.sr.ignoreTabTrimming = 1 101 self.scroll.multiSelect = 1 102 self.scroll.sr.content.OnDropData = self.OnContactDropData 103 self.scroll.sr.id = self.contactType 104 105 def ConstructNavigationScroll(self): 106 self.leftScroll = eveScroll.Scroll(name='leftScroll', parent=self.leftCont) 107 self.leftScroll.multiSelect = 0 108 self.leftScroll.sr.content.OnDropData = self.OnContactDropData 109 110 def ConstructSearchAndLabelsBtn(self): 111 topCont = FlowContainer(name='topCont', align=uiconst.TOTOP, parent=self.mainCont, height=HEIGHT_NORMAL, contentAlignment=AxisAlignment.END, contentSpacing=(16, 8)) 112 checkboxCont = ContainerAutoSize(name='checkboxCon', parent=topCont, height=HEIGHT_NORMAL) 113 self.onlinecheck = Checkbox(text=localization.GetByLabel('UI/PeopleAndPlaces/OnlineOnly'), parent=checkboxCont, settingsKey='onlinebuddyonly', checked=settings.user.ui.Get('onlinebuddyonly', 0), callback=self.CheckBoxChange, align=uiconst.TORIGHT, padTop=4, wrapLabel=False) 114 self.quickFilter = QuickFilterEdit(parent=topCont, isCharCorpOrAllianceField=True, callback=self.LoadContactsForm, width=120) 115 116 def _OnClose(self): 117 sm.UnregisterNotify(self) 118 119 def LoadLeftSide(self): 120 scrolllist = self.GetStaticLabelsGroups() 121 scrolllist.insert(1, GetFromClass(Space, {'height': 16})) 122 scrolllist.append(GetFromClass(Space, {'height': 16})) 123 scrolllist.append(GetFromClass(LabelListGroup, {'GetSubContent': self.GetLabelsSubContent, 124 'MenuFunction': self.LabelGroupMenu, 125 'label': localization.GetByLabel('UI/PeopleAndPlaces/Labels'), 126 'cleanLabel': localization.GetByLabel('UI/PeopleAndPlaces/Labels'), 127 'id': ('contacts', 'Labels', localization.GetByLabel('UI/PeopleAndPlaces/Labels')), 128 'state': 'locked', 129 'BlockOpenWindow': 1, 130 'showicon': eveicon.tag, 131 'showlen': 0, 132 'groupName': 'labels', 133 'groupItems': [], 134 'updateOnToggle': 0, 135 'manage_labels_callback': self.ManageLabels})) 136 self.leftScroll.Load(contentList=scrolllist) 137 lastViewedID = self._GetLastViewedID() 138 for entry in self.leftScroll.GetNodes(): 139 groupID = entry.groupID 140 if groupID is None: 141 continue 142 if groupID == lastViewedID: 143 panel = entry.panel 144 if panel is not None: 145 panel.OnClick() 146 return 147 148 if len(self.leftScroll.GetNodes()) > 0: 149 entry = self.leftScroll.GetNodes()[0] 150 panel = entry.panel 151 if panel is not None: 152 panel.OnClick() 153 154 def GetStandingNameShort(self, standing): 155 if standing == const.contactHighStanding: 156 return localization.GetByLabel('UI/PeopleAndPlaces/StandingExcellent') 157 if standing == const.contactGoodStanding: 158 return localization.GetByLabel('UI/PeopleAndPlaces/StandingGood') 159 if standing == const.contactNeutralStanding: 160 return localization.GetByLabel('UI/PeopleAndPlaces/StandingNeutral') 161 if standing == const.contactBadStanding: 162 return localization.GetByLabel('UI/PeopleAndPlaces/StandingBad') 163 if standing == const.contactHorribleStanding: 164 return localization.GetByLabel('UI/PeopleAndPlaces/StandingTerrible') 165 166 def GetLabelsSubContent(self, items): 167 scrolllist = [] 168 myLabels = sm.GetService('addressbook').GetContactLabels(self.contactType) 169 for each in myLabels.itervalues(): 170 if getattr(each, 'static', 0): 171 continue 172 entryItem = self.CreateLabelEntry(each) 173 scrolllist.append((each.name.lower(), entryItem)) 174 175 scrolllist = SortListOfTuples(scrolllist) 176 scrolllist.insert(0, GetFromClass(MailLabelEntry, {'cleanLabel': localization.GetByLabel('UI/PeopleAndPlaces/NoLabel'), 177 'label': '%s [%s]' % (localization.GetByLabel('UI/PeopleAndPlaces/NoLabel'), self.GetContactsLabelCount(-1)), 178 'sublevel': 1, 179 'currentView': -1, 180 'OnClick': self.LoadGroupFromEntry, 181 'groupID': -1})) 182 return scrolllist 183 184 def CreateLabelEntry(self, labelEntry): 185 count = self.GetContactsLabelCount(labelEntry.labelID) 186 return GetFromClass(MailLabelEntry, {'cleanLabel': labelEntry.name, 187 'label': '%s [%s]' % (labelEntry.name, count), 188 'sublevel': 1, 189 'currentView': labelEntry.labelID, 190 'OnClick': self.LoadGroupFromEntry, 191 'GetMenu': self.GetLabelMenu, 192 'OnDropData': self.OnGroupDropData, 193 'groupID': labelEntry.labelID}) 194 195 def GetLabelMenu(self, entry): 196 labelID = entry.sr.node.currentView 197 m = [] 198 if sm.GetService('addressbook').ShowLabelMenuAndManageBtn(self.contactType): 199 m.append((MenuLabel('UI/PeopleAndPlaces/LabelsRename'), sm.GetService('addressbook').RenameContactLabelFromUI, (labelID,))) 200 m.append(None) 201 m.append((MenuLabel('UI/PeopleAndPlaces/LabelsDelete'), sm.GetService('addressbook').DeleteContactLabelFromUI, (labelID, entry.sr.node.label))) 202 return m 203 204 def ManageLabels(self, *args): 205 configName = '%s%s' % ('ManageLabels', self.contactType) 206 ManageLabels.Open(windowID=configName, labelType=self.contactType) 207 208 def GetStaticLabelsGroups(self): 209 scrolllist = [] 210 labelList = [(localization.GetByLabel('UI/PeopleAndPlaces/AllContacts'), const.contactAll), 211 (localization.GetByLabel('UI/PeopleAndPlaces/ExcellentStanding'), const.contactHighStanding), 212 (localization.GetByLabel('UI/PeopleAndPlaces/GoodStanding'), const.contactGoodStanding), 213 (localization.GetByLabel('UI/PeopleAndPlaces/NeutralStanding'), const.contactNeutralStanding), 214 (localization.GetByLabel('UI/PeopleAndPlaces/BadStanding'), const.contactBadStanding), 215 (localization.GetByLabel('UI/PeopleAndPlaces/TerribleStanding'), const.contactHorribleStanding)] 216 if self.contactType == TAB_CONTACTS: 217 labelList.append((localization.GetByLabel('UI/PeopleAndPlaces/Watchlist'), const.contactWatchlist)) 218 labelList.append((localization.GetByLabel('UI/PeopleAndPlaces/Blocked'), const.contactBlocked)) 219 labelList.insert(0, (localization.GetByLabel('UI/PeopleAndPlaces/Notifications'), const.contactNotifications)) 220 for label, groupID in labelList: 221 entry = self.GetGroupEntry(groupID, label, selected=groupID == self._GetLastViewedID()) 222 scrolllist.append(entry) 223 224 if self.contactType == TAB_CONTACTS: 225 scrolllist.insert(-1, GetFromClass(Space, {'height': 16})) 226 return scrolllist 227 228 def _GetLastViewedID(self): 229 if self.contactType == TAB_CONTACTS: 230 lastViewedID = settings.char.ui.Get('contacts_lastselected', None) 231 elif self.contactType == TAB_CORPCONTACTS: 232 lastViewedID = settings.char.ui.Get('corpcontacts_lastselected', None) 233 elif self.contactType == 'alliancecontact': 234 lastViewedID = settings.char.ui.Get('alliancecontacts_lastselected', None) 235 return lastViewedID 236 237 def GetGroupEntry(self, groupID, label, selected = 0): 238 cls = ContactListGroup if groupID in CONTACTGROUPID_TO_STATEID else ListGroup 239 return GetFromClass(cls, {'GetSubContent': self.GetLeftGroups, 240 'label': label, 241 'cleanLabel': label, 242 'id': ('contact', groupID), 243 'state': 'locked', 244 'BlockOpenWindow': 0, 245 'disableToggle': 1, 246 'expandable': 0, 247 'showicon': 'hide', 248 'iconID': contactsConst.iconByContactType.get(groupID, None), 249 'showlen': 1, 250 'groupItems': self.GetContactsCount(groupID), 251 'hideNoItem': 1, 252 'hideExpander': 1, 253 'hideExpanderLine': 1, 254 'selectGroup': 1, 255 'isSelected': selected, 256 'groupID': groupID, 257 'OnClick': self.LoadGroupFromEntry}) 258 259 def LoadContactsForm(self, *args): 260 if self.contactType == TAB_CONTACTS: 261 self.onlinecheck.state = uiconst.UI_NORMAL 262 else: 263 self.onlinecheck.state = uiconst.UI_HIDDEN 264 self.LoadData() 265 self.LoadLeftSide() 266 267 def UpdateTopContHeight(self): 268 if self.contactType == TAB_CONTACTS: 269 self.topCont.height = 45 270 elif sm.GetService('addressbook').ShowLabelMenuAndManageBtn(self.contactType): 271 self.topCont.height = 38 272 else: 273 self.topCont.height = 32 274 275 def CheckInGroup(self, groupID, relationshipID): 276 if groupID == const.contactHighStanding: 277 if relationshipID > const.contactGoodStanding: 278 return True 279 elif groupID == const.contactGoodStanding: 280 if relationshipID > const.contactNeutralStanding and relationshipID <= const.contactGoodStanding: 281 return True 282 elif groupID == const.contactNeutralStanding: 283 if relationshipID == const.contactNeutralStanding: 284 return True 285 elif groupID == const.contactBadStanding: 286 if relationshipID < const.contactNeutralStanding and relationshipID >= const.contactBadStanding: 287 return True 288 elif groupID == const.contactHorribleStanding: 289 if relationshipID < const.contactBadStanding: 290 return True 291 return False 292 293 def CheckHasLabel(self, labelID, labelMask): 294 if not labelMask and labelID == -1: 295 return True 296 elif labelMask & labelID == labelID: 297 return True 298 else: 299 return False 300 301 def LoadGroupFromEntry(self, entry, *args): 302 group = entry.sr.node 303 self.blockedSelected = False 304 if self.group != group.groupID: 305 self.startPos = 0 306 self.group = group.groupID 307 if group.groupID == const.contactBlocked: 308 self.blockedSelected = True 309 self.LoadGroupFromNode(group) 310 311 def CheckIfAgent(self, contactID): 312 if sm.GetService('agents').IsAgent(contactID): 313 return True 314 if idCheckers.IsNPC(contactID) and idCheckers.IsCharacter(contactID): 315 return True 316 317 def GetContactsLabelCount(self, labelID): 318 contactList = [] 319 for contact in self.contacts: 320 if self.CheckHasLabel(labelID, contact.labelMask): 321 contactList.append(contact.contactID) 322 323 count = len(contactList) 324 return count 325 326 def GetContactsCount(self, groupID): 327 contactList = [] 328 if groupID == const.contactBlocked: 329 for blocked in self.blocked: 330 contactList.append(blocked.contactID) 331 332 elif groupID == const.contactNotifications: 333 for notification in self.notifications: 334 contactList.append(notification.notificationID) 335 336 else: 337 for contact in self.contacts: 338 if groupID == const.contactAll: 339 contactList.append(contact.contactID) 340 elif groupID == const.contactWatchlist: 341 if contact.inWatchlist: 342 contactList.append(contact.contactID) 343 elif groupID == const.contactHighStanding: 344 if contact.relationshipID > const.contactGoodStanding: 345 contactList.append(contact.contactID) 346 elif groupID == const.contactGoodStanding: 347 if contact.relationshipID > const.contactNeutralStanding and contact.relationshipID <= const.contactGoodStanding: 348 contactList.append(contact.contactID) 349 elif groupID == const.contactNeutralStanding: 350 if contact.relationshipID == const.contactNeutralStanding: 351 contactList.append(contact.contactID) 352 elif groupID == const.contactBadStanding: 353 if contact.relationshipID < const.contactNeutralStanding and contact.relationshipID >= const.contactBadStanding: 354 contactList.append(contact.contactID) 355 elif groupID == const.contactHorribleStanding: 356 if contact.relationshipID < const.contactBadStanding: 357 contactList.append(contact.contactID) 358 359 return contactList 360 361 def GetLabelName(self, labelID, *args): 362 labels = sm.GetService('addressbook').GetContactLabels(self.contactType).values() 363 if labelID == -1: 364 return localization.GetByLabel('UI/PeopleAndPlaces/NoLabel') 365 for label in labels: 366 if labelID == label.labelID: 367 return label.name 368 369 def GetScrolllist(self, data): 370 scrolllist = [] 371 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoContacts') 372 onlineOnly = False 373 headers = True 374 reverse = False 375 if self.contactType == TAB_CONTACTS: 376 settings.char.ui.Set('contacts_lastselected', data.groupID) 377 onlineOnly = settings.user.ui.Get('onlinebuddyonly', 0) 378 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoContacts') 379 elif self.contactType == TAB_CORPCONTACTS: 380 settings.char.ui.Set('corpcontacts_lastselected', data.groupID) 381 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoCorpContacts') 382 elif self.contactType == 'alliancecontact': 383 settings.char.ui.Set('alliancecontacts_lastselected', data.groupID) 384 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoAllianceContacts') 385 if data.groupID == const.contactWatchlist: 386 self.scroll.multiSelect = 1 387 for contact in self.contacts: 388 if not self.CheckIfAgent(contact.contactID) and idCheckers.IsCharacter(contact.contactID) and contact.inWatchlist: 389 entryTuple = sm.GetService('addressbook').GetContactEntry(data, contact, onlineOnly, contactType=self.contactType, contactLevel=contact.relationshipID, labelMask=contact.labelMask) 390 if entryTuple is not None: 391 scrolllist.append(entryTuple) 392 393 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoneOnWatchlist') 394 elif data.groupID == const.contactBlocked: 395 self.scroll.multiSelect = 1 396 for blocked in self.blocked: 397 if blocked.contactID > 0 and not self.CheckIfAgent(blocked.contactID): 398 entryTuple = sm.GetService('addressbook').GetContactEntry(data, blocked, onlineOnly, contactType=self.contactType) 399 if entryTuple is not None: 400 scrolllist.append(entryTuple) 401 402 if sm.GetService('account').GetDefaultContactCost() == -1: 403 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/UnknownBlocked') 404 else: 405 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoneBlockedYet') 406 elif data.groupID == const.contactAll: 407 self.scroll.multiSelect = 1 408 for contact in self.contacts: 409 if not self.CheckIfAgent(contact.contactID): 410 entryTuple = sm.GetService('addressbook').GetContactEntry(data, contact, onlineOnly, contactType=self.contactType, contactLevel=contact.relationshipID, labelMask=contact.labelMask) 411 if entryTuple is not None: 412 scrolllist.append(entryTuple) 413 414 elif data.groupID == const.contactNotifications: 415 self.scroll.multiSelect = 0 416 for notification in self.notifications: 417 scrolllist.append(sm.GetService('addressbook').GetNotifications(notification)) 418 419 headers = False 420 reverse = True 421 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoNotifications') 422 elif data.groupID in (const.contactGoodStanding, 423 const.contactHighStanding, 424 const.contactNeutralStanding, 425 const.contactBadStanding, 426 const.contactHorribleStanding): 427 self.scroll.multiSelect = 1 428 for contact in self.contacts: 429 if not self.CheckIfAgent(contact.contactID): 430 if self.CheckInGroup(data.groupID, contact.relationshipID): 431 entryTuple = sm.GetService('addressbook').GetContactEntry(data, contact, onlineOnly, contactType=self.contactType, contactLevel=contact.relationshipID, labelMask=contact.labelMask) 432 if entryTuple is not None: 433 scrolllist.append(entryTuple) 434 435 standingText = self.GetStandingNameShort(data.groupID) 436 if self.contactType == TAB_CONTACTS: 437 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoContactsStanding', standingText=standingText) 438 elif self.contactType == TAB_CORPCONTACTS: 439 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoCorpContactsStanding', standingText=standingText) 440 elif self.contactType == TAB_ALLIANCECONTACTS: 441 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoAllianceContactsStanding', standingText=standingText) 442 else: 443 self.scroll.multiSelect = 1 444 for contact in self.contacts: 445 if not self.CheckIfAgent(contact.contactID): 446 if self.CheckHasLabel(data.groupID, contact.labelMask): 447 entryTuple = sm.GetService('addressbook').GetContactEntry(data, contact, onlineOnly, contactType=self.contactType, contactLevel=contact.relationshipID, labelMask=contact.labelMask) 448 if entryTuple is not None: 449 scrolllist.append(entryTuple) 450 451 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoContactsLabel', standingText=self.GetLabelName(data.groupID)) 452 if onlineOnly: 453 noContentHint = localization.GetByLabel('UI/PeopleAndPlaces/NoOnlineContact') 454 if len(self.quickFilter.GetValue()): 455 noContentHint = localization.GetByLabel('UI/Common/NothingFound') 456 totalNum = len(scrolllist) 457 for entryTuple in scrolllist: 458 entryTuple[1]['showChatBubble'] = True 459 460 scrolllist = SortListOfTuples(scrolllist, reverse) 461 scrolllist = scrolllist[self.startPos:self.startPos + const.maxContactsPerPage] 462 return (scrolllist, 463 noContentHint, 464 totalNum, 465 headers) 466 467 def LoadGroupFromNode(self, data, *args): 468 if self.contactType == TAB_ALLIANCECONTACTS and session.allianceid is None: 469 self.scroll.Load(fixedEntryHeight=19, contentList=[], noContentHint=localization.GetByLabel('UI/PeopleAndPlaces/OwnerNotInAnyAlliance', corpName=cfg.eveowners.Get(session.corpid).ownerName)) 470 return 471 scrolllist, noContentHint, totalNum, displayHeaders = self.GetScrolllist(data) 472 if displayHeaders: 473 headers = [localization.GetByLabel('UI/Common/Name')] 474 else: 475 headers = [] 476 self.scroll.Load(contentList=scrolllist, headers=headers, noContentHint=noContentHint) 477 self.UpdatePaginationCont(totalNum or 0) 478 479 def CheckBoxChange(self, checkbox, *args): 480 settings.user.ui.Set(checkbox.GetSettingsKey(), checkbox.checked) 481 self.LoadContactsForm() 482 483 def GetLeftGroups(self, data, *args): 484 scrolllist = self.GetScrolllist(data)[0] 485 return scrolllist 486 487 def LabelGroupMenu(self, node, *args): 488 return [(MenuLabel('UI/PeopleAndPlaces/ManageLabels'), self.ManageLabels)] 489 490 def LoadData(self, *args): 491 self.contacts = [] 492 self.blocked = [] 493 self.notifications = [] 494 allContacts = sm.GetService('addressbook').GetContacts() 495 if self.contactType == TAB_CONTACTS: 496 self.contacts = allContacts.contacts.values() 497 self.blocked = allContacts.blocked.values() 498 self.notifications = sm.GetService('notificationSvc').GetFormattedNotifications(const.groupContacts) 499 elif self.contactType == TAB_CORPCONTACTS: 500 self.contacts = allContacts.corpContacts.values() 501 elif self.contactType == TAB_ALLIANCECONTACTS: 502 self.contacts = allContacts.allianceContacts.values() 503 filter = self.quickFilter.GetValue() 504 if len(filter): 505 bannedwords.check_search_words_allowed(filter) 506 self.blocked = NiceFilter(self.quickFilter.QuickFilter, self.blocked) 507 self.contacts = NiceFilter(self.quickFilter.QuickFilter, self.contacts) 508 509 def BrowseContacts(self, backforth, *args): 510 pos = max(0, self.startPos + const.maxContactsPerPage * backforth) 511 self.startPos = pos 512 self.LoadContactsForm() 513 514 def UpdatePaginationCont(self, totalNum): 515 btnDisplayed = 0 516 if self.startPos == 0: 517 self.contactBackBtn.Disable() 518 else: 519 self.contactBackBtn.Enable() 520 btnDisplayed = 1 521 if self.startPos + const.maxContactsPerPage >= totalNum: 522 self.contactFwdBtn.Disable() 523 else: 524 self.contactFwdBtn.Enable() 525 btnDisplayed = 1 526 self.paginationCont.display = btnDisplayed 527 if btnDisplayed: 528 self.UpdatePageCountLabel(totalNum) 529 530 def UpdatePageCountLabel(self, totalNum): 531 numPages = int(math.ceil(totalNum / float(const.maxContactsPerPage))) 532 currentPage = self.startPos / const.maxContactsPerPage + 1 533 self.pageCount.text = '%s/%s' % (currentPage, numPages) 534 535 def OnContactDropData(self, dragObj, nodes): 536 if self.contactType == TAB_CONTACTS and settings.char.ui.Get('contacts_lastselected', None) == const.contactBlocked: 537 sm.GetService('addressbook').DropInBlocked(nodes) 538 else: 539 sm.GetService('addressbook').DropInPersonal(nodes, self.contactType) 540 541 def ReloadData(self): 542 self.LoadData() 543 self.LoadLeftSide() 544 if len(self.scroll.GetNodes()) < 1: 545 self.BrowseContacts(-1) 546 547 def OnNotificationsRefresh(self): 548 if self.contactType == TAB_CONTACTS and settings.char.ui.Get('contacts_lastselected', None) == const.contactNotifications: 549 self.ReloadData() 550 551 def OnMessageChanged(self, type, messageIDs, what): 552 if type == const.mailTypeNotifications and what == 'deleted': 553 if self.contactType == TAB_CONTACTS and settings.char.ui.Get('contacts_lastselected', None) == const.contactNotifications: 554 self.ReloadData() 555 556 def OnContactChange(self, contactIDs, contactType = None): 557 if contactType == self.contactType: 558 self.ReloadData() 559 560 def OnSetAllianceStanding(self, *args): 561 if self.contactType == TAB_ALLIANCECONTACTS: 562 self.ReloadData() 563 564 def OnSetCorpStanding(self, *args): 565 if self.contactType == TAB_CORPCONTACTS: 566 self.ReloadData() 567 568 def OnMyLabelsChanged(self, contactType, labelID): 569 if contactType == self.contactType: 570 self.LoadLeftSide() 571 572 def OnEditLabel(self, contactIDs, contactType): 573 if contactType == self.contactType: 574 self.ReloadData() 575 576 def OnUnblockContact(self, contactID): 577 if self.contactType == TAB_CONTACTS: 578 self.ReloadData() 579 580 def OnGroupDropData(self, groupID, nodes, *args): 581 what, labelID, labelName = groupID 582 contactIDs = [] 583 for node in nodes: 584 contactIDs.append(node.itemID) 585 586 if len(contactIDs): 587 sm.StartService('addressbook').AssignLabelFromWnd(contactIDs, labelID, labelName) 588 589 590 class LabelListGroup(ListGroup): 591 _manage_labels_button = None 592 593 def Startup(self, *etc): 594 super(LabelListGroup, self).Startup(*etc) 595 self._manage_labels_button = ButtonIcon(parent=self, align=uiconst.CENTERRIGHT, width=24, height=24, iconSize=16, texturePath=eveicon.settings, func=None, hint=localization.GetByLabel('UI/PeopleAndPlaces/ManageLabels')) 596 597 def Load(self, node): 598 super(LabelListGroup, self).Load(node) 599 manage_labels_callback = node.get('manage_labels_callback', None) 600 if manage_labels_callback: 601 self._manage_labels_button.func = manage_labels_callback