#!/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()