diff --git a/plugins/gtkgui/dialogs.py b/plugins/gtkgui/dialogs.py
index 4c3544168..4f8286f8f 100644
--- a/plugins/gtkgui/dialogs.py
+++ b/plugins/gtkgui/dialogs.py
@@ -208,6 +208,84 @@ class vcard_information_window:
self.xml.signal_autoconnect(self)
+class Edit_groups_dialog:
+ """Class for the edit group dialog window"""
+ def __init__(self, user, account, plugin):
+ self.xml = gtk.glade.XML(GTKGUI_GLADE, 'edit_groups_dialog', APP)
+ self.dialog = self.xml.get_widget('edit_groups_dialog')
+ self.plugin = plugin
+ self.account = account
+ self.user = user
+ self.list = self.xml.get_widget('groups_treeview')
+ self.xml.get_widget('nickname_label').set_text(_('Edit groups for %s') % user.name)
+ self.xml.get_widget('jid_label').set_text(user.jid)
+ self.xml.signal_autoconnect(self)
+ self.init_list()
+
+ def run(self):
+ self.dialog.run()
+ self.dialog.destroy()
+ #TODO: send to the core
+
+ def update_user(self):
+ luser = self.plugin.roster.contacts[self.account][self.user.jid]
+ for u in luser:
+ self.plugin.roster.remove_user(u, self.account)
+ self.plugin.roster.add_user_to_roster(self.user.jid, self.account)
+
+ def on_add_button_clicked(self, widget):
+ group = self.xml.get_widget('group_entry').get_text()
+ if not group:
+ return
+ # check if it already exists
+ model = self.list.get_model()
+ iter = model.get_iter_root()
+ while iter:
+ if model.get_value(iter, 0) == group:
+ return
+ iter = model.iter_next(iter)
+ model.append((group, True))
+ self.user.groups.append(group)
+ self.update_user()
+
+ def group_toggled_cb(self, cell, path):
+ model = self.list.get_model()
+ if model[path][1] and len(self.user.groups) == 1: # we try to remove
+ # the latest group
+ Error_dialog(_('There must be at least one group for each contact'))
+ #TODO: re-set the checkbutton
+ return
+ model[path][1] = not model[path][1]
+ if model[path][1]:
+ self.user.groups.append(model[path][0])
+ else:
+ self.user.groups.remove(model[path][0])
+ self.update_user()
+
+ def init_list(self):
+ store = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_BOOLEAN)
+ self.list.set_model(store)
+ for g in self.plugin.roster.groups[self.account].keys():
+ iter = store.append()
+ store.set(iter, 0, g)
+ if g in self.user.groups:
+ store.set(iter, 1, True)
+ else:
+ store.set(iter, 1, False)
+ column = gtk.TreeViewColumn(_('Group'))
+ self.list.append_column(column)
+ renderer = gtk.CellRendererText()
+ column.pack_start(renderer)
+ column.set_attributes(renderer, text=0)
+
+ column = gtk.TreeViewColumn(_('In the group'))
+ self.list.append_column(column)
+ renderer = gtk.CellRendererToggle()
+ column.pack_start(renderer)
+ renderer.set_property('activatable', True)
+ renderer.connect('toggled', self.group_toggled_cb)
+ column.set_attributes(renderer, active=1)
+
class Passphrase_dialog:
"""Class for Passphrase dialog"""
def run(self):
diff --git a/plugins/gtkgui/gtkgui.glade b/plugins/gtkgui/gtkgui.glade
index f18973db7..bd033de83 100644
--- a/plugins/gtkgui/gtkgui.glade
+++ b/plugins/gtkgui/gtkgui.glade
@@ -8376,42 +8376,15 @@ Custom
GTK_BUTTONBOX_END
-
+
True
True
True
- gtk-apply
+ gtk-close
True
GTK_RELIEF_NORMAL
True
- -10
-
-
-
-
-
- True
- True
- True
- gtk-cancel
- True
- GTK_RELIEF_NORMAL
- True
- -6
-
-
-
-
-
- True
- True
- True
- True
- gtk-ok
- True
- GTK_RELIEF_NORMAL
- True
- -5
+ -7
@@ -8439,7 +8412,7 @@ Custom
True
- <b>Edit groups for Nickname</b>
+
False
True
GTK_JUSTIFY_LEFT
@@ -8460,7 +8433,7 @@ Custom
True
- jid_label
+
False
False
GTK_JUSTIFY_LEFT
@@ -8492,7 +8465,7 @@ Custom
5
-
+
True
True
True
@@ -8511,13 +8484,14 @@ Custom
-
+
True
True
gtk-add
True
GTK_RELIEF_NORMAL
True
+
0
diff --git a/plugins/gtkgui/roster_window.py b/plugins/gtkgui/roster_window.py
index 66c463fb4..ed6a0e6ec 100644
--- a/plugins/gtkgui/roster_window.py
+++ b/plugins/gtkgui/roster_window.py
@@ -403,6 +403,10 @@ class roster_window:
model.set_value(iter, 5, True)
self.tree.set_cursor(path, self.tree.get_column(0), True)
+ def on_edit_groups(self, widget, user, account):
+ dlg = Edit_groups_dialog(user, account, self.plugin)
+ dlg.run()
+
def on_history(self, widget, user):
"""When history button is pressed : call log window"""
if not self.plugin.windows['logs'].has_key(user.jid):
@@ -418,41 +422,44 @@ class roster_window:
user = self.contacts[account][jid][0]
menu = gtk.Menu()
- item = gtk.MenuItem(_("Start chat"))
+ item = gtk.MenuItem(_('Start chat'))
menu.append(item)
- item.connect("activate", self.on_roster_treeview_row_activated, path)
- item = gtk.MenuItem(_("Rename"))
+ item.connect('activate', self.on_roster_treeview_row_activated, path)
+ item = gtk.MenuItem(_('Rename'))
menu.append(item)
- item.connect("activate", self.on_rename, iter, path)
+ item.connect('activate', self.on_rename, iter, path)
+ item = gtk.MenuItem(_('Edit groups'))
+ menu.append(item)
+ item.connect('activate', self.on_edit_groups, user, account)
item = gtk.MenuItem()
menu.append(item)
- item = gtk.MenuItem(_("Subscription"))
+ item = gtk.MenuItem(_('Subscription'))
menu.append(item)
sub_menu = gtk.Menu()
item.set_submenu(sub_menu)
- item = gtk.MenuItem(_("Resend authorization to"))
+ item = gtk.MenuItem(_('Resend authorization to'))
sub_menu.append(item)
- item.connect("activate", self.authorize, jid, account)
- item = gtk.MenuItem(_("Rerequest authorization from"))
+ item.connect('activate', self.authorize, jid, account)
+ item = gtk.MenuItem(_('Rerequest authorization from'))
sub_menu.append(item)
- item.connect("activate", self.req_sub, jid, \
+ item.connect('activate', self.req_sub, jid, \
_('I would like to add you to my contact list, please.'), account)
item = gtk.MenuItem()
menu.append(item)
- item = gtk.MenuItem(_("Remove"))
+ item = gtk.MenuItem(_('Remove'))
menu.append(item)
- item.connect("activate", self.on_req_usub, user, account)
+ item.connect('activate', self.on_req_usub, user, account)
item = gtk.MenuItem()
menu.append(item)
- item = gtk.MenuItem(_("Information"))
+ item = gtk.MenuItem(_('Information'))
menu.append(item)
- item.connect("activate", self.on_info, user, account)
- item = gtk.MenuItem(_("History"))
+ item.connect('activate', self.on_info, user, account)
+ item = gtk.MenuItem(_('History'))
menu.append(item)
- item.connect("activate", self.on_history, user)
+ item.connect('activate', self.on_history, user)
menu.popup(None, None, None, event.button, event.time)
menu.show_all()
@@ -478,25 +485,25 @@ class roster_window:
path = model.get_path(iter)
account = model.get_value(iter, 4)
menu = gtk.Menu()
- item = gtk.MenuItem(_("Log on"))
+ item = gtk.MenuItem(_('Log on'))
if self.contacts[account][jid][0].show != 'offline':
item.set_sensitive(False)
menu.append(item)
- item.connect("activate", self.on_agent_logging, jid, 'available', account)
+ item.connect('activate', self.on_agent_logging, jid, 'available', account)
- item = gtk.MenuItem(_("Log off"))
+ item = gtk.MenuItem(_('Log off'))
if self.contacts[account][jid][0].show == 'offline':
item.set_sensitive(False)
menu.append(item)
- item.connect("activate", self.on_agent_logging, jid, 'unavailable', \
+ item.connect('activate', self.on_agent_logging, jid, 'unavailable', \
account)
item = gtk.MenuItem()
menu.append(item)
- item = gtk.MenuItem(_("Remove"))
+ item = gtk.MenuItem(_('Remove'))
menu.append(item)
- item.connect("activate", self.on_remove_agent, jid, account)
+ item.connect('activate', self.on_remove_agent, jid, account)
menu.popup(None, None, None, event.button, event.time)
menu.show_all()