bugfix
This commit is contained in:
parent
ef7de84671
commit
7a9cbf194f
@ -1,5 +1,6 @@
|
|||||||
import time
|
import time
|
||||||
import ujson as json
|
import ujson as json
|
||||||
|
from kivy.logger import Logger
|
||||||
from kivy.uix.gridlayout import GridLayout
|
from kivy.uix.gridlayout import GridLayout
|
||||||
from kivy.uix.boxlayout import BoxLayout
|
from kivy.uix.boxlayout import BoxLayout
|
||||||
from kivy.uix.scrollview import ScrollView
|
from kivy.uix.scrollview import ScrollView
|
||||||
@ -18,7 +19,7 @@ from appPublic.uniqueID import getID
|
|||||||
from appPublic.myTE import string_template_render
|
from appPublic.myTE import string_template_render
|
||||||
|
|
||||||
from .utils import CSize, setSizeOptions, loading, loaded, absurl, alert
|
from .utils import CSize, setSizeOptions, loading, loaded, absurl, alert
|
||||||
from .baseWidget import Text
|
from .baseWidget import Text, HBox, VBox
|
||||||
from .widgetExt import ScrollWidget
|
from .widgetExt import ScrollWidget
|
||||||
from .paging import Paging, RelatedLoader
|
from .paging import Paging, RelatedLoader
|
||||||
from .ready import WidgetReady
|
from .ready import WidgetReady
|
||||||
@ -33,7 +34,6 @@ def field_widget(desc, rec):
|
|||||||
viewer = json.dumps(viewer)
|
viewer = json.dumps(viewer)
|
||||||
rendered = string_template_render(desc.get('viewer'), rec)
|
rendered = string_template_render(desc.get('viewer'), rec)
|
||||||
dic = json.loads(rendered)
|
dic = json.loads(rendered)
|
||||||
print('field_widget(), dic=', dic)
|
|
||||||
if dic is None:
|
if dic is None:
|
||||||
return None
|
return None
|
||||||
return Factory.Blocks(dic)
|
return Factory.Blocks(dic)
|
||||||
@ -42,23 +42,23 @@ def field_widget(desc, rec):
|
|||||||
if uitype is None:
|
if uitype is None:
|
||||||
uitype = desc.get('datatype')
|
uitype = desc.get('datatype')
|
||||||
if uitype in [ 'str' 'date', 'time', 'timestamp' ]:
|
if uitype in [ 'str' 'date', 'time', 'timestamp' ]:
|
||||||
return BLabel(text = str(desc['value']),
|
return Text(text = str(desc['value']),
|
||||||
font_size=CSize(1),wrap=True,
|
font_size=CSize(1),wrap=True,
|
||||||
halign='left', valign='middle'
|
halign='left', valign='middle'
|
||||||
)
|
)
|
||||||
if uitype in [ 'long', 'int','integer' ]:
|
if uitype in [ 'long', 'int','integer' ]:
|
||||||
return BLabel(text=str(desc['value']),
|
return Text(text=str(desc['value']),
|
||||||
font_size=CSize(1), wrap=True,
|
font_size=CSize(1), wrap=True,
|
||||||
halign='right', valign='middle'
|
halign='right', valign='middle'
|
||||||
)
|
)
|
||||||
if uitype == 'float':
|
if uitype == 'float':
|
||||||
f = '%%.0%df' % desc.get('dec',2)
|
f = '%%.0%df' % desc.get('dec',2)
|
||||||
return BLabel(text=f % float(desc['value']),
|
return Text(text=f % float(desc['value']),
|
||||||
font_size=CSize(1), wrap=True,
|
font_size=CSize(1), wrap=True,
|
||||||
halign='right', valign='middle'
|
halign='right', valign='middle'
|
||||||
)
|
)
|
||||||
|
|
||||||
return BLabel(text = str(desc['value']),
|
return Text(text = str(desc['value']),
|
||||||
font_size=CSize(1),wrap=True,
|
font_size=CSize(1),wrap=True,
|
||||||
halign='left', valign='middle'
|
halign='left', valign='middle'
|
||||||
)
|
)
|
||||||
@ -70,8 +70,8 @@ class BLabel(ButtonBehavior, Text):
|
|||||||
Text.__init__(self,**kw)
|
Text.__init__(self,**kw)
|
||||||
self.csscls = 'dummy'
|
self.csscls = 'dummy'
|
||||||
|
|
||||||
class Cell(BoxLayout):
|
class Cell(ButtonBehavior, WidgetCSS, BoxLayout):
|
||||||
def __init__(self,row,desc):
|
def __init__(self,row,desc, **kw):
|
||||||
"""
|
"""
|
||||||
desc:{
|
desc:{
|
||||||
width,
|
width,
|
||||||
@ -83,9 +83,13 @@ class Cell(BoxLayout):
|
|||||||
"""
|
"""
|
||||||
self.desc = desc
|
self.desc = desc
|
||||||
self.row = row
|
self.row = row
|
||||||
|
csscls=self.row.part.datagrid.body_css
|
||||||
|
if self.row.header:
|
||||||
|
csscls=self.row.part.datagrid.header_css
|
||||||
super().__init__(size_hint=(None,None),
|
super().__init__(size_hint=(None,None),
|
||||||
width = self.desc['width'],
|
width = self.desc['width'],
|
||||||
height = self.row.part.datagrid.rowHeight()
|
height = self.row.part.datagrid.rowHeight(),
|
||||||
|
csscls=csscls
|
||||||
)
|
)
|
||||||
if not self.row.header and self.desc.get('viewer'):
|
if not self.row.header and self.desc.get('viewer'):
|
||||||
viewer = self.desc.get('viewer')
|
viewer = self.desc.get('viewer')
|
||||||
@ -107,12 +111,12 @@ class Cell(BoxLayout):
|
|||||||
bl = field_widget(desc,self.row.row_data)
|
bl = field_widget(desc,self.row.row_data)
|
||||||
if bl:
|
if bl:
|
||||||
self.add_widget(bl)
|
self.add_widget(bl)
|
||||||
bl.bind(on_press=self.cell_press)
|
|
||||||
|
|
||||||
def cell_press(self,obj):
|
def on_press(self,o=None):
|
||||||
|
if not self.row.header:
|
||||||
self.row.selected()
|
self.row.selected()
|
||||||
|
|
||||||
class Row(WidgetCSS, GridLayout):
|
class Row(BoxLayout):
|
||||||
def __init__(self,part, rowdesc,header=False,data=None, **kw):
|
def __init__(self,part, rowdesc,header=False,data=None, **kw):
|
||||||
"""
|
"""
|
||||||
rowdesc=[
|
rowdesc=[
|
||||||
@ -128,17 +132,17 @@ class Row(WidgetCSS, GridLayout):
|
|||||||
self.header = header
|
self.header = header
|
||||||
self.row_data = data
|
self.row_data = data
|
||||||
self.row_id = None
|
self.row_id = None
|
||||||
self.linewidth = 1
|
self.linewidth = self.part.datagrid.linewidth
|
||||||
self.rowdesc = rowdesc
|
self.rowdesc = rowdesc
|
||||||
opts = kw.copy()
|
opts = kw.copy()
|
||||||
opts.update({
|
opts.update({
|
||||||
"cols":len(self.rowdesc),
|
"spacing":self.linewidth,
|
||||||
"spacing":2
|
"orientation":"horizontal"
|
||||||
})
|
})
|
||||||
super(Row, self).__init__(**opts)
|
super(Row, self).__init__(**opts)
|
||||||
# Clock.schedule_once(self.init,0)
|
|
||||||
self.init(0)
|
self.init(0)
|
||||||
|
|
||||||
|
|
||||||
def init(self,t):
|
def init(self,t):
|
||||||
w = 0
|
w = 0
|
||||||
h = 0
|
h = 0
|
||||||
@ -150,7 +154,7 @@ class Row(WidgetCSS, GridLayout):
|
|||||||
if cell.height > h:
|
if cell.height > h:
|
||||||
h = cell.height
|
h = cell.height
|
||||||
self.size_hint = None,None
|
self.size_hint = None,None
|
||||||
self.width = w + self.linewidth * 2 * len(self.rowdesc)
|
self.width = w + self.linewidth * (len(self.rowdesc)+1)
|
||||||
self.height = h #self.part.datagrid.rowHeight()
|
self.height = h #self.part.datagrid.rowHeight()
|
||||||
|
|
||||||
def selected(self):
|
def selected(self):
|
||||||
@ -177,7 +181,7 @@ class Header(WidgetReady, ScrollWidget):
|
|||||||
[ f.update({'value':self.part.fields[i].get('label', \
|
[ f.update({'value':self.part.fields[i].get('label', \
|
||||||
self.part.fields[i].get('name'))}) \
|
self.part.fields[i].get('name'))}) \
|
||||||
for i,f in enumerate(rd) ]
|
for i,f in enumerate(rd) ]
|
||||||
self.header = Row(self.part,rd,header=True, csscls=self.part.datagrid.header_css)
|
self.header = Row(self.part,rd,header=True)
|
||||||
self.add_widget(self.header)
|
self.add_widget(self.header)
|
||||||
self.height = self.header.height
|
self.height = self.header.height
|
||||||
|
|
||||||
@ -193,7 +197,7 @@ class Body(WidgetReady, ScrollWidget):
|
|||||||
def addRow(self,id, data,index=0):
|
def addRow(self,id, data,index=0):
|
||||||
rd = [ f.copy() for f in self.part.rowdesc ]
|
rd = [ f.copy() for f in self.part.rowdesc ]
|
||||||
[ f.update({'value':data.get(f['name'])}) for f in rd ]
|
[ f.update({'value':data.get(f['name'])}) for f in rd ]
|
||||||
row = Row(self.part,rd,data=data, csscls=self.part.datagrid.body_css)
|
row = Row(self.part,rd,data=data)
|
||||||
row.row_id = id
|
row.row_id = id
|
||||||
self.add_widget(row,index=index)
|
self.add_widget(row,index=index)
|
||||||
self.idRow[id] = row
|
self.idRow[id] = row
|
||||||
@ -283,6 +287,9 @@ class DataGrid(WidgetReady, BoxLayout):
|
|||||||
"params":{
|
"params":{
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"header_css":"default",
|
||||||
|
"body_css":"default",
|
||||||
|
"spacing":1,
|
||||||
"fields":[
|
"fields":[
|
||||||
{
|
{
|
||||||
"name":"field1",
|
"name":"field1",
|
||||||
@ -326,6 +333,9 @@ class DataGrid(WidgetReady, BoxLayout):
|
|||||||
self.params = self.options.get('params',{})
|
self.params = self.options.get('params',{})
|
||||||
self.total_cnt = 0
|
self.total_cnt = 0
|
||||||
self.max_row = 0
|
self.max_row = 0
|
||||||
|
self.header_css = self.options.get('header_css','default')
|
||||||
|
self.body_css = self.options.get('body_css', 'default')
|
||||||
|
self.linewidth = self.options.get('linewidth',1)
|
||||||
self.curpage = 0
|
self.curpage = 0
|
||||||
self.loading = False
|
self.loading = False
|
||||||
self.freeze_fields = self.getPartFields(freeze_flag=True)
|
self.freeze_fields = self.getPartFields(freeze_flag=True)
|
||||||
|
@ -52,6 +52,7 @@ class WidgetCSS(object):
|
|||||||
app = App.get_running_app()
|
app = App.get_running_app()
|
||||||
for css_name in css_str.split(' '):
|
for css_name in css_str.split(' '):
|
||||||
css.update(app.get_css(css_name))
|
css.update(app.get_css(css_name))
|
||||||
|
Logger.info('WidgetCSS:set_css():%s',css.keys())
|
||||||
for k,v in css.items():
|
for k,v in css.items():
|
||||||
setattr(self,k,v)
|
setattr(self,k,v)
|
||||||
|
|
||||||
@ -86,6 +87,8 @@ class WidgetCSS(object):
|
|||||||
self.set_child_fgcolor(c)
|
self.set_child_fgcolor(c)
|
||||||
|
|
||||||
def on_fgcolor(self, o, c):
|
def on_fgcolor(self, o, c):
|
||||||
|
Logger.info('WidgetCSS:on_fgcolor:%s fgcolor=%s', self.__class__.__name__,
|
||||||
|
self.fgcolor)
|
||||||
if not self.fgcolor:
|
if not self.fgcolor:
|
||||||
return
|
return
|
||||||
if isinstance(self, TextInput):
|
if isinstance(self, TextInput):
|
||||||
@ -98,6 +101,8 @@ class WidgetCSS(object):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def on_bgcolor(self, o, c):
|
def on_bgcolor(self, o, c):
|
||||||
|
Logger.info('WidgetCSS:on_bgcolor:%s fgcolor=%s', self.__class__.__name__,
|
||||||
|
self.bgcolor)
|
||||||
if not self.bgcolor:
|
if not self.bgcolor:
|
||||||
return
|
return
|
||||||
if isinstance(self, TextInput):
|
if isinstance(self, TextInput):
|
||||||
|
Loading…
Reference in New Issue
Block a user