def on_join(self, room): self.room = room self.label.set_text(room.name) self.entry.set_sensitive(True) self.send_button.set_sensitive(True) self.refresh() self.stream = StreamingRoom(self.room, self.history.on_message) self.stream.start()
class ChatDialog(gtk.VBox, HasController): stream = None refreshing = False room = None def create_user_list_widget(self): user_store = gtk.ListStore(str) user_list = gtk.TreeView(user_store) user_list.set_size_request(120, 0) col = gtk.TreeViewColumn("Users", gtk.CellRendererText(), text=0) col.set_sort_column_id(0) user_list.append_column(col) self.user_list = user_list sw = gtk.ScrolledWindow() sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) sw.add(user_list) return sw def __init__(self, controller, room_id, label): super(ChatDialog, self).__init__(False, 4) self.label = label self.controller = controller self.set_border_width(6) self.send_button = gtk.Button("Send") self.send_button.connect("clicked", self.on_activate) self.entry = gtk.Entry() self.entry.connect("activate", self.on_activate) self.entry.set_sensitive(False) self.send_button.set_sensitive(False) hbox = gtk.HBox(False, 4) hbox.pack_start(self.entry, True, True) hbox.pack_start(self.send_button, False, False) self.history = ChatHistory(self) user_list = self.create_user_list_widget() pane = gtk.HPaned() pane.pack1(self.history, True) pane.pack2(user_list, False) self.pack_start(pane, True, True) self.pack_start(hbox, False) self.show_all() self.network.join_by_id(self.on_join, room_id) self.user_id_to_name = {} def shutdown(self): if self.stream is not None: self.stream.queue_finish() self.room.leave(None) def refresh(self): if self.refreshing: return self.refreshing = True self.room.get_users(self.on_refresh) def on_refresh(self, users): store = self.user_list.get_model() store.clear() for user in users: self.user_id_to_name[user["id"]] = user["name"] store.append([user["name"]]) self.refreshing = False self.history.on_chat_dialog_ready() def on_activate(self, widget): text = self.entry.get_text() if not text: return print "sending:", text self.room.speak(None, text) self.history.text.write_line(self.controller.me["name"], text, True) self.entry.set_text("") def on_join(self, room): self.room = room self.label.set_text(room.name) self.entry.set_sensitive(True) self.send_button.set_sensitive(True) self.refresh() self.stream = StreamingRoom(self.room, self.history.on_message) self.stream.start()