diff --git a/plugins/gtkgui/dialogs.py b/plugins/gtkgui/dialogs.py index 4c3544168062d31c4bb5052b8db62a8c2e5bc561..4f8286f8fd6225aef047c9d7cc997723a0e4749a 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(_('<b>Edit groups for %s</b>') % 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 f18973db78d44e6d02bcaad5c0fa49a118a977b0..bd033de831da82ddd50e04816daaaad3dced9b62 100644 --- a/plugins/gtkgui/gtkgui.glade +++ b/plugins/gtkgui/gtkgui.glade @@ -8376,42 +8376,15 @@ Custom</property> <property name="layout_style">GTK_BUTTONBOX_END</property> <child> - <widget class="GtkButton" id="applybutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-apply</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-10</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="cancelbutton1"> - <property name="visible">True</property> - <property name="can_default">True</property> - <property name="can_focus">True</property> - <property name="label">gtk-cancel</property> - <property name="use_stock">True</property> - <property name="relief">GTK_RELIEF_NORMAL</property> - <property name="focus_on_click">True</property> - <property name="response_id">-6</property> - </widget> - </child> - - <child> - <widget class="GtkButton" id="okbutton1"> + <widget class="GtkButton" id="close_button"> <property name="visible">True</property> <property name="can_default">True</property> - <property name="has_default">True</property> <property name="can_focus">True</property> - <property name="label">gtk-ok</property> + <property name="label">gtk-close</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> - <property name="response_id">-5</property> + <property name="response_id">-7</property> </widget> </child> </widget> @@ -8439,7 +8412,7 @@ Custom</property> <child> <widget class="GtkLabel" id="nickname_label"> <property name="visible">True</property> - <property name="label" translatable="yes"><b>Edit groups for Nickname</b></property> + <property name="label" translatable="yes"></property> <property name="use_underline">False</property> <property name="use_markup">True</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -8460,7 +8433,7 @@ Custom</property> <child> <widget class="GtkLabel" id="jid_label"> <property name="visible">True</property> - <property name="label" translatable="yes">jid_label</property> + <property name="label" translatable="yes"></property> <property name="use_underline">False</property> <property name="use_markup">False</property> <property name="justify">GTK_JUSTIFY_LEFT</property> @@ -8492,7 +8465,7 @@ Custom</property> <property name="spacing">5</property> <child> - <widget class="GtkEntry" id="entry2"> + <widget class="GtkEntry" id="group_entry"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="editable">True</property> @@ -8511,13 +8484,14 @@ Custom</property> </child> <child> - <widget class="GtkButton" id="button32"> + <widget class="GtkButton" id="add_button"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label">gtk-add</property> <property name="use_stock">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> + <signal name="clicked" handler="on_add_button_clicked" last_modification_time="Thu, 17 Mar 2005 11:40:17 GMT"/> </widget> <packing> <property name="padding">0</property> diff --git a/plugins/gtkgui/roster_window.py b/plugins/gtkgui/roster_window.py index 66c463fb47b7be0705bec3d9c23524f6bb7e66e0..ed6a0e6ecf2e97084aa0a4bdc8a9e8b4639aa351 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')) menu.append(item) - item.connect("activate", self.on_roster_treeview_row_activated, path) - item = gtk.MenuItem(_("Rename")) + item.connect('activate', self.on_rename, iter, path) + item = gtk.MenuItem(_('Edit groups')) menu.append(item) - item.connect("activate", self.on_rename, iter, path) + 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()