PageRenderTime 43ms CodeModel.GetById 22ms app.highlight 19ms RepoModel.GetById 0ms app.codeStats 0ms

/GUI/Gtk/BaseFileDialogs.py

https://bitbucket.org/alsh/pygui-mirror
Python | 214 lines | 87 code | 24 blank | 103 comment | 26 complexity | f015fb090042b95359b0b3fe6a1a6d1d MD5 | raw file
  1#
  2#   Python GUI - File selection dialogs - Gtk
  3#
  4
  5import os
  6import gtk
  7from Files import FileRef
  8from AlertFunctions import confirm
  9from Applications import application
 10
 11#------------------------------------------------------------------
 12
 13class _FileDialog(gtk.FileChooserDialog):
 14
 15    def __init__(self, ok_label, **kwds):
 16        gtk.FileChooserDialog.__init__(self, **kwds)
 17        self.add_button(gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT)
 18        self.add_button(ok_label, gtk.RESPONSE_ACCEPT)
 19        self.connect('response', self.response)
 20        self.set_default_size(600, 600)
 21        self.set_position(gtk.WIN_POS_CENTER)
 22
 23    def add_file_type(self, file_type):
 24        suffix = file_type.suffix
 25        if suffix:
 26            filter = gtk.FileFilter()
 27            name = file_type.name
 28            if name:
 29                filter.set_name(name)
 30            filter.add_pattern("*.%s" % suffix)
 31            self.add_filter(filter)
 32
 33    def present_modally(self):
 34        return self.run() == gtk.RESPONSE_ACCEPT
 35
 36    def response(self, _, id):
 37        #print "_FileDialog.response:", id ###
 38        if id == gtk.RESPONSE_ACCEPT:
 39            if not self.check():
 40                self.stop_emission('response')
 41    
 42    def check(self):
 43        return True
 44
 45#------------------------------------------------------------------
 46
 47class _SaveFileDialog(_FileDialog):
 48    
 49    def check(self):
 50        path = self.get_filename()
 51        #print "_SaveFileDialog.ok: checking path %r" % path ###
 52        #if path is None:
 53        #	return False
 54        if not os.path.exists(path):
 55            return True
 56        else:
 57            result = confirm("Replace existing '%s'?" % os.path.basename(path),
 58                "Cancel", "Replace", cancel = None)
 59            return result == 0
 60
 61#------------------------------------------------------------------
 62
 63def _request_old(prompt, default_dir, file_types, dir, multiple):
 64
 65    if prompt.endswith(":"):
 66        prompt = prompt[:-1]
 67    if dir:
 68        action = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER
 69    else:
 70        action = gtk.FILE_CHOOSER_ACTION_OPEN
 71    dlog = _FileDialog(title = prompt, action = action,
 72        ok_label = gtk.STOCK_OPEN)
 73    dlog.set_select_multiple(multiple)
 74    if file_types:
 75        for file_type in file_types:
 76            dlog.add_file_type(file_type)
 77    if default_dir:
 78        dlog.set_current_folder(default_dir.path)
 79    if dlog.present_modally():
 80        if multiple:
 81            result = [FileRef(path = path) for path in dlog.get_filenames()]
 82        else:
 83            result = FileRef(path = dlog.get_filename())
 84    else:
 85        result = None
 86    dlog.destroy()
 87    return result
 88
 89#------------------------------------------------------------------
 90
 91#def request_old_file(prompt = "Open File", default_dir = None,
 92#		file_types = None, multiple = False):
 93#	"""Present a dialog for selecting an existing file or set of files.
 94#	Returns a FileRef, or None if cancelled."""
 95#	
 96#	if prompt.endswith(":"):
 97#		prompt = prompt[:-1]
 98#	dlog = _FileDialog(title = prompt, ok_label = gtk.STOCK_OPEN)
 99#	dlog.set_select_multiple(multiple)
100#	if file_types:
101#		for file_type in file_types:
102#			dlog.add_file_type(file_type)
103#	if default_dir:
104#		dlog.set_current_folder(default_dir.path)
105#	if dlog.present_modally():
106#		if multiple:
107#			result = [FileRef(path = path) for path in dlog.get_filenames()]
108#		else:
109#			result = FileRef(path = dlog.get_filename())
110#	else:
111#		result = None
112#	dlog.destroy()
113#	return result
114  
115#------------------------------------------------------------------
116
117#def request_old_directory(prompt = "Choose Folder", default_dir = None,
118#		multiple = False):
119#	"""Present a dialog for selecting an existing directory or set of directories.
120#	Returns a DirRef, or None if cancelled."""
121#	
122#	if prompt.endswith(":"):
123#		prompt = prompt[:-1]
124#	dlog = _FileDialog(title = prompt, ok_label = gtk.STOCK_OPEN,
125#		action = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER)
126#	dlog.set_select_multiple(multiple)
127#	if default_dir:
128#		dlog.set_current_folder(default_dir.path)
129#	if dlog.present_modally():
130#		if multiple:
131#			result =  [DirRef(path = path) for path in dlog.get_filenames()]
132#		else:
133#			result = DirRef(path = dlog.get_filename())
134#	else:
135#		result = None
136#	dlog.destroy()
137#	return result
138
139#------------------------------------------------------------------
140
141def _request_new(prompt, default_dir, default_name, file_type, dir):
142    if dir:
143        action = gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER
144    else:
145        action = gtk.FILE_CHOOSER_ACTION_SAVE
146    if prompt.endswith(":"):
147        prompt = prompt[:-1]
148    dlog = _SaveFileDialog(title = prompt, action = action,
149        ok_label = gtk.STOCK_SAVE)
150    if file_type:
151        dlog.add_file_type(file_type)
152    if default_dir:
153        dlog.set_current_folder(default_dir.path)
154    if default_name:
155        dlog.set_current_name(default_name)	
156    if dlog.present_modally():
157        path = dlog.get_filename()
158        if file_type:
159            path = file_type._add_suffix(path)
160        result = FileRef(path = path)
161    else:
162        result = None
163    dlog.destroy()
164    return result
165
166#------------------------------------------------------------------
167
168#def request_new_file(prompt = "Save File", default_dir = None,
169#		default_name = "", file_type = None):
170#	"""Present a dialog requesting a name and location for a new file.
171#	Returns a FileRef, or None if cancelled."""
172#
173#	if prompt.endswith(":"):
174#		prompt = prompt[:-1]
175#	dlog = _SaveFileDialog(title = prompt, ok_label = gtk.STOCK_SAVE,
176#		action = gtk.FILE_CHOOSER_ACTION_SAVE)
177#	if file_type:
178#		dlog.add_file_type(file_type)
179#	if default_dir:
180#		dlog.set_current_folder(default_dir.path)
181#	if default_name:
182#		dlog.set_current_name(default_name)	
183#	if dlog.present_modally():
184#		path = dlog.get_filename()
185#		if file_type:
186#			path = file_type._add_suffix(path)
187#		result = FileRef(path = path)
188#	else:
189#		result = None
190#	dlog.destroy()
191#	return result
192
193#------------------------------------------------------------------
194
195#def request_new_directory(prompt = "Create Folder", default_dir = None,
196#		default_name = ""):
197#	"""Present a dialog requesting a name and location for a new directory.
198#	Returns a FileRef, or None if cancelled."""
199#
200#	if prompt.endswith(":"):
201#		prompt = prompt[:-1]
202#	dlog = _SaveFileDialog(title = prompt, ok_label = gtk.STOCK_SAVE,
203#		action = gtk.FILE_CHOOSER_ACTION_CREATE_FOLDER)
204#	if default_dir:
205#		dlog.set_current_folder(default_dir.path)
206#	if default_name:
207#		dlog.set_current_name(default_name)	
208#	if dlog.present_modally():
209#		path = dlog.get_filename()
210#		result = FileRef(path = path)
211#	else:
212#		result = None
213#	dlog.destroy()
214#	return result