pypsyc/gtkpypsyc/tabs/place.py

93 lines
3.0 KiB
Python

import gtk
from pypsyc.objects import PSYCObject
class PlaceTab(gtk.Frame, PSYCObject):
def __init__(self, netname, center):
gtk.Frame.__init__(self, label = netname)
PSYCObject.__init__(self, netname, center)
vbox = gtk.VBox()
self.add(vbox)
self.textview = gtk.TextView()
self.textview.set_cursor_visible(gtk.FALSE)
self.textview.set_wrap_mode(gtk.WRAP_WORD)
self.textview.set_editable(gtk.FALSE)
self.textbuf = self.textview.get_buffer()
hbox = gtk.HPaned()
hbox.pack1(self.textview)
vbox.pack_start(hbox)
# uni, nick
self.nicklist = gtk.ListStore(str, str)
self.nicklist.set_sort_column_id(1, gtk.SORT_ASCENDING)
nickview = gtk.TreeView()
nickview.set_model(self.nicklist)
nickview.set_headers_visible(gtk.FALSE)
col = gtk.TreeViewColumn('Nick', gtk.CellRendererText(), text = 1)
col.set_resizable(gtk.FALSE)
nickview.append_column(col)
hbox.pack2(nickview, shrink=gtk.FALSE, resize=gtk.FALSE)
self.entry = gtk.Entry()
self.entry.set_text('')
self.entry.connect('activate', self.onEntry)
vbox.pack_end(self.entry, gtk.FALSE)
self.show_all()
def append_text(self, text):
iter = self.textbuf.get_end_iter()
text = text.encode('utf-8') + '\n'
self.textbuf.insert(iter, text)
iter = self.textbuf.get_end_iter()
self.textbuf.place_cursor(iter)
mark = self.textbuf.get_insert()
self.textview.scroll_mark_onscreen(mark)
def onEntry(self, widget):
text = self.entry.get_text()
#print self.netname, '>>', text
self.entry.set_text('')
# handle a command... yes this should not be done that way
if text and text[0] == '/':
cmd = text[1:].upper()
if cmd == 'PART':
self.sendmsg({'_target' : self.netname},
{},
'_request_leave',
'')
return
self.sendmsg({'_target' : self.netname},
{},
'_message_public',
text)
def msg(self, vars, mc, data, caller):
if mc == '_message_public':
self.append_text('%s: %s'%(vars['_nick'], data))
return
if mc == '_message_public_question':
self.append_text('%s %s: %s'%(vars['_nick'],
'fragt',
data))
return
if mc == '_message_public_text_action':
self.append_text('%s %s: %s'%(vars['_nick'],
vars['_action'],
data))
return
if mc == '_status_place_members':
# _list_members, _list_members_nicks
for i in range(0, len(vars['_list_members'])):
self.nicklist.append((vars['_list_members'][i],
vars['_list_members_nicks'][i]))
return
if mc.startswith('_notice_place_leave'):
return
if mc.startswith('_notice_place_enter'):
self.nicklist.append((vars['_source'], vars['_nick']))
return
PSYCObject.msg(self, vars, mc, data, caller)