#!/usr/bin/python # -*- coding: utf-8 -*- # # A GTK Python GO client import sys sys.path.append('lib/') sys.path.append('widgets/') sys.path.append('gomill/') import goban import config import gtk, gtk.glade, gobject import gogame class Pygo(): """This class handles the main interface, defines basic callbacks""" def __init__(self): self.resize = True self.go_game = None self.init_user_interface('./ui/default.glade') self.init_widgets() def init_user_interface(self, path_to_skin): self.tree=gtk.glade.XML(path_to_skin, "window") self.tree.signal_autoconnect(self) self.window = self.tree.get_widget('window') self.contents = self.tree.get_widget('main_box') self.games = self.tree.get_widget('games') def init_widgets(self): self.window.resize(800,600) # gobject.timeout_add(1000, self.update) # fixme - ctrl+shift+tab just does a shift+tab, even with the return True... def on_key_pressed(self, widget, event): key = gtk.gdk.keyval_name(event.keyval) if key == 'Tab' and event.state & gtk.gdk.CONTROL_MASK: if event.state & gtk.gdk.SHIFT_MASK: self.do_prev_page() else: self.do_next_page() return True def on_game_save(self, widget): print 'stub: Pygo.on_game_save()' def on_game_save_as(self, widget): print 'stub: Pygo.on_game_save_as()' def on_game_close(self, widget): if self.games.get_current_page() == -1: return self.games.remove_page(self.games.get_current_page()) def on_local_new(self, widget): game = gogame.GoGame(goban.Goban()) self.games.append_page(game, gtk.Label('Local Game')) self.games.set_tab_reorderable(game, True) game.show_all() game.winner_box.hide() def on_local_load_sgf(self, widget): print 'stub: Pygo.on_local_load_sgf()' def on_net_direct(self, widget): print 'stub: Pygo.on_net_direct()' def on_quit(self, widget): sys.exit(0) def do_prev_page(self): '''Goes to the previous tab page, but looping if this is the first''' if self.games.get_current_page() == -1: return new_page = self.games.get_current_page() - 1 if new_page < 0: new_page = self.games.get_n_pages() - 1 self.games.set_current_page(new_page) def do_next_page(self): '''Goes to the next tab page, but looping if this is the last''' if self.games.get_current_page() == -1: return new_page = self.games.get_current_page() + 1 if new_page >= self.games.get_n_pages(): new_page = 0 self.games.set_current_page(new_page) def main(): # Read config file config.init() # base_icon = gtk.gdk.pixbuf_new_from_file('ui/icon.svg') # icon = base_icon.scale_simple(128, 128, gtk.gdk.INTERP_BILINEAR) # gtk.window_set_default_icon(icon) go_obj = Pygo() # Let's see if we can avoid using threads in this implementation # gtk.gdk.threads_init() # gtk.gdk.threads_enter() gtk.main() # gtk.gdk.threads_leave() if __name__ == '__main__': main()