def on_smileyButton_clicked(self, *args): if self.smileyWindow == None: self.smileyWindow = SmileyWindow(self.addSmiley) self.smileyWindow.show()
class ChatWindow: def __init__(self, mxit): self.mxit = mxit self.smileyWindow = None self.smileyList = [] self.tabList = {} self.vibesBox = None self.initGui() self.window.show_all() self.initCallbacks() def initGui(self): self.builder = gtk.Builder() self.builder.add_from_file(os.path.join('gui', 'glade', 'ChatWindow.glade')) self.window = self.builder.get_object('ChatWindow') self.builder.connect_signals(self) self.notebook = self.builder.get_object('ChatBoxNotebook') self.notebook.connect('switch-page', self.on_notebook_pageChanged) #Removed because it introduces too many bugs #gtk.notebook_set_window_creation_hook(self.windowCreate) try: import gtkspell self.spell = gtkspell.Spell(self.builder.get_object('entryView')) except: pass def on_contact_modified(self, modification, contact, changed): try: tab = self.tabList[contact.contactAddress] tab.contact_modified(modification, changed) except KeyError: #When a key error is thrown its most likely becauseuser hasn't opened a tab for them yet pass def initCallbacks(self): self.mxit.contact_callback.append(self.on_contact_modified) def get_active_tab(self): return self.notebook.get_nth_page(self.notebook.get_current_page()) def create_tab_label(self, gotMessage, contact): box = gtk.HBox() if not gotMessage: label = gtk.Label(contact.nickname) else: label = gtk.Label() label.set_markup('<b><span color="grey" style="italic">%s</span></b>' % contact.nickname) presenceimage = gtk.image_new_from_file(os.path.join(PRESENCE_IMAGES_BASE_DIR, PRESENCE_IMAGES_FILENAMES[contact.presence])) closeimage = gtk.Image() closeimage.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) closebutton = gtk.Button() closebutton.set_image(closeimage) closebutton.set_relief(gtk.RELIEF_NONE) closebutton.connect('clicked', self.close_tab, contact) box.add(presenceimage) box.add(label) box.add(closebutton) box.show_all() return box def create_chat_tab(self, contact): label = self.create_tab_label(False, contact) if self.tabList.has_key(contact.contactAddress): tab = self.tabList[contact.contactAddress] else: if contact.contactType == CONTACT_TYPE_MULTIMIX: self.tabList[contact.contactAddress] = tab = MultiMxTab(contact, self, self.mxit) else: self.tabList[contact.contactAddress] = tab = ChatTab(contact, self, self.mxit) contact.set_chat_tab(tab) if tab.isOpen(): return self.notebook.append_page(tab) self.notebook.set_tab_reorderable(tab, True) self.notebook.set_tab_label(tab, label) tab.open_tab() #Make sure this window is showing self.window.show_all() def close_tab(self, button, contact): tab = self.tabList[contact.contactAddress] tab.close_tab() self.notebook.remove_page(self.notebook.page_num(tab)) numPages = self.notebook.get_n_pages() if numPages == 0: self.window.hide() return def on_text_inserted(self, textview, string, *args): print 'on_text_inserted' if '\n' in string: buffer = textview.get_buffer() buffer.delete(buffer.get_iter_at_offset(-1), buffer.get_end_iter()) def on_smileyButton_clicked(self, *args): if self.smileyWindow == None: self.smileyWindow = SmileyWindow(self.addSmiley) self.smileyWindow.show() def on_vibesButton_clicked(self, *args): if self.vibesBox == None: self.vibesBox = VibesBox(self.appendToEntry) self.vibesBox.show() def addSmiley(self, pixbuf, smiley_code): buf = self.builder.get_object('entryView').get_buffer() iter = buf.get_end_iter() buf.insert_pixbuf(iter, pixbuf) self.smileyList.append((iter, smiley_code)) def appendToEntry(self, addition): buf = self.builder.get_object('entryView').get_buffer() buf.insert(buf.get_end_iter(), addition) def on_keypress(self, widget, event, *args): #We are only looking for enter button presses #Todo: Replace 65293 with actual constant if not event.keyval == 65293: return buf = self.builder.get_object('entryView').get_buffer() for iter, smiley_code in self.smileyList: buf.insert(iter, smiley_code) msg = buf.get_text(buf.get_start_iter(),buf.get_end_iter()) buf.set_text('') #Get contactAddress of active tab print self.get_active_tab().contact contactAddress = self.get_active_tab().contact.contactAddress message = Message(contactAddress, msg) self.mxit.send_message(message) self.get_active_tab()._insert_message(0, time.time(), 0, msg) return False def on_notebook_pageChanged(self, notebook, page, page_num, userdata=None): tab = notebook.get_nth_page(page_num) self.window.set_title(tab.contact.nickname) notebook.set_tab_label(tab, self.create_tab_label(False, tab.contact)) def on_closeWindow_activate(self, *args): #Had to create this function to ensure window's widgets never get destroyed self.window.hide() return True