labelEditable.py (5543B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\eve\client\script\ui\control\labelEditable.py 2 import carbonui.const as uiconst 3 from carbon.common.script.util.format import FmtAmt 4 from carbonui.control.singlelineedits.singleLineEditInteger import SingleLineEditInteger 5 from carbonui.control.singlelineedits.singleLineEditText import SingleLineEditText 6 from carbonui.fontconst import DEFAULT_FONTSIZE 7 from carbonui.primitives.container import Container 8 from eve.client.script.ui.control.eveLabel import Label 9 from carbonui.uicore import uicore 10 11 class LabelEditable(Container): 12 default_height = 40 13 default_width = 100 14 default_maxWidth = None 15 default_align = uiconst.TOPLEFT 16 default_state = uiconst.UI_PICKCHILDREN 17 default_alwaysVisible = False 18 EDIT_FIELD_PADDING = 34 19 20 def ApplyAttributes(self, attributes): 21 Container.ApplyAttributes(self, attributes) 22 self.defaultText = attributes.get('defaultText', None) 23 self.currentText = attributes['text'] 24 hint = attributes.get('hint', None) 25 self.configName = attributes['configName'] 26 self.maxLength = attributes.get('maxLength', None) 27 self.minLength = attributes.get('minLength', None) 28 self.maxWidth = attributes.get('maxWidth', self.default_maxWidth) 29 fontsize = attributes.get('fontsize', DEFAULT_FONTSIZE) 30 self.minValue = attributes.get('minValue', 0) 31 self.maxValue = attributes.get('maxValue', None) 32 onEditFieldChangedFunc = attributes.get('onEditFieldChanged', self.OnEditFieldChanged) 33 self.textEditFieldSwitchCallback = attributes.get('textEditFieldSwitchCallback', None) 34 self.alwaysVisible = attributes.get('alwaysVisible', self.default_alwaysVisible) 35 singleLineEditClass = SingleLineEditInteger if self.minValue or self.maxValue else SingleLineEditText 36 self.editField = singleLineEditClass(name='editField', parent=self, align=uiconst.CENTERLEFT, pos=(0, 0, 100, 0), setvalue=self.currentText, OnFocusLost=self.OnEditFieldLostFocus, OnChange=onEditFieldChangedFunc, OnReturn=self.OnEditFieldLostFocus, OnSetFocus=self.OnEditFieldSetFocus, maxLength=self.maxLength, fontsize=fontsize, minValue=self.minValue, maxValue=self.maxValue) 37 self.ChangeEditFieldVisibility(active=False) 38 self.editField._GetSizeForHistoryMenu = self._GetSizeForHistoryMenu 39 self.textLabel = Label(name='textLabel', parent=self, left=SingleLineEditInteger.default_textLeftMargin + self.editField._textClipper.padLeft, state=uiconst.UI_NORMAL, maxLines=1, align=uiconst.CENTERLEFT, fontsize=self.editField.textLabel.fontsize, text=self.currentText, autoFadeSides=20) 40 self.textLabel.SetRGBA(1.0, 1.0, 1.0, 1.0) 41 self.textLabel.cursor = uiconst.UICURSOR_IBEAM 42 self.editField.width = self.textLabel.textwidth + 20 43 self.width = self.editField.width 44 self.height = self.editField.height 45 self.textLabel.OnClick = self.OnLabelClicked 46 if hint: 47 self.textLabel.hint = hint 48 49 def OnLabelClicked(self, *args): 50 self.SetAsActive() 51 uicore.registry.SetFocus(self.editField) 52 self.editField.caretIndex = self.editField.GetCursorFromIndex(-1) 53 54 def ChangeEditFieldVisibility(self, active = False): 55 if active: 56 if self.alwaysVisible: 57 self.editField.opacity = 1.0 58 else: 59 self.editField.display = True 60 elif self.alwaysVisible: 61 self.editField.opacity = 0.7 62 else: 63 self.editField.display = False 64 65 def SetAsActive(self): 66 self.textLabel.display = False 67 self.ChangeEditFieldVisibility(active=True) 68 self.ChangesCallback() 69 70 def OnEditFieldSetFocus(self, *args): 71 self.SetAsActive() 72 73 def OnEditFieldLostFocus(self, *args): 74 currentText = unicode(self.currentText) 75 if self.minLength and len(currentText) < self.minLength and self.defaultText: 76 currentText = self.defaultText 77 self.SetValue(currentText) 78 self.textLabel.display = True 79 self.ChangeEditFieldVisibility(active=False) 80 settings.user.ui.Set(self.configName, currentText) 81 self.ChangesCallback() 82 83 def OnEditFieldChanged(self, *args): 84 self.currentText = self.editField.GetValue() 85 self.SetTextLabelText() 86 self.SetWidth() 87 88 def SetWidth(self): 89 width = self.editField.textLabel.textwidth 90 if self.maxWidth: 91 width = min(width, self.maxWidth) 92 self.editField.width = width + self.EDIT_FIELD_PADDING 93 self.width = self.editField.width 94 95 def GetValue(self): 96 return self.editField.GetValue() 97 98 def SetValue(self, text): 99 self.currentText = text 100 self.SetTextLabelText() 101 self.editField.SetText(text) 102 self.OnEditFieldChanged() 103 104 def SetTextLabelText(self): 105 if self.minValue or self.maxValue: 106 self.textLabel.text = FmtAmt(self.currentText) 107 return 108 self.textLabel.text = self.currentText 109 110 def ChangesCallback(self): 111 if self.textEditFieldSwitchCallback: 112 self.textEditFieldSwitchCallback() 113 114 def _GetSizeForHistoryMenu(self): 115 l, t, w, h = self.editField.GetAbsolute() 116 if self.maxWidth: 117 w = max(w, self.maxWidth) + 4 118 return (l, 119 t, 120 w, 121 h) 122 123 def SetMaxWidth(self, value): 124 self.maxWidth = value - self.EDIT_FIELD_PADDING 125 self.SetWidth()