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