📄 pydocview.py
字号:
wx.GetApp().GetTopWindow().RemoveNotebookPage(self)
def SetFocus(self):
"""
Activates the current notebook page.
"""
wx.GetApp().GetTopWindow().ActivateNotebookPage(self)
def Activate(self): # Need this in case there are embedded sash windows and such, OnActivate is not getting called
"""
Activates the current view.
"""
# Called by Project Editor
if self._childView:
self._childView.Activate(True)
def GetTitle(self):
"""
Returns the frame's title.
"""
return wx.GetApp().GetTopWindow().GetNotebookPageTitle(self)
def SetTitle(self, title):
"""
Sets the frame's title.
"""
wx.GetApp().GetTopWindow().SetNotebookPageTitle(self, title)
def OnTitleIsModified(self):
"""
Add/remove to the frame's title an indication that the document is dirty.
If the document is dirty, an '*' is appended to the title
"""
title = self.GetTitle()
if title:
if self.GetDocument().IsModified():
if not title.endswith("*"):
title = title + "*"
self.SetTitle(title)
else:
if title.endswith("*"):
title = title[:-1]
self.SetTitle(title)
def ProcessEvent(event):
"""
Processes an event, searching event tables and calling zero or more
suitable event handler function(s). Note that the ProcessEvent
method is called from the wxPython docview framework directly since
wxPython does not have a virtual ProcessEvent function.
"""
if not self._childView or not self._childView.ProcessEvent(event):
if not isinstance(event, wx.CommandEvent) or not self.GetParent() or not self.GetParent().ProcessEvent(event):
return False
else:
return True
else:
return True
def GetDocument(self):
"""
Returns the document associated with this frame.
"""
return self._childDocument
def SetDocument(self, document):
"""
Sets the document for this frame.
"""
self._childDocument = document
def GetView(self):
"""
Returns the view associated with this frame.
"""
return self._childView
def SetView(self, view):
"""
Sets the view for this frame.
"""
self._childView = view
class DocTabbedParentFrame(wx.Frame, DocFrameMixIn, DocMDIParentFrameMixIn):
"""
The DocTabbedParentFrame class provides a default top-level frame for
applications using the document/view framework. This class can only be
used for MDI parent frames that use a tabbed interface.
It cooperates with the wxView, wxDocument, wxDocManager and wxDocTemplate
classes.
"""
def __init__(self, docManager, frame, id, title, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, name = "DocTabbedParentFrame", embeddedWindows = 0, minSize=20):
"""
Constructor. Note that the event table must be rebuilt for the
frame since the EvtHandler is not virtual.
"""
pos, size = self._GetPosSizeFromConfig(pos, size)
wx.Frame.__init__(self, frame, id, title, pos, size, style, name)
# From docview.MDIParentFrame
self._docManager = docManager
wx.EVT_CLOSE(self, self.OnCloseWindow)
wx.EVT_MENU(self, wx.ID_EXIT, self.OnExit)
wx.EVT_MENU_RANGE(self, wx.ID_FILE1, wx.ID_FILE9, self.OnMRUFile)
wx.EVT_MENU(self, wx.ID_NEW, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_OPEN, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_CLOSE_ALL, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_CLOSE, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_REVERT, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_SAVE, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_SAVEAS, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_UNDO, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_REDO, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_PRINT, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_PRINT_SETUP, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_PREVIEW, self.ProcessEvent)
wx.EVT_MENU(self, wx.ID_ABOUT, self.OnAbout)
wx.EVT_UPDATE_UI(self, wx.ID_NEW, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_OPEN, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_CLOSE_ALL, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_CLOSE, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_REVERT, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_SAVE, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_SAVEAS, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_UNDO, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_REDO, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_PRINT, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_PRINT_SETUP, self.ProcessUpdateUIEvent)
wx.EVT_UPDATE_UI(self, wx.ID_PREVIEW, self.ProcessUpdateUIEvent)
# End From docview.MDIParentFrame
self.CreateNotebook()
self._InitFrame(embeddedWindows, minSize)
def _LayoutFrame(self):
"""
Lays out the frame.
"""
wx.LayoutAlgorithm().LayoutFrame(self, self._notebook)
def CreateNotebook(self):
"""
Creates the notebook to use for the tabbed document interface.
"""
if wx.Platform != "__WXMAC__":
self._notebook = wx.Notebook(self, wx.NewId())
else:
self._notebook = wx.Listbook(self, wx.NewId(), style=wx.LB_LEFT)
# self._notebook.SetSizer(wx.NotebookSizer(self._notebook))
if wx.Platform != "__WXMAC__":
wx.EVT_NOTEBOOK_PAGE_CHANGED(self, self._notebook.GetId(), self.OnNotebookPageChanged)
else:
wx.EVT_LISTBOOK_PAGE_CHANGED(self, self._notebook.GetId(), self.OnNotebookPageChanged)
wx.EVT_RIGHT_DOWN(self._notebook, self.OnNotebookRightClick)
wx.EVT_MIDDLE_DOWN(self._notebook, self.OnNotebookMiddleClick)
# wxBug: wx.Listbook does not implement HitTest the same way wx.Notebook
# does, so for now don't fire MouseOver events.
if wx.Platform != "__WXMAC__":
wx.EVT_MOTION(self._notebook, self.OnNotebookMouseOver)
templates = wx.GetApp().GetDocumentManager().GetTemplates()
iconList = wx.ImageList(16, 16, initialCount = len(templates))
self._iconIndexLookup = []
for template in templates:
icon = template.GetIcon()
if icon:
if icon.GetHeight() != 16 or icon.GetWidth() != 16:
icon.SetHeight(16)
icon.SetWidth(16)
if wx.GetApp().GetDebug():
print "Warning: icon for '%s' isn't 16x16, not crossplatform" % template._docTypeName
iconIndex = iconList.AddIcon(icon)
self._iconIndexLookup.append((template, iconIndex))
icon = getBlankIcon()
if icon.GetHeight() != 16 or icon.GetWidth() != 16:
icon.SetHeight(16)
icon.SetWidth(16)
if wx.GetApp().GetDebug():
print "Warning: getBlankIcon isn't 16x16, not crossplatform"
self._blankIconIndex = iconList.AddIcon(icon)
self._notebook.AssignImageList(iconList)
def GetNotebook(self):
"""
Returns the notebook used by the tabbed document interface.
"""
return self._notebook
def GetActiveChild(self):
"""
Returns the active notebook page, which to the framework is treated as
a document frame.
"""
index = self._notebook.GetSelection()
if index == -1:
return None
return self._notebook.GetPage(index)
def OnNotebookPageChanged(self, event):
"""
Activates a notebook page's view when it is selected.
"""
index = self._notebook.GetSelection()
if index > -1:
self._notebook.GetPage(index).GetView().Activate()
def OnNotebookMouseOver(self, event):
# wxBug: On Windows XP the tooltips don't automatically disappear when you move the mouse and it is on a notebook tab, has nothing to do with this code!!!
index, type = self._notebook.HitTest(event.GetPosition())
if index > -1:
doc = self._notebook.GetPage(index).GetView().GetDocument()
# wxBug: Tooltips no longer appearing on tabs except on
# about a 2 pixel area between tab top and contents that will show tip.
self._notebook.GetParent().SetToolTip(wx.ToolTip(doc.GetFilename()))
else:
self._notebook.SetToolTip(wx.ToolTip(""))
event.Skip()
def OnNotebookMiddleClick(self, event):
"""
Handles middle clicks for the notebook, closing the document whose tab was
clicked on.
"""
index, type = self._notebook.HitTest(event.GetPosition())
if index > -1:
doc = self._notebook.GetPage(index).GetView().GetDocument()
if doc:
doc.DeleteAllViews()
def OnNotebookRightClick(self, event):
"""
Handles right clicks for the notebook, enabling users to either close
a tab or select from the available documents if the user clicks on the
notebook's white space.
"""
index, type = self._notebook.HitTest(event.GetPosition())
menu = wx.Menu()
x, y = event.GetX(), event.GetY()
if index > -1:
doc = self._notebook.GetPage(index).GetView().GetDocument()
id = wx.NewId()
menu.Append(id, _("Close"))
def OnRightMenuSelect(event):
doc.DeleteAllViews()
wx.EVT_MENU(self, id, OnRightMenuSelect)
if self._notebook.GetPageCount() > 1:
id = wx.NewId()
menu.Append(id, _("Close All but \"%s\"" % doc.GetPrintableName()))
def OnRightMenuSelect(event):
for i in range(self._notebook.GetPageCount()-1, -1, -1): # Go from len-1 to 0
if i != index:
doc = self._notebook.GetPage(i).GetView().GetDocument()
if not self.GetDocumentManager().CloseDocument(doc, False):
return
wx.EVT_MENU(self, id, OnRightMenuSelect)
menu.AppendSeparator()
tabsMenu = wx.Menu()
menu.AppendMenu(wx.NewId(), _("Select Tab"), tabsMenu)
else:
y = y - 25 # wxBug: It is offsetting click events in the blank notebook area
tabsMenu = menu
if self._notebook.GetPageCount() > 1:
selectIDs = {}
for i in range(0, self._notebook.GetPageCount()):
id = wx.NewId()
selectIDs[id] = i
tabsMenu.Append(id, self._notebook.GetPageText(i))
def OnRightMenuSelect(event):
self._notebook.SetSelection(selectIDs[event.GetId()])
wx.EVT_MENU(self, id, OnRightMenuSelect)
self._notebook.PopupMenu(menu, wx.Point(x, y))
menu.Destroy()
def AddNotebookPage(self, panel, title):
"""
Adds a document page to the notebook.
"""
self._notebook.AddPage(panel, title)
index = self._notebook.GetPageCount() - 1
self._notebook.SetSelection(index)
found = False # Now set the icon
template = panel.GetDocument().GetDocumentTemplate()
if template:
for t, iconIndex in self._iconIndexLookup:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -