bugfix
This commit is contained in:
parent
8eea5b6882
commit
9e0510d4b7
@ -422,14 +422,14 @@ class Running(AsyncImage):
|
|||||||
self.host_widget.disabled = True
|
self.host_widget.disabled = True
|
||||||
|
|
||||||
def dismiss(self):
|
def dismiss(self):
|
||||||
if self.parent:
|
Window.remove_widget(self)
|
||||||
self.parent.remove_widget(self)
|
|
||||||
self.host_widget.disabled = False
|
self.host_widget.disabled = False
|
||||||
|
print('dismiss() called ..')
|
||||||
|
|
||||||
def set_size(self, *args):
|
def set_size(self, *args):
|
||||||
self.size_hint = (None, None)
|
self.size_hint = (None, None)
|
||||||
self.width = CSize(2)
|
self.width = CSize(3)
|
||||||
self.height = CSize(2)
|
self.height = CSize(3)
|
||||||
self.center = self.host_widget.center
|
self.center = self.host_widget.center
|
||||||
|
|
||||||
class PressableImage(ButtonBehavior,AsyncImage):
|
class PressableImage(ButtonBehavior,AsyncImage):
|
||||||
|
@ -56,6 +56,8 @@ class Cell(ButtonBehavior, WidgetCSS, BoxLayout):
|
|||||||
"""
|
"""
|
||||||
self.desc = desc
|
self.desc = desc
|
||||||
self.row = row
|
self.row = row
|
||||||
|
self.part = self.row.part
|
||||||
|
self.datagrid = self.part.datagrid
|
||||||
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()
|
||||||
@ -72,6 +74,14 @@ class Cell(ButtonBehavior, WidgetCSS, BoxLayout):
|
|||||||
else:
|
else:
|
||||||
self.cell_type = 'data'
|
self.cell_type = 'data'
|
||||||
bl = UiFactory.build_view_widget(desc,self.row.row_data)
|
bl = UiFactory.build_view_widget(desc,self.row.row_data)
|
||||||
|
if self.row.header and desc['name'] == '_checkable_action_':
|
||||||
|
id = self.row.row_data[idfield]
|
||||||
|
if self.row.part.datagrid.is_checked(id):
|
||||||
|
bl.setValue(True)
|
||||||
|
else:
|
||||||
|
bl.setValue(False)
|
||||||
|
bl.bind(select_state=self.row.checkable_action)
|
||||||
|
|
||||||
self.colume_name = desc['name']
|
self.colume_name = desc['name']
|
||||||
if bl:
|
if bl:
|
||||||
self.add_widget(bl)
|
self.add_widget(bl)
|
||||||
@ -89,6 +99,7 @@ class Row(BoxLayout):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
self.part = part
|
self.part = part
|
||||||
|
self.datagrid = self.part.datagrid
|
||||||
self.header = header
|
self.header = header
|
||||||
self.row_data = data
|
self.row_data = data
|
||||||
self.row_id = None
|
self.row_id = None
|
||||||
@ -103,6 +114,9 @@ class Row(BoxLayout):
|
|||||||
self.height = self.part.datagrid.rowHeight()
|
self.height = self.part.datagrid.rowHeight()
|
||||||
self.init(0)
|
self.init(0)
|
||||||
|
|
||||||
|
def checkable_action(self, o, *args):
|
||||||
|
self.datagrid.set_checked_rows(self.row_id, o.select_state)
|
||||||
|
|
||||||
def on_row_press(self, *args):
|
def on_row_press(self, *args):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -313,6 +327,7 @@ class DataGrid(VBox):
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
checkable = BooleanProperty(False)
|
||||||
row_selected = BooleanProperty(False)
|
row_selected = BooleanProperty(False)
|
||||||
row_normal_css = StringProperty('default')
|
row_normal_css = StringProperty('default')
|
||||||
row_selected_css = StringProperty('default')
|
row_selected_css = StringProperty('default')
|
||||||
@ -326,6 +341,16 @@ class DataGrid(VBox):
|
|||||||
fields = ListProperty(None)
|
fields = ListProperty(None)
|
||||||
tailer = DictProperty(None)
|
tailer = DictProperty(None)
|
||||||
def __init__(self,**options):
|
def __init__(self,**options):
|
||||||
|
if self.checkable:
|
||||||
|
self.fields.insert(0, {
|
||||||
|
"name":"_checkable_action_",
|
||||||
|
"label":" ",
|
||||||
|
"type":"checkbox",
|
||||||
|
"width":CSize(2),
|
||||||
|
"freeze_flag":True
|
||||||
|
})
|
||||||
|
|
||||||
|
self.checked_rows = []
|
||||||
self.select_rowid = None
|
self.select_rowid = None
|
||||||
self.rowheight = None
|
self.rowheight = None
|
||||||
self.on_sizeTask = None
|
self.on_sizeTask = None
|
||||||
@ -363,6 +388,11 @@ class DataGrid(VBox):
|
|||||||
self.tailer_widgets = {}
|
self.tailer_widgets = {}
|
||||||
self.build_tailer(self.tailer)
|
self.build_tailer(self.tailer)
|
||||||
|
|
||||||
|
def set_checked_rows(self, rowid, flag):
|
||||||
|
if flag and rowid not in self.checked_ids:
|
||||||
|
self.checked_ids.append(rowid)
|
||||||
|
if not flag:
|
||||||
|
self.checked_ids = [ id for id in self.checked_ids if id !=rowid]
|
||||||
def on_rowpress(self, *args):
|
def on_rowpress(self, *args):
|
||||||
print('on_rowpress fire, args=', args)
|
print('on_rowpress fire, args=', args)
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ from kivy.properties import StringProperty, BooleanProperty, \
|
|||||||
from kivy.graphics.texture import Texture
|
from kivy.graphics.texture import Texture
|
||||||
from kivy.graphics import Color, Line
|
from kivy.graphics import Color, Line
|
||||||
from kivyblocks.ready import WidgetReady
|
from kivyblocks.ready import WidgetReady
|
||||||
|
from kivyblocks.baseWidget import Running
|
||||||
|
|
||||||
class FFVideo(WidgetReady, Image):
|
class FFVideo(WidgetReady, Image):
|
||||||
v_src = StringProperty(None)
|
v_src = StringProperty(None)
|
||||||
@ -28,11 +28,13 @@ class FFVideo(WidgetReady, Image):
|
|||||||
duration = NumericProperty(-1)
|
duration = NumericProperty(-1)
|
||||||
position = NumericProperty(-1)
|
position = NumericProperty(-1)
|
||||||
volume = NumericProperty(-1)
|
volume = NumericProperty(-1)
|
||||||
|
timeout = NumericProperty(5)
|
||||||
in_center_focus = BooleanProperty(False)
|
in_center_focus = BooleanProperty(False)
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self._player = None
|
self._player = None
|
||||||
self._update_task = None
|
self._update_task = None
|
||||||
|
self.running = None
|
||||||
self.vh_task = None
|
self.vh_task = None
|
||||||
self.is_black = False
|
self.is_black = False
|
||||||
self.videosize = None
|
self.videosize = None
|
||||||
@ -43,6 +45,8 @@ class FFVideo(WidgetReady, Image):
|
|||||||
self.headers_pattern = {}
|
self.headers_pattern = {}
|
||||||
super(FFVideo, self).__init__(**kwargs)
|
super(FFVideo, self).__init__(**kwargs)
|
||||||
self.set_black()
|
self.set_black()
|
||||||
|
self.start_task = None
|
||||||
|
self.block_task = None
|
||||||
self.register_event_type('on_frame')
|
self.register_event_type('on_frame')
|
||||||
self.register_event_type('on_open_failed')
|
self.register_event_type('on_open_failed')
|
||||||
self.register_event_type('on_leave_focus')
|
self.register_event_type('on_leave_focus')
|
||||||
@ -50,8 +54,12 @@ class FFVideo(WidgetReady, Image):
|
|||||||
self.register_event_type('on_load_success')
|
self.register_event_type('on_load_success')
|
||||||
self.register_event_type('on_startplay')
|
self.register_event_type('on_startplay')
|
||||||
|
|
||||||
def on_open_failed(self, *args):
|
def video_blocked(self, *args):
|
||||||
pass
|
self._play_stop()
|
||||||
|
self.on_v_src(None, None)
|
||||||
|
|
||||||
|
def on_open_failed(self, source):
|
||||||
|
print(f'{source} open failed')
|
||||||
|
|
||||||
def on_load_success(self, *args):
|
def on_load_success(self, *args):
|
||||||
pass
|
pass
|
||||||
@ -195,6 +203,7 @@ class FFVideo(WidgetReady, Image):
|
|||||||
self._player.request_channel('audio', action='cycle')
|
self._player.request_channel('audio', action='cycle')
|
||||||
|
|
||||||
def on_v_src(self, o, src):
|
def on_v_src(self, o, src):
|
||||||
|
# self.running = Running(self)
|
||||||
self.status = 'stop'
|
self.status = 'stop'
|
||||||
self.playing = False
|
self.playing = False
|
||||||
|
|
||||||
@ -224,6 +233,13 @@ class FFVideo(WidgetReady, Image):
|
|||||||
lib_opts=lib_opts)
|
lib_opts=lib_opts)
|
||||||
# self._play_start()
|
# self._play_start()
|
||||||
self.status = 'play'
|
self.status = 'play'
|
||||||
|
self.start_task = Clock.schedule_once(self.open_failed, self.timeout)
|
||||||
|
|
||||||
|
def open_failed(self, *args):
|
||||||
|
self.dispatch('on_open_failed', self.v_src)
|
||||||
|
|
||||||
|
def on_open_failed(self, source):
|
||||||
|
print(f'{source} open failed')
|
||||||
|
|
||||||
def file_opened(self, files):
|
def file_opened(self, files):
|
||||||
self.v_src = files[0]
|
self.v_src = files[0]
|
||||||
@ -366,6 +382,15 @@ class FFVideo(WidgetReady, Image):
|
|||||||
self._update_task = Clock.schedule_once(self.do_update, 0)
|
self._update_task = Clock.schedule_once(self.do_update, 0)
|
||||||
|
|
||||||
def do_update(self, *args):
|
def do_update(self, *args):
|
||||||
|
if self.start_task:
|
||||||
|
self.start_task.cancel()
|
||||||
|
self.start_task = None
|
||||||
|
if self.block_task:
|
||||||
|
self.block_task.cancel()
|
||||||
|
# if self.running:
|
||||||
|
# print('runnung dismiss ........')
|
||||||
|
# self.running.dismiss()
|
||||||
|
# self.running = None
|
||||||
self.position = self._player.get_pts()
|
self.position = self._player.get_pts()
|
||||||
self.volume = self._player.get_volume()
|
self.volume = self._player.get_volume()
|
||||||
img, t = self.last_frame
|
img, t = self.last_frame
|
||||||
@ -376,4 +401,5 @@ class FFVideo(WidgetReady, Image):
|
|||||||
self.dispatch('on_frame', self.last_frame)
|
self.dispatch('on_frame', self.last_frame)
|
||||||
self.last_frame = None
|
self.last_frame = None
|
||||||
self.vh_task = Clock.schedule_once(self.video_handle, 0)
|
self.vh_task = Clock.schedule_once(self.video_handle, 0)
|
||||||
|
self.block_task = Clock.schedule_once(self.video_blocked, self.timeout)
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
__version__ = '0.4.2'
|
__version__ = '0.4.3'
|
||||||
|
Loading…
Reference in New Issue
Block a user