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)