#!/usr/bin/env python # -*- coding: iso8859-2 -*- ''' Show Remote Controller version 1.1 This program shows remote controller. Warning! This program needs special .lircrc file, generated by do.sh script from this package. (c) 2003-2006 Jan ONDREJ (SAL) This program is licensed under GPL. ''' import gobject import gtk import sys, re, string, os import pylirc GDK=gtk.keysyms ORIGINAL='0' FONT_TYPE='Sans 20' remote=os.path.dirname(sys.argv[0])+'/rds/JVCs' buttons={} lircrc={} showkeys='' actual=showkeys sktab=[''] cycle=True tn=0 reg_white=re.compile('[\r\n\t ]+') def es(s): return (" "+s+" ") def setbuf(buffer,key,r): global lircrc start,end = buffer.get_bounds() buffer.delete(start,end) iter=buffer.get_end_iter() if lircrc.has_key((r,key)): buffer.insert_with_tags_by_name(iter, es(lircrc[r,key]), 'cfg') elif lircrc.has_key(('',key)) & (r!=ORIGINAL): buffer.insert_with_tags_by_name(iter, es(lircrc['',key]), 'cfg') else: buffer.insert_with_tags_by_name(iter, es(key), 'rem') def remas(r=ORIGINAL): global buttons setbuf(buttons['MENU_TYPE'],'MENU_TYPE',r) for i in buttons.keys(): setbuf(buttons[i],i,r) def key_check(keyval): global showkeys, tn, cycle, actual if (keyval == GDK.Escape) | (keyval == ord('q')): gtk.main_quit() if (keyval == GDK.Return) | (keyval == ord('r')): if cycle: cycle=False actual=ORIGINAL else: cycle=True timer() if (keyval == ord('n')) | (keyval == GDK.Right): tn=tn+1 if tn>=len(sktab): tn=0 showkeys=sktab[tn] remas(showkeys) if (keyval == ord('p')) | (keyval == GDK.Left): tn=tn-1 if tn<0: tn=len(sktab)-1 showkeys=sktab[tn] remas(showkeys) if (keyval >= GDK._0) & (keyval <= GDK._9): tn=keyval-ord('0') showkeys=sktab[tn] remas(showkeys) def keyf(treeview, event): key_check(event.keyval) def check_lirc(): events=pylirc.nextcode() if events: for event in events: if len(event)==1: key_check(ord(event)) gobject.timeout_add(100, check_lirc) def timer(): global actual if actual==ORIGINAL: actual=showkeys else: actual=ORIGINAL remas(actual) if cycle: gobject.timeout_add(1000, timer); def main(): global win, buttons win = gtk.Window() win.connect('destroy', lambda win: gtk.main_quit()) win.set_title('REMOTE CONTROLLER') win.set_border_width(8) win.maximize() vbox = gtk.VBox(False, 3) vbox.connect('key_press_event', keyf); win.add(vbox) f=open(remote,'r') line=0 while 1: line=line+1 l=f.readline() if l=='': break b=string.split(string.strip(l),'|',9) if line==1: b=b+['MENU_TYPE'] hbox = gtk.HBox(True, 3) vbox.add(hbox) for text in b: text_view=gtk.TextView() buffer = gtk.TextBuffer(None) text_view.set_buffer(buffer) text_view.set_editable(False) text_view.set_cursor_visible(False) tag=buffer.create_tag('rem') tag.set_property('font', FONT_TYPE) tag.set_property('background','white') tag.set_property('foreground','black') tag=buffer.create_tag('cfg') tag.set_property('font', FONT_TYPE) tag.set_property('background','blue') tag.set_property('foreground','white') hbox.pack_start(text_view,True,True,0) buttons[text]=buffer cell = gtk.CellRendererText() cell.set_property('font', 'Sans 40') f.close() timer(); win.show_all() try: pylirc.init('ShowRem') gobject.timeout_add(100, check_lirc) except: print "LIRC initialization error!" #sys.exit(1) gtk.main() def readlircrc(): global lircrc f=open(os.path.dirname(sys.argv[0])+'/lircrc','r') mode='' comment='' lircrc['','MENU_TYPE']='Default' while 1: l=f.readline() if l=='': break l=string.strip(l) if l and l[0]=='#': # an comment continue if re.search('begin[ \t]+([a-zA-Z0-9_]+)$',l): mode=re.findall('begin[ \t]+([a-zA-Z0-9_]+)$',l)[0] lircrc[mode,'MENU_TYPE']=mode sktab.append(mode) elif re.search('^[ \t]*[^ \t]*[ \t]+([^ \t]*)[ \t]',l): buttons=re.findall('^[ \t]*([^ \t]*)[ \t]',l)[0] comment=re.findall('^[ \t]*[^ \t]*[ \t]+([^ \t]*)[ \t]',l)[0] for button in string.split(buttons,';'): b=string.split(button,"@")[0] if not lircrc.has_key((mode,b)): lircrc[mode,b]=comment f.close() if __name__ == '__main__': n=1 while n