| # DirList -- Directory Listing widget |
| |
| # XXX Displays messy paths when following '..' |
| |
| import os |
| import stdwin, rect |
| from stdwinevents import * |
| from Buttons import PushButton |
| from WindowParent import WindowParent |
| from HVSplit import HSplit, VSplit |
| |
| class DirList(VSplit): |
| # |
| def create(self, parent, dirname): |
| self = VSplit.create(self, parent) |
| names = os.listdir(dirname) |
| for name in names: |
| if os.path.isdir(os.path.join(dirname, name)): |
| fullname = os.path.join(dirname, name) |
| btn = SubdirButton().definetext(self, fullname) |
| elif name[-3:] == '.py': |
| btn = ModuleButton().definetext(self, name) |
| else: |
| btn = FileButton().definetext(self, name) |
| return self |
| # |
| |
| class DirListWindow(WindowParent): |
| # |
| def create(self, dirname): |
| self = WindowParent.create(self, (dirname, (0, 0))) |
| child = DirList().create(self, dirname) |
| self.realize() |
| return self |
| # |
| |
| class SubdirButton(PushButton): |
| # |
| def drawpict(self, d): |
| PushButton.drawpict(self, d) |
| d.box(rect.inset(self.bounds, (3, 1))) |
| # |
| def up_trigger(self): |
| window = DirListWindow().create(self.text) |
| # |
| |
| class FileButton(PushButton): |
| # |
| def up_trigger(self): |
| stdwin.fleep() |
| # |
| |
| class ModuleButton(FileButton): |
| # |
| def drawpict(self, d): |
| PushButton.drawpict(self, d) |
| d.box(rect.inset(self.bounds, (1, 3))) |
| # |