From: <umg...@us...> - 2007-04-06 17:59:18
|
Revision: 402 http://svn.sourceforge.net/pybridge/?rev=402&view=rev Author: umgangee Date: 2007-04-06 10:58:59 -0700 (Fri, 06 Apr 2007) Log Message: ----------- Update references to roster classes, remove old event handler mechanism. Modified Paths: -------------- trunk/pybridge/pybridge/ui/eventhandler.py trunk/pybridge/pybridge/ui/window_main.py Modified: trunk/pybridge/pybridge/ui/eventhandler.py =================================================================== --- trunk/pybridge/pybridge/ui/eventhandler.py 2007-04-06 17:55:41 UTC (rev 401) +++ trunk/pybridge/pybridge/ui/eventhandler.py 2007-04-06 17:58:59 UTC (rev 402) @@ -38,111 +38,3 @@ if method: method(*args, **kwargs) - - - -class EventHandler: - """An implementation of ITableEvents.""" - - #implements(IServerEvents, ITableEvents, IBridgeTableEvents) - - - def __init__(self): - self.callbacks = {} - - -# Implementation of IServerEvents. - - - def connectionLost(self, connector, reason): - print "Lost connection:", reason.getErrorMessage() - self.runCallbacks('connectionLost', connector, reason) - - - def tableOpened(self, table): - self.runCallbacks('tableOpened', table) - - - def tableClosed(self, table): - self.runCallbacks('tableClosed', table) - - - def userLoggedIn(self, user): - self.runCallbacks('userLoggedIn', user) - - - def userLoggedOut(self, user): - self.runCallbacks('userLoggedOut', user) - - -# Implementation of ITableEvents. - - - def observerAdded(self, table, observer): - self.runCallbacks('observerAdded', table, observer) - - - def observerRemoved(self, table, observer): - self.runCallbacks('observerRemoved', table, observer) - - - def playerAdded(self, table, player, position): - self.runCallbacks('playerAdded', table, player, position) - - - def playerRemoved(self, table, player, position): - self.runCallbacks('playerRemoved', table, player, position) - - - def messageReceived(self, table, message, sender, recipients): - self.runCallbacks('messageReceived', table, message, sender, recipients) - - -# Implementation of IBridgeTableEvents. - - - def gameStarted(self, table, dealer, vulnNS, vulnEW): - self.runCallbacks('gameStarted', table, dealer, vulnNS, vulnEW) - - - def gameFinished(self, table): - self.runCallbacks('gameFinished', table) - - - def gameCallMade(self, table, call, position): - self.runCallbacks('gameCallMade', table, call, position) - - - def gameCardPlayed(self, table, card, position): - self.runCallbacks('gameCardPlayed', table, card, position) - - - def gameHandRevealed(self, table, hand, position): - self.runCallbacks('gameHandRevealed', table, hand, position) - - -# Methods to manipulate the callback lists. - - - def registerCallbacksFor(self, window, events): - """Places window object in callback list for each event.""" - for event in events: - if event not in self.callbacks: - self.callbacks[event] = [] - self.callbacks[event].append(window) - - - def unregister(self, window, events): - """Removes window object from callback list for each event.""" - for event in events: - self.callbacks[event].remove(window) - - - def runCallbacks(self, event, *args, **kwargs): - for window in self.callbacks.get(event, []): - callback = getattr(window, 'event_%s' % event) - callback(*args, **kwargs) - - -eventhandler = EventHandler() - Modified: trunk/pybridge/pybridge/ui/window_main.py =================================================================== --- trunk/pybridge/pybridge/ui/window_main.py 2007-04-06 17:55:41 UTC (rev 401) +++ trunk/pybridge/pybridge/ui/window_main.py 2007-04-06 17:58:59 UTC (rev 402) @@ -35,8 +35,6 @@ from dialog_preferences import DialogPreferences from window_bridgetable import WindowBridgetable -from eventhandler import SimpleEventHandler, eventhandler # TODO: remove - TABLE_ICON = env.find_pixmap("table.png") USER_ICON = env.find_pixmap("user.png") @@ -45,8 +43,6 @@ glade_name = 'window_main' - callbacks = ('tableOpened', 'tableClosed', 'userLoggedIn', 'userLoggedOut') - tableview_icon = gtk.gdk.pixbuf_new_from_file_at_size(TABLE_ICON, 48, 48) peopleview_icon = gtk.gdk.pixbuf_new_from_file_at_size(USER_ICON, 48, 48) @@ -70,18 +66,16 @@ self.peopleview_model.set_sort_column_id(0, gtk.SORT_ASCENDING) self.peopleview.set_model(self.peopleview_model) - # Register event callbacks. + # Attach event handler to listen for events. self.eventHandler = SimpleEventHandler(self) client.attach(self.eventHandler) - client.setEventHandler(eventhandler) # REMOVE - eventhandler.registerCallbacksFor(self, self.callbacks) # REMOVE if not wm.get(DialogConnection): wm.open(DialogConnection, parent=self) def tearDown(self): - #eventhandler.unregister(self, self.callbacks) + # TODO: detach event handler from all attached subjects. # Close all windows. for window in wm.values(): @@ -123,36 +117,54 @@ return d -# Registered event handlers. +# Event handlers. - def event_connect(self): + def event_connectedAsUser(self, username): self.notebook.set_property('sensitive', True) self.menu_connect.set_property('visible', False) self.menu_disconnect.set_property('visible', True) + self.menu_newtable.set_property('sensitive', True) + self.newtable.set_property('sensitive', True) - def event_disconnect(self): + def event_connectionLost(self, reason): for table in self.tables.values(): self.tables.close(table) self.notebook.set_property('sensitive', False) self.menu_connect.set_property('visible', True) self.menu_disconnect.set_property('visible', False) + self.menu_newtable.set_property('sensitive', False) + self.newtable.set_property('sensitive', False) + self.tableview_model.clear() self.peopleview_model.clear() + def event_gotRoster(self, name, roster): + lookup = {'tables' : (self.tableview_model, self.tableview_icon), + 'users' : (self.peopleview_model, self.peopleview_icon)} + + try: + model, icon = lookup[name] + for id, info in roster.items(): + model.append([id, icon]) + roster.attach(self.eventHandler) + except KeyError: + pass # Ignore an unrecognised roster. + + def event_leaveTable(self, tableid): - self.tables.close(self.tables[tableid]) + self.tables.close(self.tables[tableid]) # Close window. - def event_tableOpened(self, tableid): + def event_openTable(self, tableid, info): """Adds a table to the table listing.""" self.tableview_model.append([tableid, self.tableview_icon]) - def event_tableClosed(self, tableid): + def event_closeTable(self, tableid): """Removes a table from the table listing.""" def func(model, path, iter, user_data): @@ -163,12 +175,12 @@ self.tableview_model.foreach(func, tableid) - def event_userLoggedIn(self, user): + def event_userLogin(self, username, info): """Adds a user to the people listing.""" - self.peopleview_model.append([user, self.peopleview_icon]) + self.peopleview_model.append([username, self.peopleview_icon]) - def event_userLoggedOut(self, user): + def event_userLogout(self, username): """Removes a user from the people listing.""" def func(model, path, iter, user_data): @@ -176,7 +188,7 @@ model.remove(iter) return True - self.peopleview_model.foreach(func, user) + self.peopleview_model.foreach(func, username) # Signal handlers. @@ -205,7 +217,7 @@ # Display information about table. self.frame_tableinfo.set_property('sensitive', True) self.label_tableid.set_text(tableid) - self.label_tabletype.set_text(client.tablesAvailable[tableid]['type']) + self.label_tabletype.set_text(client.tableRoster[tableid]['game']) else: self.frame_tableinfo.set_property('sensitive', False) self.label_tableid.set_text('') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |