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

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')