bugfix
This commit is contained in:
parent
4f81e6e8a7
commit
b70e2def12
10
kivyblocks/uitype/__init__.py
Normal file
10
kivyblocks/uitype/__init__.py
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
from .factory import *
|
||||||
|
from .date import *
|
||||||
|
from .time import *
|
||||||
|
from .int import *
|
||||||
|
from .float import *
|
||||||
|
from .amount import *
|
||||||
|
from .password import *
|
||||||
|
from .text import *
|
||||||
|
from .code import *
|
||||||
|
|
84
kivyblocks/uitype/amount.py
Normal file
84
kivyblocks/uitype/amount.py
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
|
||||||
|
from ..baseWidget import FloatInput
|
||||||
|
from ..utils import *
|
||||||
|
from .float import FloatView
|
||||||
|
from .factory import UiFactory, get_value
|
||||||
|
|
||||||
|
def amountstr(amount,dec):
|
||||||
|
f = '%%.0%df' % dec
|
||||||
|
s = f % amount
|
||||||
|
parts = s.split('.')
|
||||||
|
p_int = parts[0]
|
||||||
|
subs = []
|
||||||
|
if p_int[0] == '-':
|
||||||
|
subs.append('-')
|
||||||
|
p_int = p_int[1:]
|
||||||
|
l = [i for i in p_int]
|
||||||
|
l.reverse()
|
||||||
|
k = []
|
||||||
|
for i,c in enumerate(l):
|
||||||
|
if i and (i) % 3 == 0:
|
||||||
|
k.append(',')
|
||||||
|
k.append(c)
|
||||||
|
k.reverse()
|
||||||
|
subs.append(''.join(k))
|
||||||
|
if len(parts) > 1:
|
||||||
|
subs.append(f'.{parts[1]}')
|
||||||
|
return ''.join(subs)
|
||||||
|
|
||||||
|
class AmountView(FloatView):
|
||||||
|
def on_value(self, *args):
|
||||||
|
if self.value is None:
|
||||||
|
self.text = self.nullstr
|
||||||
|
else:
|
||||||
|
self.text = self.amount_str()
|
||||||
|
|
||||||
|
def amount_str(self):
|
||||||
|
return amountstr(self.value, self.desc)
|
||||||
|
|
||||||
|
def builder(self, desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
defaultvalue = desc.get('nullstr', '')
|
||||||
|
return AmountView(value=v,
|
||||||
|
dec=desc.get('dec', 2),
|
||||||
|
nullstr=defaultvale,
|
||||||
|
font_size=CSize(1),
|
||||||
|
halign='right',
|
||||||
|
valign='middle'
|
||||||
|
)
|
||||||
|
|
||||||
|
class AmountInput(FloatInput):
|
||||||
|
def input_filter(self,substring, from_undo=False):
|
||||||
|
s = super(AmountInput,self).filter(substring)
|
||||||
|
a = s.split('.')
|
||||||
|
b = a[0]
|
||||||
|
if len(b)>3:
|
||||||
|
k = []
|
||||||
|
while len(b)>3:
|
||||||
|
x = b[-3:]
|
||||||
|
k.insert(0,x)
|
||||||
|
b = b[:-3]
|
||||||
|
a[0] = ','.join(k)
|
||||||
|
s = '.'.join(a)
|
||||||
|
return '.'.join(a)
|
||||||
|
|
||||||
|
def insert_text(self, substring, from_undo=False):
|
||||||
|
x = StrInput.insert_text(self,s, from_undo=from_undo)
|
||||||
|
y = amountstr(x, self.dec)
|
||||||
|
return y
|
||||||
|
|
||||||
|
def getValue(self):
|
||||||
|
txt = ''.join(self.text.split(','))
|
||||||
|
return float(txt)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def builder(self, desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
kw = desc.get('uiparams', {})
|
||||||
|
w = AmountInput(**kw)
|
||||||
|
if v is not None:
|
||||||
|
w.setValue(v)
|
||||||
|
return w
|
||||||
|
|
||||||
|
UiFactory.register('amount', AmountInput.builder, AmountView.builder)
|
||||||
|
|
0
kivyblocks/uitype/checkbox.py
Normal file
0
kivyblocks/uitype/checkbox.py
Normal file
28
kivyblocks/uitype/code.py
Normal file
28
kivyblocks/uitype/code.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
|
||||||
|
from ..baseWidget import Text, SelectInput
|
||||||
|
from ..utils import *
|
||||||
|
|
||||||
|
from .factory import UiFactory, get_value
|
||||||
|
|
||||||
|
def build_input_code_widget(desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
kw = desc.get('uiparams', {})
|
||||||
|
w = SelectInput(**kw)
|
||||||
|
if v:
|
||||||
|
w.setValue(v)
|
||||||
|
return w
|
||||||
|
|
||||||
|
def build_view_code_widget(desc, rec=None):
|
||||||
|
tf = desc.get('textField','text')
|
||||||
|
vf = desc.get('valueField','value')
|
||||||
|
v = rec.get(tf,rec.get(vf, ' '))
|
||||||
|
return Text(text=v,
|
||||||
|
i18n=True,
|
||||||
|
font_size = CSize(1),
|
||||||
|
wrap=True,
|
||||||
|
halign='center',
|
||||||
|
valign='middle'
|
||||||
|
)
|
||||||
|
|
||||||
|
UiFactory.register('code', build_input_code_widget, build_view_code_widget)
|
||||||
|
|
15
kivyblocks/uitype/date.py
Normal file
15
kivyblocks/uitype/date.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
|
||||||
|
from ..utils import *
|
||||||
|
from ..dateinput import DateInput
|
||||||
|
from .factory import UiFactory, StringView, get_value
|
||||||
|
|
||||||
|
def build_input_date_widget(desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
kw = desc.get('uiparams', {})
|
||||||
|
w = DateInput(**kw)
|
||||||
|
if v:
|
||||||
|
w.setValue(v)
|
||||||
|
return w
|
||||||
|
|
||||||
|
UiFactory.register('date', build_input_date_widget, StringView.builder)
|
||||||
|
|
67
kivyblocks/uitype/factory.py
Normal file
67
kivyblocks/uitype/factory.py
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
from kivy.uix.label import Label
|
||||||
|
from kivyblocks.widgetExt.inputext import StrInput
|
||||||
|
from ..utils import *
|
||||||
|
|
||||||
|
view_widget_builders = {
|
||||||
|
}
|
||||||
|
|
||||||
|
input_widget_builders = {
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_value(desc, rec=None):
|
||||||
|
if rec:
|
||||||
|
return rec.get(desc['name'])
|
||||||
|
return desc.get('value', desc.get('defaultvalue', ''))
|
||||||
|
|
||||||
|
class UiFactory:
|
||||||
|
@classmethod
|
||||||
|
def register(self, ut, inpf, viewf):
|
||||||
|
view_widget_builders.update({ut:viewf})
|
||||||
|
input_widget_builders.update({ut:inpf})
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def build_view_widget(self, desc, rec=None):
|
||||||
|
ut = desc.get('uitype', 'str')
|
||||||
|
f = view_widget_builders.get(ut)
|
||||||
|
return f(desc, rec=rec)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def build_input_widget(self, desc, rec=None):
|
||||||
|
ut = desc.get('uitype', 'str')
|
||||||
|
f = input_widget_builders.get(ut)
|
||||||
|
return f(desc, rec=rec)
|
||||||
|
|
||||||
|
class StringView(Label):
|
||||||
|
@classmethod
|
||||||
|
def builder(self, desc, rec):
|
||||||
|
txt = get_value(desc, rec=rec)
|
||||||
|
return StringView(text=str(txt) if txt else '',
|
||||||
|
font_size=CSize(1),
|
||||||
|
halign='left',
|
||||||
|
valign='middle')
|
||||||
|
|
||||||
|
def __init__(self, **kw):
|
||||||
|
super(StringView, self).__init__(**kw)
|
||||||
|
self.wrap = True
|
||||||
|
self.halign = 'left'
|
||||||
|
self.valign = 'middle'
|
||||||
|
|
||||||
|
def getValue(self):
|
||||||
|
return self.text
|
||||||
|
|
||||||
|
def setValue(self, v):
|
||||||
|
self.text = str(v)
|
||||||
|
|
||||||
|
class StringInput(StrInput):
|
||||||
|
@classmethod
|
||||||
|
def builder(self, desc, rec):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
kw = desc.get('uiparams', {})
|
||||||
|
kw['multiline'] = False
|
||||||
|
w = StringInput(**kw)
|
||||||
|
if v:
|
||||||
|
w.setValue(v)
|
||||||
|
return w
|
||||||
|
|
||||||
|
UiFactory.register('str', StringInput.builder, StringView.builder)
|
||||||
|
|
51
kivyblocks/uitype/float.py
Normal file
51
kivyblocks/uitype/float.py
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
|
||||||
|
|
||||||
|
from kivy.uix.label import Label
|
||||||
|
from kivy.properties import NumericProperty, StringProperty
|
||||||
|
from ..baseWidget import FloatInput
|
||||||
|
from ..utils import *
|
||||||
|
from .factory import UiFactory, get_value
|
||||||
|
|
||||||
|
class FloatView(Label):
|
||||||
|
value = NumericProperty(None)
|
||||||
|
nullstr = StringProperty('')
|
||||||
|
dec = NumericProperty(2)
|
||||||
|
def __init__(self, **kw):
|
||||||
|
super(FloatView, self).__init__(text=self.nullstr, **kw)
|
||||||
|
self.wrap = True
|
||||||
|
self.halign = 'right'
|
||||||
|
self.valign = 'middle'
|
||||||
|
|
||||||
|
def on_value(self, *args):
|
||||||
|
if self.value is None:
|
||||||
|
self.text = self.bullstr
|
||||||
|
f = '%%.0%df' % self.dec
|
||||||
|
self.text = f % self.value
|
||||||
|
|
||||||
|
def getValue(self):
|
||||||
|
return self.value
|
||||||
|
|
||||||
|
def setValue(self, v):
|
||||||
|
self.value = v
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def builder(self, desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
return FloatView(value=v,
|
||||||
|
dec=desc.get('dec', 2),
|
||||||
|
nullstr=desc.get('nullstr',''),
|
||||||
|
font_size=CSize(1),
|
||||||
|
halign='right',
|
||||||
|
valign='middle'
|
||||||
|
)
|
||||||
|
|
||||||
|
def build_input_float_widget(desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
kw = desc.get('uiparams', {})
|
||||||
|
w = FloatInput(**kw)
|
||||||
|
if v is not None:
|
||||||
|
w.setValue(v)
|
||||||
|
return w
|
||||||
|
|
||||||
|
UiFactory.register('float', build_input_float_widget, FloatView.builder)
|
||||||
|
|
48
kivyblocks/uitype/int.py
Normal file
48
kivyblocks/uitype/int.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
from kivy.uix.label import Label
|
||||||
|
from kivy.properties import NumericProperty, StringProperty
|
||||||
|
from ..baseWidget import IntegerInput
|
||||||
|
from ..utils import *
|
||||||
|
from .factory import UiFactory, StringView
|
||||||
|
|
||||||
|
class IntView(Label):
|
||||||
|
value = NumericProperty(None)
|
||||||
|
nullstr = StringProperty('')
|
||||||
|
def __init__(self, **kw):
|
||||||
|
super(IntView, self).__init__(text='', **kw)
|
||||||
|
self.wrap = True
|
||||||
|
self.halign = 'right'
|
||||||
|
self.valign = 'middle'
|
||||||
|
|
||||||
|
def on_value(self, *args):
|
||||||
|
if self.value is not None:
|
||||||
|
self.text = str(v)
|
||||||
|
else:
|
||||||
|
self.text = self.nullstr
|
||||||
|
|
||||||
|
def setValue(self, v):
|
||||||
|
self.value = v
|
||||||
|
|
||||||
|
def getValue(self):
|
||||||
|
return self.value
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def builder(self,desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
return IntValue(value=v,
|
||||||
|
nullstr=desc.get('nullstr',''),
|
||||||
|
font_size=CSize(1),
|
||||||
|
halign='right',
|
||||||
|
valign='middle'
|
||||||
|
)
|
||||||
|
|
||||||
|
def build_input_int_widget(desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
kw = desc.get('uiparams', {})
|
||||||
|
w = IntegerInput(**kw)
|
||||||
|
if v is not None:
|
||||||
|
w.setValue(v)
|
||||||
|
return w
|
||||||
|
|
||||||
|
UiFactory.register('int', build_input_int_widget, IntView.builder)
|
||||||
|
|
31
kivyblocks/uitype/password.py
Normal file
31
kivyblocks/uitype/password.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
from ..baseWidget import Password
|
||||||
|
from ..utils import *
|
||||||
|
from .factory import UiFactory, get_value, StringView
|
||||||
|
|
||||||
|
class PasswordView(StringView):
|
||||||
|
def __init__(self, text='*', **kw):
|
||||||
|
super(PasswordView, self).__init__(text=text, **kw)
|
||||||
|
|
||||||
|
def getValue(self):
|
||||||
|
return None
|
||||||
|
|
||||||
|
def setValue(self, v):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def builder(self, desc, rec=None):
|
||||||
|
return PasswordView(text='*',
|
||||||
|
font_size=CSize(1),
|
||||||
|
halign='left',
|
||||||
|
valign='middle')
|
||||||
|
|
||||||
|
def build_input_password_widget(desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
kw = desc.get('uiparams', {})
|
||||||
|
w = Password(**kw)
|
||||||
|
if v:
|
||||||
|
w.setValue(v)
|
||||||
|
return w
|
||||||
|
|
||||||
|
UiFactory.register('password', build_input_password_widget, PasswordView.builder)
|
||||||
|
|
31
kivyblocks/uitype/text.py
Normal file
31
kivyblocks/uitype/text.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
|
||||||
|
from ..baseWidget import WrapText, StrInput
|
||||||
|
from ..utils import *
|
||||||
|
from .factory import UiFactory, get_value
|
||||||
|
|
||||||
|
class TextView(WrapText):
|
||||||
|
def getValue(self):
|
||||||
|
return self.text
|
||||||
|
|
||||||
|
def setValue(self, v):
|
||||||
|
self.text = v
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def builder(self, desc, rec=None):
|
||||||
|
txt = get_value(desc, rec=rec)
|
||||||
|
return TextView(text=str(txt) if txt else '',
|
||||||
|
font_size=CSize(1),
|
||||||
|
halign='left',
|
||||||
|
valign='middle')
|
||||||
|
|
||||||
|
def build_input_text_widget(desc, rec=None):
|
||||||
|
v = get_value(desc, rec=rec)
|
||||||
|
kw = desc.get('uiparams', {})
|
||||||
|
w = StrInput(**kw)
|
||||||
|
if v:
|
||||||
|
self.multiline = True
|
||||||
|
w.setValue(v)
|
||||||
|
return w
|
||||||
|
|
||||||
|
UiFactory.register('text', build_input_text_widget, TextView.builder)
|
||||||
|
|
0
kivyblocks/uitype/time.py
Normal file
0
kivyblocks/uitype/time.py
Normal file
Loading…
Reference in New Issue
Block a user