flowblok / Presenter (http://flowblok.selfip.net:8001/trac/presenter)
The presentation tool for control freaks.
Clone this repository (size: 380.5 KB): HTTPS / SSH
$ hg clone http://bitbucket.org/flowblok/presenter/
| commit 195: | ec402216ed73 |
| parent 194: | 4d5e9a0fcd78 |
| branch: | default |
Started on image folder handler.
Changed (Δ1.2 KB):
raw changeset »
presenter/handlers/__init__.py (6 lines added, 2 lines removed)
presenter/handlers/base.py (1 lines added, 0 lines removed)
presenter/interface.glade (8 lines added, 0 lines removed)
presenter/utils/__init__.py (21 lines added, 2 lines removed)
Up to file-list presenter/handlers/__init__.py:
| … | … | @@ -4,6 +4,8 @@ Package for file handlers for presenter. |
4 |
4 |
|
5 |
5 |
from collections import defaultdict |
6 |
6 |
|
7 |
from presenter.handlers.base import FileHandler |
|
8 |
||
7 |
9 |
FILE_HANDLERS = {} |
8 |
10 |
MIME_HANDLERS = defaultdict(list) |
9 |
11 |
|
| … | … | @@ -14,6 +16,7 @@ handlers = { |
14 |
16 |
'lyrics_handler': 'LyricsFileHandler', |
15 |
17 |
'message_handler': 'MessageHandler', |
16 |
18 |
'image_handler': 'ImageFileHandler', |
19 |
'image_folder_handler': 'ImageFolderHandler', |
|
17 |
20 |
} |
18 |
21 |
|
19 |
22 |
for module, handler_name in handlers.iteritems(): |
| … | … | @@ -28,6 +31,7 @@ for module, handler_name in handlers.ite |
28 |
31 |
handler = getattr(items, handler_name) |
29 |
32 |
|
30 |
33 |
FILE_HANDLERS[handler.handler_name] = handler |
31 |
for mime in handler.mime_types: |
|
32 |
MIME_HANDLERS[mime].append(handler) |
|
34 |
if isinstance(handler, FileHandler): |
|
35 |
for mime in handler.mime_types: |
|
36 |
MIME_HANDLERS[mime].append(handler) |
|
33 |
37 |
Up to file-list presenter/handlers/base.py:
| … | … | @@ -63,6 +63,7 @@ class Handler(gobject.GObject): |
63 |
63 |
attrs.update(properties) |
64 |
64 |
|
65 |
65 |
cls = gobject.GObjectMeta.__new__(meta, name, bases, attrs) |
66 |
gobject.type_register(cls) |
|
66 |
67 |
|
67 |
68 |
for key in properties: |
68 |
69 |
# create signals |
Up to file-list presenter/interface.glade:
273 |
273 |
</object> |
274 |
274 |
</child> |
275 |
275 |
<child> |
276 |
<object class="GtkMenuItem" id="menuitem_image_folder"> |
|
277 |
<property name="visible">True</property> |
|
278 |
<property name="label" translatable="yes">Image Folder</property> |
|
279 |
<property name="use_underline">True</property> |
|
280 |
<signal name="activate" handler="on_handler_add"/> |
|
281 |
</object> |
|
282 |
</child> |
|
283 |
<child> |
|
276 |
284 |
<object class="GtkMenuItem" id="menuitem_video"> |
277 |
285 |
<property name="visible">True</property> |
278 |
286 |
<property name="label" translatable="yes">Video</property> |
Up to file-list presenter/utils/__init__.py:
| … | … | @@ -2,6 +2,25 @@ import gtk |
2 |
2 |
import gobject |
3 |
3 |
import pango |
4 |
4 |
|
5 |
def open_folder(title=None): |
|
6 |
dialog = gtk.FileChooserDialog( |
|
7 |
action=gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, |
|
8 |
buttons=( |
|
9 |
gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, |
|
10 |
gtk.STOCK_OPEN, gtk.RESPONSE_OK |
|
11 |
) |
|
12 |
) |
|
13 |
||
14 |
if title: |
|
15 |
dialog.set_title(title) |
|
16 |
||
17 |
# Run the dialog. |
|
18 |
uri = None |
|
19 |
if dialog.run() == gtk.RESPONSE_OK: |
|
20 |
uri = dialog.get_uri() |
|
21 |
dialog.destroy() |
|
22 |
return uri |
|
23 |
||
5 |
24 |
def open_file(title=None, filters=None): |
6 |
25 |
if filters is None: |
7 |
26 |
filters = () |
| … | … | @@ -29,10 +48,10 @@ def open_file(title=None, filters=None): |
29 |
48 |
|
30 |
49 |
def save_file(title=None): |
31 |
50 |
dialog = gtk.FileChooserDialog( |
32 |
action=gtk.FILE_CHOOSER_ACTION_ |
|
51 |
action=gtk.FILE_CHOOSER_ACTION_SAVE, |
|
33 |
52 |
buttons=( |
34 |
53 |
gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, |
35 |
gtk.STOCK_ |
|
54 |
gtk.STOCK_SAVE, gtk.RESPONSE_OK |
|
36 |
55 |
) |
37 |
56 |
) |
38 |
57 |
if title: |
