home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / C / Applications / Python 1.4 / Python 1.4 source / Mac / Demo / imgbrowse / imgbrowse.py next >
Encoding:
Python Source  |  1996-10-04  |  3.0 KB  |  120 lines  |  [TEXT/Pyth]

  1. """imgbrowse - Display pictures using img"""
  2.  
  3. import FrameWork
  4. import EasyDialogs
  5. import Res
  6. import Qd
  7. import QuickDraw
  8. import Win
  9. #import List
  10. import sys
  11. import struct
  12. import img
  13. import imgformat
  14. import macfs
  15. import struct
  16. import mac_image
  17.  
  18.  
  19. # Where is the picture window?
  20. LEFT=200
  21. TOP=64
  22. MINWIDTH=64
  23. MINHEIGHT=64
  24. MAXWIDTH=320
  25. MAXHEIGHT=320
  26.  
  27.  
  28. def main():
  29.     print 'hello world'
  30.     imgbrowse()
  31.  
  32. class imgbrowse(FrameWork.Application):
  33.     def __init__(self):
  34.         # First init menus, etc.
  35.         FrameWork.Application.__init__(self)
  36.         self.lastwin = None
  37.         # Finally, go into the event loop
  38.         self.mainloop()
  39.         
  40.     def makeusermenus(self):
  41.         self.filemenu = m = FrameWork.Menu(self.menubar, "File")
  42.         self.openitem = FrameWork.MenuItem(m, "Open...", "O", self.opendoc)
  43.         self.infoitem = FrameWork.MenuItem(m, "Info", "I", self.info)
  44.         self.quititem = FrameWork.MenuItem(m, "Quit", "Q", self.quit)
  45.     
  46.     def quit(self, *args):
  47.         self._quit()
  48.         
  49.     def opendoc(self, *args):
  50.         fss, ok = macfs.StandardGetFile() # Any file type
  51.         if not ok:
  52.             return
  53.         bar = EasyDialogs.ProgressBar('Reading and converting...')
  54.         pathname = fss.as_pathname()
  55.         try:
  56.             rdr = img.reader(imgformat.macrgb16, pathname)
  57.         except img.error, arg:
  58.             EasyDialogs.Message(`arg`)
  59.             return
  60.         w, h = rdr.width, rdr.height
  61.         bar.set(10)
  62.         data = rdr.read()
  63.         del bar
  64.         pixmap = mac_image.mkpixmap(w, h, imgformat.macrgb16, data)
  65.         self.showimg(w, h, pixmap, data)
  66.             
  67.     def showimg(self, w, h, pixmap, data):
  68.         win = imgwindow(self)
  69.         win.open(w, h, pixmap, data)
  70.         self.lastwin = win
  71.  
  72.     def info(self, *args):
  73.         if self.lastwin:
  74.             self.lastwin.info()        
  75.         
  76. class imgwindow(FrameWork.Window):
  77.     def open(self, width, height, pixmap, data):
  78.         self.pixmap = pixmap
  79.         self.data = data
  80.         self.pictrect = (0, 0, width, height)
  81.         bounds = (LEFT, TOP, LEFT+width, TOP+height)
  82.         
  83.         self.wid = Win.NewCWindow(bounds, "Picture", 1, 0, -1, 1, 0)
  84.         self.do_postopen()
  85.         
  86.     def do_update(self, *args):
  87.         pass
  88.         currect = self.fitrect()
  89.         print 'PICT:', self.pictrect
  90.         print 'WIND:', currect
  91.         print 'ARGS:', (self.pixmap, self.wid.GetWindowPort().portBits, self.pictrect,
  92.                 currect, QuickDraw.srcCopy, None)
  93.         self.info()
  94.         Qd.CopyBits(self.pixmap, self.wid.GetWindowPort().portBits, self.pictrect,
  95.                 currect, QuickDraw.srcCopy, None)
  96.         
  97.     def fitrect(self):
  98.         """Return self.pictrect scaled to fit in window"""
  99.         graf = self.wid.GetWindowPort()
  100.         screenrect = graf.portRect
  101.         picwidth = self.pictrect[2] - self.pictrect[0]
  102.         picheight = self.pictrect[3] - self.pictrect[1]
  103.         if picwidth > screenrect[2] - screenrect[0]:
  104.             factor = float(picwidth) / float(screenrect[2]-screenrect[0])
  105.             picwidth = picwidth / factor
  106.             picheight = picheight / factor
  107.         if picheight > screenrect[3] - screenrect[1]:
  108.             factor = float(picheight) / float(screenrect[3]-screenrect[1])
  109.             picwidth = picwidth / factor
  110.             picheight = picheight / factor
  111.         return (screenrect[0], screenrect[1], screenrect[0]+int(picwidth),
  112.                 screenrect[1]+int(picheight))
  113.                 
  114.     def info(self):
  115.         graf = self.wid.GetWindowPort()
  116.         bits = graf.portBits
  117.         mac_image.dumppixmap(bits.pixmap_data)
  118.  
  119. main()
  120.