introduce new class for non modal filechooser. atm still blocks

This commit is contained in:
Nikos Kouremenos 2006-04-07 14:23:21 +00:00
parent 81cc6e9a5b
commit d47db39011
2 changed files with 40 additions and 22 deletions

View File

@ -588,6 +588,7 @@ class Dialog(gtk.Dialog):
buttons = self.action_area.get_children() buttons = self.action_area.get_children()
return index < len(buttons) and buttons[index] or None return index < len(buttons) and buttons[index] or None
class HigDialog(gtk.MessageDialog): class HigDialog(gtk.MessageDialog):
def __init__(self, parent, type, buttons, pritext, sectext, def __init__(self, parent, type, buttons, pritext, sectext,
on_response_ok = None, on_response_cancel = None, on_response_yes = None, on_response_ok = None, on_response_cancel = None, on_response_yes = None,
@ -599,29 +600,29 @@ class HigDialog(gtk.MessageDialog):
self.format_secondary_text(sectext) self.format_secondary_text(sectext)
buttons = self.action_area.get_children() buttons = self.action_area.get_children()
possible_response = {gtk.STOCK_OK: on_response_ok, possible_responses = {gtk.STOCK_OK: on_response_ok,
gtk.STOCK_CANCEL: on_response_cancel, gtk.STOCK_YES: on_response_yes, gtk.STOCK_CANCEL: on_response_cancel, gtk.STOCK_YES: on_response_yes,
gtk.STOCK_NO: on_response_no} gtk.STOCK_NO: on_response_no}
for b in buttons: for b in buttons:
for response in possible_response: for response in possible_responses:
if b.get_label() == response: if b.get_label() == response:
if not possible_response[response]: if not possible_responses[response]:
b.connect('clicked', self.just_destroy) b.connect('clicked', self.just_destroy)
elif isinstance(possible_response[response], tuple): elif isinstance(possible_responses[response], tuple):
if len(possible_response[response]) == 1: if len(possible_response[response]) == 1:
b.connect('clicked', possible_response[response][0]) b.connect('clicked', possible_responses[response][0])
else: else:
b.connect('clicked', *possible_response[response]) b.connect('clicked', *possible_responses[response])
else: else:
b.connect('clicked', possible_response[response]) b.connect('clicked', possible_responses[response])
break break
def just_destroy(self, widget): def just_destroy(self, widget):
self.destroy() self.destroy()
def popup(self): def popup(self):
# Give focus to top vbox '''show dialog'''
vb = self.get_children()[0].get_children()[0] vb = self.get_children()[0].get_children()[0] # Give focus to top vbox
vb.set_flags(gtk.CAN_FOCUS) vb.set_flags(gtk.CAN_FOCUS)
vb.grab_focus() vb.grab_focus()
self.show_all() self.show_all()
@ -637,6 +638,26 @@ class HigDialog(gtk.MessageDialog):
self.destroy() self.destroy()
return response return response
class FileChooserDialog(gtk.FileChooserDialog):
'''Non-blocking FileChooser Dialog around gtk.FileChooserDialog'''
def __init__(self, title_text, action, buttons, default_response,
select_multiple, current_folder, on_response_ok = None,
on_response_cancel = None):
gtk.FileChooserDialog.__init__(self, title=title_text,
action=action, buttons=buttons)
self.set_default_response(default_response)
self.set_select_multiple(select_multiple)
if current_folder and os.path.isdir(current_folder):
self.set_current_folder(current_folder)
else:
self.set_current_folder(helpers.get_documents_path())
self.show_all()
class ConfirmationDialog(HigDialog): class ConfirmationDialog(HigDialog):
'''HIG compliant confirmation dialog.''' '''HIG compliant confirmation dialog.'''
def __init__(self, pritext, sectext='', on_response_ok = None, def __init__(self, pritext, sectext='', on_response_ok = None,

View File

@ -5,7 +5,6 @@
## Copyright (C) 2005 ## Copyright (C) 2005
## Dimitur Kirov <dkirov@gmail.com> ## Dimitur Kirov <dkirov@gmail.com>
## Travis Shirk <travis@pobox.com> ## Travis Shirk <travis@pobox.com>
## Norman Rasmussen <norman@rasmussen.co.za>
## Copyright (C) 2004-2005 Vincent Hanquez <tab@snarc.org> ## Copyright (C) 2004-2005 Vincent Hanquez <tab@snarc.org>
## ##
## This program is free software; you can redistribute it and/or modify ## This program is free software; you can redistribute it and/or modify
@ -245,18 +244,16 @@ _('Connection with peer cannot be established.'))
self.tree.get_selection().unselect_all() self.tree.get_selection().unselect_all()
def show_file_send_request(self, account, contact): def show_file_send_request(self, account, contact):
last_send_dir = gajim.config.get('last_send_dir') dialog = dialogs.FileChooserDialog(_('Choose File to Send...'),
dialog = gtk.FileChooserDialog(title=_('Choose File to Send...'), gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL),
action=gtk.FILE_CHOOSER_ACTION_OPEN, gtk.RESPONSE_OK,
buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)) True, # select multiple true as we can select many files to send
butt = dialog.add_button(_('Send'), gtk.RESPONSE_OK) gajim.config.get('last_send_dir'),
butt.set_use_stock(True) )
dialog.set_default_response(gtk.RESPONSE_OK)
dialog.set_select_multiple(True) # we can select many files to send btn = dialog.add_button(_('_Send'), gtk.RESPONSE_OK)
if last_send_dir and os.path.isdir(last_send_dir): btn.set_use_stock(True) # FIXME: add send icon to this button (JUMP_TO)
dialog.set_current_folder(last_send_dir)
else:
dialog.set_current_folder(helpers.get_documents_path())
file_props = {} file_props = {}
while True: while True:
response = dialog.run() response = dialog.run()