1"""browsepict - Display all "PICT" resources found""" 2 3import FrameWork 4import EasyDialogs 5from Carbon import Res 6from Carbon import Qd 7from Carbon import Win 8from Carbon import List 9import struct 10import macresource 11 12# 13# Resource definitions 14ID_MAIN=512 15MAIN_LIST=1 16MAIN_SHOW=2 17 18# Where is the picture window? 19LEFT=200 20TOP=64 21 22def main(): 23 macresource.need('DLOG', ID_MAIN, "oldPICTbrowse.rsrc") 24 PICTbrowse() 25 26class PICTbrowse(FrameWork.Application): 27 def __init__(self): 28 # First init menus, etc. 29 FrameWork.Application.__init__(self) 30 # Next create our dialog 31 self.main_dialog = MyDialog(self) 32 # Now open the dialog 33 contents = self.findPICTresources() 34 self.main_dialog.open(ID_MAIN, contents) 35 # Finally, go into the event loop 36 self.mainloop() 37 38 def makeusermenus(self): 39 self.filemenu = m = FrameWork.Menu(self.menubar, "File") 40 self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit) 41 42 def quit(self, *args): 43 self._quit() 44 45 def showPICT(self, resid): 46 w = PICTwindow(self) 47 w.open(resid) 48 #EasyDialogs.Message('Show PICT %r' % (resid,)) 49 50 def findPICTresources(self): 51 num = Res.CountResources('PICT') 52 rv = [] 53 for i in range(1, num+1): 54 Res.SetResLoad(0) 55 try: 56 r = Res.GetIndResource('PICT', i) 57 finally: 58 Res.SetResLoad(1) 59 id, type, name = r.GetResInfo() 60 rv.append((id, name)) 61 return rv 62 63class PICTwindow(FrameWork.Window): 64 def open(self, (resid, resname)): 65 if not resname: 66 resname = '#%r' % (resid,) 67 self.resid = resid 68 picture = Qd.GetPicture(self.resid) 69 # Get rect for picture 70 print repr(picture.data[:16]) 71 sz, t, l, b, r = struct.unpack('hhhhh', picture.data[:10]) 72 print 'pict:', t, l, b, r 73 width = r-l 74 height = b-t 75 if width < 64: width = 64 76 elif width > 480: width = 480 77 if height < 64: height = 64 78 elif height > 320: height = 320 79 bounds = (LEFT, TOP, LEFT+width, TOP+height) 80 print 'bounds:', bounds 81 82 self.wid = Win.NewWindow(bounds, resname, 1, 0, -1, 1, 0) 83 self.wid.SetWindowPic(picture) 84 self.do_postopen() 85 86class MyDialog(FrameWork.DialogWindow): 87 "Main dialog window for PICTbrowse" 88 89 def open(self, id, contents): 90 self.id = id 91 FrameWork.DialogWindow.open(self, ID_MAIN) 92 self.dlg.SetDialogDefaultItem(MAIN_SHOW) 93 tp, h, rect = self.dlg.GetDialogItem(MAIN_LIST) 94 rect2 = rect[0]+1, rect[1]+1, rect[2]-17, rect[3]-17 # Scroll bar space 95 self.list = List.LNew(rect2, (0, 0, 1, len(contents)), (0,0), 0, self.wid, 96 0, 1, 1, 1) 97 self.contents = contents 98 self.setlist() 99 100 def setlist(self): 101 self.list.LDelRow(0, 0) 102 self.list.LSetDrawingMode(0) 103 if self.contents: 104 self.list.LAddRow(len(self.contents), 0) 105 for i in range(len(self.contents)): 106 v = repr(self.contents[i][0]) 107 if self.contents[i][1]: 108 v = v + '"' + self.contents[i][1] + '"' 109 self.list.LSetCell(v, (0, i)) 110 self.list.LSetDrawingMode(1) 111 self.list.LUpdate(self.wid.GetWindowPort().visRgn) 112 113 def do_listhit(self, event): 114 (what, message, when, where, modifiers) = event 115 Qd.SetPort(self.wid) 116 where = Qd.GlobalToLocal(where) 117 print 'LISTHIT', where 118 if self.list.LClick(where, modifiers): 119 self.do_show() 120 121 def getselection(self): 122 items = [] 123 point = (0,0) 124 while 1: 125 ok, point = self.list.LGetSelect(1, point) 126 if not ok: 127 break 128 items.append(point[1]) 129 point = point[0], point[1]+1 130 values = [] 131 for i in items: 132 values.append(self.contents[i]) 133 return values 134 135 def do_show(self, *args): 136 selection = self.getselection() 137 for resid in selection: 138 self.parent.showPICT(resid) 139 140 def do_rawupdate(self, window, event): 141 tp, h, rect = self.dlg.GetDialogItem(MAIN_LIST) 142 Qd.SetPort(self.wid) 143 Qd.FrameRect(rect) 144 self.list.LUpdate(self.wid.GetWindowPort().visRgn) 145 146 def do_activate(self, activate, event): 147 self.list.LActivate(activate) 148 149 def do_close(self): 150 self.close() 151 152 def do_itemhit(self, item, event): 153 if item == MAIN_LIST: 154 self.do_listhit(event) 155 if item == MAIN_SHOW: 156 self.do_show() 157 158main() 159