#!/usr/bin/python
#
# Urwid keyboard input test app
#    Copyright (C) 2004-2007  Ian Ward
#
#    This library is free software; you can redistribute it and/or
#    modify it under the terms of the GNU Lesser General Public
#    License as published by the Free Software Foundation; either
#    version 2.1 of the License, or (at your option) any later version.
#
#    This library is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
#    Lesser General Public License for more details.
#
#    You should have received a copy of the GNU Lesser General Public
#    License along with this library; if not, write to the Free Software
#    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
# Urwid web site: http://excess.org/urwid/

"""
Keyboard test application
"""

import urwid.curses_display
import urwid.raw_display
import urwid.web_display
import urwid

import sys

if urwid.web_display.is_web_request():
	Screen = urwid.web_display.Screen
else:
	if len(sys.argv)>1 and sys.argv[1][:1] == "r":
		Screen = urwid.raw_display.Screen
	else:
		Screen = urwid.curses_display.Screen

class KeyTest:
	def __init__(self):
		self.ui = Screen()
		header = urwid.Text("Values from get_input(). Q exits.")
		header = urwid.AttrWrap(header,'header')
		self.l = urwid.SimpleListWalker([])
		self.listbox = urwid.ListBox(self.l)
		listbox = urwid.AttrWrap(self.listbox, 'listbox')
		self.top = urwid.Frame( listbox, header )
		
	def main(self):
		self.ui.register_palette([
			('header', 'black', 'dark cyan', 'standout'),
			('key', 'yellow', 'dark blue', 'bold'),
			('listbox', 'light gray', 'black' ),
			])
		self.ui.run_wrapper(self.run)
	
	def run(self):
		self.ui.set_mouse_tracking()
		
		cols, rows = self.ui.get_cols_rows()

		keys = ['not q']
		while 'q' not in keys and 'Q' not in keys:
			if keys:
				self.ui.draw_screen((cols,rows),
					self.top.render((cols,rows),focus=True))
			keys, raw = self.ui.get_input(raw_keys=True)
			if 'window resize' in keys:
				cols, rows = self.ui.get_cols_rows()
			if not keys:
				continue
			t = []
			a = []
			for k in keys:
				if urwid.is_mouse_event(k):
					t += ["('",('key',k[0]),
						"', ", ('key',`k[1]`),
						", ", ('key',`k[2]`),
						", ", ('key',`k[3]`),
						") "]
				else:
					t += ["'",('key',k),"' "]
			
			rawt = urwid.Text(", ".join(["%d"%r for r in raw]))
			
			self.l.append(
				urwid.Columns([
					('weight',2,urwid.Text(t)),
					rawt])
				)
			self.listbox.set_focus(len(self.l)-1,'above')
				


def main():
	urwid.web_display.set_preferences('Input Test')
	if urwid.web_display.handle_short_request():
		return
	KeyTest().main()
	

if '__main__'==__name__ or urwid.web_display.is_web_request():
	main()
