menuEntryData.py (6113B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\control\contextMenu\menuEntryData.py 2 import caching 3 import signals 4 from eve.client.script.ui import menuUtil 5 from eve.client.script.ui.inflight import actionConst 6 from menu import MenuLabel 7 8 class BaseMenuEntryData(object): 9 __on_enabled_changed = None 10 11 def __init__(self, text = None, menuGroupID = None, hint = None, menuEntryViewClass = None, internalName = '', isEnabled = True, disabledHint = None, quantity = None, uniqueUiName = None): 12 super(BaseMenuEntryData, self).__init__() 13 if isinstance(text, MenuLabel): 14 self._menuLabel = text 15 self.text = self._menuLabel.GetText() 16 else: 17 self._menuLabel = None 18 self.text = text 19 self.menuGroupID = menuGroupID or menuUtil.GetMenuGroup(self.GetLabelPath()) 20 self.hint = hint 21 self.menuClass = menuEntryViewClass 22 self.internalName = internalName 23 self._enabled = isEnabled 24 self.disabledHint = disabledHint 25 self.quantity = quantity 26 self.uniqueUiName = uniqueUiName 27 28 @property 29 def on_enabled_changed(self): 30 if self.__on_enabled_changed is None: 31 self.__on_enabled_changed = signals.Signal('{}.on_enabled_changed'.format(self.__class__.__name__)) 32 return self.__on_enabled_changed 33 34 @property 35 def isEnabled(self): 36 return self._enabled 37 38 @isEnabled.setter 39 def isEnabled(self, value): 40 if self._enabled != value: 41 self._enabled = value 42 if self.__on_enabled_changed is not None: 43 self.__on_enabled_changed(self) 44 45 def GetMenuLabel(self): 46 return self._menuLabel 47 48 def GetLabelPath(self): 49 if self._menuLabel: 50 return self._menuLabel.labelPath 51 52 def GetActionID(self): 53 return self.GetLabelPath() 54 55 def GetLabelKeywords(self): 56 if self._menuLabel: 57 return self._menuLabel.labelKeywords 58 return {} 59 60 def GetText(self): 61 if self._menuLabel: 62 text = self._menuLabel.GetText() 63 else: 64 text = self.text 65 if self.quantity is not None: 66 text += ' (%s)' % self.quantity 67 return text 68 69 def GetTextDescriptive(self): 70 return self.GetText() 71 72 def IsEnabled(self): 73 return self.isEnabled 74 75 def GetDisabledHint(self): 76 return self.disabledHint 77 78 def GetPrimaryMenuGroupID(self): 79 if isinstance(self.menuGroupID, tuple): 80 return self.menuGroupID[0] 81 else: 82 return self.menuGroupID 83 84 def HasIcon(self): 85 return bool(self.GetIcon()) 86 87 def HasGroupIcon(self): 88 return self.menuGroupID and self.menuGroupID in menuUtil.ICON_DATA_BY_MENUGROUPID 89 90 def GetGroupIconData(self): 91 return menuUtil.GetGroupIconData(self.menuGroupID) 92 93 def GetIcon(self): 94 if self.GetActionID() in actionConst.MENU_ICON_BLACKLIST: 95 return None 96 return actionConst.ICON_BY_ACTIONID.get(self.GetActionID(), None) 97 98 def GetHint(self): 99 return self.hint 100 101 def HasSubMenuData(self): 102 return False 103 104 def HasFunction(self): 105 return False 106 107 def __repr__(self): 108 return '{}(internalName={}, text={!r})'.format(self.__class__.__name__, self.internalName, self.text) 109 110 111 class MenuEntryDataCaption(BaseMenuEntryData): 112 113 def IsEnabled(self): 114 return False 115 116 117 class MenuEntryDataLabel(BaseMenuEntryData): 118 119 def IsEnabled(self): 120 return False 121 122 123 class MenuEntryData(BaseMenuEntryData): 124 125 def __init__(self, text, func = None, subMenuData = None, texturePath = None, menuGroupID = None, menuEntryViewClass = None, internalName = '', typeID = None, **kwargs): 126 super(MenuEntryData, self).__init__(text=text, menuGroupID=menuGroupID, menuEntryViewClass=menuEntryViewClass, internalName=internalName, **kwargs) 127 self.func = func 128 self._subMenuData = subMenuData 129 self.texturePath = texturePath 130 self.typeID = typeID 131 132 def IsSubMenuDynamic(self): 133 return callable(self._subMenuData) 134 135 def GetSubMenuData(self): 136 if self.IsSubMenuDynamic(): 137 return self._GetSubMenuDataDynamic() 138 if isinstance(self._subMenuData, (tuple, list)): 139 from carbonui.control.contextMenu import menuDataFactory 140 self._subMenuData = menuDataFactory.CreateMenuDataFromRawTuples(self._subMenuData) 141 return self._subMenuData 142 143 @caching.Memoize(minutes=1 / 120.0) 144 def _GetSubMenuDataDynamic(self): 145 from carbonui.control.contextMenu import menuDataFactory 146 return menuDataFactory.CreateMenuDataFromRawTuples(self._subMenuData()) 147 148 def HasSubMenuData(self): 149 if self.IsSubMenuDynamic(): 150 return True 151 else: 152 return bool(self._subMenuData) 153 154 def GetIcon(self): 155 if self.texturePath: 156 return self.texturePath 157 else: 158 return super(MenuEntryData, self).GetIcon() 159 160 def HasFunction(self): 161 return bool(self.func) 162 163 def ExecuteFunction(self): 164 self.func() 165 166 167 class MenuEntryDataCheckbox(BaseMenuEntryData): 168 169 def __init__(self, text, setting, **kwargs): 170 super(MenuEntryDataCheckbox, self).__init__(text=text, **kwargs) 171 self.setting = setting 172 173 def HasIcon(self): 174 return True 175 176 177 class MenuEntryDataRadioButton(BaseMenuEntryData): 178 179 def __init__(self, text, value, setting, **kwargs): 180 super(MenuEntryDataRadioButton, self).__init__(text=text, **kwargs) 181 self.value = value 182 self.setting = setting 183 184 def HasIcon(self): 185 return True 186 187 188 class MenuEntryDataSlider(BaseMenuEntryData): 189 190 def __init__(self, text, setting, min_label = None, max_label = None, isInteger = False, **kwargs): 191 super(MenuEntryDataSlider, self).__init__(text=text, **kwargs) 192 self.setting = setting 193 self.min_label = min_label 194 self.max_label = max_label 195 self.isInteger = isInteger 196 197 def HasFunction(self): 198 return False