diff -urN v7/gui.py v8/gui.py --- v7/gui.py 2020-01-25 01:50:02.000000000 +0900 +++ v8/gui.py 2020-01-26 19:37:29.000000000 +0900 @@ -19,6 +19,9 @@ vsz.Add( hsz, 0, flag, border ) return vsz +def set_min_w(o, w): + o.SetMinSize((w, -1)) + def init(app, title): rdr = io_ut.reader_new( sys.stdin, 1, no_buf=True ) @@ -37,8 +40,12 @@ lock.release() return rep - while comm('', rdr.readline) != 'ready\n': - pass + while True: + s = comm('', rdr.readline) + if s == 'ready\n': + break + if not s: + sys.exit(1) frame = wx.Frame(None, wx.ID_ANY, title) @@ -57,8 +64,30 @@ shifts = (2, 1, 0, -1) get_shift = lambda : shifts[ menu_speed.GetSelection() ] + btn_rw = wx.Button( frame, wx.ID_ANY, '<<' ) + set_min_w(btn_rw, 40) + btn_ff = wx.Button( frame, wx.ID_ANY, '>>' ) + set_min_w(btn_ff, 40) + + btn_div = wx.Button( frame, wx.ID_ANY, '' ) + btn_div.Enable(False) + area = wx.StaticText( frame, wx.ID_ANY,'-/-' ) + set_min_w(area, 40) + + def div_update(): + cmd = 'dbg.out( snd.div_join_label() )' + s = comm(cmd, rdr.readline).strip() + btn_div.SetLabel(s) + en = (s != '') + btn_div.Enable(en) + + def area_update(): + cmd = 'dbg.out("{}".format( snd.curr_area() ) )' + s = comm(cmd, rdr.readline).strip() + area.SetLabel(s) pos = wx.StaticText( frame, wx.ID_ANY,'-' ) + set_min_w(pos, 40) def pos_update(): cmd = 'dbg.out("{}".format( snd.get_sec() ) )' s = comm(cmd, rdr.readline).strip() @@ -71,6 +100,7 @@ pos_ev.wait(tmout) pos_ev.clear() pos_update() + wx.CallAfter(area_update) th = thr.loop_new(th_func) def th_stop(): @@ -91,16 +121,25 @@ s = '' if o == btn_play: s = 'snd.{}()'.format( 'start' if is_play() else 'stop' ) - pos_ev.set() elif o == cbox_reverse: s = 'snd.reverse={}'.format( o.GetValue() ) elif o == menu_speed: s = 'snd.shift={}'.format( get_shift() ) + elif o == btn_div: + s = 'snd.div_join()' + elif o == btn_rw: + s = 'snd.rw()' + elif o == btn_ff: + s = 'snd.ff()' - if o in (cbox_reverse, menu_speed) and is_play(): + if o in (cbox_reverse, menu_speed, btn_rw, btn_ff) and is_play(): s = '\n'.join( ( 'snd.stop()', s, 'snd.start()' ) ) if s: comm(s) + if o in (btn_play, btn_div, btn_rw, btn_ff): + pos_ev.set() + wx.CallAfter( div_update ) + wx.CallAfter( area_update ) def quit_hdl(evt): dbg.err('quit') @@ -110,9 +149,16 @@ frame.Bind( wx.EVT_TOGGLEBUTTON, hdl, btn_play ) frame.Bind( wx.EVT_CHECKBOX, hdl, cbox_reverse ) frame.Bind( wx.EVT_CHOICE, hdl, menu_speed ) + frame.Bind( wx.EVT_BUTTON, hdl, btn_rw ) + frame.Bind( wx.EVT_BUTTON, hdl, btn_ff ) + frame.Bind( wx.EVT_BUTTON, hdl, btn_div ) frame.Bind( wx.EVT_CLOSE, quit_hdl ) - szr = wrap( [ (btn_play, cbox_reverse, menu_speed), (pos,) ] ) + szr = wrap( [ + (btn_rw, btn_play, btn_ff), + (cbox_reverse, menu_speed), + (pos, btn_div, area), + ] ) frame.SetSizer(szr) frame.Layout() frame.Fit() diff -urN v7/snddiv.py v8/snddiv.py --- v7/snddiv.py 2020-01-25 00:53:31.000000000 +0900 +++ v8/snddiv.py 2020-01-26 19:34:56.000000000 +0900 @@ -226,6 +226,16 @@ divs.append(e.sec) divs.sort() + def div_join_label(): + if not e.play: + if e.sec in divs: + i = divs.index(e.sec) + if i not in (0, len(divs)-1): + return 'join' + else: + return 'div' + return '' + def ff(): if e.sec >= divs[-1]: return @@ -246,6 +256,14 @@ if 0 <= i and i < len(divs)-1: data.save( divs[i], divs[i+1], name ) + def curr_area(): + n = len(divs) - 1 + sec = get_sec() + for i in range(n): + if divs[i] < sec and sec <= divs[i+1]: + return '{}/{}'.format(i+1, n) + return '{}/{}'.format(1, n) + return empty.to_attr( e, locals() ) def get_args(): diff -urN v7/snddiv.sh v8/snddiv.sh --- v7/snddiv.sh 1970-01-01 09:00:00.000000000 +0900 +++ v8/snddiv.sh 2020-01-26 19:34:56.000000000 +0900 @@ -0,0 +1,5 @@ +#!/bin/bash + +./stdio.sh ./gui.py "./snddiv.py -silent $1" + +# EOF