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

form.py (4319B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\carbonui\control\forms\form.py
      2 from carbonui.control.forms.formComponentInterface import FormComponentInterface
      3 from carbonui.control.forms.formsUtil import FormatAsIncompleteInput
      4 from localization import GetByLabel
      5 from signals import Signal
      6 
      7 class BaseFormAction(object):
      8 
      9     def __init__(self, label, func = None, hint = None):
     10         self.label = label
     11         self.func = func
     12         self.hint = hint
     13 
     14     def execute(self, form):
     15         raise NotImplementedError
     16 
     17 
     18 class FormActionSubmit(BaseFormAction):
     19 
     20     def execute(self, form):
     21         if form.is_valid():
     22             self.func(form)
     23             form.on_submitted(self)
     24         else:
     25             form.on_submit_failed(self)
     26 
     27 
     28 class FormActionCancel(BaseFormAction):
     29 
     30     def __init__(self, label = GetByLabel('UI/Common/Buttons/Cancel'), func = None, hint = None):
     31         super(FormActionCancel, self).__init__(label, func, hint)
     32 
     33     def execute(self, form):
     34         if self.func:
     35             self.func(form)
     36         form.on_canceled(self)
     37 
     38 
     39 class Form(FormComponentInterface):
     40 
     41     def __init__(self, components = None, actions = None, name = None, label = None, description = None, icon = None, hint = None, field_cls = None, cancel_dialog = None):
     42         super(Form, self).__init__()
     43         self.components = components or []
     44         self.actions = actions or []
     45         self.name = name
     46         self.label = label
     47         self.description = description
     48         self.icon = icon
     49         self.hint = hint
     50         self.field_cls = field_cls
     51         self.cancel_dialog = cancel_dialog
     52         self.on_submitted = Signal('on_submitted')
     53         self.on_submit_failed = Signal('on_submit_failed')
     54         self.on_canceled = Signal('on_canceled')
     55         self.on_components_changed = Signal('on_components_changed')
     56         self._register_signals()
     57 
     58     def _register_signals(self):
     59         for component in self.get_components():
     60             component.on_value_set_by_user.connect(self.on_value_set_by_user)
     61 
     62     def _unregister_signals(self):
     63         for component in self.get_components():
     64             component.on_value_set_by_user.disconnect(self.on_value_set_by_user)
     65 
     66     def get_label(self):
     67         return self.label
     68 
     69     def set_label(self, value):
     70         self.label = value
     71         self.on_label_changed(self)
     72 
     73     def get_name(self):
     74         return self.name
     75 
     76     def get_form_data(self):
     77         return {c.name:c.get_value() for c in self.get_components()}
     78 
     79     def get_components(self):
     80         return self.components
     81 
     82     def set_components(self, components):
     83         self._unregister_signals()
     84         self.components = components
     85         self._register_signals()
     86         self.on_components_changed()
     87 
     88     def add_component(self, component):
     89         self.components.append(component)
     90         self.on_components_changed()
     91 
     92     def get_component(self, name):
     93         for component in self.get_components():
     94             if component.name == name:
     95                 return component
     96             if isinstance(component, Form):
     97                 c = component.get_component(name)
     98                 if c:
     99                     return c
    100 
    101     def has_component(self, name):
    102         for component in self.get_components():
    103             if component.name == name:
    104                 return True
    105             if isinstance(component, Form):
    106                 c = component.get_component(name)
    107                 if c:
    108                     return True
    109 
    110         return False
    111 
    112     def get_value(self):
    113         return self.get_form_data()
    114 
    115     def set_value(self, value):
    116         pass
    117 
    118     def init_value(self, value):
    119         pass
    120 
    121     def is_valid(self):
    122         is_valid = all([ c.is_valid() for c in self.get_components() ])
    123         self.on_validated(self, is_valid)
    124         return is_valid
    125 
    126     def get_invalid_reasons(self):
    127         return [ c.get_invalid_reason() for c in self.get_components() if not c.is_valid() ]
    128 
    129     def get_invalid_reasons_text(self):
    130         return '\n'.join(self.get_invalid_reasons())
    131 
    132     def get_submit_failed_reasons_text(self):
    133         reasons = [ FormatAsIncompleteInput(reason) for reason in self.get_invalid_reasons() ]
    134         return '\n'.join(reasons)
    135 
    136     def get_invalid_reason(self):
    137         return '\n'.join(self.get_invalid_reasons())