From d27f9a9c85ef0b500a99e0bf5b4c165fd620fca5 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger Date: Tue, 22 Jan 2008 16:06:16 +0000 Subject: [PATCH] * YesNo dialog now destroy itself when we click on a button * yes YesNo dialog when a contact removes us to as if user wants to remove it too * fix some coding standards --- src/dialogs.py | 112 +++++++++++++++++++++++++++++-------------------- src/gajim.py | 27 ++++++++---- 2 files changed, 84 insertions(+), 55 deletions(-) diff --git a/src/dialogs.py b/src/dialogs.py index f64695acb..64695c16a 100644 --- a/src/dialogs.py +++ b/src/dialogs.py @@ -9,7 +9,7 @@ ## Copyright (C) 2005 Norman Rasmussen ## Copyright (C) 2007 Lukas Petrovicky ## Julien Pivotto -## Stephan Erb +## Stephan Erb ## ## This file is part of Gajim. ## @@ -207,7 +207,7 @@ class EditGroupsDialog: for group in groups: if group not in helpers.special_groups or groups[group] > 0: group_list.append(group) - group_list.sort() + group_list.sort() for group in group_list: iter = store.append() store.set(iter, 0, group) # Group name @@ -256,7 +256,7 @@ class PassphraseDialog: self.window.destroy() return passphrase, checked - def __init__(self, titletext, labeltext, checkbuttontext=None, is_modal = True, + def __init__(self, titletext, labeltext, checkbuttontext=None, is_modal=True, ok_handler = None, cancel_handler = None): self.xml = gtkgui_helpers.get_glade('passphrase_dialog.glade') self.window = self.xml.get_widget('passphrase_dialog') @@ -278,14 +278,14 @@ class PassphraseDialog: self.xml.signal_autoconnect(self) self.window.show_all() - + self.check = bool(checkbuttontext) checkbutton = self.xml.get_widget('save_passphrase_checkbutton') if self.check: checkbutton.set_label(checkbuttontext) else: checkbutton.hide() - + def on_okbutton_clicked(self, widget): passph = self.passphrase_entry.get_text().decode('utf-8') @@ -432,7 +432,7 @@ class ChangeActivityDialog: def on_ok_button_clicked(self, widget): '''Return activity and messsage (None if no activity selected)''' - activity = None + activity = None subactivity = None message = None active1 = self.combo1.get_active() @@ -476,7 +476,7 @@ class ChangeMoodDialog: def on_ok_button_clicked(self, widget): '''Return mood and messsage (None if no mood selected)''' - mood = None + mood = None message = None active = self.combo.get_active() if active > -1: @@ -621,7 +621,7 @@ class ChangeStatusMessageDialog: self.preset_messages_dict[msg_name] = msg_text iter_ = self.message_liststore.append((msg_name,)) gajim.config.add_per('statusmsg', msg_name) - # select in combobox the one we just saved + # select in combobox the one we just saved self.message_combobox.set_active_iter(iter_) gajim.config.set_per('statusmsg', msg_name, 'message', msg_text_1l) @@ -697,7 +697,7 @@ _('Please fill in the data of the contact you want to add in account %s') %accou self.agents[type_].append(jid_) self.available_types.append(type_) liststore = gtk.ListStore(str) - self.group_comboboxentry.set_model(liststore) + self.group_comboboxentry.set_model(liststore) # Combobox with transport/jabber icons liststore = gtk.ListStore(str, gtk.gdk.Pixbuf, str) cell = gtk.CellRendererPixbuf() @@ -947,7 +947,7 @@ class AboutDialog: text = open(copying_file_path).read() dlg.set_license(text) - dlg.set_comments('%s\n%s %s\n%s %s' + dlg.set_comments('%s\n%s %s\n%s %s' % (_('A GTK+ jabber client'), \ _('GTK+ Version:'), self.tuple2str(gtk.gtk_version), \ _('PyGTK Version:'), self.tuple2str(gtk.pygtk_version))) @@ -991,7 +991,7 @@ class AboutDialog: dlg.props.wrap_license = True pixbuf = gtk.gdk.pixbuf_new_from_file(os.path.join( - gajim.DATA_DIR, 'pixmaps', 'gajim_about.png')) + gajim.DATA_DIR, 'pixmaps', 'gajim_about.png')) dlg.set_logo(pixbuf) #here you write your name in the form Name FamilyName @@ -1037,7 +1037,7 @@ class HigDialog(gtk.MessageDialog): def __init__(self, parent, type, buttons, pritext, sectext, on_response_ok = None, on_response_cancel = None, on_response_yes = None, on_response_no = None): - gtk.MessageDialog.__init__(self, parent, + gtk.MessageDialog.__init__(self, parent, gtk.DIALOG_DESTROY_WITH_PARENT | gtk.DIALOG_MODAL, type, buttons, message_format = pritext) @@ -1088,7 +1088,7 @@ class FileChooserDialog(gtk.FileChooserDialog): select_multiple = False, current_folder = None, on_response_ok = None, on_response_cancel = None): - gtk.FileChooserDialog.__init__(self, title = title_text, + gtk.FileChooserDialog.__init__(self, title = title_text, action = action, buttons = buttons) self.set_default_response(default_response) @@ -1146,7 +1146,7 @@ class ConfirmationDialog(HigDialog): on_response_cancel = None): self.user_response_ok = on_response_ok self.user_response_cancel = on_response_cancel - HigDialog.__init__(self, None, + HigDialog.__init__(self, None, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, pritext, sectext, self.on_response_ok, self.on_response_cancel) self.popup() @@ -1173,7 +1173,7 @@ class NonModalConfirmationDialog(HigDialog): on_response_cancel = None): self.user_response_ok = on_response_ok self.user_response_cancel = on_response_cancel - HigDialog.__init__(self, None, + HigDialog.__init__(self, None, gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, pritext, sectext, self.on_response_ok, self.on_response_cancel) self.set_modal(False) @@ -1197,7 +1197,7 @@ class NonModalConfirmationDialog(HigDialog): class WarningDialog(HigDialog): def __init__(self, pritext, sectext=''): '''HIG compliant warning dialog.''' - HigDialog.__init__( self, None, + HigDialog.__init__( self, None, gtk.MESSAGE_WARNING, gtk.BUTTONS_OK, pritext, sectext) self.set_modal(False) self.set_transient_for(gajim.interface.roster.window) @@ -1206,7 +1206,7 @@ class WarningDialog(HigDialog): class InformationDialog(HigDialog): def __init__(self, pritext, sectext=''): '''HIG compliant info dialog.''' - HigDialog.__init__( self, None, + HigDialog.__init__( self, None, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, pritext, sectext) self.set_modal(False) self.set_transient_for(gajim.interface.roster.window) @@ -1215,7 +1215,7 @@ class InformationDialog(HigDialog): class ErrorDialog(HigDialog): def __init__(self, pritext, sectext=''): '''HIG compliant error dialog.''' - HigDialog.__init__( self, None, + HigDialog.__init__( self, None, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, pritext, sectext) self.popup() @@ -1223,12 +1223,32 @@ class YesNoDialog(HigDialog): def __init__(self, pritext, sectext='', on_response_yes = None, on_response_no = None): '''HIG compliant YesNo dialog.''' - HigDialog.__init__( self, None, + self.user_response_yes = on_response_yes + self.user_response_no = on_response_no + HigDialog.__init__( self, None, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, pritext, sectext, - on_response_yes = on_response_yes, on_response_no = on_response_no) + on_response_yes=self.on_response_yes, + on_response_no=self.on_response_no) self.set_modal(False) self.popup() + def on_response_yes(self, widget): + if self.user_response_yes: + if isinstance(self.user_response_yes, tuple): + self.user_response_yes[0](*self.user_response_yes[1:]) + else: + self.user_response_yes(self.is_checked()) + self.destroy() + + def on_response_no(self, widget): + if self.user_response_no: + if isinstance(self.user_response_no, tuple): + self.user_response_no[0](*self.user_response_no[1:]) + else: + self.user_response_no() + self.destroy() + + class ConfirmationDialogCheck(ConfirmationDialog): '''HIG compliant confirmation dialog with checkbutton.''' def __init__(self, pritext, sectext='', checktext = '', @@ -1264,7 +1284,7 @@ class ConfirmationDialogCheck(ConfirmationDialog): def on_response_cancel(self, widget): if self.user_response_cancel: if isinstance(self.user_response_cancel, tuple): - self.user_response_cancel[0](*self.user_response_ok[1:]) + self.user_response_cancel[0](*self.user_response_cancel[1:]) else: self.user_response_cancel() self.destroy() @@ -1884,7 +1904,7 @@ class PopupNotificationWindow: bg_color = 'yellowgreen' elif event_type == _('Groupchat Invitation'): bg_color = 'tan1' - elif event_type == _('Contact Changed Status'): + elif event_type == _('Contact Changed Status'): bg_color = 'thistle2' else: # Unknown event! Shouldn't happen but deal with it bg_color = 'white' @@ -1892,7 +1912,7 @@ class PopupNotificationWindow: close_button.modify_bg(gtk.STATE_NORMAL, popup_bg_color) eventbox.modify_bg(gtk.STATE_NORMAL, popup_bg_color) event_description_label.set_markup( - '%s' % text) + '%s' % text) # set the image image.set_from_file(path_to_image) @@ -2118,7 +2138,7 @@ class SingleMessageWindow: if self.message: self.conversation_textview.print_real_text(self.message) - fjid = self.from_whom + fjid = self.from_whom if self.resource: fjid += '/' + self.resource # Full jid of sender (with resource) self.from_entry.set_text(fjid) @@ -2128,16 +2148,16 @@ class SingleMessageWindow: self.cancel_button.hide() self.close_button.show() elif action == 'form': # prepare UI for Receiving - title = _('Form %s') % title - self.send_button.show() - self.send_and_close_button.show() - self.to_label.show() - self.to_entry.show() - self.reply_button.hide() - self.from_label.hide() - self.from_entry.hide() - self.conversation_scrolledwindow.hide() - self.message_scrolledwindow.hide() + title = _('Form %s') % title + self.send_button.show() + self.send_and_close_button.show() + self.to_label.show() + self.to_entry.show() + self.reply_button.hide() + self.from_label.hide() + self.from_entry.hide() + self.conversation_scrolledwindow.hide() + self.message_scrolledwindow.hide() self.window.set_title(title) @@ -2385,7 +2405,7 @@ class PrivacyListWindow: # set jabber id completion jids_list_store = gtk.ListStore(gobject.TYPE_STRING) for jid in gajim.contacts.get_jid_list(self.account): - jids_list_store.append([jid]) + jids_list_store.append([jid]) jid_entry_completion = gtk.EntryCompletion() jid_entry_completion.set_text_column(0) jid_entry_completion.set_model(jids_list_store) @@ -2399,7 +2419,7 @@ class PrivacyListWindow: self.list_of_groups[group] = count count += 1 self.edit_type_group_combobox.append_text(group) - self.edit_type_group_combobox.set_active(0) + self.edit_type_group_combobox.set_active(0) self.window.set_title(title) @@ -2421,7 +2441,7 @@ class PrivacyListWindow: if a_d_dict['default'] == self.privacy_list_name: self.privacy_list_default_checkbutton.set_active(True) else: - self.privacy_list_default_checkbutton.set_active(False) + self.privacy_list_default_checkbutton.set_active(False) def privacy_list_received(self, rules): self.list_of_rules_combobox.get_model().clear() @@ -2556,7 +2576,7 @@ class PrivacyListWindow: self.edit_queries_send_checkbutton.set_active(False) self.edit_view_status_checkbutton.set_active(False) self.edit_send_status_checkbutton.set_active(False) - self.edit_order_spinbutton.set_value(1) + self.edit_order_spinbutton.set_value(1) self.edit_type_group_combobox.set_active(0) self.edit_type_subscription_combobox.set_active(0) self.add_edit_rule_label.set_label( @@ -2638,7 +2658,7 @@ class PrivacyListsWindow: or edit an already there one''' def __init__(self, account): self.account = account - self.privacy_lists_save = [] + self.privacy_lists_save = [] self.xml = gtkgui_helpers.get_glade('privacy_lists_window.glade') @@ -2648,7 +2668,7 @@ class PrivacyListsWindow: 'new_privacy_list_button', 'new_privacy_list_entry', 'privacy_lists_refresh_button', 'close_privacy_lists_window_button']: self.__dict__[widget_to_add] = self.xml.get_widget( - widget_to_add) + widget_to_add) self.draw_privacy_lists_in_combobox([]) self.privacy_lists_refresh() @@ -3086,8 +3106,8 @@ class AdvancedNotificationsWindow: self.window.show_all() - def initiate_rule_state(self): - '''Set values for all widgets''' + def initiate_rule_state(self): + '''Set values for all widgets''' if self.active_num < 0: return # event @@ -3328,7 +3348,7 @@ class AdvancedNotificationsWindow: for st in ['online', 'away', 'xa', 'dnd', 'invisible']: self.__dict__[st + '_cb'].hide() - self.special_status_rb.show() + self.special_status_rb.show() else: self.set_status_config() # 'special status' clicked @@ -3543,8 +3563,8 @@ class TransformChatToMUC: contact.jid != gajim.get_jid_from_account(self.account) and\ contact.jid not in gajim.interface.minimized_controls[account] and\ not contact.is_transport() and\ - not contact_transport - + not contact_transport + # set jabber id and pseudos for account in gajim.contacts.get_accounts(): if gajim.connections[account].is_zeroconf: @@ -3596,7 +3616,7 @@ class TransformChatToMUC: guest_list.append(guest) room_jid = room_id + '@' + server gajim.automatic_rooms[self.account][room_jid] = {} - gajim.automatic_rooms[self.account][room_jid]['invities'] = guest_list + gajim.automatic_rooms[self.account][room_jid]['invities'] = guest_list gajim.automatic_rooms[self.account][room_jid]['continue_tag'] = True gajim.interface.roster.join_gc_room(self.account, room_jid, gajim.nicks[self.account], None, is_continued=True) diff --git a/src/gajim.py b/src/gajim.py index dd5f4f347..d40fa9506 100755 --- a/src/gajim.py +++ b/src/gajim.py @@ -455,7 +455,7 @@ class Interface: def handle_event_http_auth(self, account, data): #('HTTP_AUTH', account, (method, url, transaction_id, iq_obj, msg)) - def response(widget, account, iq_obj, answer): + def response(account, iq_obj, answer): self.dialog.destroy() gajim.connections[account].build_http_auth_answer(iq_obj, answer) @@ -948,13 +948,22 @@ class Interface: self.remote_ctrl.raise_signal('Subscribed', (account, array)) def handle_event_unsubscribed(self, account, jid): - dialogs.InformationDialog(_('Contact "%s" removed subscription from you')\ - % jid, _('You will always see him or her as offline.')) - # FIXME: Per RFC 3921, we can "deny" ack as well, but the GUI does not show deny gajim.connections[account].ack_unsubscribed(jid) if self.remote_ctrl: self.remote_ctrl.raise_signal('Unsubscribed', (account, jid)) + contact = gajim.contacts.get_first_contact_from_jid(account, jid) + if not contact: + return + def on_yes(list_): + self.roster.on_req_usub(None, list_) + list_ = [(contact, account)] + dialogs.YesNoDialog( + _('Contact "%s" removed subscription from you') % jid, + _('You will always see him or her as offline.\nDo you want to remove him or her from your contact list?'), + on_response_yes = (on_yes, list_)) + # FIXME: Per RFC 3921, we can "deny" ack as well, but the GUI does not show deny + def handle_event_agent_info_error(self, account, agent): #('AGENT_ERROR_INFO', account, (agent)) try: @@ -1932,12 +1941,12 @@ class Interface: negotiated, not_acceptable, ask_user = session.verify_options_bob(form) if ask_user: - def accept_nondefault_options(widget): + def accept_nondefault_options(): self.dialog.destroy() negotiated.update(ask_user) session.respond_e2e_bob(form, negotiated, not_acceptable) - def reject_nondefault_options(widget): + def reject_nondefault_options(): self.dialog.destroy() for key in ask_user.keys(): not_acceptable.append(key) @@ -1973,7 +1982,7 @@ class Interface: session.check_identity = _cb if ask_user: - def accept_nondefault_options(widget): + def accept_nondefault_options(): dialog.destroy() negotiated.update(ask_user) @@ -1983,7 +1992,7 @@ class Interface: except exceptions.NegotiationError, details: session.fail_bad_negotiation(details) - def reject_nondefault_options(widget): + def reject_nondefault_options(): session.reject_negotiation() dialog.destroy() @@ -2237,7 +2246,7 @@ class Interface: gajim.config.set_per('accounts', account, 'ssl_fingerprint_sha1', data[0]) gajim.connections[account].ssl_certificate_accepted() - def on_no(widget): + def on_no(): dialog.destroy() gajim.connections[account].disconnect(on_purpose=True) self.handle_event_status(account, 'offline')