applying liorithiel's patch to make gc occupant popup via glade and more ergonomic

This commit is contained in:
Nikos Kouremenos 2005-07-02 16:35:27 +00:00
parent 9b11b98af2
commit 34f9313afb
2 changed files with 197 additions and 78 deletions

View File

@ -668,6 +668,36 @@ class GroupchatWindow(chat.Chat):
self.plugin.windows[self.account]['chats'][fjid].set_active_tab(fjid)
self.plugin.windows[self.account]['chats'][fjid].window.present()
def on_voice_checkmenuitem_activate(self, widget, room_jid, nick):
if widget.get_active():
self.grant_voice(widget, room_jid, nick)
else:
self.revoke_voice(widget, room_jid, nick)
def on_moderator_checkmenuitem_activate(self, widget, room_jid, nick):
if widget.get_active():
self.grant_moderator(widget, room_jid, nick)
else:
self.revoke_moderator(widget, room_jid, nick)
def on_member_checkmenuitem_activate(self, widget, room_jid, jid):
if widget.get_active():
self.grant_membership(widget, room_jid, jid)
else:
self.revoke_membership(widget, room_jid, jid)
def on_admin_checkmenuitem_activate(self, widget, room_jid, jid):
if widget.get_active():
self.grant_admin(widget, room_jid, jid)
else:
self.revoke_admin(widget, room_jid, jid)
def on_owner_checkmenuitem_activate(self, widget, room_jid, jid):
if widget.get_active():
self.grant_owner(widget, room_jid, jid)
else:
self.revoke_owner(widget, room_jid, jid)
def mk_menu(self, room_jid, event, iter):
"""Make user's popup menu"""
model = self.list_treeview[room_jid].get_model()
@ -682,94 +712,69 @@ class GroupchatWindow(chat.Chat):
user_affiliation = self.contacts[room_jid][user_nick].affiliation
user_role = self.get_role(room_jid, user_nick)
menu = gtk.Menu()
item = gtk.MenuItem(_('_Privileges'))
menu.append(item)
sub_menu = gtk.Menu()
item.set_submenu(sub_menu)
# making menu from glade
xml = gtk.glade.XML(GTKGUI_GLADE, 'gc_occupants_menu', APP)
# these conditions were taken from JEP 0045
if (user_role == 'moderator'):
if (target_role in ('visitor','participant')):
item = gtk.MenuItem(_('_Kick'))
sub_menu.append(item)
item.connect('activate', self.kick, room_jid, nick)
if (target_role == 'visitor'):
item = gtk.MenuItem(_('_Grant Voice'))
sub_menu.append(item)
item.connect('activate', self.grant_voice, room_jid, nick)
# I know it is complicated, but this is how does JEP0045 descibe
# 'revoking voice' privilege
elif (user_affiliation=='member' and target_affiliation=='none') or \
((user_affiliation in ('admin','owner')) and \
(target_affiliation in ('none','member'))):
item = gtk.MenuItem(_('_Revoke Voice'))
sub_menu.append(item)
item.connect('activate', self.revoke_voice, room_jid, nick)
item = xml.get_widget('kick_menuitem')
item.connect('activate', self.kick, room_jid, nick)
if user_role != 'moderator' or target_role == 'moderator':
item.set_sensitive(False)
if (user_affiliation in ('admin','owner')):
item = gtk.MenuItem()
sub_menu.append(item)
item = xml.get_widget('voice_checkmenuitem')
item.set_active(target_role != 'visitor')
if user_role != 'moderator' or \
user_affiliation == 'none' or \
(user_affiliation=='member' and target_affiliation!='none') or \
target_affiliation in ('admin','owner'):
item.set_sensitive(False)
item.connect('activate', self.on_voice_checkmenuitem_activate, room_jid, nick)
if not target_role == 'moderator':
item = gtk.MenuItem(_('_Grant Moderator'))
sub_menu.append(item)
item.connect('activate', self.grant_moderator, room_jid, nick)
elif target_affiliation in ('none','member'):
item = gtk.MenuItem(_('_Revoke Moderator'))
sub_menu.append(item)
item.connect('activate', self.revoke_moderator, room_jid, nick)
item = xml.get_widget('moderator_checkmenuitem')
item.set_active(target_role == 'moderator')
if not user_affiliation in ('admin','owner') or \
target_affiliation in ('admin','owner'):
item.set_sensitive(False)
item.connect('activate', self.on_moderator_checkmenuitem_activate, room_jid, nick)
if (target_affiliation in ('none','member')) or \
(user_affiliation=='owner'):
item = gtk.MenuItem(_('_Ban'))
sub_menu.append(item)
item.connect('activate', self.ban, room_jid, jid)
item = xml.get_widget('ban_menuitem')
if not user_affiliation in ('admin','owner') or \
(target_affiliation in ('admin','owner') and user_affiliation != 'owner'):
item.set_sensitive(False)
item.connect('activate', self.ban, room_jid, jid)
if target_affiliation=='none':
item = gtk.MenuItem(_('_Grant Membership'))
sub_menu.append(item)
item.connect('activate', self.grant_membership, room_jid, jid)
if (target_affiliation in ('member')) or \
(target_affiliation in ('admin','owner') and (user_affiliation=='owner')):
item = gtk.MenuItem(_('_Revoke Membership'))
sub_menu.append(item)
item.connect('activate', self.revoke_membership, room_jid, jid)
item = xml.get_widget('member_checkmenuitem')
item.set_active(target_affiliation != 'none')
if not user_affiliation in ('admin','owner') or \
(user_affiliation != 'owner' and target_affiliation in ('admin','owner')):
item.set_sensitive(False)
item.connect('activate', self.on_member_checkmenuitem_activate, room_jid, jid)
if user_affiliation=='owner':
if (not target_affiliation=='admin'):
item = gtk.MenuItem(_('_Grant Admin'))
sub_menu.append(item)
item.connect('activate', self.grant_admin, room_jid, jid)
else:
item = gtk.MenuItem(_('_Revoke Admin'))
sub_menu.append(item)
item.connect('activate', self.revoke_admin, room_jid, jid)
item = xml.get_widget('admin_checkmenuitem')
item.set_active(target_affiliation in ('admin','owner'))
if not user_affiliation == 'owner':
item.set_sensitive(False)
item.connect('activate', self.on_admin_checkmenuitem_activate, room_jid, jid)
if (not target_affiliation=='owner'):
item = gtk.MenuItem(_('_Grant Owner'))
sub_menu.append(item)
item.connect('activate', self.grant_owner, room_jid, jid)
else:
item = gtk.MenuItem(_('_Revoke Owner'))
sub_menu.append(item)
item.connect('activate', self.revoke_owner, room_jid, jid)
item = xml.get_widget('owner_checkmenuitem')
item.set_active(target_affiliation == 'owner')
if not user_affiliation == 'owner':
item.set_sensitive(False)
item.connect('activate', self.on_owner_checkmenuitem_activate, room_jid, jid)
item = gtk.MenuItem(_('_Information'))
menu.append(item)
item = xml.get_widget('information_menuitem')
item.connect('activate', self.on_info, room_jid, nick)
if jid:
item = gtk.MenuItem(_('_Add to Roster'))
menu.append(item)
item.connect('activate', self.on_add_to_roster, jid)
item = gtk.MenuItem(_('Send _Private Message'))
menu.append(item)
item = xml.get_widget('add_to_roster_menuitem')
if not jid:
item.set_sensitive(False)
item.connect('activate', self.on_add_to_roster, jid)
item = xml.get_widget('send_private_message_menuitem')
item.connect('activate', self.on_send_pm, model, iter)
# show the popup now!
menu = xml.get_widget('gc_occupants_menu')
menu.popup(None, None, None, event.button, event.time)
menu.show_all()
menu.reposition()

View File

@ -15402,6 +15402,8 @@ the Jabber network.</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="default_width">400</property>
<property name="default_height">250</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
@ -15497,7 +15499,6 @@ the Jabber network.</property>
<child>
<widget class="GtkLabel" id="count_chars_label">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="label" translatable="yes">0</property>
<property name="use_underline">False</property>
<property name="use_markup">False</property>
@ -15568,7 +15569,7 @@ the Jabber network.</property>
<property name="overwrite">False</property>
<property name="accepts_tab">True</property>
<property name="justification">GTK_JUSTIFY_LEFT</property>
<property name="wrap_mode">GTK_WRAP_NONE</property>
<property name="wrap_mode">GTK_WRAP_WORD</property>
<property name="cursor_visible">True</property>
<property name="pixels_above_lines">0</property>
<property name="pixels_below_lines">0</property>
@ -15687,4 +15688,117 @@ the Jabber network.</property>
</child>
</widget>
<widget class="GtkMenu" id="gc_occupants_menu">
<child>
<widget class="GtkMenuItem" id="group_chat_actions_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Occupant Actions</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="group_chat_actions_menuitem_menu">
<child>
<widget class="GtkCheckMenuItem" id="voice_checkmenuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Voice</property>
<property name="use_underline">True</property>
<property name="active">False</property>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="moderator_checkmenuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">Mo_derator</property>
<property name="use_underline">True</property>
<property name="active">False</property>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separator5">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="member_checkmenuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Member</property>
<property name="use_underline">True</property>
<property name="active">False</property>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="admin_checkmenuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Admin</property>
<property name="use_underline">True</property>
<property name="active">False</property>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="owner_checkmenuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Owner</property>
<property name="use_underline">True</property>
<property name="active">False</property>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separator4">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="kick_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Kick</property>
<property name="use_underline">True</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="ban_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Ban</property>
<property name="use_underline">True</property>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="information_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Information</property>
<property name="use_underline">True</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="add_to_roster_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Add to Roster</property>
<property name="use_underline">True</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="send_private_message_menuitem">
<property name="visible">True</property>
<property name="label" translatable="yes">_Send Private Message</property>
<property name="use_underline">True</property>
</widget>
</child>
</widget>
</glade-interface>