# A demo which creates a view and a frame which displays a PPM format bitmap
#
# This hasnnt been run in a while, as I dont have many of that format around!
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 ValueError("Failed - The file is not a PBM format file")
            # check magic?
            rowcollist = f.readline().split()
            cols = int(rowcollist[0])
            rows = int(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


if __name__ == "__main__":
    import demoutils

    demoutils.NotAScript()
