1 from HTMLComponent import *
2 from GUIComponent import *
5 from MenuList import MenuList
7 from Tools.Directories import *
32 def FileEntryComponent(name, absolute, isDir = False):
33 res = [ (absolute, isDir) ]
34 res.append((eListboxPythonMultiContent.TYPE_TEXT, 35, 1, 200, 20, 0, RT_HALIGN_LEFT ,name))
36 png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "/extensions/directory.png"))
38 # FIXME: detect file extensions correctly
39 if EXTENSIONS.has_key(name[-3:]):
40 png = loadPNG(resolveFilename(SCOPE_SKIN_IMAGE, "/extensions/" + EXTENSIONS[name[-3:]] + ".png"))
42 res.append((eListboxPythonMultiContent.TYPE_PIXMAP_ALPHATEST, 10, 2, 20, 20, png))
46 class FileList(HTMLComponent, GUIComponent, MenuList):
47 def __init__(self, directory, showDirectories = True, showFiles = True, matchingPattern = None):
48 GUIComponent.__init__(self)
49 self.l = eListboxPythonMultiContent()
51 self.showDirectories = showDirectories
52 self.showFiles = showFiles
53 # example: matching .nfi and .ts files: "^.*\.(nfi|ts)"
54 self.matchingPattern = matchingPattern
55 self.changeDir(directory)
57 self.l.setFont(0, gFont("Regular", 18))
59 def getSelection(self):
60 return self.l.getCurrentSelection()[0]
62 def changeDir(self, directory):
65 directories = os.listdir(directory)
67 if directory != "/" and self.showDirectories:
68 self.list.append(FileEntryComponent(name = "..", absolute = '/'.join(directory.split('/')[:-2]) + '/', isDir = True))
70 if os.path.isdir(directory + x):
71 if self.showDirectories:
72 self.list.append(FileEntryComponent(name = x, absolute = directory + x + "/" , isDir = True))
74 if self.matchingPattern is not None:
75 if re.compile(self.matchingPattern).search(x):
76 self.list.append(FileEntryComponent(name = x, absolute = directory + x , isDir = False))
78 self.list.append(FileEntryComponent(name = x, absolute = directory + x , isDir = False))
80 self.l.setList(self.list)
82 def GUIcreate(self, parent):
83 self.instance = eListbox(parent)
84 self.instance.setContent(self.l)
85 self.instance.setItemHeight(23)