clever \t completion in gc window

This commit is contained in:
Yann Leboulanger 2005-03-07 23:24:25 +00:00
parent 26faed1de1
commit 7817ed2651

View file

@ -652,44 +652,44 @@ class Groupchat_window:
self.tagStatus[room_jid].set_property('foreground', \ self.tagStatus[room_jid].set_property('foreground', \
self.plugin.config['statusmsgcolor']) self.plugin.config['statusmsgcolor'])
def get_role_iter(self, room_jid, name): def get_role_iter(self, room_jid, role):
model = self.list_treeview[room_jid].get_model() model = self.list_treeview[room_jid].get_model()
fin = False fin = False
iter = model.get_iter_root() iter = model.get_iter_root()
if not iter: if not iter:
return None return None
while not fin: while not fin:
account_name = model.get_value(iter, 1) role_name = model.get_value(iter, 2)
if name == account_name: if role == role_name:
return iter return iter
iter = model.iter_next(iter) iter = model.iter_next(iter)
if not iter: if not iter:
fin = True fin = True
return None return None
def get_user_iter(self, room_jid, jid): def get_user_iter(self, room_jid, nick):
model = self.list_treeview[room_jid].get_model() model = self.list_treeview[room_jid].get_model()
fin = False fin = False
role = model.get_iter_root() role_iter = model.get_iter_root()
if not role: if not role_iter:
return None return None
while not fin: while not fin:
fin2 = False fin2 = False
user = model.iter_children(role) user_iter = model.iter_children(role_iter)
if not user: if not user_iter:
fin2=True fin2=True
while not fin2: while not fin2:
if jid == model.get_value(user, 1): if nick == model.get_value(user, 1):
return user return user_iter
user = model.iter_next(user) user_iter = model.iter_next(user_iter)
if not user: if not user_iter:
fin2 = True fin2 = True
role = model.iter_next(role) role_iter = model.iter_next(role_iter)
if not role: if not role_iter:
fin = True fin = True
return None return None
def get_user_list(self, room_jid): def get_nick_list(self, room_jid):
model = self.list_treeview[room_jid].get_model() model = self.list_treeview[room_jid].get_model()
list = [] list = []
fin = False fin = False
@ -729,7 +729,7 @@ class Groupchat_window:
role_iter = self.get_role_iter(room_jid, role) role_iter = self.get_role_iter(room_jid, role)
if not role_iter: if not role_iter:
role_iter = model.append(None, (self.plugin.roster.pixbufs['closed']\ role_iter = model.append(None, (self.plugin.roster.pixbufs['closed']\
, role, role)) , role + 's', role))
iter = model.append(role_iter, (img, nick, jid)) iter = model.append(role_iter, (img, nick, jid))
self.list_treeview[room_jid].expand_row((model.get_path(role_iter)), \ self.list_treeview[room_jid].expand_row((model.get_path(role_iter)), \
False) False)
@ -739,7 +739,7 @@ class Groupchat_window:
model = self.list_treeview[room_jid].get_model() model = self.list_treeview[room_jid].get_model()
path = model.get_path(jid_iter)[0] path = model.get_path(jid_iter)[0]
iter = model.get_iter(path) iter = model.get_iter(path)
return model.get_value(iter, 1) return model.get_value(iter, 2)
def chg_user_status(self, room_jid, nick, show, status, role, affiliation, \ def chg_user_status(self, room_jid, nick, show, status, role, affiliation, \
jid, reason, actor, statusCode, account): jid, reason, actor, statusCode, account):
@ -835,16 +835,23 @@ class Groupchat_window:
return 1 return 1
elif event.keyval == gtk.keysyms.Tab: # TAB elif event.keyval == gtk.keysyms.Tab: # TAB
room_jid = self.get_active_jid() room_jid = self.get_active_jid()
list_nick = self.get_user_list(room_jid) list_nick = self.get_nick_list(room_jid)
message_buffer = widget.get_buffer() message_buffer = widget.get_buffer()
start_iter = message_buffer.get_start_iter() start_iter = message_buffer.get_start_iter()
cursor_position = message_buffer.get_insert() cursor_position = message_buffer.get_insert()
end_iter = message_buffer.get_iter_at_mark(cursor_position) end_iter = message_buffer.get_iter_at_mark(cursor_position)
txt = message_buffer.get_text(start_iter, end_iter, 0) text = message_buffer.get_text(start_iter, end_iter, 0)
begin = txt.split()[-1] if not text:
return 0
splited_text = text.split()
begin = splited_text[-1]
for nick in list_nick: for nick in list_nick:
if nick.find(begin) == 0: if nick.find(begin) == 0:
message_buffer.insert_at_cursor(nick[len(begin):] + ': ') if len(splited_text) == 1:
add = ': '
else:
add = ' '
message_buffer.insert_at_cursor(nick[len(begin):] + add)
return 1 return 1
return 0 return 0