codekingpro/portable-devtools
114k
1import commctrl2import fontdemo3import win32ui4from pywin.mfc import docview, window5 6# derive from CMDIChild. This does much work for us.7 8 9class SplitterFrame(window.MDIChildWnd):10 def __init__(self):11 # call base CreateFrame12 self.images = None13 window.MDIChildWnd.__init__(self)14 15 def OnCreateClient(self, cp, context):16 splitter = win32ui.CreateSplitter()17 doc = context.doc18 frame_rect = self.GetWindowRect()19 size = ((frame_rect[2] - frame_rect[0]), (frame_rect[3] - frame_rect[1]) // 2)20 sub_size = (size[0] // 2, size[1])21 splitter.CreateStatic(self, 2, 1)22 self.v1 = win32ui.CreateEditView(doc)23 self.v2 = fontdemo.FontView(doc)24 # CListControl view25 self.v3 = win32ui.CreateListView(doc)26 sub_splitter = win32ui.CreateSplitter()27 # pass "splitter" so each view knows how to get to the others28 sub_splitter.CreateStatic(splitter, 1, 2)29 sub_splitter.CreateView(self.v1, 0, 0, (sub_size))30 sub_splitter.CreateView(self.v2, 0, 1, (0, 0)) # size ignored.31 splitter.SetRowInfo(0, size[1], 0)32 splitter.CreateView(self.v3, 1, 0, (0, 0)) # size ignored.33 # Setup items in the imagelist34 self.images = win32ui.CreateImageList(32, 32, 1, 5, 5)35 self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_MAINFRAME))36 self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_PYTHONCONTYPE))37 self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_TEXTTYPE))38 self.v3.SetImageList(self.images, commctrl.LVSIL_NORMAL)39 self.v3.InsertItem(0, "Icon 1", 0)40 self.v3.InsertItem(0, "Icon 2", 1)41 self.v3.InsertItem(0, "Icon 3", 2)42 # self.v3.Arrange(commctrl.LVA_DEFAULT) Hmmm - win95 aligns left always???43 return 144 45 def OnDestroy(self, msg):46 window.MDIChildWnd.OnDestroy(self, msg)47 if self.images:48 self.images.DeleteImageList()49 self.images = None50 51 def InitialUpdateFrame(self, doc, makeVisible):52 self.v1.ReplaceSel("Hello from Edit Window 1")53 self.v1.SetModifiedFlag(0)54 55 56class SampleTemplate(docview.DocTemplate):57 def __init__(self):58 docview.DocTemplate.__init__(59 self, win32ui.IDR_PYTHONTYPE, None, SplitterFrame, None60 )61 62 def InitialUpdateFrame(self, frame, doc, makeVisible):63 # print "frame is ", frame, frame._obj_64 # print "doc is ", doc, doc._obj_65 self._obj_.InitialUpdateFrame(frame, doc, makeVisible) # call default handler.66 frame.InitialUpdateFrame(doc, makeVisible)67 68 69def demo():70 template = SampleTemplate()71 doc = template.OpenDocumentFile(None)72 doc.SetTitle("Splitter Demo")73 74 75if __name__ == "__main__":76 import demoutils77 78 if demoutils.NeedGoodGUI():79 demo()80 