Mercurial > urwid-satext
comparison frontends/primitivus/files_management.py @ 21:96a2c5904e35
Primitivus: send_file first draft
- a new dialog for choosing a file is work in progress
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 12 Aug 2010 23:09:31 +0800 |
parents | |
children | de305d93a503 |
comparison
equal
deleted
inserted
replaced
20:333a62fab0e3 | 21:96a2c5904e35 |
---|---|
1 #!/usr/bin/python | |
2 # -*- coding: utf-8 -*- | |
3 | |
4 """ | |
5 Primitivus: a SAT frontend | |
6 Copyright (C) 2009, 2010 Jérôme Poisson (goffi@goffi.org) | |
7 | |
8 This program is free software: you can redistribute it and/or modify | |
9 it under the terms of the GNU General Public License as published by | |
10 the Free Software Foundation, either version 3 of the License, or | |
11 (at your option) any later version. | |
12 | |
13 This program is distributed in the hope that it will be useful, | |
14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 GNU General Public License for more details. | |
17 | |
18 You should have received a copy of the GNU General Public License | |
19 along with this program. If not, see <http://www.gnu.org/licenses/>. | |
20 """ | |
21 | |
22 import urwid | |
23 import custom_widgets | |
24 from tools.jid import JID | |
25 import os, os.path | |
26 from xml.dom import minidom | |
27 from logging import debug, info, error | |
28 | |
29 class PathEdit(custom_widgets.AdvancedEdit): | |
30 | |
31 def keypress(self, size, key): | |
32 if key == 'ctrl w': | |
33 if self.edit_pos<2: | |
34 return | |
35 before = self.edit_text[:self.edit_pos] | |
36 pos = (before[:-1] if before.endswith('/') else before).rfind("/")+1 | |
37 self.set_edit_text(before[:pos] + self.edit_text[self.edit_pos:]) | |
38 self.set_edit_pos(pos) | |
39 return | |
40 else: | |
41 return super(PathEdit, self).keypress(size, key) | |
42 | |
43 class FileDialog(urwid.WidgetWrap): | |
44 | |
45 def __init__(self,title=_("Please select a file")): | |
46 self.__home_path = os.path.expanduser('~') | |
47 self.path_wid = PathEdit(_('Path: '), os.getcwdu()) | |
48 urwid.connect_signal(self.path_wid, 'change', self.onPathChange) | |
49 header = urwid.Pile([self.path_wid, urwid.Divider(u'─')]) | |
50 bookm_list = urwid.SimpleListWalker([]) | |
51 self.bookmarks = list(self.getBookmarks()) | |
52 self.bookmarks.sort() | |
53 for bookmark in self.bookmarks: | |
54 if bookmark.startswith(self.__home_path): | |
55 bookmark="~"+bookmark[len(self.__home_path):] | |
56 book_wid = custom_widgets.ClickableText(bookmark) | |
57 urwid.connect_signal(book_wid, 'click', self.onBookmarkSelected) | |
58 bookm_list.append(book_wid) | |
59 bookm_wid = urwid.Frame(urwid.ListBox(bookm_list), urwid.AttrMap(urwid.Text(_('Bookmarks'),'center'),'title')) | |
60 self.files_list = urwid.SimpleListWalker([urwid.Text('toto.mkv')]) | |
61 files_wid = urwid.ListBox(self.files_list) | |
62 center_row = urwid.Columns([('weight',2,bookm_wid), | |
63 ('weight',8,custom_widgets.VerticalSeparator(files_wid))]) | |
64 main_frame = custom_widgets.FocusFrame(center_row, header) | |
65 decorated = custom_widgets.LabelLine(main_frame, custom_widgets.SurroundedText(title)) | |
66 urwid.WidgetWrap.__init__(self, decorated) | |
67 | |
68 def getBookmarks(self): | |
69 gnome_bookm = os.path.expanduser("~/.gtk-bookmarks") | |
70 kde_bookm = os.path.expanduser("~/.kde/share/apps/kfileplaces/bookmarks.xm") | |
71 bookmarks = set() | |
72 try: | |
73 with open(gnome_bookm) as gnome_fd: | |
74 for bm in gnome_fd.readlines(): | |
75 if bm.startswith("file:///"): | |
76 bookmarks.add(bm[7:].replace('\n','')) | |
77 except IOError: | |
78 info(_('No Gnome bookmarks file found')) | |
79 pass | |
80 | |
81 try: | |
82 dom = minidom.parse(kde_bookm) | |
83 for elem in getElementsByTagName('bookmark'): | |
84 bm = elem.getAttribute("href") | |
85 if bm.startswith("file:///"): | |
86 bookmarks.add(bm[7:]) | |
87 except IOError: | |
88 info(_('No KDE bookmarks file found')) | |
89 pass | |
90 | |
91 return bookmarks | |
92 | |
93 def onBookmarkSelected(self, button): | |
94 self.path_wid.set_edit_text(os.path.expanduser(button.get_text())) | |
95 | |
96 def onPathChange(self, edit, text): | |
97 if os.path.isdir(text): | |
98 del self.files_list[:] | |
99 files = os.listdir(text) | |
100 files.sort() | |
101 self.files_list.extend([custom_widgets.ClickableText(filename) for filename in files]) |