1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 """
18 File options, these classes will display a file select widget.
19 """
20
21 import gtk
22 import os
23
24 from screenlets.options import _
25 from base import Option
26
28 """
29 An Option-subclass for string-values that contain filenames. Adds
30 a patterns-attribute that can contain a list of patterns to be shown
31 in the assigned file selection dialog. The show_pixmaps-attribute
32 can be set to True to make the filedialog show all image-types.
33 supported by gtk.Pixmap. If the directory-attributue is true, the
34 dialog will ony allow directories.
35
36 XXX - Some of this doen't yet work, unknown reason.
37 """
38 patterns = [ ( 'All Files', ['*'] ) ]
39 image = False
40 _gtk_file_mode = gtk.FILE_CHOOSER_ACTION_OPEN
41 _opener_title = _("Choose File")
42
44 """When a file is imported from the config."""
45 return strvalue
46
48 """When a file is exported to the config."""
49 return str(value)
50
61
63 """Generate a file opener widget"""
64 dlg = gtk.FileChooserDialog(action=self._gtk_file_mode,
65 buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
66 gtk.STOCK_OPEN, gtk.RESPONSE_OK),
67 )
68 dlg.set_keep_above(True)
69 self.set_filters(dlg)
70 return dlg
71
73 """Add file filters to the dialog widget"""
74 if self.patterns:
75 for filter in self.patterns:
76 fil = gtk.FileFilter()
77 fil.set_name("%s (%s)" % (filter[0], ','.join(filter[1])))
78 for pattern in filter[1]:
79 fil.add_pattern(pattern)
80 dlg.add_filter(fil)
81
83 """Set the file value as required."""
84 self.widget.set_filename(value)
85 self.value = value
86
91
92
94 """Directory is based on file widgets"""
95 _gtk_file_mode = gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER
96 _opener_title = _("Choose Directory")
97
98
100 """Image is based on file widgets"""
101 _opener_title = _("Choose Image")
102
104 """Add the standard pixbug formats"""
105 flt = gtk.FileFilter()
106 flt.add_pixbuf_formats()
107 dlg.set_filter(flt)
108
129
131 """Utililty method to reload preview image"""
132 if filename and os.path.isfile(filename):
133 pb = gtk.gdk.pixbuf_new_from_file_at_size(filename, 64, -1)
134 if pb:
135 img = gtk.Image()
136 img.set_from_pixbuf(pb)
137 return img
138 img = gtk.image_new_from_stock(gtk.STOCK_MISSING_IMAGE,
139 gtk.ICON_SIZE_LARGE_TOOLBAR)
140 img.set_size_request(64, 64)
141 return img
142
144 """Create button"""
145 dlg = gtk.FileChooserDialog(buttons=(gtk.STOCK_CANCEL,
146 gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
147 dlg.set_keep_above(True)
148 dlg.set_filename(self._entry.get_text())
149 prev = gtk.Image()
150 box = gtk.VBox()
151 box.set_size_request(150, -1)
152 box.add(prev)
153 prev.show()
154 dlg.set_preview_widget_active(True)
155 dlg.connect('selection-changed', self.preview_callback, dlg, prev)
156 dlg.set_preview_widget(box)
157 response = dlg.run()
158 if response == gtk.RESPONSE_OK:
159 self._entry.set_text(dlg.get_filename())
160 widget.set_image(self.create_preview(dlg.get_filename()))
161 self.has_changed(self.widget)
162 dlg.destroy()
163
165 """add preview widget to filechooser"""
166 fname = dlg.get_preview_filename()
167 if fname and os.path.isfile(fname):
168 pb = gtk.gdk.pixbuf_new_from_file_at_size(fname, 150, -1)
169 if pb:
170 prev.set_from_pixbuf(pb)
171 dlg.set_preview_widget_active(True)
172 else:
173 dlg.set_preview_widget_active(False)
174
176 """Executed when the widget event kicks off."""
177 self.value = self._entry.get_text()
178 super(FileOption, self).has_changed()
179