window.py (6460B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\shared\neocom\locations\window.py 2 import eveicon 3 import localization 4 from carbonui import AxisAlignment, ButtonVariant, Density, uiconst 5 from carbonui.control.button import Button 6 from carbonui.control.buttonIcon import ButtonIcon 7 from carbonui.control.window import Window 8 from carbonui.primitives.container import Container 9 from carbonui.primitives.flowcontainer import FlowContainer 10 from carbonui.util.various_unsorted import GetWindowAbove 11 from carbonui.window.header.tab_navigation import TabNavigationWindowHeader 12 from carbonui.window.segment.bottom import WindowSegmentBottom 13 from eve.client.script.ui.shared.bookmarks.bookmarkContainerWindow import BookmarkContainerWindow 14 from eve.client.script.ui.shared.bookmarks.bookmarkSubfolderWindow import BookmarkSubfolderWindow 15 from eve.client.script.ui.shared.neocom.addressBook.bookmarksPanel import BookmarksPanel 16 from eve.client.script.ui.shared.neocom.locations.search import LocationSearchPanel 17 from player_messaging.client.ui_message import prompt_player_fsd_dialog 18 from uihighlighting.uniqueNameConst import UNIQUE_NAME_BOOKMARKS_TAB 19 20 class LocationsWindow(Window): 21 default_windowID = 'locations' 22 default_captionLabelPath = 'UI/PeopleAndPlaces/Locations' 23 default_descriptionLabelPath = 'Tooltips/Neocom/Locations_description' 24 default_iconNum = 'res:/ui/Texture/WindowIcons/locations.png' 25 default_width = 450 26 default_height = 450 27 default_minSize = (250, 210) 28 default_isCompactable = True 29 30 def ApplyAttributes(self, attributes): 31 super(LocationsWindow, self).ApplyAttributes(attributes) 32 self._locations_panel = LocationsPanel(parent=self.content, align=uiconst.TOALL, compact=self.compact) 33 self._search_panel = LocationSearchPanel(parent=self.content, align=uiconst.TOALL) 34 self.header.tab_group.AddTab(label=localization.GetByLabel('UI/PeopleAndPlaces/Locations'), panel=self._locations_panel, uniqueName=UNIQUE_NAME_BOOKMARKS_TAB) 35 self.header.tab_group.AddTab(label=localization.GetByLabel('UI/Common/Search'), panel=self._search_panel) 36 self.header.tab_group.AutoSelect() 37 self.on_compact_mode_changed.connect(self._on_window_compact_mode_changed) 38 39 def _on_window_compact_mode_changed(self, window): 40 self._locations_panel.compact = self.compact 41 42 def Prepare_Header_(self): 43 self.header = TabNavigationWindowHeader() 44 45 46 class LocationsPanel(Container): 47 __notifyevents__ = ('OnRefreshBookmarks', 'OnSessionChanged') 48 49 def __init__(self, parent, align, compact = False): 50 self._compact = compact 51 self._selected = False 52 self._bottom_panel = None 53 super(LocationsPanel, self).__init__(parent=parent, align=align) 54 self._bookmarks_panel = BookmarksPanel(parent=self, align=uiconst.TOALL) 55 sm.RegisterNotify(self) 56 57 @property 58 def compact(self): 59 return self._compact 60 61 @compact.setter 62 def compact(self, value): 63 if self._compact != value: 64 self._compact = value 65 self._on_compact_changed() 66 67 def OnRefreshBookmarks(self): 68 if self._selected: 69 self.update_content() 70 71 def OnSessionChanged(self, isRemote, session, change): 72 if session.solarsystemid2 and 'solarsystemid2' in change: 73 if self._selected: 74 self.update_content() 75 76 def OnTabSelect(self): 77 self._selected = True 78 self.update_content() 79 80 def OnTabDeselect(self): 81 self._selected = False 82 self.update_content() 83 84 def update_content(self): 85 if not self._selected: 86 self._close_bottom_panel() 87 else: 88 if self._bottom_panel is None: 89 self._create_bottom_panel() 90 self._bookmarks_panel.RefreshScroll() 91 92 def _create_bottom_panel(self): 93 self._bottom_panel = WindowSegmentBottom(window=GetWindowAbove(self)) 94 button_cont = FlowContainer(parent=self._bottom_panel.content, align=uiconst.TOTOP, autoHeight=True, contentAlignment=AxisAlignment.END, contentSpacing=(8, 8)) 95 self._create_icon_or_label_button(parent=button_cont, align=uiconst.NOALIGN, label=localization.GetByLabel('UI/PeopleAndPlaces/AddBookmark'), icon=eveicon.location, func=_bookmark_current_location) 96 self._create_icon_or_label_button(parent=button_cont, align=uiconst.NOALIGN, label=localization.GetByLabel('UI/PeopleAndPlaces/CreateFolder'), icon=eveicon.add_folder, func=_create_acl_folder) 97 self._create_icon_or_label_button(parent=button_cont, align=uiconst.NOALIGN, label=localization.GetByLabel('UI/AclBookmarks/CreateSubfolder'), icon=eveicon.subfolder, func=_create_sub_folder) 98 99 def _close_bottom_panel(self): 100 if self._bottom_panel is not None: 101 self._bottom_panel.Close() 102 self._bottom_panel = None 103 104 def _recreate_bottom_panel(self): 105 self._close_bottom_panel() 106 self._create_bottom_panel() 107 108 def _create_icon_or_label_button(self, parent, align, label, icon, func): 109 if self.compact: 110 return ButtonIcon(parent=parent, align=align, width=24, height=24, texturePath=icon, hint=label, func=func, args=()) 111 else: 112 return Button(parent=parent, align=align, label=label, texturePath=icon, func=func, args=(), density=Density.COMPACT, variant=ButtonVariant.GHOST) 113 114 def _on_compact_changed(self): 115 if self._selected: 116 self._recreate_bottom_panel() 117 118 119 def _bookmark_current_location(): 120 sm.GetService('addressbook').BookmarkCurrentLocation() 121 122 123 def _create_acl_folder(): 124 window = BookmarkContainerWindow.Open() 125 window.Maximize() 126 127 128 def _create_sub_folder(): 129 validFolders = sm.GetService('bookmarkSvc').GetFilteredFolders() 130 if len(validFolders) == 0: 131 if prompt_player_fsd_dialog('CreateBookmarkFolderAsNoneValid', {}, uiconst.YESNO, uiconst.ID_YES) == uiconst.ID_YES: 132 wnd = BookmarkContainerWindow.Open() 133 wnd.Maximize() 134 return 135 wnd = BookmarkSubfolderWindow.Open() 136 wnd.Maximize() 137 138 139 def __reload_update__(module): 140 try: 141 window_class = LocationsWindow 142 window = window_class.GetIfOpen() 143 if window is not None: 144 window.Close() 145 window_class.Open() 146 except Exception: 147 import logging 148 logging.getLogger(__name__).exception('Failed to reload window')