12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- # frame.py - The MDI frame window for an editor.
- import pywin.framework.window
- import win32ui
- import win32con
- import afxres
- import ModuleBrowser
- class EditorFrame(pywin.framework.window.MDIChildWnd):
- def OnCreateClient(self, cp, context):
- # Create the default view as specified by the template (ie, the editor view)
- view = context.template.MakeView(context.doc)
- # Create the browser view.
- browserView = ModuleBrowser.BrowserView(context.doc)
- view2 = context.template.MakeView(context.doc)
- splitter = win32ui.CreateSplitter()
- style = win32con.WS_CHILD | win32con.WS_VISIBLE
- splitter.CreateStatic (self, 1, 2, style, win32ui.AFX_IDW_PANE_FIRST)
- sub_splitter = self.sub_splitter = win32ui.CreateSplitter()
- sub_splitter.CreateStatic (splitter, 2, 1, style, win32ui.AFX_IDW_PANE_FIRST+1)
- # Note we must add the default view first, so that doc.GetFirstView() returns the editor view.
- sub_splitter.CreateView(view, 1, 0, (0,0))
- splitter.CreateView (browserView, 0, 0, (0,0))
- sub_splitter.CreateView(view2,0, 0, (0,0))
- ## print "First view is", context.doc.GetFirstView()
- ## print "Views are", view, view2, browserView
- ## print "Parents are", view.GetParent(), view2.GetParent(), browserView.GetParent()
- ## print "Splitter is", splitter
- ## print "sub splitter is", sub_splitter
- ## Old
- ## splitter.CreateStatic (self, 1, 2)
- ## splitter.CreateView(view, 0, 1, (0,0)) # size ignored.
- ## splitter.CreateView (browserView, 0, 0, (0, 0))
- # Restrict the size of the browser splitter (and we can avoid filling
- # it until it is shown)
- splitter.SetColumnInfo(0, 10, 20)
- # And the active view is our default view (so it gets initial focus)
- self.SetActiveView(view)
- def GetEditorView(self):
- # In a multi-view (eg, splitter) environment, get
- # an editor (ie, scintilla) view
- # Look for the splitter opened the most!
- if self.sub_splitter is None:
- return self.GetDlgItem(win32ui.AFX_IDW_PANE_FIRST)
- v1 = self.sub_splitter.GetPane(0,0)
- v2 = self.sub_splitter.GetPane(1,0)
- r1 = v1.GetWindowRect()
- r2 = v2.GetWindowRect()
- if r1[3]-r1[1] > r2[3]-r2[1]:
- return v1
- return v2
- def GetBrowserView(self):
- # XXX - should fix this :-)
- return self.GetActiveDocument().GetAllViews()[1]
- def OnClose(self):
- doc=self.GetActiveDocument()
- if not doc.SaveModified():
- ## Cancel button selected from Save dialog, do not actually close
- ## print 'close cancelled'
- return 0
- ## So the 'Save' dialog doesn't come up twice
- doc._obj_.SetModifiedFlag(False)
- # Must force the module browser to close itself here (OnDestroy for the view itself is too late!)
- self.sub_splitter = None # ensure no circles!
- self.GetBrowserView().DestroyBrowser()
- return self._obj_.OnClose()
-
|