72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
|
import win32ui
|
||
|
import win32con
|
||
|
import fontdemo
|
||
|
from pywin.mfc import window, docview
|
||
|
import commctrl
|
||
|
|
||
|
# derive from CMDIChild. This does much work for us.
|
||
|
|
||
|
class SplitterFrame(window.MDIChildWnd):
|
||
|
def __init__(self):
|
||
|
# call base CreateFrame
|
||
|
self.images = None
|
||
|
window.MDIChildWnd.__init__(self)
|
||
|
|
||
|
def OnCreateClient(self, cp, context):
|
||
|
splitter = win32ui.CreateSplitter()
|
||
|
doc = context.doc
|
||
|
frame_rect = self.GetWindowRect()
|
||
|
size = ((frame_rect[2] - frame_rect[0]),
|
||
|
(frame_rect[3] - frame_rect[1])//2)
|
||
|
sub_size = (size[0]//2, size[1])
|
||
|
splitter.CreateStatic (self, 2, 1)
|
||
|
self.v1 = win32ui.CreateEditView(doc)
|
||
|
self.v2 = fontdemo.FontView(doc)
|
||
|
# CListControl view
|
||
|
self.v3 = win32ui.CreateListView(doc)
|
||
|
sub_splitter = win32ui.CreateSplitter()
|
||
|
# pass "splitter" so each view knows how to get to the others
|
||
|
sub_splitter.CreateStatic (splitter, 1, 2)
|
||
|
sub_splitter.CreateView(self.v1, 0, 0, (sub_size))
|
||
|
sub_splitter.CreateView(self.v2, 0, 1, (0,0)) # size ignored.
|
||
|
splitter.SetRowInfo(0, size[1] ,0)
|
||
|
splitter.CreateView (self.v3, 1, 0, (0,0)) # size ignored.
|
||
|
# Setup items in the imagelist
|
||
|
self.images = win32ui.CreateImageList(32,32,1,5,5)
|
||
|
self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_MAINFRAME))
|
||
|
self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_PYTHONCONTYPE))
|
||
|
self.images.Add(win32ui.GetApp().LoadIcon(win32ui.IDR_TEXTTYPE))
|
||
|
self.v3.SetImageList(self.images, commctrl.LVSIL_NORMAL)
|
||
|
self.v3.InsertItem(0, "Icon 1", 0)
|
||
|
self.v3.InsertItem(0, "Icon 2", 1)
|
||
|
self.v3.InsertItem(0, "Icon 3", 2)
|
||
|
# self.v3.Arrange(commctrl.LVA_DEFAULT) Hmmm - win95 aligns left always???
|
||
|
return 1
|
||
|
def OnDestroy(self, msg):
|
||
|
window.MDIChildWnd.OnDestroy(self, msg)
|
||
|
if self.images:
|
||
|
self.images.DeleteImageList()
|
||
|
self.images = None
|
||
|
|
||
|
def InitialUpdateFrame(self, doc, makeVisible):
|
||
|
self.v1.ReplaceSel("Hello from Edit Window 1")
|
||
|
self.v1.SetModifiedFlag(0)
|
||
|
|
||
|
class SampleTemplate(docview.DocTemplate):
|
||
|
def __init__(self):
|
||
|
docview.DocTemplate.__init__(self, win32ui.IDR_PYTHONTYPE, None, SplitterFrame, None)
|
||
|
def InitialUpdateFrame(self, frame, doc, makeVisible):
|
||
|
# print "frame is ", frame, frame._obj_
|
||
|
# print "doc is ", doc, doc._obj_
|
||
|
self._obj_.InitialUpdateFrame(frame, doc, makeVisible) # call default handler.
|
||
|
frame.InitialUpdateFrame(doc, makeVisible)
|
||
|
|
||
|
def demo():
|
||
|
template = SampleTemplate()
|
||
|
doc=template.OpenDocumentFile(None)
|
||
|
doc.SetTitle("Splitter Demo")
|
||
|
|
||
|
if __name__=='__main__':
|
||
|
import demoutils
|
||
|
if demoutils.NeedGoodGUI():
|
||
|
demo()
|