# Test List module. # Draw a window with all the files in the current folder. # double-clicking will change folder. # # This test expects Win, Evt and FrameWork (and anything used by those) # to work. # # Actually, it is more a test of FrameWork by now.... from FrameWork import * from Carbon import Win from Carbon import Qd from Carbon import List from Carbon import Lists import os class ListWindow(Window): def open(self, name, where): self.where = where r = (40, 40, 400, 300) w = Win.NewWindow(r, name, 1, 0, -1, 1, 0x55555555) r2 = (0, 0, 345, 245) Qd.SetPort(w) self.wid = w self.list = List.LNew(r2, (0, 0, 1, 1), (0,0), 0, w, 0, 1, 1, 1) self.list.selFlags = Lists.lOnlyOne self.filllist() w.DrawGrowIcon() self.do_postopen() def do_activate(self, onoff, evt): self.list.LActivate(onoff) def do_update(self, *args): self.list.LUpdate(self.wid.GetWindowPort().visRgn) def do_contentclick(self, local, modifiers, evt): dclick = self.list.LClick(local, modifiers) if dclick: h, v = self.list.LLastClick() file = self.list.LGetCell(1000, (h, v)) self.where = os.path.join(self.where, file) self.filllist() def filllist(self): """Fill the list with the contents of the current directory""" l = self.list l.LSetDrawingMode(0) l.LDelRow(0, 0) contents = os.listdir(self.where) l.LAddRow(len(contents), 0) for i in range(len(contents)): l.LSetCell(contents[i], (0, i)) l.LSetDrawingMode(1) l.LUpdate(self.wid.GetWindowPort().visRgn) class TestList(Application): def __init__(self): Application.__init__(self) self.num = 0 self.listoflists = [] def makeusermenus(self): self.filemenu = m = Menu(self.menubar, "File") self.newitem = MenuItem(m, "New window...", "O", self.open) self.quititem = MenuItem(m, "Quit", "Q", self.quit) def open(self, *args): import macfs fss, ok = macfs.GetDirectory() if not ok: return w = ListWindow(self) w.open('Window %d'%self.num, fss.as_pathname()) self.num = self.num + 1 self.listoflists.append(w) def quit(self, *args): raise self def do_about(self, id, item, window, event): EasyDialogs.Message("""Test the List Manager interface. Simple inward-only folder browser""") def main(): App = TestList() App.mainloop() if __name__ == '__main__': main()