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

ownerSearch.py (11302B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\ownerSearch.py
      2 import copy
      3 import types
      4 import localization
      5 import utillib
      6 from carbonui import uiconst
      7 from carbonui.control.combo import Combo
      8 from carbonui.control.singlelineedits.singleLineEditText import SingleLineEditText
      9 from carbonui.primitives.container import Container
     10 from carbonui.util.various_unsorted import SortListOfTuples
     11 from eve.client.script.ui.control import eveLabel, eveScroll
     12 from carbonui.button.group import ButtonGroup
     13 from carbonui.control.button import Button
     14 from eve.client.script.ui.control.entries.user import SearchedUser
     15 from carbonui.control.window import Window
     16 from carbonui.control.tabGroup import TabGroup
     17 from eve.client.script.ui.util import searchOld, searchUtil
     18 from eve.common.script.search.const import MatchBy
     19 from eve.common.script.sys import idCheckers
     20 from eve.common.lib import appConst as const
     21 
     22 class OwnerSearchWindow(Window):
     23     __guid__ = 'form.OwnerSearchWindow'
     24     __notifyevents__ = ['OnContactChange',
     25      'OnContactNoLongerContact',
     26      'OnSearcedUserRemoved',
     27      'OnSearcedUserAdded']
     28     default_windowID = 'ownerSearchWindow'
     29     default_minSize = (250, 250)
     30     default_width = 300
     31     default_height = 400
     32     default_isMinimizable = False
     33 
     34     def ApplyAttributes(self, attributes):
     35         Window.ApplyAttributes(self, attributes)
     36         actionBtns = attributes.actionBtns or []
     37         caption = attributes.caption or ''
     38         inpt = attributes.input or ''
     39         showContactList = attributes.get('showContactList', False)
     40         extraIconHintFlag = attributes.extraIconHintFlag or None
     41         configname = attributes.configname or ''
     42         multiSelect = attributes.get('multiSelect', True)
     43         ownerGroups = attributes.get('ownerGroups', [const.groupCharacter])
     44         self.contactsLoaded = 0
     45         self.SetCaption(caption)
     46         self.showContactList = showContactList
     47         self.extraIconHintFlag = extraIconHintFlag
     48         self.configname = configname
     49         self.ownerGroups = ownerGroups
     50         self.sr.hintCont = Container(name='hintCont', parent=self.sr.main, align=uiconst.TOTOP, pos=(0, 0, 0, 16), state=uiconst.UI_HIDDEN)
     51         searchParent = self.sr.main
     52         if showContactList:
     53             self.sr.searchCont = Container(name='searchCont', parent=self.sr.main, align=uiconst.TOALL)
     54             self.sr.scroll = eveScroll.Scroll(name='searchScroll', parent=self.sr.searchCont, multiSelect=multiSelect)
     55             self.sr.scroll.OnSelectionChange = self.RefreshSelection
     56             self.sr.contactsScroll = eveScroll.Scroll(name='contactsScroll', parent=self.sr.main, multiSelect=multiSelect)
     57             self.sr.contactsScroll.OnSelectionChange = self.RefreshSelection
     58             self.sr.tabs = TabGroup(name='tabs', parent=self.sr.main, tabs=[[localization.GetByLabel('UI/Mail/Search'),
     59               self.sr.searchCont,
     60               self,
     61               'search'], [localization.GetByLabel('UI/Mail/AllContacts'),
     62               self.sr.contactsScroll,
     63               self,
     64               'contacts']], groupID='calenderEvent_tabs', autoselecttab=1, idx=0)
     65             searchParent = self.sr.searchCont
     66         else:
     67             self.sr.scroll = eveScroll.Scroll(parent=self.sr.main, multiSelect=multiSelect)
     68             self.sr.scroll.OnSelectionChange = self.RefreshSelection
     69         self.currentScroll = self.sr.scroll
     70         searchCont = Container(name='searchCont', parent=searchParent, align=uiconst.TOTOP, idx=0, height=40)
     71         searchByCont = Container(name='searchByCont', parent=searchParent, align=uiconst.TOTOP, idx=0, height=40)
     72         searchBtnCont = Container(name='searchBtnCont', parent=searchCont, align=uiconst.TORIGHT, height=40)
     73         inputCont = Container(name='inputCont', parent=searchCont, align=uiconst.TOALL)
     74         self.sr.searchBy = Combo(label=localization.GetByLabel('UI/Common/SearchBy'), parent=searchByCont, options=searchUtil.GetSearchByChoices(), name='ownerSearchSearchBy', select=settings.user.ui.Get('ownersSearchBy', MatchBy.partial_terms), width=170, labelleft=65, callback=self.ChangeSearchBy)
     75         self.sr.inpt = inpt = SingleLineEditText(name='input', parent=inputCont, maxLength=50, label='', setvalue=inpt, align=uiconst.TOTOP, isCharacterField=True)
     76         self.sr.searchBtn = Button(parent=searchBtnCont, label=localization.GetByLabel('UI/Mail/Search'), func=self.Search, btn_default=1, padLeft=8)
     77         searchBtnCont.width = self.sr.searchBtn.width
     78         btns = []
     79         self.dblClickFunc = None
     80         for each in actionBtns:
     81             text, func, dblClickFunc = each
     82             btns.append([text,
     83              func,
     84              lambda : self.GetSelectedInCurrentScroll(),
     85              None])
     86             if dblClickFunc:
     87                 self.dblClickFunc = func
     88 
     89         self.sr.btns = ButtonGroup(btns=btns, parent=self.sr.main, idx=0)
     90         self.sr.btns.state = uiconst.UI_HIDDEN
     91         self.sr.scroll.Load(contentList=[], headers=[], noContentHint=localization.GetByLabel('UI/Common/TypeInSearch'))
     92 
     93     def ChangeSearchBy(self, entry, header, value, *args):
     94         settings.user.ui.Set('ownersSearchBy', value)
     95 
     96     def GetSelectedInCurrentScroll(self, *args):
     97         return self.currentScroll.GetSelected()
     98 
     99     def Load(self, key, *args):
    100         if not self or self.destroyed:
    101             return
    102         if key == 'contacts':
    103             if not self.contactsLoaded:
    104                 self.LoadContacts()
    105                 self.contactsLoaded = 1
    106             self.currentScroll = self.sr.contactsScroll
    107         elif key == 'search':
    108             self.currentScroll = self.sr.scroll
    109         self.RefreshSelection()
    110 
    111     def RefreshSelection(self, *args):
    112         sel = self.currentScroll.GetSelected()
    113         if len(sel) < 1:
    114             self.sr.btns.state = uiconst.UI_HIDDEN
    115             return
    116         self.sr.btns.state = uiconst.UI_PICKCHILDREN
    117 
    118     def DblClickEntry(self, entry, ignoreConfirm = False, *args):
    119         if ignoreConfirm or entry.confirmOnDblClick:
    120             self.currentScroll.SelectNode(entry.sr.node)
    121             if self.dblClickFunc is not None:
    122                 self.dblClickFunc(self.currentScroll.GetSelected)
    123 
    124     def ClickEntry(self, *args):
    125         self.RefreshSelection()
    126 
    127     def ExtraMenuFunction(self, *args):
    128         return []
    129 
    130     def Search(self, *args):
    131         inpt = self.sr.inpt.GetValue()
    132         if inpt.strip() == '':
    133             self.sr.scroll.Load(contentList=[], headers=[], noContentHint=localization.GetByLabel('UI/Common/TypeInSearch'))
    134             return
    135         hint = ''
    136         searchBy = settings.user.ui.Get('ownersSearchBy', MatchBy.partial_terms)
    137         lst = []
    138         for groupID in self.ownerGroups:
    139             lst += searchOld.Search(inpt, groupID, getWindow=0, hideNPC=1, notifyOneMatch=1, modal=0, getError=1, exact=searchBy)
    140 
    141         if len(lst) >= 500:
    142             hint = localization.GetByLabel('UI/Mail/25OrMoreFound', name=inpt)
    143         try:
    144             scrolllist = self.GetUserEntries(lst)
    145             extraEntries = self.GetExtraSearchEntries(inpt, searchBy)
    146             scrolllist = extraEntries + scrolllist
    147             noContentHint = localization.GetByLabel('UI/Market/NothingFoundWithSearch', search=inpt)
    148             self.sr.scroll.Load(contentList=scrolllist, headers=[], noContentHint=noContentHint)
    149             self.SetHint(hint)
    150             self.RefreshSelection()
    151         except:
    152             if not self or self.destroyed:
    153                 return
    154             raise
    155 
    156     def GetExtraSearchEntries(self, searchString, searchBy):
    157         return []
    158 
    159     def GetUserEntries(self, lst):
    160         scrolllist = []
    161         for info in lst:
    162             if type(info) in [types.StringType, types.UnicodeType]:
    163                 continue
    164             entryTuple = self.GetUserEntryTuple(info[1])
    165             scrolllist.append(entryTuple)
    166 
    167         scrolllist = SortListOfTuples(scrolllist)
    168         return scrolllist
    169 
    170     def SetHint(self, hint):
    171         hp = self.sr.hintCont
    172         hp.Flush()
    173         if hint:
    174             t = eveLabel.EveLabelMedium(text=hint, parent=hp, top=-3, align=uiconst.CENTER, width=self.minsize[0] - 32, state=uiconst.UI_DISABLED)
    175             hp.state = uiconst.UI_DISABLED
    176             hp.height = t.height + 4
    177         else:
    178             hp.state = uiconst.UI_HIDDEN
    179 
    180     def LoadContacts(self, *args):
    181         allContacts = sm.GetService('addressbook').GetContacts()
    182         contacts = allContacts.contacts.values()
    183         scrolllist = []
    184         for contact in contacts:
    185             if idCheckers.IsNPC(contact.contactID):
    186                 continue
    187             if cfg.eveowners.Get(contact.contactID).groupID not in self.ownerGroups:
    188                 continue
    189             entryTuple = self.GetUserEntryTuple(contact.contactID, contact)
    190             scrolllist.append(entryTuple)
    191 
    192         scrolllist = SortListOfTuples(scrolllist)
    193         self.sr.contactsScroll.Load(contentList=scrolllist, headers=[], noContentHint=localization.GetByLabel('UI/AddressBook/NoContacts'))
    194 
    195     def GetUserEntryTuple(self, ownerID, contact = None, *args):
    196         if contact is None:
    197             contact = utillib.KeyVal(contactID=ownerID)
    198         extraIconHintFlag = copy.copy(self.extraIconHintFlag)
    199         if extraIconHintFlag and self.IsAdded(ownerID):
    200             extraIconHintFlag[-1] = True
    201         extraInfo = utillib.KeyVal(extraIconHintFlag=extraIconHintFlag, wndConfigname=self.configname)
    202         entryTuple = sm.GetService('addressbook').GetContactEntry(None, contact, dblClick=self.DblClickContact, menuFunction=self.ExtraMenuFunction, extraInfo=extraInfo, listentryType=SearchedUser)
    203         return entryTuple
    204 
    205     def IsAdded(self, contactID, *args):
    206         return False
    207 
    208     def DblClickContact(self, entry, *args):
    209         self.DblClickEntry(entry, ignoreConfirm=True)
    210 
    211     def OnContactChange(self, contactIDs, contactType):
    212         if contactType == 'contact':
    213             self.ReloadContactList()
    214 
    215     def OnContactNoLongerContact(self, ownerID):
    216         self.ReloadContactList()
    217 
    218     def ReloadContactList(self, *args):
    219         if self.showContactList and self.contactsLoaded:
    220             self.LoadContacts()
    221 
    222     def OnSearcedUserAdded(self, ownerID, configname, *args):
    223         self.MarkEntriesAddedOrRemoved(configname, [ownerID], isAdded=1)
    224 
    225     def OnSearcedUserRemoved(self, ownerIDs, configname, *args):
    226         self.MarkEntriesAddedOrRemoved(configname, ownerIDs, isAdded=0)
    227 
    228     def MarkEntriesAddedOrRemoved(self, configname, ownerIDs, isAdded = 0, *args):
    229         if self.configname != configname:
    230             return
    231         if len(ownerIDs) < 1:
    232             return
    233         scrolls = []
    234         for scrollName in ['scroll', 'contactsScroll']:
    235             scroll = self.sr.Get(scrollName, None)
    236             if scroll is not None:
    237                 scrolls.append(scroll)
    238 
    239         for scroll in scrolls:
    240             ids = ownerIDs[:]
    241             for entry in scroll.GetNodes():
    242                 if entry.charID in ids:
    243                     ids.remove(entry.charID)
    244                     entry.isAdded = isAdded
    245                     if entry.panel:
    246                         entry.panel.SearcedUserAddedOrRemoved(entry.isAdded)
    247                     if len(ids) < 1:
    248                         break