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:
Yann Leboulanger 2005-06-22 19:39:19 +00:00
parent d62b4e1ea2
commit 399589e406
5 changed files with 173 additions and 8 deletions

View File

@ -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)

View File

@ -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 = {

View File

@ -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()

View File

@ -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>

View File

@ -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()