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

fleetbroadcast.py (16625B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\fleet\fleetbroadcast.py
      2 import eve.client.script.ui.shared.pointerTool.pointerToolConst as pConst
      3 import evefleet.client
      4 import localization
      5 from carbonui import ButtonVariant, Density, uiconst
      6 from carbonui.button.const import HEIGHT_COMPACT
      7 from carbonui.control.button import Button
      8 from carbonui.control.combo import Combo
      9 from carbonui.control.window import Window
     10 from carbonui.primitives.container import Container
     11 from carbonui.primitives.fill import Fill
     12 from eve.client.script.ui.control import eveLabel
     13 from eve.client.script.ui.control.colorPanel import ColorPanel
     14 from eve.client.script.ui.control.entries.checkbox import CheckboxEntry
     15 from eve.client.script.ui.control.entries.generic import Generic
     16 from eve.client.script.ui.control.entries.util import GetFromClass
     17 from eve.client.script.ui.control.eveScroll import Scroll
     18 from eve.client.script.ui.shared.fleet import fleetbroadcastexports as fleetbr, fleetBroadcastConst
     19 from evefleet import BROADCAST_SHOW_OWN
     20 from eve.common.script.sys.idCheckers import IsUniverseCelestial
     21 from eveservices.menu import GetMenuService
     22 from utillib import KeyVal
     23 comboOptions = ((localization.GetByLabel('UI/Common/All'), 'all'),
     24  (localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastHistory'), 'broadcasthistory'),
     25  (localization.GetByLabel('UI/Fleet/FleetBroadcast/MemberHistory'), 'memberhistory'),
     26  (localization.GetByLabel('UI/Fleet/FleetBroadcast/LootHistory'), 'loothistory'))
     27 
     28 class BroadcastHistoryPanel(Container):
     29     __notifyevents__ = ['OnFleetBroadcast_Local',
     30      'OnFleetLootEvent_Local',
     31      'OnFleetBroadcastFilterChange',
     32      'OnFleetJoin_Local',
     33      'OnFleetLeave_Local',
     34      'OnFleetMemberChanged_Local']
     35 
     36     def PostStartup(self):
     37         sm.RegisterNotify(self)
     38         self.sr.broadcastHistory = []
     39         self.broadcastMenuItems = []
     40         header = self
     41         header.baseHeight = header.height
     42         self.panelHistory = Container(name='panelHistory', parent=self)
     43         historyType = settings.user.ui.Get('fleetHistoryFilter', 'broadcasthistory')
     44         topCont = Container(parent=self.panelHistory, align=uiconst.TOTOP, height=HEIGHT_COMPACT)
     45         self.combo = Combo(parent=topCont, options=comboOptions, name='filter', select=historyType, callback=self.LoadHistory, width=145, align=uiconst.TOPLEFT, uniqueUiName=pConst.UNIQUE_NAME_FLEET_HISTORY_FILTER, density=Density.COMPACT)
     46         self.clearBtn = Button(parent=topCont, label=localization.GetByLabel('UI/Accessories/Calculator/Clear'), func=self.OnClear, align=uiconst.TOPRIGHT, density=Density.COMPACT, variant=ButtonVariant.GHOST)
     47         self.scrollHistory = Scroll(name='allHistoryScroll', parent=self.panelHistory, align=uiconst.TOALL, padTop=4)
     48 
     49     def ClearHistory(self, args):
     50         fleetSvc = sm.GetService('fleet')
     51         if args == 'broadcasthistory':
     52             fleetSvc.broadcastHistory = []
     53         elif args == 'loothistory':
     54             fleetSvc.lootHistory = []
     55         elif args == 'memberhistory':
     56             fleetSvc.memberHistory = []
     57         elif args == 'all':
     58             fleetSvc.broadcastHistory = []
     59             fleetSvc.lootHistory = []
     60             fleetSvc.memberHistory = []
     61         self.LoadHistory(self.combo, '', args)
     62 
     63     def LoadPanel(self):
     64         if not self.sr.Get('inited', 0):
     65             self.PostStartup()
     66             setattr(self.sr, 'inited', 1)
     67         self.LoadHistory(self.combo, '', self.combo.selectedValue)
     68 
     69     def LoadHistory(self, combo, label, value, *args):
     70         sp = self.scrollHistory.GetScrollProportion()
     71         self.scrollHistory.multiSelect = 1
     72         self.scrollHistory.OnChar = self.OnScrollHistoryChar
     73         if value == 'broadcasthistory':
     74             scrolllist, hint = self.LoadBroadcastHistory()
     75             self.scrollHistory.multiSelect = 0
     76             self.scrollHistory.OnChar = self.OnScrollBroadcastChar
     77         elif value == 'loothistory':
     78             scrolllist, hint = self.LoadLootHistory()
     79         elif value == 'memberhistory':
     80             scrolllist, hint = self.LoadMemberHistory()
     81         else:
     82             scrolllist, hint = self.LoadAllHistory()
     83         settings.user.ui.Set('fleetHistoryFilter', value)
     84         self.scrollHistory.Load(contentList=scrolllist, scrollTo=sp, headers=[], noContentHint=hint)
     85 
     86     def LoadAllHistory(self):
     87         allHistory = []
     88         broadcastHistory, hint = self.LoadBroadcastHistory()
     89         memberHistory, hint = self.LoadMemberHistory()
     90         lootHistory, hint = self.LoadLootHistory()
     91         allHistory.extend(broadcastHistory)
     92         allHistory.extend(memberHistory)
     93         allHistory.extend(lootHistory)
     94         allHistory.sort(key=lambda x: x.time, reverse=True)
     95         hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/NoEventsYet')
     96         return (allHistory, hint)
     97 
     98     def LoadBroadcastHistory(self):
     99         scrolllist = []
    100         broadcastHistory = sm.GetService('fleet').GetBroadcastHistory()
    101         for kv in broadcastHistory:
    102             data = self.GetBroadcastListEntry(kv)
    103             data.Set('sort_%s' % localization.GetByLabel('UI/Common/DateWords/Time'), kv.time)
    104             data.time = kv.time
    105             data.OnClick = self.OnBroadcastClick
    106             scrolllist.append(GetFromClass(BroadcastEntry, data))
    107 
    108         hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/NoEventsYet')
    109         return (scrolllist, hint)
    110 
    111     def OnBroadcastClick(self, entry):
    112         data = entry.sr.node.data
    113         itemID = data.itemID
    114         if data.itemID == session.shipid or session.shipid is None or data.itemID is None or IsUniverseCelestial(data.itemID):
    115             return
    116         GetMenuService().TacticalItemClicked(itemID)
    117 
    118     def LoadLootHistory(self):
    119         scrolllist = []
    120         lootHistory = sm.GetService('fleet').GetLootHistory()
    121         for kv in lootHistory:
    122             label = localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastEventLoot', time=kv.time, charID=kv.charID, item=kv.typeID, itemQuantity=kv.quantity)
    123             data = KeyVal(charID=kv.charID, label=label, GetMenu=self.GetLootMenu, data=kv)
    124             data.Set('sort_%s' % localization.GetByLabel('UI/Common/DateWords/Time'), kv.time)
    125             data.time = kv.time
    126             scrolllist.append(GetFromClass(Generic, data))
    127 
    128         hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/NoEventsYet')
    129         return (scrolllist, hint)
    130 
    131     def LoadMemberHistory(self):
    132         scrolllist = []
    133         memberHistory = sm.GetService('fleet').GetMemberHistory()
    134         for kv in memberHistory:
    135             label = localization.GetByLabel('UI/Fleet/FleetBroadcast/Event', time=kv.time, eventLabel=kv.event)
    136             data = KeyVal(charID=kv.charID, label=label, GetMenu=self.GetMemberMenu, data=kv)
    137             data.Set('sort_%s' % localization.GetByLabel('UI/Common/DateWords/Time'), kv.time)
    138             data.time = kv.time
    139             scrolllist.append(GetFromClass(Generic, data))
    140 
    141         hint = localization.GetByLabel('UI/Fleet/FleetBroadcast/NoEventsYet')
    142         return (scrolllist, hint)
    143 
    144     def OpenSettings(self):
    145         BroadcastSettings.Open()
    146 
    147     def OnClear(self, *args):
    148         selectedValue = self.combo.selectedValue
    149         self.ClearHistory(selectedValue)
    150 
    151     def OnScrollHistoryChar(self, *args):
    152         Scroll.OnChar(self, *args)
    153 
    154     def OnScrollBroadcastChar(self, *args):
    155         return False
    156 
    157     def GetBroadcastListEntry(self, data):
    158         label = localization.GetByLabel('UI/Fleet/FleetBroadcast/Event', time=data.time, eventLabel=data.broadcastLabel)
    159         colorcoded = settings.user.ui.Get(fleetBroadcastConst.BROADCAST_COLOR_SETTING % data.name, None)
    160         data2 = KeyVal(charID=data.charID, label=label, GetMenu=self.GetBroadcastMenu, data=data, colorcoded=colorcoded)
    161         return data2
    162 
    163     def OnFleetLootEvent_Local(self):
    164         selectedValue = self.combo.selectedValue
    165         if selectedValue in ('loothistory', 'all'):
    166             self.LoadHistory(self.combo, '', selectedValue)
    167 
    168     def OnFleetJoin_Local(self, rec):
    169         selectedValue = self.combo.selectedValue
    170         if selectedValue in ('memberhistory', 'all'):
    171             self.LoadHistory(self.combo, '', selectedValue)
    172 
    173     def OnFleetLeave_Local(self, rec):
    174         selectedValue = self.combo.selectedValue
    175         if selectedValue in ('memberhistory', 'all'):
    176             self.LoadHistory(self.combo, '', selectedValue)
    177 
    178     def OnFleetMemberChanged_Local(self, *args):
    179         selectedValue = self.combo.selectedValue
    180         if selectedValue in ('memberhistory', 'all'):
    181             self.LoadHistory(self.combo, '', selectedValue)
    182 
    183     def GetBroadcastMenu(self, entry):
    184         m = []
    185         data = entry.sr.node.data
    186         func = getattr(fleetbr, 'GetMenu_%s' % data.name, None)
    187         if func:
    188             args = (data.charID, data.solarSystemID, data.itemID)
    189             if getattr(data, 'typeID', None):
    190                 args += (data.typeID,)
    191             m = func(*args)
    192             m += [None]
    193         m += fleetbr.GetMenu_Member(data.charID)
    194         m += [None]
    195         m += fleetbr.GetMenu_Ignore(data.name)
    196         return m
    197 
    198     def GetLootMenu(self, entry):
    199         m = []
    200         data = entry.sr.node.data
    201         m += GetMenuService().GetMenuFromItemIDTypeID(None, data.typeID, includeMarketDetails=True)
    202         m += [None]
    203         m += fleetbr.GetMenu_Member(data.charID)
    204         return m
    205 
    206     def GetMemberMenu(self, entry):
    207         m = []
    208         data = entry.sr.node.data
    209         m += fleetbr.GetMenu_Member(data.charID)
    210         return m
    211 
    212     def OnFleetBroadcast_Local(self, broadcast):
    213         self.RefreshBroadcastHistory()
    214 
    215     def OnFleetBroadcastFilterChange(self):
    216         self.RefreshBroadcastHistory()
    217 
    218     def RefreshBroadcastHistory(self):
    219         selectedValue = self.combo.selectedValue
    220         if selectedValue in ('broadcasthistory', 'all'):
    221             self.LoadHistory(self.combo, '', selectedValue)
    222 
    223 
    224 def CopyFunctions(class_, locals_):
    225     for name, fn in class_.__dict__.iteritems():
    226         if type(fn) is type(CopyFunctions):
    227             if name in locals_:
    228                 raise RuntimeError('What are you trying to do here?')
    229             locals_[name] = fn
    230 
    231 
    232 class BroadcastSettings(Window):
    233     __guid__ = 'form.BroadcastSettings'
    234     default_windowID = 'broadcastsettings'
    235     default_captionLabelPath = 'UI/Fleet/FleetBroadcast/BroadcastSettings'
    236     default_width = 480
    237     default_height = 380
    238     default_minSize = (300, 200)
    239 
    240     def ApplyAttributes(self, attributes):
    241         self.shareContainer = None
    242         Window.ApplyAttributes(self, attributes)
    243         self.sr.main.left = self.sr.main.width = self.sr.main.top = self.sr.main.height = uiconst.defaultPadding
    244         eveLabel.EveLabelMedium(text=localization.GetByLabel('UI/Fleet/FleetBroadcast/BroadcastSettingsHelp'), parent=self.sr.main, align=uiconst.TOTOP, padding=(20, 0, 6, 0), state=uiconst.UI_NORMAL)
    245         Container(name='push', parent=self.sr.main, align=uiconst.TOTOP, height=6)
    246         shareParent = Container(name='shareParent', parent=self.sr.main, align=uiconst.TOBOTTOM, height=36, padTop=4)
    247         self.sr.scrollBroadcasts = Scroll(name='scrollBroadcasts', parent=self.sr.main)
    248         self.sr.scrollBroadcasts.multiSelect = 0
    249         self.LoadFilters()
    250         from eve.client.script.ui.control.draggableShareContainer import DraggableShareContainer
    251         defaultText = localization.GetByLabel('UI/Fleet/FleetBroadcast/SharedBroadcastSettings', charID=session.charid)
    252         currentText = settings.char.ui.Get('sharedBroadcastDragCont_name', '')
    253         currentText = currentText.strip() or defaultText
    254         self.shareContainer = DraggableShareContainer(parent=shareParent, currentText=currentText, defaultText=defaultText, align=uiconst.BOTTOMRIGHT, configName='sharedBroadcastDragCont', getDragDataFunc=self.OnFilterDragged, hintText=localization.GetByLabel('UI/Fleet/FleetBroadcast/ShareBroadcastSettingsHint'), maxLength=60)
    255 
    256     def OnFilterDragged(self, text, *args):
    257         text = text or localization.GetByLabel('UI/Fleet/FleetBroadcast/SharedBroadcastSettings', charID=session.charid)
    258         broadcastSettings = self.GetDataForSharing()
    259         data = {'broadcastSettings': broadcastSettings}
    260         sharedSettingKeyVal = KeyVal(__guid__='fakeentry.BroadcastSharing', data=data, label=text)
    261         return [sharedSettingKeyVal]
    262 
    263     def GetDataForSharing(self):
    264         nameToFlag = {y:x for x, y in fleetBroadcastConst.flagToName.iteritems()}
    265         data = []
    266         for name in fleetBroadcastConst.broadcastNames.iterkeys():
    267             isChecked = bool(settings.user.ui.Get(fleetBroadcastConst.LISTEN_BROADCAST_SETTING % name, True))
    268             colorcoded = settings.user.ui.Get(fleetBroadcastConst.BROADCAST_COLOR_SETTING % name, None)
    269             if name == BROADCAST_SHOW_OWN:
    270                 flag = BROADCAST_SHOW_OWN
    271             else:
    272                 flag = nameToFlag.get(name)
    273             data.append((flag, isChecked, colorcoded))
    274 
    275         return data
    276 
    277     def LoadFilters(self):
    278         scrolllist = []
    279         for name, labelName in fleetBroadcastConst.broadcastNames.iteritems():
    280             data = KeyVal()
    281             if name == 'Event':
    282                 rngName = ''
    283             else:
    284                 rng = fleetbr.GetBroadcastWhere(name)
    285                 rngName = fleetbr.GetBroadcastWhereName(rng)
    286             if name == BROADCAST_SHOW_OWN:
    287                 data.showColorPicker = False
    288                 checkedDefault = False
    289             else:
    290                 data.showColorPicker = True
    291                 checkedDefault = True
    292                 data.hint = '%s:<br>%s' % (localization.GetByLabel('UI/Fleet/FleetBroadcast/RecipientRange'), rngName)
    293             data.label = localization.GetByLabel(labelName)
    294             data.props = None
    295             data.checked = bool(settings.user.ui.Get(fleetBroadcastConst.LISTEN_BROADCAST_SETTING % name, checkedDefault))
    296             data.cfgname = name
    297             data.retval = None
    298             data.colorcoded = settings.user.ui.Get(fleetBroadcastConst.BROADCAST_COLOR_SETTING % name, None)
    299             data.OnChange = self.Filter_OnCheckBoxChange
    300             scrolllist.append(GetFromClass(BroadcastSettingsEntry, data))
    301 
    302         self.sr.scrollBroadcasts.sr.id = 'scrollBroadcasts'
    303         self.sr.scrollBroadcasts.Load(contentList=scrolllist)
    304 
    305     def Filter_OnCheckBoxChange(self, cb, *args):
    306         sm.GetService('fleet').SetListenBroadcast(cb.GetSettingsKey(), cb.checked)
    307 
    308     def _OnResize(self, *args, **kw):
    309         if self.shareContainer is None:
    310             return
    311         self.shareContainer.SetMaxWidth(self.width - 2 * self.shareContainer.left - 10)
    312 
    313 
    314 class BroadcastSettingsEntry(CheckboxEntry):
    315     colorList = [(1.0, 0.7, 0.0),
    316      (1.0, 0.35, 0.0),
    317      (0.75, 0.0, 0.0),
    318      (0.1, 0.6, 0.1),
    319      (0.0, 0.63, 0.57),
    320      (0.2, 0.5, 1.0),
    321      (0.0, 0.15, 0.6),
    322      (0.0, 0.0, 0.0),
    323      (0.7, 0.7, 0.7)]
    324 
    325     def Startup(self, *args):
    326         CheckboxEntry.Startup(self, *args)
    327         self.colorPicker = evefleet.client.FleetColorPickerCont(parent=self, idx=0, callback=self.SetBroadcastTypeColor)
    328 
    329     def Load(self, node):
    330         CheckboxEntry.Load(self, node)
    331         if node.showColorPicker:
    332             self.colorPicker.display = True
    333             self.colorPicker.SetCurrentFill(self.sr.node.colorcoded)
    334         else:
    335             self.colorPicker.display = False
    336 
    337     def GetColorTooltipPointer(self):
    338         return uiconst.POINT_LEFT_2
    339 
    340     def GetTooltipDelay(self):
    341         return 50
    342 
    343     def SetBroadcastTypeColor(self, color, colorPicker, *args):
    344         settings.user.ui.Set(fleetBroadcastConst.BROADCAST_COLOR_SETTING % self.sr.node.cfgname, color)
    345         self.sr.node.colorcoded = color
    346         sm.ScatterEvent('OnFleetBroadcastFilterChange')
    347 
    348     def _OnResize(self):
    349         w, h = self.GetAbsoluteSize()
    350         availableWidth = w - self.sr.label.left - self.colorPicker.colorCont.width - 10
    351         textwidth = self.sr.label.textwidth
    352         if textwidth > availableWidth:
    353             fadeEnd = availableWidth
    354             self.sr.label.SetRightAlphaFade(fadeEnd, maxFadeWidth=20)
    355         else:
    356             self.sr.label.SetRightAlphaFade(0, maxFadeWidth=0)
    357 
    358 
    359 class BroadcastEntry(Generic):
    360 
    361     def Startup(self, *args):
    362         Generic.Startup(self, *args)
    363         self.colorcodedFill = Fill(bgParent=self, color=(0, 0, 0, 0))
    364 
    365     def Load(self, node):
    366         Generic.Load(self, node)
    367         if node.colorcoded:
    368             fillColor = node.colorcoded + (0.25,)
    369             self.colorcodedFill.SetRGBA(*fillColor)