we can now togglt to a minimalistic mode in gc/tabbed chat window thankx to liorithiel
TODO: add a keyboard shortcut, should we save the latest state ?
This commit is contained in:
parent
d62b4e1ea2
commit
399589e406
31
src/chat.py
31
src/chat.py
|
@ -68,6 +68,7 @@ class Chat:
|
|||
self.sent_history_pos = {}
|
||||
self.typing_new = {}
|
||||
self.orig_msg = {}
|
||||
self.compact_view = gajim.config.get('compact_view')
|
||||
|
||||
def update_tags(self):
|
||||
for jid in self.tagIn:
|
||||
|
@ -186,6 +187,36 @@ class Chat:
|
|||
self.show_title()
|
||||
if self.plugin.systray_enabled:
|
||||
self.plugin.systray.remove_jid(jid, self.account)
|
||||
|
||||
def populate_popup_menu(self, menu):
|
||||
'''To be overwritten in parrent class'''
|
||||
pass
|
||||
|
||||
def on_chat_window_button_press_event(self, widget, event):
|
||||
'''If right-clicked, show popup'''
|
||||
if event.button == 3: # right click
|
||||
# menu creation
|
||||
menu=gtk.Menu()
|
||||
|
||||
# common menuitems (tab switches)
|
||||
if len(self.xmls) > 1: # if there is more than one tab
|
||||
for jid in self.xmls:
|
||||
if jid != self.get_active_jid():
|
||||
# FIXME: add icons representing contact's status?
|
||||
item = gtk.MenuItem(self.names[jid])
|
||||
item.connect('activate', lambda obj,jid:self.set_active_tab(
|
||||
jid), jid)
|
||||
menu.append(item)
|
||||
|
||||
menu.append(gtk.MenuItem())
|
||||
|
||||
# menuitems specific to type of chat
|
||||
self.populate_popup_menu(menu)
|
||||
|
||||
# show the menu
|
||||
menu.popup(None, None, None, event.button, event.time)
|
||||
menu.show_all()
|
||||
menu.reposition()
|
||||
|
||||
def on_chat_notebook_switch_page(self, notebook, page, page_num):
|
||||
new_child = notebook.get_nth_page(page_num)
|
||||
|
|
|
@ -106,6 +106,7 @@ class Config:
|
|||
'show_roster_on_startup': [opt_bool, True],
|
||||
'key_up_lines': [opt_int, 25], # how many lines to store for key up
|
||||
'version': [ None, '0.7' ],
|
||||
'compact_view': [opt_bool, False] # initial compact view state
|
||||
}
|
||||
|
||||
__options_per_key = {
|
||||
|
|
|
@ -41,7 +41,7 @@ class GroupchatWindow(chat.Chat):
|
|||
"""Class for Groupchat window"""
|
||||
def __init__(self, room_jid, nick, plugin, account):
|
||||
chat.Chat.__init__(self, plugin, account, 'groupchat_window')
|
||||
self.muc_cmds = ['chat', 'clear', 'me', 'msg', 'nick'] # alphanum sorted
|
||||
self.muc_cmds = ['chat', 'clear', 'compact', 'me', 'msg', 'nick'] # alphanum sorted
|
||||
self.nicks = {} # our nick for each groupchat we are in
|
||||
self.list_treeview = {}
|
||||
self.subjects = {}
|
||||
|
@ -62,6 +62,8 @@ class GroupchatWindow(chat.Chat):
|
|||
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_event',
|
||||
self.on_groupchat_window_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',
|
||||
|
@ -69,6 +71,10 @@ class GroupchatWindow(chat.Chat):
|
|||
self.xml.signal_connect('on_close_window_activate',
|
||||
self.on_close_window_activate)
|
||||
|
||||
# needed for popup menu
|
||||
self.xml.get_widget('groupchat_window').add_events(
|
||||
gtk.gdk.BUTTON_PRESS_MASK)
|
||||
|
||||
# get size and position from config
|
||||
if gajim.config.get('saveposition'):
|
||||
self.window.move(gajim.config.get('gc-x-position'),
|
||||
|
@ -129,6 +135,16 @@ class GroupchatWindow(chat.Chat):
|
|||
"""When window get focus"""
|
||||
chat.Chat.on_chat_window_focus_in_event(self, widget, event)
|
||||
|
||||
def on_groupchat_window_event(self,widget,event):
|
||||
if event.type != gtk.gdk.BUTTON_PRESS:
|
||||
return False
|
||||
self.on_chat_window_button_press_event(widget, event)
|
||||
return True
|
||||
|
||||
def on_groupchat_window_key_press_event(self, widget, event):
|
||||
self.on_chat_window_button_press_event(widget, event)
|
||||
return True
|
||||
|
||||
def on_chat_notebook_key_press_event(self, widget, event):
|
||||
chat.Chat.on_chat_notebook_key_press_event(self, widget, event)
|
||||
|
||||
|
@ -510,6 +526,11 @@ class GroupchatWindow(chat.Chat):
|
|||
self.on_clear(None, message_textview) # clear message textview too
|
||||
return
|
||||
|
||||
elif message in ('/compact', '/compact '):
|
||||
self.set_compact_view(not self.get_compact_view())
|
||||
self.on_clear(None, message_textview)
|
||||
return
|
||||
|
||||
elif message.startswith('/nick '):
|
||||
new_nick = message[6:].strip() # 6 is len('/nick ')
|
||||
if len(new_nick.split()) == 1: #dont accept /nick foo bar
|
||||
|
@ -758,6 +779,35 @@ class GroupchatWindow(chat.Chat):
|
|||
menu.popup(None, None, None, event.button, event.time)
|
||||
menu.show_all()
|
||||
menu.reposition()
|
||||
|
||||
def populate_popup_menu(self, menu):
|
||||
"""Add menuitems do popup menu"""
|
||||
|
||||
# FIXME: add icons / use ItemFactory
|
||||
item = gtk.MenuItem(_('_History'))
|
||||
item.connect('activate', self.on_history_button_clicked)
|
||||
menu.append(item)
|
||||
|
||||
item = gtk.MenuItem(_('Configure _Room'))
|
||||
item.connect('activate', self.on_configure_room_menuitem_activate)
|
||||
menu.append(item)
|
||||
|
||||
item = gtk.MenuItem(_('Change _Subject'))
|
||||
item.connect('activate', self.on_change_subject_menuitem_activate)
|
||||
menu.append(item)
|
||||
|
||||
item = gtk.MenuItem(_('Change _Nickname'))
|
||||
item.connect('activate', self.on_change_nick_menuitem_activate)
|
||||
menu.append(item)
|
||||
|
||||
item = gtk.MenuItem(_('_Bookmark This Room'))
|
||||
item.connect('activate', self.on_bookmark_room_menuitem_activate)
|
||||
menu.append(item)
|
||||
|
||||
item=gtk.MenuItem(_('_Toggle compact view'))
|
||||
item.connect('activate', lambda obj:self.set_compact_view(
|
||||
not self.get_compact_view()))
|
||||
menu.append(item)
|
||||
|
||||
def remove_tab(self, room_jid):
|
||||
if time.time() - self.last_message_time[room_jid] < 2:
|
||||
|
@ -782,6 +832,7 @@ class GroupchatWindow(chat.Chat):
|
|||
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')
|
||||
self.set_compact_view(self.get_compact_view())
|
||||
chat.Chat.new_tab(self, room_jid)
|
||||
self.nicks[room_jid] = nick
|
||||
self.subjects[room_jid] = ''
|
||||
|
@ -939,3 +990,26 @@ class GroupchatWindow(chat.Chat):
|
|||
model = widget.get_model()
|
||||
image = self.plugin.roster.jabber_state_images['closed']
|
||||
model.set_value(iter, 0, image)
|
||||
|
||||
def get_compact_view(self):
|
||||
'''Is compact view turned on?'''
|
||||
return self.compact_view
|
||||
|
||||
def set_compact_view(self,state):
|
||||
'''Toggle compact view'''
|
||||
|
||||
self.compact_view = state
|
||||
|
||||
for jid in self.xmls:
|
||||
widgets = [self.xmls[jid].get_widget('banner_eventbox'),
|
||||
self.xmls[jid].get_widget('gc_actions_hbox'),
|
||||
self.xmls[jid].get_widget('list_scrolledwindow'),
|
||||
]
|
||||
|
||||
for widget in widgets:
|
||||
if state:
|
||||
widget.set_no_show_all(True)
|
||||
widget.hide()
|
||||
else:
|
||||
widget.set_no_show_all(False)
|
||||
widget.show()
|
||||
|
|
|
@ -8273,6 +8273,7 @@ Custom</property>
|
|||
<signal name="focus_in_event" handler="on_groupchat_window_focus_in_event" last_modification_time="Sat, 05 Mar 2005 00:34:51 GMT"/>
|
||||
<signal name="delete_event" handler="on_groupchat_window_delete_event" last_modification_time="Mon, 07 Mar 2005 11:19:05 GMT"/>
|
||||
<signal name="destroy" handler="on_groupchat_window_destroy" last_modification_time="Mon, 07 Mar 2005 16:46:37 GMT"/>
|
||||
<signal name="event" handler="on_groupchat_window_event"/>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox73">
|
||||
|
@ -8288,7 +8289,7 @@ Custom</property>
|
|||
<property name="show_border">False</property>
|
||||
<property name="tab_pos">GTK_POS_TOP</property>
|
||||
<property name="scrollable">True</property>
|
||||
<property name="enable_popup">True</property>
|
||||
<property name="enable_popup">False</property>
|
||||
<signal name="switch_page" handler="on_chat_notebook_switch_page" last_modification_time="Wed, 16 Mar 2005 20:58:25 GMT"/>
|
||||
<signal name="key_press_event" handler="on_chat_notebook_key_press_event" last_modification_time="Wed, 16 Mar 2005 20:58:38 GMT"/>
|
||||
|
||||
|
@ -8453,7 +8454,7 @@ Custom</property>
|
|||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkScrolledWindow" id="scrolledwindow17">
|
||||
<widget class="GtkScrolledWindow" id="list_scrolledwindow">
|
||||
<property name="width_request">100</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
|
||||
|
@ -8492,7 +8493,7 @@ Custom</property>
|
|||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox2972">
|
||||
<widget class="GtkHBox" id="gc_actions_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
@ -9749,6 +9750,7 @@ Custom</property>
|
|||
<signal name="focus_in_event" handler="on_tabbed_chat_window_focus_in_event" last_modification_time="Wed, 02 Mar 2005 17:57:33 GMT"/>
|
||||
<signal name="delete_event" handler="on_tabbed_chat_window_delete_event" last_modification_time="Mon, 07 Mar 2005 11:06:00 GMT"/>
|
||||
<signal name="destroy" handler="on_tabbed_chat_window_destroy" last_modification_time="Mon, 07 Mar 2005 16:35:25 GMT"/>
|
||||
<signal name="event" handler="on_tabbed_chat_window_event" />
|
||||
|
||||
<child>
|
||||
<widget class="GtkNotebook" id="chat_notebook">
|
||||
|
@ -9757,7 +9759,7 @@ Custom</property>
|
|||
<property name="show_border">True</property>
|
||||
<property name="tab_pos">GTK_POS_TOP</property>
|
||||
<property name="scrollable">True</property>
|
||||
<property name="enable_popup">True</property>
|
||||
<property name="enable_popup">False</property>
|
||||
<signal name="switch_page" handler="on_chat_notebook_switch_page" last_modification_time="Wed, 02 Mar 2005 18:00:21 GMT"/>
|
||||
<signal name="key_press_event" handler="on_chat_notebook_key_press_event" last_modification_time="Sat, 12 Mar 2005 21:18:17 GMT"/>
|
||||
|
||||
|
@ -9979,7 +9981,7 @@ JID: whatever@jabber.org</property>
|
|||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="hbox2970">
|
||||
<widget class="GtkHBox" id="actions_hbox">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
@ -10129,7 +10131,7 @@ JID: whatever@jabber.org</property>
|
|||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkHBox" id="actions_hbox">
|
||||
<widget class="GtkHBox" id="hbox2972">
|
||||
<property name="border_width">3</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
|
|
|
@ -53,11 +53,17 @@ class TabbedChatWindow(chat.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_event',
|
||||
self.on_tabbed_chat_window_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)
|
||||
|
||||
# needed for popup menu
|
||||
self.xml.get_widget('tabbed_chat_window').add_events(
|
||||
gtk.gdk.BUTTON_PRESS_MASK)
|
||||
|
||||
if gajim.config.get('saveposition'):
|
||||
# get window position and size from config
|
||||
self.window.move(gajim.config.get('chat-x-position'),
|
||||
|
@ -196,6 +202,12 @@ class TabbedChatWindow(chat.Chat):
|
|||
def on_tabbed_chat_window_focus_in_event(self, widget, event):
|
||||
chat.Chat.on_chat_window_focus_in_event(self, widget, event)
|
||||
|
||||
def on_tabbed_chat_window_event(self, widget, event):
|
||||
if event.type != gtk.gdk.BUTTON_PRESS:
|
||||
return False
|
||||
self.on_chat_window_button_press_event(widget, event)
|
||||
return True
|
||||
|
||||
def on_chat_notebook_key_press_event(self, widget, event):
|
||||
chat.Chat.on_chat_notebook_key_press_event(self, widget, event)
|
||||
|
||||
|
@ -230,6 +242,7 @@ class TabbedChatWindow(chat.Chat):
|
|||
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')
|
||||
self.set_compact_view(self.get_compact_view())
|
||||
self.users[user.jid] = user
|
||||
self.encrypted[user.jid] = False
|
||||
|
||||
|
@ -314,7 +327,11 @@ class TabbedChatWindow(chat.Chat):
|
|||
self.save_sent_message(jid, message)
|
||||
if message == '/clear':
|
||||
self.on_clear(None, conversation_textview) # clear conversation
|
||||
self.on_clear(None, widget) # clear message textview too
|
||||
self.on_clear(None, message_textview) # clear message textview too
|
||||
return True
|
||||
elif message == '/compact':
|
||||
self.set_compact_view(not self.get_compact_view())
|
||||
self.on_clear(None, message_textview)
|
||||
return True
|
||||
keyID = ''
|
||||
encrypted = False
|
||||
|
@ -440,3 +457,43 @@ class TabbedChatWindow(chat.Chat):
|
|||
if len(lines):
|
||||
self.print_empty_line(jid)
|
||||
|
||||
def populate_popup_menu(self, menu):
|
||||
"""Add menuitems do popup menu"""
|
||||
|
||||
# FIXME: add icons / use ItemFactory
|
||||
item = gtk.MenuItem(_('_History'))
|
||||
item.connect('activate', self.on_history_button_clicked)
|
||||
menu.append(item)
|
||||
|
||||
item = gtk.MenuItem(_('_Information'))
|
||||
item.connect('activate', self.on_contact_button_clicked)
|
||||
menu.append(item)
|
||||
|
||||
# FIXME: GPG stuff
|
||||
|
||||
item=gtk.MenuItem(_('_Toggle compact view'))
|
||||
item.connect('activate', lambda obj:self.set_compact_view(
|
||||
not self.get_compact_view()))
|
||||
menu.append(item)
|
||||
|
||||
def get_compact_view(self):
|
||||
"""Is compact view turned on?"""
|
||||
return self.compact_view
|
||||
|
||||
def set_compact_view(self,state):
|
||||
"""Toggle compact view"""
|
||||
|
||||
self.compact_view = state
|
||||
|
||||
for jid in self.xmls:
|
||||
widgets = [self.xmls[jid].get_widget('banner_eventbox'),
|
||||
self.xmls[jid].get_widget('actions_hbox'),
|
||||
]
|
||||
|
||||
for widget in widgets:
|
||||
if state:
|
||||
widget.set_no_show_all(True)
|
||||
widget.hide()
|
||||
else:
|
||||
widget.set_no_show_all(False)
|
||||
widget.show()
|
||||
|
|
Loading…
Reference in New Issue