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

addressBookEntries.py (7384B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\addressBookEntries.py
      2 import eveicon
      3 from carbon.common.script.sys.serviceConst import ROLE_GML, ROLE_WORLDMOD
      4 from carbonui import TextColor, uiconst
      5 from carbonui.control.scrollentries import SE_BaseClassCore
      6 from carbonui.primitives.fill import Fill
      7 from eve.client.script.ui import eveColor, eveThemeColor
      8 from eve.client.script.ui.control import eveIcon, eveLabel
      9 from eve.client.script.ui.util import uix
     10 import uthread
     11 import localization
     12 import blue
     13 from eveservices.menu import GetMenuService
     14 from menu import MenuLabel
     15 from player_messaging.client.ui_message import prompt_player_fsd_dialog
     16 
     17 class PlaceEntry(SE_BaseClassCore):
     18     __guid__ = 'listentry.PlaceEntry'
     19     __nonpersistvars__ = []
     20     isDragObject = True
     21 
     22     def Startup(self, *etc):
     23         self.sr.label = eveLabel.EveLabelMedium(text='', parent=self, left=6, align=uiconst.CENTERLEFT, state=uiconst.UI_DISABLED, idx=0, maxLines=1)
     24         self.sr.icon = eveIcon.Icon(icon=eveicon.location, parent=self, pos=(4, 1, 16, 16), align=uiconst.RELATIVE, ignoreSize=True, state=uiconst.UI_DISABLED)
     25 
     26     def Load(self, node):
     27         self.sr.node = node
     28         data = node
     29         sublevelCorrection = self.sr.node.scroll.sr.get('sublevelCorrection', 0)
     30         sublevel = max(0, data.Get('sublevel', 0) - sublevelCorrection)
     31         self.sr.label.left = 24 + sublevel * 16
     32         self.sr.icon.left = 4 + sublevel * 16
     33         self.sr.bm = data.bm
     34         self.sr.label.text = data.label
     35         self.id = self.sr.bm.bookmarkID
     36         self.groupID = self.sr.node.listGroupID
     37         if self.sr.node.Get('selected', 0):
     38             self.Select()
     39         else:
     40             self.Deselect()
     41         is_available = self.sr.node.Get('isBookmarkAvailable', True)
     42         alpha = 1.0 if is_available else 0.5
     43         if self.sr.bm.itemID and self.sr.bm.itemID == sm.GetService('starmap').GetDestination():
     44             color = tuple(eveColor.DESTINATION_YELLOW[:3]) + (alpha,)
     45             self.sr.label.SetRGBA(*color)
     46         elif self.sr.bm.locationID == session.solarsystemid2:
     47             color = tuple(eveThemeColor.THEME_FOCUS[:3]) + (alpha,)
     48             self.sr.label.SetRGBA(*color)
     49         else:
     50             color = TextColor.NORMAL if is_available else TextColor.SECONDARY
     51             self.sr.label.SetRGBA(*color)
     52         self.EnableDrag()
     53         dropDataFunc = getattr(node, 'DropData')
     54         if dropDataFunc is not None:
     55             self.OnDropData = dropDataFunc
     56         if getattr(node, 'isGroupPersonal', None) is not None:
     57             if node.isGroupPersonal:
     58                 texturePath = eveicon.location
     59             else:
     60                 texturePath = eveicon.shared_location
     61             self.sr.icon.texturePath = texturePath
     62 
     63     def GetHeight(_self, *args):
     64         node, width = args
     65         node.height = uix.GetTextHeight(node.label, maxLines=1) + 4
     66         return node.height
     67 
     68     def OnMouseHover(self, *args):
     69         uthread.new(self.SetHint)
     70 
     71     def SetHint(self, *args):
     72         if not (self.sr and self.sr.node):
     73             return
     74         bookmark = self.sr.node.bm
     75         hint = self.sr.node.hint
     76         isBookmarkAvailable = self.sr.node.Get('isBookmarkAvailable', True)
     77         destination = sm.GetService('starmap').GetDestination()
     78         if destination is not None and destination == bookmark.itemID:
     79             hint = localization.GetByLabel('UI/PeopleAndPlaces/BookmarkHintCurrent', hintText=hint)
     80         elif not isBookmarkAvailable:
     81             hint = localization.GetByLabel('UI/AclBookmarks/BookmarkHintNotYetAvailable', hintText=hint)
     82         else:
     83             hint = localization.GetByLabel('UI/PeopleAndPlaces/BookmarkHint', hintText=hint)
     84         self.hint = hint
     85 
     86     def OnDblClick(self, *args):
     87         sm.GetService('addressbook').EditBookmark(self.sr.bm)
     88 
     89     def OnClick(self, *args):
     90         self.sr.node.scroll.SelectNode(self.sr.node)
     91         prompt_player_fsd_dialog('ListEntryClick')
     92         if self.sr.node.Get('OnClick', None):
     93             self.sr.node.OnClick(self)
     94 
     95     def ShowInfo(self, *args):
     96         sm.GetService('info').ShowInfo(const.typeBookmark, self.sr.bm.bookmarkID)
     97 
     98     def GetDragData(self, *args):
     99         ret = []
    100         for each in self.sr.node.scroll.GetSelectedNodes(self.sr.node):
    101             if not hasattr(each, 'itemID'):
    102                 continue
    103             if isinstance(each.itemID, tuple):
    104                 self.DisableDrag()
    105                 prompt_player_fsd_dialog('CantTradeMissionBookmarks')
    106                 return []
    107             ret.append(each)
    108 
    109         return ret
    110 
    111     def GetMenu(self):
    112         selected = self.sr.node.scroll.GetSelectedNodes(self.sr.node)
    113         multi = len(selected) > 1
    114         m = []
    115         bmIDs = [ entry.bm.bookmarkID for entry in selected if entry.bm ]
    116         if session.role & (ROLE_GML | ROLE_WORLDMOD):
    117             if len(bmIDs) > 10:
    118                 text = MenuLabel('UI/PeopleAndPlaces/BookmarkIDTooMany')
    119             else:
    120                 idString = bmIDs
    121                 text = MenuLabel('UI/PeopleAndPlaces/BookmarkIDs', {'bookmarkIDs': idString})
    122             m += [(text, self.CopyItemIDToClipboard, (bmIDs,)), None]
    123             m.append(None)
    124         prompt_player_fsd_dialog('ListEntryClick')
    125         if not multi:
    126             m += GetMenuService().BookmarkMenu(selected[0].bm)
    127         elif not all((isinstance(bmID, tuple) for bmID in bmIDs)):
    128             m.append((MenuLabel('UI/Inflight/RemoveBookmark'), self.Delete, (bmIDs,)))
    129         if self.sr.node.Get('GetMenu', None) is not None:
    130             m += self.sr.node.GetMenu(self.sr.node)
    131         return m
    132 
    133     def CopyItemIDToClipboard(self, itemID):
    134         blue.pyos.SetClipboardData(str(itemID))
    135 
    136     def Approach(self, *args):
    137         bp = sm.GetService('michelle').GetRemotePark()
    138         if bp:
    139             bp.CmdGotoBookmark(self.sr.bm.bookmarkID)
    140 
    141     def WarpTo(self, *args):
    142         sm.GetService('michelle').CmdWarpToStuff('bookmark', self.sr.bm.bookmarkID)
    143 
    144     def Delete(self, bmIDs = None):
    145         ids = bmIDs or [ entry.bm.bookmarkID for entry in self.sr.node.scroll.GetSelected() ]
    146         if ids:
    147             sm.GetService('addressbook').DeleteBookmarks(ids)
    148 
    149     def OnMouseDown(self, *args):
    150         bookMarkInfo = self.sr.bm
    151         GetMenuService().TryExpandActionMenu(itemID=bookMarkInfo.itemID, clickedObject=self, bookmarkInfo=bookMarkInfo)
    152 
    153     def GetRadialMenuIndicator(self, create = True, *args):
    154         indicator = getattr(self, 'radialMenuIndicator', None)
    155         if indicator and not indicator.destroyed:
    156             return indicator
    157         if not create:
    158             return
    159         self.radialMenuIndicator = Fill(bgParent=self, color=(1, 1, 1, 0.1), name='radialMenuIndicator')
    160         return self.radialMenuIndicator
    161 
    162     def ShowRadialMenuIndicator(self, slimItem, *args):
    163         indicator = self.GetRadialMenuIndicator(create=True)
    164         indicator.display = True
    165 
    166     def HideRadialMenuIndicator(self, slimItem, *args):
    167         indicator = self.GetRadialMenuIndicator(create=False)
    168         if indicator:
    169             indicator.display = False
    170 
    171     @classmethod
    172     def GetCopyData(cls, node):
    173         return node.label
    174 
    175     def OnColorThemeChanged(self):
    176         super(PlaceEntry, self).OnColorThemeChanged()
    177         if self.sr.node:
    178             self.Load(self.sr.node)