import win32ui
import win32con
import win32api
import string

class DIBView:
	def __init__(self,  doc, dib):
		self.dib = dib
		self.view = win32ui.CreateView(doc)
		self.width = self.height = 0
		# set up message handlers
#		self.view.OnPrepareDC = self.OnPrepareDC
		self.view.HookMessage (self.OnSize, win32con.WM_SIZE)

	def OnSize (self, params):
		lParam = params[3]
		self.width = win32api.LOWORD(lParam)
		self.height = win32api.HIWORD(lParam)

	def OnDraw (self, ob, dc):
		# set sizes used for "non strecth" mode.
		self.view.SetScrollSizes(win32con.MM_TEXT, self.dib.GetSize())
		dibSize = self.dib.GetSize()
		dibRect = (0,0,dibSize[0], dibSize[1])
		# stretch BMP.
		#self.dib.Paint(dc, (0,0,self.width, self.height),dibRect)
		# non stretch.
		self.dib.Paint(dc)
	
class DIBDemo:
	def __init__(self, filename, * bPBM):
		# init data members
		f = open(filename, 'rb')
		dib=win32ui.CreateDIBitmap()
		if len(bPBM)>0:
			magic=f.readline()
			if magic <> "P6\n":
				print "The file is not a PBM format file"
				raise "Failed"
			# check magic?
			rowcollist=string.split(f.readline())
			cols=string.atoi(rowcollist[0])
			rows=string.atoi(rowcollist[1])
			f.readline()	# whats this one?
			dib.LoadPBMData(f,(cols,rows))
		else:
			dib.LoadWindowsFormatFile(f)
		f.close()
		# create doc/view
		self.doc = win32ui.CreateDoc()
		self.dibView = DIBView( self.doc, dib )
		self.frame = win32ui.CreateMDIFrame()
		self.frame.LoadFrame()	# this will force OnCreateClient
		self.doc.SetTitle ('DIB Demo')
		self.frame.ShowWindow()
		
		# display the sucka
		self.frame.ActivateFrame()

	def OnCreateClient( self, createparams, context ):
		self.dibView.view.CreateWindow(self.frame)
		return 1
	
