This commit is contained in:
yumoqing 2020-09-26 21:58:10 +08:00
parent f886788bb3
commit 54119a475f
2 changed files with 137 additions and 7 deletions

View File

@ -1,4 +1,6 @@
from kivy.uix.floatlayout import FloatLayout
from kivy.event import EventDispatcher
from kivy.clock import Clock
from kivy.factory import Factory
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
@ -21,12 +23,15 @@ class FileLoaderBrowser(Popup):
Popup.__init__(self, content = self.content,
title=i18n(title),
size_hint=(0.9,0.9))
self.register_event_type('on_selected')
self.choose_dir = choose_dir
self.list_widget = FileChooserListView(rootpath=rootpath)
self.icon_widget = FileChooserIconView(rootpath=rootpath)
self.list_widget.bind(on_selection=self.set_txt_input)
self.icon_widget.bind(on_selection=self.set_txt_input)
self.list_widget.bind(on_touch_up=self.on_release)
self.icon_widget.bind(on_touch_up=self.on_release)
self.list_widget.bind(on_submit=self.do_submit)
self.icon_widget.bind(on_submit=self.do_submit)
self.btn_load = Button(text=i18n('load'),size_hint=(None,None),
size=CSize(8,2))
self.btn_list_view = PressableImage( \
@ -48,19 +53,44 @@ class FileLoaderBrowser(Popup):
self.view_mode = 'list_view'
self.show_list_view()
def set_txt_input(self,o,v=None):
print('on_selection fired',o.selection)
self.txt_input.text = o.path
def on_selected(self,fn):
print(fn,'selected')
def on_release(self,o,v=None):
Clock.schedule_once(self.set_txt_input,0.4)
def set_txt_input(self,t=None):
self.txt_input.text = self.cur_widget.path
def target_selected(self):
fn = self.txt_input.text
if not self.choose_dir and os.path.isdir(fn):
return
if self.choose_dir and os.path.isfile(fn):
fn = os.path.dirname(fn)
self.dispatch('on_selected',fn)
self.dismiss()
def do_submit(self,o,a,b):
if not self.cur_widget.selection:
return
self.txt_input.text = self.cur_widget.selection[0]
self.target_selected()
def do_load(self,o,d=None):
print(o,d)
print(self.cur_widget.selection and self.cur_widget.selection[0] or '', 'selected ')
if self.cur_widget.selection:
self.txt_input.text = self.cur_widget.selection[0]
if self.txt_input.text == '':
return
self.target_selected()
def change_view_mode(self,o,v=None):
self.content.clear_widgets()
if self.view_mode == 'list_view':
self.show_icon_view()
else:
self.show_list_view()
def show_list_view(self):
self.cur_widget = self.list_widget
self.view_mode = 'list_view'

100
kivyblocks/player_osc.py Normal file
View File

@ -0,0 +1,100 @@
import json
from pythonosc import dispatcher, osc_server, udp_client
from appPublic.sockPackage import get_free_local_addr
from background import Background
from kivy.event import EventDispatcher
class PlayerOSCServer(EventDispatcher):
def __init__(self,playerid):
EventDispatcher.__init__(self)
self.playerid = playerid
dispatch = dispatcher.Dispatcher()
self.ip,self.port = get_free_local_addr()
# self.server = osc_server.ThreadingOSCUDPServer( (self.ip, self.port), dispatch)
self.server = osc_server.BlockingOSCUDPServer( (self.ip, self.port), dispatch)
self.osc_dispatch = dispatch
self.commands = []
self.register_event_type('on_osc_event')
self.map('/mute',self.mute)
self.map('/pause',self.pause)
self.map('/menu',self.menu)
self.map('/up',self.up)
self.map('/down',self.down)
self.map('/left',self.left)
self.map('/right',self.right)
self.map('/play',self.play)
self.start()
def on_osc_event(self,*args):
print('PlayerOSCServer():on_osc_event():args=',args)
def menu(self,*args):
self.dispatch('on_osc_event','menu',*args)
def mute(self,*args):
self.dispatch('on_osc_event','mute',*args)
def pause(self,*args):
self.dispatch('on_osc_event','pouse',*args)
def up(self,*args):
self.dispatch('on_osc_event','up',*args)
def down(self,*args):
self.dispatch('on_osc_event','down',*args)
def left(self,*args):
self.dispatch('on_osc_event','left',*args)
def right(self,*args):
self.dispatch('on_osc_event','right',*args)
def play(self,*args):
print('play():args=',args)
d = json.loads(args[1])
self.dispatch('on_osc_event','play',d)
def start(self):
self.thread = Background(self.server.serve_forever)
self.thread.daemon_threads = True
self.thread.start()
def info(self):
return {
"playerid":self.playerid,
"ip":self.ip,
"port":self.port,
"commands": self.commands
}
def map(self,cmd,func):
self.commands.append(cmd)
self.osc_dispatch.map(cmd,func)
def stop(self):
self.server.shutdown()
self.server.server_close()
self.thread.join(5)
class PlayerOSCClient:
def __init__(self, ip,port):
self.client = udp_client.SimpleUDPClient(ip, port) # Create client
def play(self, mrec):
t = json.dumps(mrec)
self.client.send_message("/play", t)
def mute(self):
self.client.send_message('/mute')
def menu(self):
self.client.send_message('/menu')
def pause(self):
self.client.send_message('/pause')
def up(self):
self.client.send_message('/up')