diff --git a/plugins/gtkgui/chat.py b/plugins/gtkgui/chat.py
index c5211a0e4..a92c9263e 100644
--- a/plugins/gtkgui/chat.py
+++ b/plugins/gtkgui/chat.py
@@ -37,8 +37,6 @@ gtk.glade.textdomain(APP)
GTKGUI_GLADE='plugins/gtkgui/gtkgui.glade'
-#the child of the tab must be called tab_vbox
-
class chat:
"""Class for tabbed chat window"""
def __init__(self, plugin, account, widget_name):
@@ -56,6 +54,7 @@ class chat:
self.last_message_time = {}
self.print_time_timeout_id = {}
self.names = {} # what is printed in the tab : user.name for example
+ self.childs = {}
self.window = self.xml.get_widget(widget_name)
def update_tags(self):
@@ -102,7 +101,7 @@ class chat:
start = "[" + str(self.nb_unread[jid]) + "] "
elif self.nb_unread[jid] == 1:
start = "* "
- child = self.xmls[jid].get_widget('tab_vbox')
+ child = self.childs[jid]
tab_label = self.notebook.get_tab_label(child).get_children()[0]
tab_label.set_text(start + self.names[jid])
@@ -120,8 +119,7 @@ class chat:
self.notebook.get_current_page())
active_jid = ''
for jid in self.xmls:
- child = self.xmls[jid].get_widget('tab_vbox')
- if child == active_child:
+ if self.childs[jid] == active_child:
active_jid = jid
break
return active_jid
@@ -152,8 +150,7 @@ class chat:
new_child = notebook.get_nth_page(page_num)
new_jid = ''
for jid in self.xmls:
- child = self.xmls[jid].get_widget('tab_vbox')
- if child == new_child:
+ if self.childs[jid] == new_child:
new_jid = jid
break
conversation_textview = self.xmls[new_jid].\
@@ -171,9 +168,8 @@ class chat:
self.plugin.systray.remove_jid(new_jid, self.account)
def active_tab(self, jid):
- child = self.xmls[jid].get_widget('tab_vbox')
self.notebook.set_current_page(\
- self.notebook.page_num(child))
+ self.notebook.page_num(self.childs[jid]))
def remove_tab(self, jid, kind): #kind is 'chats' or 'gc'
if len(self.xmls) == 1:
@@ -182,9 +178,8 @@ class chat:
if self.print_time_timeout_id.has_key(jid):
gobject.source_remove(self.print_time_timeout_id[jid])
del self.print_time_timeout_id[jid]
- child = self.xmls[jid].get_widget('tab_vbox')
self.notebook.remove_page(\
- self.notebook.page_num(child))
+ self.notebook.page_num(self.childs[jid]))
del self.plugin.windows[self.account][kind][jid]
del self.nb_unread[jid]
del self.last_message_time[jid]
@@ -199,7 +194,6 @@ class chat:
def new_tab(self, jid):
self.nb_unread[jid] = 0
self.last_message_time[jid] = 0
- self.xmls[jid] = gtk.glade.XML(GTKGUI_GLADE, 'tab_vbox', APP)
conversation_textview = \
self.xmls[jid].get_widget('conversation_textview')
@@ -246,14 +240,20 @@ class chat:
conversation_scrolledwindow.get_vadjustment().connect('value-changed', \
self.on_conversation_vadjustment_value_changed)
- child = self.xmls[jid].get_widget('tab_vbox')
+ child = self.childs[jid]
self.notebook.append_page(child)
if len(self.xmls) > 1:
self.notebook.set_show_tabs(True)
+ xm = gtk.glade.XML(GTKGUI_GLADE, 'tab_hbox', APP)
+ tab_hbox = xm.get_widget('tab_hbox')
+ xm.signal_connect('on_close_button_clicked', \
+ self.on_close_button_clicked, jid)
+ self.notebook.set_tab_label(child, tab_hbox)
+
self.show_title()
- def on_chat_window_key_press_event(self, widget, event):
+ def on_chat_notebook_key_press_event(self, widget, event):
st = '1234567890' # zero is here cause humans count from 1, pc from 0 :P
jid = self.get_active_jid()
if event.keyval == gtk.keysyms.Escape: # ESCAPE
@@ -301,7 +301,6 @@ class chat:
# we pressed a control key or ctrl+sth : we don't block the event
# in order to let ctrl+c do its work
pass
- #FIXME: will not work with gc
else: # it's a normal key press make sure message_textview has focus
message_textview = self.xmls[jid].get_widget('message_textview')
if not message_textview.is_focus():
diff --git a/plugins/gtkgui/groupchat_window.py b/plugins/gtkgui/groupchat_window.py
index 58fab56b4..ba948399d 100644
--- a/plugins/gtkgui/groupchat_window.py
+++ b/plugins/gtkgui/groupchat_window.py
@@ -26,6 +26,8 @@ import time
import sre #usefull later
from dialogs import *
+from chat import *
+from gtkgui import ImageCellRenderer
from common import i18n
@@ -36,7 +38,27 @@ gtk.glade.textdomain(APP)
GTKGUI_GLADE='plugins/gtkgui/gtkgui.glade'
-class Groupchat_window:
+class Groupchat_window(chat):
+ def __init__(self, room_jid, nick, plugin, account):
+ chat.__init__(self, plugin, account, 'groupchat_window')
+ self.nicks = {}
+ self.list_treeview = {}
+ self.subjects = {}
+ self.new_group(room_jid, nick)
+ self.show_title()
+ self.xml.signal_connect('on_groupchat_window_destroy', \
+ self.on_groupchat_window_destroy)
+ self.xml.signal_connect('on_groupchat_window_delete_event', \
+ self.on_groupchat_window_delete_event)
+ self.xml.signal_connect('on_groupchat_window_focus_in_event', \
+ self.on_groupchat_window_focus_in_event)
+ self.xml.signal_connect('on_chat_notebook_key_press_event', \
+ self.on_chat_notebook_key_press_event)
+ self.xml.signal_connect('on_chat_notebook_switch_page', \
+ self.on_chat_notebook_switch_page)
+ self.xml.signal_connect('on_set_button_clicked', \
+ self.on_set_button_clicked)
+
def on_groupchat_window_delete_event(self, widget, event):
"""close window"""
for room_jid in self.xmls:
@@ -50,20 +72,14 @@ class Groupchat_window:
for room_jid in self.xmls:
self.plugin.send('GC_STATUS', self.account, (self.nicks[room_jid], \
room_jid, 'offline', 'offline'))
- del self.plugin.windows[self.account]['gc'][room_jid]
- if self.plugin.windows[self.account]['gc'].has_key('tabbed'):
- del self.plugin.windows[self.account]['gc']['tabbed']
+ chat.on_window_destroy(self, widget, 'gc')
- def update_tags(self):
- for room_jid in self.tagIn:
- self.tagIn[room_jid].set_property('foreground', \
- self.plugin.config['inmsgcolor'])
- self.tagInBold[room_jid].set_property('foreground', \
- self.plugin.config['inmsgcolor'])
- self.tagOut[room_jid].set_property('foreground', \
- self.plugin.config['outmsgcolor'])
- self.tagStatus[room_jid].set_property('foreground', \
- self.plugin.config['statusmsgcolor'])
+ def on_groupchat_window_focus_in_event(self, widget, event):
+ """When window get focus"""
+ chat.on_chat_window_focus_in_event(self, widget, event)
+
+ def on_chat_notebook_key_press_event(self, widget, event):
+ chat.on_chat_notebook_key_press_event(self, widget, event)
def get_role_iter(self, room_jid, role):
model = self.list_treeview[room_jid].get_model()
@@ -179,43 +195,6 @@ class Groupchat_window:
img = self.plugin.roster.pixbufs[show]
model.set_value(iter, 0, img)
- def show_title(self):
- """redraw the window's title"""
- unread = 0
- for room_jid in self.nb_unread:
- unread += self.nb_unread[room_jid]
- start = ""
- if unread > 1:
- start = "[" + str(unread) + "] "
- elif unread == 1:
- start = "* "
- chat = 'Groupchat in ' + room_jid
- if len(self.xmls) > 1:
- chat = 'Groupchat'
- self.window.set_title(start + chat + ' (' + self.account + ')')
-
- def redraw_tab(self, room_jid):
- """redraw the label of the tab"""
- start = ''
- if self.nb_unread[room_jid] > 1:
- start = "[" + str(self.nb_unread[room_jid]) + "] "
- elif self.nb_unread[room_jid] == 1:
- start = "* "
- room = room_jid.split('@')[0]
- child = self.xmls[room_jid].get_widget('group_vbox')
- self.chat_notebook.set_tab_label_text(child, start + room)
-
- def get_active_jid(self):
- active_child = self.chat_notebook.get_nth_page(\
- self.chat_notebook.get_current_page())
- active_jid = ''
- for room_jid in self.xmls:
- child = self.xmls[room_jid].get_widget('group_vbox')
- if child == active_child:
- active_jid = room_jid
- break
- return active_jid
-
def set_subject(self, room_jid, subject):
self.subjects[room_jid] = subject
self.xml.get_widget('subject_entry').set_text(subject)
@@ -225,10 +204,6 @@ class Groupchat_window:
subject = self.xml.get_widget('subject_entry').get_text()
self.plugin.send('GC_SUBJECT', self.account, (room_jid, subject))
- def on_close_button_clicked(self, button):
- room_jid = self.get_active_jid()
- self.remove_tab(room_jid)
-
def on_message_textview_key_press_event(self, widget, event):
"""When a key is pressed:
if enter is pressed without the shit key, message (if not empty) is sent
@@ -268,59 +243,6 @@ class Groupchat_window:
return 1
return 0
- def on_groupchat_window_key_press_event(self, widget, event):
- st = "1234567890" # humans count from 1, pc from 0 :P
- room_jid = self.get_active_jid()
- if event.keyval == gtk.keysyms.Escape: #ESCAPE
- self.remove_tab(room_jid)
- elif event.string and event.string in st \
- and (event.state & gtk.gdk.MOD1_MASK): # alt + 1,2,3 ...
- self.chat_notebook.set_current_page(st.index(event.string))
- elif event.keyval == gtk.keysyms.Page_Down: # PAGEDOWN
- if event.state & gtk.gdk.CONTROL_MASK:
- current = self.chat_notebook.get_current_page()
- if current > 0:
- self.chat_notebook.set_current_page(current-1)
-# else:
-# self.chat_notebook.set_current_page(\
-# self.chat_notebook.get_n_pages()-1)
- elif event.state & gtk.gdk.SHIFT_MASK:
- conversation_textview = self.xmls[room_jid].\
- get_widget('conversation_textview')
- rect = conversation_textview.get_visible_rect()
- iter = conversation_textview.get_iter_at_location(rect.x,\
- rect.y + rect.height)
- conversation_textview.scroll_to_iter(iter, 0.1, True, 0, 0)
- elif event.keyval == gtk.keysyms.Page_Up: # PAGEUP
- if event.state & gtk.gdk.CONTROL_MASK:
- current = self.chat_notebook.get_current_page()
- if current < (self.chat_notebook.get_n_pages()-1):
- self.chat_notebook.set_current_page(current+1)
-# else:
-# self.chat_notebook.set_current_page(0)
- elif event.state & gtk.gdk.SHIFT_MASK:
- conversation_textview = self.xmls[room_jid].\
- get_widget('conversation_textview')
- rect = conversation_textview.get_visible_rect()
- iter = conversation_textview.get_iter_at_location(rect.x, rect.y)
- conversation_textview.scroll_to_iter(iter, 0.1, True, 0, 1)
- elif event.keyval == gtk.keysyms.Tab and \
- (event.state & gtk.gdk.CONTROL_MASK): # CTRL+TAB
- current = self.chat_notebook.get_current_page()
- if current < (self.chat_notebook.get_n_pages()-1):
- self.chat_notebook.set_current_page(current+1)
- else:
- self.chat_notebook.set_current_page(0)
-
- '''FIXME:
- NOT GOOD steals focus from Subject entry and I cannot find a way to prevent this
-
- else: # it's a normal key press make sure message_textview has focus
- message_textview = self.xmls[room_jid].get_widget('message_textview')
- if not message_textview.is_focus():
- message_textview.grab_focus()
- '''
-
def print_conversation(self, text, room_jid, contact = '', tim = None):
"""Print a line in the conversation :
if contact is set : it's a message from someone
@@ -343,10 +265,7 @@ class Groupchat_window:
if contact == self.nicks[room_jid]:
tag = 'outgoing'
else:
- if self.nicks[room_jid].lower() in text.lower().split():
- tag = 'incoming_bold'
- else:
- tag = 'incoming'
+ tag = 'incoming'
self.last_message_time[room_jid] = time.time()
if text.startswith('/me'):
@@ -358,7 +277,12 @@ class Groupchat_window:
tag = 'status'
ttext = text + '\n'
- conversation_buffer.insert_with_tags_by_name(end_iter, ttext, tag)
+ if tag == 'incoming' and self.nicks[room_jid].lower() in\
+ text.lower().split():
+ conversation_buffer.insert_with_tags_by_name(end_iter, ttext, tag,\
+ 'bold')
+ else:
+ conversation_buffer.insert_with_tags_by_name(end_iter, ttext, tag)
#TODO: emoticons, url grabber
conversation_buffer.insert(end_iter, otext)
#scroll to the end of the textview
@@ -498,70 +422,31 @@ class Groupchat_window:
menu.show_all()
menu.reposition()
- def on_groupchat_window_focus_in_event(self, widget, event):
- """When window get focus"""
- room_jid = self.get_active_jid()
- if self.nb_unread[room_jid] > 0:
- self.nb_unread[room_jid] = 0
- self.redraw_tab(room_jid)
- self.show_title()
- self.plugin.systray.remove_jid(room_jid, self.account)
-
- def on_chat_notebook_switch_page(self, notebook, page, page_num):
- new_child = notebook.get_nth_page(page_num)
- new_jid = ''
- for room_jid in self.xmls:
- child = self.xmls[room_jid].get_widget('group_vbox')
- if child == new_child:
- new_jid = room_jid
- break
- self.xml.get_widget('subject_entry').set_text(self.subjects[new_jid])
- if self.nb_unread[new_jid] > 0:
- self.nb_unread[new_jid] = 0
- self.redraw_tab(new_jid)
- self.show_title()
- self.plugin.systray.remove_jid(new_jid, self.account)
-
- def active_tab(self, room_jid):
- child = self.xmls[room_jid].get_widget('group_vbox')
- self.chat_notebook.set_current_page(self.chat_notebook.page_num(child))
- self.xmls[room_jid].get_widget('message_textview').grab_focus()
-
def remove_tab(self, room_jid):
if time.time() - self.last_message_time[room_jid] < 2:
dialog = Confirmation_dialog(_('You received a message in the room %s in the last two seconds.\nDo you still want to close this tab ?') % \
room_jid.split('@')[0])
if dialog.get_response() != gtk.RESPONSE_YES:
return
- if len(self.xmls) == 1:
- self.window.destroy()
- else:
+
+ chat.remove_tab(self, jid, 'gc')
+ if len(self.xmls) > 0:
self.plugin.send('GC_STATUS', self.account, (self.nicks[room_jid], \
room_jid, 'offline', 'offline'))
- self.chat_notebook.remove_page(self.chat_notebook.get_current_page())
- del self.plugin.windows[self.account]['gc'][room_jid]
del self.nicks[room_jid]
- del self.nb_unread[room_jid]
- del self.last_message_time[room_jid]
- del self.xmls[room_jid]
- del self.tagIn[room_jid]
- del self.tagInBold[room_jid]
- del self.tagOut[room_jid]
- del self.tagStatus[room_jid]
del self.list_treeview[room_jid]
del self.subjects[room_jid]
- if len(self.xmls) == 1:
- self.chat_notebook.set_show_tabs(False)
- self.show_title()
def new_group(self, room_jid, nick):
- self.nb_unread[room_jid] = 0
- self.last_message_time[room_jid] = 0
+ self.names[room_jid] = room_jid.split('@')[0]
+ self.xmls[room_jid] = gtk.glade.XML(GTKGUI_GLADE, 'gc_vbox', APP)
+ self.childs[room_jid] = self.xmls[room_jid].get_widget('gc_vbox')
+ chat.new_tab(self, room_jid)
self.nicks[room_jid] = nick
self.subjects[room_jid] = ''
- self.xmls[room_jid] = gtk.glade.XML(GTKGUI_GLADE, 'group_vbox', APP)
self.list_treeview[room_jid] = self.xmls[room_jid].\
get_widget('list_treeview')
+ print self.list_treeview[room_jid]
#status_image, nickname, real_jid
store = gtk.TreeStore(gtk.Image, str, str)
@@ -583,32 +468,6 @@ class Groupchat_window:
column.set_visible(False)
self.list_treeview[room_jid].set_expander_column(column)
- conversation_textview = self.xmls[room_jid].\
- get_widget('conversation_textview')
- conversation_buffer = conversation_textview.get_buffer()
- end_iter = conversation_buffer.get_end_iter()
- conversation_buffer.create_mark('end', end_iter, 0)
- self.tagIn[room_jid] = conversation_buffer.create_tag('incoming')
- # (nk) what is this?
- self.tagInBold[room_jid] = conversation_buffer.create_tag('incoming_bold')
- color = self.plugin.config['inmsgcolor']
- self.tagIn[room_jid].set_property('foreground', color)
- self.tagInBold[room_jid].set_property('foreground', color)
- self.tagInBold[room_jid].set_property('weight', 700)
- self.tagOut[room_jid] = conversation_buffer.create_tag('outgoing')
- color = self.plugin.config['outmsgcolor']
- self.tagOut[room_jid].set_property('foreground', color)
- self.tagStatus[room_jid] = conversation_buffer.create_tag('status')
- color = self.plugin.config['statusmsgcolor']
- self.tagStatus[room_jid].set_property('foreground', color)
-
- self.xmls[room_jid].signal_autoconnect(self)
-
- self.chat_notebook.append_page(self.xmls[room_jid].\
- get_widget('group_vbox'))
- if len(self.xmls) > 1:
- self.chat_notebook.set_show_tabs(True)
-
self.redraw_tab(room_jid)
self.show_title()
@@ -664,35 +523,3 @@ class Groupchat_window:
change the icon of the arrow"""
model = widget.get_model()
model.set_value(iter, 0, self.plugin.roster.pixbufs['closed'])
-
- def __init__(self, room_jid, nick, plugin, account):
- self.xml = gtk.glade.XML(GTKGUI_GLADE, 'groupchat_window', APP)
- self.chat_notebook = self.xml.get_widget('chat_notebook')
- self.chat_notebook.remove_page(0)
- self.plugin = plugin
- self.account = account
- self.xmls = {}
- self.tagIn = {}
- self.tagInBold = {}
- self.tagOut = {}
- self.tagStatus = {}
- self.nicks = {}
- self.nb_unread = {}
- self.last_message_time = {}
- self.list_treeview = {}
- self.subjects = {}
- self.window = self.xml.get_widget('groupchat_window')
- self.new_group(room_jid, nick)
- self.show_title()
- self.xml.signal_connect('on_groupchat_window_destroy', \
- self.on_groupchat_window_destroy)
- self.xml.signal_connect('on_groupchat_window_delete_event', \
- self.on_groupchat_window_delete_event)
- self.xml.signal_connect('on_groupchat_window_focus_in_event', \
- self.on_groupchat_window_focus_in_event)
- self.xml.signal_connect('on_groupchat_window_key_press_event', \
- self.on_groupchat_window_key_press_event)
- self.xml.signal_connect('on_chat_notebook_switch_page', \
- self.on_chat_notebook_switch_page)
- self.xml.signal_connect('on_set_button_clicked', \
- self.on_set_button_clicked)
diff --git a/plugins/gtkgui/gtkgui.glade b/plugins/gtkgui/gtkgui.glade
index b3a57ae6f..6fcd979bf 100644
--- a/plugins/gtkgui/gtkgui.glade
+++ b/plugins/gtkgui/gtkgui.glade
@@ -6971,7 +6971,6 @@ Custom
GDK_WINDOW_TYPE_HINT_NORMAL
GDK_GRAVITY_NORTH_WEST
-
@@ -7062,73 +7061,13 @@ Custom
True
False
+
-
- 4
+
True
False
- 4
-
-
-
- True
- False
- 4
-
-
-
- True
-
- False
- False
- GTK_JUSTIFY_LEFT
- False
- False
- 0
- 0.5
- 0
- 0
-
-
- 0
- True
- True
-
-
-
-
-
- True
- GTK_RELIEF_NORMAL
- True
-
-
-
-
- True
- gtk-close
- 1
- 0.5
- 0.5
- 0
- 0
-
-
-
-
- 0
- False
- False
-
-
-
-
- 0
- False
- False
-
-
+ 0
@@ -7171,7 +7110,7 @@ Custom
-
+
True
GTK_POLICY_AUTOMATIC
GTK_POLICY_AUTOMATIC
@@ -8067,7 +8006,6 @@ Custom
GDK_WINDOW_TYPE_HINT_NORMAL
GDK_GRAVITY_NORTH_WEST
-
@@ -8080,9 +8018,10 @@ Custom
False
False
+
-
+
5
True
False
diff --git a/plugins/gtkgui/tabbed_chat_window.py b/plugins/gtkgui/tabbed_chat_window.py
index 55042d055..86799052e 100644
--- a/plugins/gtkgui/tabbed_chat_window.py
+++ b/plugins/gtkgui/tabbed_chat_window.py
@@ -51,8 +51,8 @@ class tabbed_chat_window(chat):
self.on_tabbed_chat_window_delete_event)
self.xml.signal_connect('on_tabbed_chat_window_focus_in_event', \
self.on_tabbed_chat_window_focus_in_event)
- self.xml.signal_connect('on_tabbed_chat_window_key_press_event', \
- self.on_tabbed_chat_window_key_press_event)
+ self.xml.signal_connect('on_chat_notebook_key_press_event', \
+ self.on_chat_notebook_key_press_event)
self.xml.signal_connect('on_chat_notebook_switch_page', \
self.on_chat_notebook_switch_page)
@@ -83,7 +83,7 @@ class tabbed_chat_window(chat):
"""close window"""
for jid in self.users:
if time.time() - self.last_message_time[jid] < 2: # 2 seconds
- dialog = Confirmation_dialog(_('You received a message from %s in the last two seconds.\nDo you still want to close this window?') % jid)
+ dialog = Confirmation_dialog(_('You received a message from %s in the last two seconds.\nDo you still want to close this window ?') % jid)
if dialog.get_response() != gtk.RESPONSE_YES:
return True #stop the propagation of the event
@@ -94,8 +94,8 @@ class tabbed_chat_window(chat):
def on_tabbed_chat_window_focus_in_event(self, widget, event):
chat.on_chat_window_focus_in_event(self, widget, event)
- def on_tabbed_chat_window_key_press_event(self, widget, event):
- chat.on_chat_window_key_press_event(self, widget, event)
+ def on_chat_notebook_key_press_event(self, widget, event):
+ chat.on_chat_notebook_key_press_event(self, widget, event)
def on_clear_button_clicked(self, widget):
"""When clear button is pressed :
@@ -124,20 +124,11 @@ class tabbed_chat_window(chat):
def new_user(self, user):
self.names[user.jid] = user.name
+ self.xmls[user.jid] = gtk.glade.XML(GTKGUI_GLADE, 'chats_vbox', APP)
+ self.childs[user.jid] = self.xmls[user.jid].get_widget('chats_vbox')
chat.new_tab(self, user.jid)
self.users[user.jid] = user
- conversation_textview = \
- self.xmls[user.jid].get_widget('conversation_textview')
- conversation_buffer = conversation_textview.get_buffer()
-
- child = self.xmls[user.jid].get_widget('tab_vbox')
- xm = gtk.glade.XML(GTKGUI_GLADE, 'tab_hbox', APP)
- tab_hbox = xm.get_widget('tab_hbox')
- xm.signal_connect('on_close_button_clicked', \
- self.on_close_button_clicked, user.jid)
- self.notebook.set_tab_label(child, tab_hbox)
-
self.redraw_tab(user.jid)
self.draw_widgets(user)