#!/usr/bin/env python import pygtk pygtk.require('2.0') import gtk import gtksourceview from gazpacho.loader.proxy import Proxy from gazpacho import dialogs from twisted.internet import gtk2reactor gtk2reactor.install() from twisted.internet import reactor from twisted.spread import pb import config import pybattle class GTKPyBattleClient(Proxy, pybattle.PyBattleClient): """GTK PyBattle client""" def __init__(self, username): super(GTKPyBattleClient, self).__init__(config.ui) self.username = username slm = gtksourceview.SourceLanguagesManager() lang = slm.get_language_from_mime_type('application/x-python') buffer = gtksourceview.SourceBuffer() buffer.set_language(lang) buffer.set_highlight(True) buffer.insert(buffer.get_start_iter(), 'def main():\n\t# add code here') self.sourceview.set_editable(False) self.sourceview.set_buffer(buffer) def on_quit__activate(self, button): self._quit() def on_connect__activate(self, button): self.connect() def on_disconnect__activate(self, button): self.disconnect() def on_join__activate(self, button): self.join() def on_start__activate(self, button): self.start() def on_forfeit__activate(self, button): self.part() self.sourceview.set_editable(False) def on_send__activate(self, button): buffer = self.sourceview.get_buffer() self.set_result(buffer.get_text(buffer.get_start_iter(), buffer.get_end_iter())) self.sourceview.set_editable(False) self.stop() def on_chatbutton__clicked(self, button): text = self.chatentry.get_text() self.chatentry.set_text('') self.chat(text) on_chatentry__activate = on_chatbutton__clicked def remote_start_assignment(self, question): self.sourceview.set_editable(True) super(GTKPyBattleClient, self).remote_start_assignment(question) def _print(self, s): buffer = self.textview.get_buffer() for line in s.split('\n'): buffer.insert(buffer.get_end_iter(), '%s\n' % (line,)) self.textview.scroll_to_iter(self.textview.get_buffer().get_end_iter(), 0.0) def _error(self, err): if type(err) not in [str, unicode]: #if not isinstance(err, pb.Error): # raise pybattle.RemoteException(err) err = err.getErrorMessage() dialogs.error(err) if __name__ == '__main__': import sys if len(sys.argv) != 2: print 'usage: %s ' % (sys.argv[0]) sys.exit() client = GTKPyBattleClient(sys.argv[1]) factory = pb.PBClientFactory() reactor.connectTCP(config.server_hostname, config.server_port, factory) d = factory.getRootObject() d.addCallbacks(client._init, client._error) reactor.run()