| # 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))) | |
| # |