#!/usr/bin/env python

########################################################################
###                  by jenicek@fucksheep.org 2003                   ###
########################################################################

from gtk import *
from urllib import urlopen
from string import strip, split

app_name = 'gsheep dictionary'
url_tran = 'http://krtek.activa.cz/~jenicek/sheepdict.fs'

GDK_CURRENT_TIME = 0
GDK_SELECTION_PRIMARY = 1

class Application(GtkWindow):
	
	def __init__(self):
		GtkWindow.__init__(self, WINDOW_TOPLEVEL)
		self.set_title(app_name)
		self.connect("destroy", self.destroy_cb) 
		self.set_border_width(2)
		
		self.direction = 'ce' ## default direction

		self.clist = GtkCList(2, [' Word', ' Found'])
		self.clist.set_column_width(0, 100)
		self.clist.set_shadow_type(SHADOW_OUT) # i love that :)
		self.clist.connect("select_row", self.select_row_callback)
		
		scrolled_window = GtkScrolledWindow()
		scrolled_window.set_policy(POLICY_AUTOMATIC, POLICY_ALWAYS)
		scrolled_window.add(self.clist)

		self.entry = GtkEntry(20)
		self.entry.connect('key-press-event', self.entry_press_key)

		## fake entry for clipboard
		self.entrySelection = GtkEntry(0)
		self.entrySelection.realize()

		radio_ce = GtkRadioButton(None, 'czech => english')		
		radio_ec = GtkRadioButton(radio_ce, 'english => czech')
		radio_ec.connect("toggled", self.set_dir)
		
		box_main = GtkVBox(FALSE, 0)

		box_main.pack_start(self.entry, FALSE, FALSE, 0)
		box_main.pack_start(scrolled_window, TRUE, TRUE, 0)

		box_switch = GtkHBox(FALSE, 0)
		box_switch.pack_start(radio_ce, FALSE, FALSE, 0)
		box_switch.pack_start(radio_ec, FALSE, FALSE, 0)

		box_main.pack_start(box_switch, FALSE, FALSE, 0)

		self.add(box_main)
		self.entry.grab_focus()

	def setSelection(self, str):
		## faking selection :)
		self.entrySelection.set_text(str)
		self.entrySelection.select_region(0, len(str))

	def select_row_callback(self, clist, row, column, event, data=None):
		self.setSelection (self.clist.get_text(row, 1))

	def entry_press_key(self, *args):
		is_enter = 0
		try:
			is_enter = ord(args[1].string) == 13 ## fucking ENTER :)
		except:
			pass
		if is_enter:
			self.update_status('Connecting ...')
			self.get_results(self)

	def get_results(self, *args):
		word = self.entry.get_text()
		
		url = "%s?word=%s&dir=%s" % (
			url_tran,
			word,
			self.direction
			)

		self.update_status('Searching ...')
		ur = urlopen(url)

		self.clist.clear()
		self.update_status('Getting results ...')
		for item in ur.readlines():
			line = strip(item)
			rs = split(line,'|')			
			self.clist.append(rs)
		self.update_status(app_name)
		
	def set_dir(self, *args):
		if args[0].active:
			self.direction = 'ec'
		else:
			self.direction = 'ce'
		
	def destroy_cb(self,*args):    
		self.hide()
		mainquit()

	def update_status(self, string):
		self.set_title(string)
		mainiteration(FALSE)
		

if __name__ == '__main__':
	app = Application()
	app.show_all() 
	mainloop()