less and less blocking dialogs

This commit is contained in:
Yann Leboulanger 2008-08-07 13:25:25 +00:00
parent cb0049a1cb
commit 9329bcc4c1
5 changed files with 137 additions and 96 deletions

View File

@ -632,11 +632,7 @@ class ChangeStatusMessageDialog:
start_iter, finish_iter = self.message_buffer.get_bounds()
status_message_to_save_as_preset = self.message_buffer.get_text(
start_iter, finish_iter)
dlg = InputDialog(_('Save as Preset Status Message'),
_('Please type a name for this status message'), is_modal = True)
response = dlg.get_response()
if response == gtk.RESPONSE_OK:
msg_name = dlg.input_entry.get_text()
def on_ok(msg_name):
msg_text = status_message_to_save_as_preset.decode('utf-8')
msg_text_1l = helpers.to_one_line(msg_text)
if not msg_name: # msg_name was ''
@ -644,13 +640,13 @@ class ChangeStatusMessageDialog:
msg_name = msg_name.decode('utf-8')
if msg_name in self.preset_messages_dict:
def on_ok():
def on_ok2():
self.preset_messages_dict[msg_name] = msg_text
gajim.config.set_per('statusmsg', msg_name, 'message',
msg_text_1l)
dlg2 = ConfirmationDialog(_('Overwrite Status Message?'),
_('This name is already used. Do you want to overwrite this '
'status message?'), on_response_ok=on_ok)
'status message?'), on_response_ok=on_ok2)
return
self.preset_messages_dict[msg_name] = msg_text
iter_ = self.message_liststore.append((msg_name,))
@ -658,6 +654,9 @@ class ChangeStatusMessageDialog:
# 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)
InputDialog(_('Save as Preset Status Message'),
_('Please type a name for this status message'), is_modal=False,
ok_handler=on_ok)
class AddNewContactWindow:
'''Class for AddNewContactWindow'''
@ -1435,6 +1434,12 @@ class ConfirmationDialogDubbleCheck(ConfirmationDialog):
class FTOverwriteConfirmationDialog(ConfirmationDialog):
'''HIG compliant confirmation dialog to overwrite or resume a file transfert'''
def __init__(self, pritext, sectext='', propose_resume=True):
self.user_response_ok = on_response_ok
self.user_response_cancel = on_response_cancel
HigDialog.__init__(self, None,
gtk.MESSAGE_QUESTION, gtk.BUTTONS_OK_CANCEL, pritext, sectext,
self.on_response_ok, self.on_response_cancel)
self.popup()
HigDialog.__init__(self, None, gtk.MESSAGE_QUESTION, gtk.BUTTONS_CANCEL,
pritext, sectext)
@ -1455,6 +1460,22 @@ class FTOverwriteConfirmationDialog(ConfirmationDialog):
label.set_use_underline(True)
self.add_action_widget(b, 200)
def on_response_ok(self, widget):
if self.user_response_ok:
if isinstance(self.user_response_ok, tuple):
self.user_response_ok[0](*self.user_response_ok[1:])
else:
self.user_response_ok()
self.destroy()
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:])
else:
self.user_response_cancel()
self.destroy()
class CommonInputDialog:
'''Common Class for Input dialogs'''
def __init__(self, title, label_str, is_modal, ok_handler, cancel_handler):
@ -3831,11 +3852,11 @@ class ESessionInfoWindow:
sectext = _('''To prevent a man-in-the-middle attack, you should speak to %(jid)s directly (in person or on the phone) and verify that they see the same Short Authentication String (SAS) as you.\n\nThis session's Short Authentication String: <b>%(sas)s</b>''') % {'jid': self.session.jid, 'sas': self.session.sas}
sectext += '\n\n' + _('Did you talk to the remote contact and verify the SAS?')
dialog = YesNoDialog(pritext, sectext)
if dialog.get_response() == gtk.RESPONSE_YES:
def on_yes(checked):
self.session._verified_srs_cb()
self.session.verified_identity = True
self.update_info()
YesNoDialog(pritext, sectext, on_response_yes=on_yes)
# vim: se ts=3:

View File

@ -327,16 +327,21 @@ _('Connection with peer cannot be established.'))
dl_size = stat.st_size
file_size = file_props['size']
dl_finished = dl_size >= file_size
def on_response(response):
if response < 0:
return
elif response == 100:
file_props['offset'] = dl_size
dialog2.destroy()
self._start_receive(file_path, account, contact, file_props)
dialog = dialogs.FTOverwriteConfirmationDialog(
_('This file already exists'), _('What do you want to do?'),
not dl_finished)
propose_resume=not dl_finished, on_response=on_response)
dialog.set_transient_for(dialog2)
dialog.set_destroy_with_parent(True)
response = dialog.get_response()
if response < 0:
return
elif response == 100:
file_props['offset'] = dl_size
return
else:
dirname = os.path.dirname(file_path)
if not os.access(dirname, os.W_OK) and os.name != 'nt':
@ -965,4 +970,4 @@ _('Connection with peer cannot be established.'))
self.window.hide()
# vim: se ts=3:
# vim: se ts=3:

View File

@ -769,38 +769,9 @@ def destroy_widget(widget):
def on_avatar_save_as_menuitem_activate(widget, jid, account,
default_name = ''):
def on_ok(widget):
def on_ok2(file_path, pixbuf):
pixbuf.save(file_path, 'jpeg')
dialog.destroy()
file_path = dialog.get_filename()
file_path = decode_filechooser_file_paths((file_path,))[0]
if os.path.exists(file_path):
# check if we have write permissions
if not os.access(file_path, os.W_OK):
file_name = os.path.basename(file_path)
dialogs.ErrorDialog(_('Cannot overwrite existing file "%s"' %
file_name),
_('A file with this name already exists and you do not have '
'permission to overwrite it.'))
return
dialog2 = dialogs.FTOverwriteConfirmationDialog(
_('This file already exists'), _('What do you want to do?'),
False)
dialog2.set_transient_for(dialog)
dialog2.set_destroy_with_parent(True)
response = dialog2.get_response()
if response < 0:
return
else:
dirname = os.path.dirname(file_path)
if not os.access(dirname, os.W_OK):
dialogs.ErrorDialog(_('Directory "%s" is not writable') % \
dirname, _('You do not have permission to create files in this'
' directory.'))
return
def on_continue(response):
if response < 0:
return
# Get pixbuf
pixbuf = None
is_fake = False
@ -831,18 +802,46 @@ default_name = ''):
else:
dialog.destroy()
def on_ok(widget):
def on_ok2(file_path, pixbuf):
pixbuf.save(file_path, 'jpeg')
dialog.destroy()
file_path = dialog.get_filename()
file_path = decode_filechooser_file_paths((file_path,))[0]
if os.path.exists(file_path):
# check if we have write permissions
if not os.access(file_path, os.W_OK):
file_name = os.path.basename(file_path)
dialogs.ErrorDialog(_('Cannot overwrite existing file "%s"' %
file_name),
_('A file with this name already exists and you do not have '
'permission to overwrite it.'))
return
dialog2 = dialogs.FTOverwriteConfirmationDialog(
_('This file already exists'), _('What do you want to do?'),
propose_resume=False, on_response=on_continue)
dialog2.set_transient_for(dialog)
dialog2.set_destroy_with_parent(True)
else:
dirname = os.path.dirname(file_path)
if not os.access(dirname, os.W_OK):
dialogs.ErrorDialog(_('Directory "%s" is not writable') % \
dirname, _('You do not have permission to create files in this'
' directory.'))
return
on_continue(0)
def on_cancel(widget):
dialog.destroy()
dialog = dialogs.FileChooserDialog(
title_text = _('Save Image as...'),
action = gtk.FILE_CHOOSER_ACTION_SAVE,
buttons = (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
gtk.STOCK_SAVE, gtk.RESPONSE_OK),
default_response = gtk.RESPONSE_OK,
current_folder = gajim.config.get('last_save_dir'),
on_response_ok = on_ok,
on_response_cancel = on_cancel)
dialog = dialogs.FileChooserDialog(title_text=_('Save Image as...'),
action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL,
gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_OK),
default_response=gtk.RESPONSE_OK,
current_folder=gajim.config.get('last_save_dir'), on_response_ok=on_ok,
on_response_cancel=on_cancel)
dialog.set_current_name(default_name)
dialog.connect('delete-event', lambda widget, event:

View File

@ -206,16 +206,23 @@ class HistoryManager:
def on_history_manager_window_delete_event(self, widget, event):
if self.AT_LEAST_ONE_DELETION_DONE:
def on_yes(clicked):
self.cur.execute('VACUUM')
self.con.commit()
gtk.main_quit()
def on_no():
gtk.main_quit()
dialog = dialogs.YesNoDialog(
_('Do you want to clean up the database? '
'(STRONGLY NOT RECOMMENDED IF GAJIM IS RUNNING)'),
_('Normally allocated database size will not be freed, '
'it will just become reusable. If you really want to reduce '
'database filesize, click YES, else click NO.'
'\n\nIn case you click YES, please wait...'))
if dialog.get_response() == gtk.RESPONSE_YES:
self.cur.execute('VACUUM')
self.con.commit()
'\n\nIn case you click YES, please wait...'),
on_response_yes=on_yes, on_response_no=on_no)
return
gtk.main_quit()
@ -623,4 +630,4 @@ if __name__ == '__main__':
HistoryManager()
gtk.main()
# vim: se ts=3:
# vim: se ts=3:

View File

@ -2210,6 +2210,16 @@ class RosterWindow:
get_msg = True
break
def on_continue2(message):
self.quit_on_next_offline = 0
for acct in accounts:
if gajim.connections[acct].connected:
self.quit_on_next_offline += 1
self.send_status(acct, 'offline', message)
if not self.quit_on_next_offline:
self.quit_gtkgui_interface()
def on_continue(message):
if message is None:
# user pressed Cancel to change status message dialog
@ -2227,7 +2237,8 @@ class RosterWindow:
for ctrl in win.controls():
fjid = ctrl.get_full_jid()
if gajim.last_message_time[ctrl.account].has_key(fjid):
if time.time() - gajim.last_message_time[ctrl.account][fjid] < 2:
if time.time() - gajim.last_message_time[ctrl.account][fjid] \
< 2:
recent = True
break
if recent:
@ -2236,18 +2247,10 @@ class RosterWindow:
if unread or recent:
dialog = dialogs.ConfirmationDialog(_('You have unread messages'),
_('Messages will only be available for reading them later if you'
' have history enabled and contact is in your roster.'))
if dialog.get_response() != gtk.RESPONSE_OK:
return
self.quit_on_next_offline = 0
for acct in accounts:
if gajim.connections[acct].connected:
self.quit_on_next_offline += 1
self.send_status(acct, 'offline', message)
if not self.quit_on_next_offline:
self.quit_gtkgui_interface()
' have history enabled and contact is in your roster.'),
on_response_ok=(on_continue2, message))
return
on_continue2(message)
if get_msg:
self.get_status_message('offline', on_continue)
@ -3217,26 +3220,6 @@ class RosterWindow:
# we can return to this show
self.previous_status_combobox_active = active
connected_accounts = gajim.get_number_of_connected_accounts()
if status == 'invisible':
bug_user = False
for account in accounts:
if connected_accounts < 1 or gajim.account_is_connected(account):
if not gajim.config.get_per('accounts', account,
'sync_with_global_status'):
continue
# We're going to change our status to invisible
if self.connected_rooms(account):
bug_user = True
break
if bug_user:
dialog = dialogs.ConfirmationDialog(
_('You are participating in one or more group chats'),
_('Changing your status to invisible will result in '
'disconnection from those group chats. Are you sure you want to '
'go invisible?'))
if dialog.get_response() != gtk.RESPONSE_OK:
self.update_status_combobox()
return
def on_continue(message):
if message is None:
@ -3263,6 +3246,32 @@ class RosterWindow:
self.send_status(account, status, message)
self.update_status_combobox()
if status == 'invisible':
bug_user = False
for account in accounts:
if connected_accounts < 1 or gajim.account_is_connected(account):
if not gajim.config.get_per('accounts', account,
'sync_with_global_status'):
continue
# We're going to change our status to invisible
if self.connected_rooms(account):
bug_user = True
break
if bug_user:
def on_ok():
self.get_status_message(status, on_continue)
def on_cancel():
self.update_status_combobox()
dialog = dialogs.ConfirmationDialog(
_('You are participating in one or more group chats'),
_('Changing your status to invisible will result in '
'disconnection from those group chats. Are you sure you want to '
'go invisible?'), on_reponse_ok=on_ok,
on_response_cancel=on_cancel)
return
self.get_status_message(status, on_continue)
def on_preferences_menuitem_activate(self, widget):