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

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