/GUI/Gtk/BaseFileDialogs.py
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