bugfix
This commit is contained in:
parent
87b17d287f
commit
c1b7768fdd
@ -24,20 +24,27 @@ from kivy.app import App
|
|||||||
from kivy.factory import Factory
|
from kivy.factory import Factory
|
||||||
from kivy.utils import platform
|
from kivy.utils import platform
|
||||||
from kivy.uix.boxlayout import BoxLayout
|
from kivy.uix.boxlayout import BoxLayout
|
||||||
from kivy.graphics import Fbo
|
from kivy.graphics import Fbo, Color, Rectangle
|
||||||
from .responsivelayout import VResponsiveLayout
|
from .responsivelayout import VResponsiveLayout
|
||||||
from .toolbar import Toolbar
|
from .toolbar import Toolbar
|
||||||
from .paging import Paging, RelatedLoader
|
from .paging import Paging, RelatedLoader
|
||||||
from .utils import CSize
|
from .utils import CSize
|
||||||
from .ready import WidgetReady
|
from .ready import WidgetReady
|
||||||
|
from .baseWidget import VBox
|
||||||
|
|
||||||
|
|
||||||
class BoxViewer(WidgetReady, BoxLayout):
|
class BoxViewer(VBox):
|
||||||
|
toolbar = DictProperty(None)
|
||||||
|
dataloader = DictProperty(None)
|
||||||
|
boxwidth = NumericProperty(0.48)
|
||||||
|
boxheight = NumericProperty(None)
|
||||||
|
viewer = DictProperty(None)
|
||||||
|
viewer_url = StringProperty(None)
|
||||||
|
viewer_css = StringProperty('viewer_css')
|
||||||
def __init__(self, **options):
|
def __init__(self, **options):
|
||||||
self.options = options
|
self.options = options
|
||||||
self.subwidgets = []
|
self.subwidgets = []
|
||||||
self.toolbar = None
|
self.toolbar = None
|
||||||
self.parenturl = None
|
|
||||||
self.dataloader = None
|
self.dataloader = None
|
||||||
self.initflag = False
|
self.initflag = False
|
||||||
remind = ['toolbar',
|
remind = ['toolbar',
|
||||||
@ -45,44 +52,33 @@ class BoxViewer(WidgetReady, BoxLayout):
|
|||||||
'orientation',
|
'orientation',
|
||||||
'boxwidth',
|
'boxwidth',
|
||||||
'boxheight',
|
'boxheight',
|
||||||
'color_level',
|
|
||||||
'radius',
|
|
||||||
'viewer_url',
|
'viewer_url',
|
||||||
'viewer'
|
'viewer'
|
||||||
]
|
]
|
||||||
kwargs = {k:v for k,v in options.items() if k not in remind }
|
SUPER(BoxViewer, self, options)
|
||||||
print('BoxViewer():kwargs=',kwargs)
|
|
||||||
BoxLayout.__init__(self, orientation='vertical', **kwargs)
|
|
||||||
WidgetReady.__init__(self)
|
|
||||||
self.selected_data = None
|
self.selected_data = None
|
||||||
self.radius = self.options.get('radius',[])
|
self.box_width = CSize(self.boxwidth)
|
||||||
self.box_width = CSize(options['boxwidth'])
|
self.box_height = CSize(self.boxheight)
|
||||||
self.box_height = CSize(options['boxheight'])
|
|
||||||
self.viewContainer = VResponsiveLayout(box_width=self.box_width)
|
self.viewContainer = VResponsiveLayout(box_width=self.box_width)
|
||||||
if options.get('toolbar'):
|
if self.toolbar:
|
||||||
self.toolbar = Toolbar(options['toolbar'])
|
self.toolbar_w = Toolbar(self.toolbar)
|
||||||
lopts = options['dataloader'].copy()
|
lopts = self.dataloader.get('options', {}).copy()
|
||||||
if lopts.get('options'):
|
|
||||||
lopts = lopts.get('options')
|
|
||||||
self.dataloader = RelatedLoader(target=self,**lopts)
|
self.dataloader = RelatedLoader(target=self,**lopts)
|
||||||
self.dataloader.bind(on_deletepage=self.deleteWidgets)
|
self.dataloader.bind(on_deletepage=self.deleteWidgets)
|
||||||
self.dataloader.bind(on_pageloaded=self.addPageWidgets)
|
self.dataloader.bind(on_pageloaded=self.addPageWidgets)
|
||||||
self.dataloader.bind(on_newbegin=self.deleteAllWidgets)
|
self.dataloader.bind(on_newbegin=self.deleteAllWidgets)
|
||||||
self.params = self.options['dataloader']['options'].get('params',{})
|
self.params = lopts.get('params',{})
|
||||||
|
|
||||||
if self.toolbar:
|
if self.toolbar_w:
|
||||||
self.add_widget(self.toolbar)
|
self.add_widget(self.toolbar_w)
|
||||||
if self.dataloader.widget:
|
if self.dataloader.widget:
|
||||||
self.add_widget(self.dataloader.widget)
|
self.add_widget(self.dataloader.widget)
|
||||||
self.dataloader.bind(on_submit=self.getParams)
|
self.dataloader.widget.bind(on_submit=self.getParams)
|
||||||
self.add_widget(self.viewContainer)
|
self.add_widget(self.viewContainer)
|
||||||
self.register_event_type('on_selected')
|
self.register_event_type('on_selected')
|
||||||
self.bind(size=self.resetCols,
|
self.bind(size=self.resetCols,
|
||||||
pos=self.resetCols)
|
pos=self.resetCols)
|
||||||
self.viewContainer.bind(on_scroll_stop=self.on_scroll_stop)
|
self.viewContainer.bind(on_scroll_stop=self.on_scroll_stop)
|
||||||
# use_keyboard() will block the python
|
|
||||||
# no reason !!!!
|
|
||||||
# self.use_keyboard()
|
|
||||||
|
|
||||||
def key_handle(self,keyinfo):
|
def key_handle(self,keyinfo):
|
||||||
print('keyinfo=',keyinfo,'...................')
|
print('keyinfo=',keyinfo,'...................')
|
||||||
|
@ -1,133 +0,0 @@
|
|||||||
import math
|
|
||||||
from kivyblocks.graph import *
|
|
||||||
from kivy.utils import get_color_from_hex as rgb
|
|
||||||
from .threadcall import HttpClient
|
|
||||||
|
|
||||||
class Chart2d(Graph):
|
|
||||||
"""
|
|
||||||
json format:
|
|
||||||
{
|
|
||||||
"widgettype":"Chart2d",
|
|
||||||
"options":{
|
|
||||||
"xlabel":"Xlabel",
|
|
||||||
"ylable":"Ylabel",
|
|
||||||
"x_ticks_minor":1,
|
|
||||||
"x_ticks_major":5,
|
|
||||||
"y_ticks_minor":1,
|
|
||||||
"y_ticks_major":5,
|
|
||||||
"x_grid_label":true,
|
|
||||||
"y_grid_label":true,
|
|
||||||
"padding":5,
|
|
||||||
"xlog":false,
|
|
||||||
"ylog":false,
|
|
||||||
"x_grid":true,
|
|
||||||
"y_grid":true,
|
|
||||||
"xmin":0,
|
|
||||||
"xmax":100,
|
|
||||||
"ymax":100,
|
|
||||||
"ymin":1,
|
|
||||||
"x_field":"xxx",
|
|
||||||
"dataurl":"xxx",
|
|
||||||
"charts":[
|
|
||||||
{
|
|
||||||
"y_field":"yy",
|
|
||||||
"color":"efefef",
|
|
||||||
"charttype":"LinePlot"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
plotmappings={
|
|
||||||
"line":LinePlot,
|
|
||||||
"hbar":BarPlot
|
|
||||||
}
|
|
||||||
default_options = {
|
|
||||||
"x_grid_label":True,
|
|
||||||
"y_grid_label":True,
|
|
||||||
"xlabel":"Xlabel",
|
|
||||||
"ylabel":"Ylabel",
|
|
||||||
"xmin":0,
|
|
||||||
"xmax":100,
|
|
||||||
"ymax":100,
|
|
||||||
"ymin":1,
|
|
||||||
"x_grid":True,
|
|
||||||
"y_grid":True,
|
|
||||||
"padding":5,
|
|
||||||
"xlog":False,
|
|
||||||
"ylog":False,
|
|
||||||
'x_ticks_minor':1,
|
|
||||||
'x_ticks_major':5,
|
|
||||||
"y_ticks_minor":1,
|
|
||||||
"y_ticks_major":5,
|
|
||||||
'label_options': {
|
|
||||||
'color': rgb('444444'), # color of tick labels and titles
|
|
||||||
'bold': True},
|
|
||||||
'background_color': rgb('f8f8f2'), # canvas background color
|
|
||||||
'tick_color': rgb('808080'), # ticks and grid
|
|
||||||
'border_color': rgb('808080') # border drawn around each graph
|
|
||||||
}
|
|
||||||
|
|
||||||
def __init__(self, dataurl='',
|
|
||||||
data=None,
|
|
||||||
x_field='',
|
|
||||||
params={},
|
|
||||||
headers={},
|
|
||||||
charts=[],
|
|
||||||
**kw):
|
|
||||||
self._dataurl = dataurl
|
|
||||||
self._params = params
|
|
||||||
self._headers = {}
|
|
||||||
self.x_field = x_field
|
|
||||||
self._data = data
|
|
||||||
if not self._data:
|
|
||||||
self._data = self.get_data()
|
|
||||||
print('_data=',self._data, 'url=', self._dataurl)
|
|
||||||
xmax = len(self._data)
|
|
||||||
ymax = 0
|
|
||||||
xvalue = [ self._data[i][self.x_field] for i in range(xmax) ]
|
|
||||||
self._charts = charts
|
|
||||||
print('charts=', charts)
|
|
||||||
plots = []
|
|
||||||
for c in charts:
|
|
||||||
plotKlass = self.plotmappings.get(c['charttype'])
|
|
||||||
if not plotKlass:
|
|
||||||
print('charttype not defined', c)
|
|
||||||
continue
|
|
||||||
yvalue = [self._data[i][c['y_field']] for i in range(xmax)]
|
|
||||||
print('yvalue=', yvalue)
|
|
||||||
color = rgb(c.get('color','d8d8d8'))
|
|
||||||
plot = plotKlass(color=color)
|
|
||||||
plot.points = [(i,yvalue[i]) for i in range(xmax)]
|
|
||||||
plots.append(plot)
|
|
||||||
maxv = max(yvalue)
|
|
||||||
if ymax < maxv:
|
|
||||||
ymax = maxv
|
|
||||||
|
|
||||||
gkw = self.default_options.copy()
|
|
||||||
gkw.update(kw)
|
|
||||||
gkw['ymax'] = math.ceil(ymax)
|
|
||||||
gkw['y_ticks_minor'] = gkw['ymax'] / 10
|
|
||||||
gkw['y_ticks_major'] = gkw['ymax'] / 2
|
|
||||||
gkw['x_ticks_minor'] = 1
|
|
||||||
if gkw['x_ticks_major'] > xmax:
|
|
||||||
gkw['x_ticks_major'] = xmax
|
|
||||||
gkw['xmax'] = xmax
|
|
||||||
print('gkw=', gkw)
|
|
||||||
Graph.__init__(self, **gkw)
|
|
||||||
|
|
||||||
print('plots=', plots)
|
|
||||||
for p in plots:
|
|
||||||
print('points=', p.points)
|
|
||||||
self.add_plot(p)
|
|
||||||
if hasattr(p,'bind_to_graph'):
|
|
||||||
p.bind_to_graph(self)
|
|
||||||
|
|
||||||
def get_data(self):
|
|
||||||
hc = HttpClient()
|
|
||||||
d = hc.get(self._dataurl,
|
|
||||||
params=self._params,
|
|
||||||
headers=self._headers)
|
|
||||||
return d
|
|
||||||
|
|
@ -23,11 +23,7 @@ from .tab import TabsPanel
|
|||||||
from .qrdata import QRCodeWidget
|
from .qrdata import QRCodeWidget
|
||||||
# from .kivycamera import KivyCamera
|
# from .kivycamera import KivyCamera
|
||||||
from .filebrowser import FileLoaderBrowser
|
from .filebrowser import FileLoaderBrowser
|
||||||
from .graph import Graph, MeshLinePlot, MeshStemPlot, LinePlot, \
|
|
||||||
SmoothLinePlot, ContourPlot, BarPlot, HBar, VBar, ScatterPlot, \
|
|
||||||
PointPlot
|
|
||||||
from .mapview import MapView
|
from .mapview import MapView
|
||||||
from .chart2d import Chart2d
|
|
||||||
from .message import Conform
|
from .message import Conform
|
||||||
from .pagepanel import PagePanel
|
from .pagepanel import PagePanel
|
||||||
from .markdown import Markdown
|
from .markdown import Markdown
|
||||||
@ -59,19 +55,7 @@ r('QrReader', QrReader)
|
|||||||
r('Markdown', Markdown)
|
r('Markdown', Markdown)
|
||||||
r('PagePanel', PagePanel)
|
r('PagePanel', PagePanel)
|
||||||
r('Conform', Conform)
|
r('Conform', Conform)
|
||||||
r('Chart2d', Chart2d)
|
|
||||||
r('Popup', Popup)
|
r('Popup', Popup)
|
||||||
r('Graph', Graph)
|
|
||||||
r('MeshLinePlot', MeshLinePlot)
|
|
||||||
r('MeshStemPlot', MeshStemPlot)
|
|
||||||
r('LinePlot', LinePlot)
|
|
||||||
r('SmoothLinePlot', SmoothLinePlot)
|
|
||||||
r('ContourPlot', ContourPlot)
|
|
||||||
r('BarPlot', BarPlot)
|
|
||||||
r('HBar', HBar)
|
|
||||||
r('VBar', VBar)
|
|
||||||
r('ScatterPlot', ScatterPlot)
|
|
||||||
r('PointPlot', PointPlot)
|
|
||||||
r('MapView', MapView)
|
r('MapView', MapView)
|
||||||
r('DataGrid',DataGrid)
|
r('DataGrid',DataGrid)
|
||||||
r('FileLoaderBrowser',FileLoaderBrowser)
|
r('FileLoaderBrowser',FileLoaderBrowser)
|
||||||
|
Loading…
Reference in New Issue
Block a user