mirror of
https://github.com/wxWidgets/wxWidgets.git
synced 2026-08-19 02:42:23 +08:00
Added docview modules from Peter Yared and Morgan Hua
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32374 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -232,6 +232,11 @@ controls.
|
||||
wxMSW: "Alt" key (VK_MENU) now results in WXK_ALT keyboard event, not
|
||||
WXK_MENU
|
||||
|
||||
Added modules from Peter Yared and Morgan Hua that implement the wx
|
||||
Doc/View framework in pure Python code. See wx.lib.docview for the
|
||||
base implementation and wx.lib.pydocview for Python-specific
|
||||
extensions. There are also a couple sample applications located in
|
||||
samples/docview.
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,323 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# Name: DocViewDemo.py
|
||||
# Purpose: Port of the wxWindows docview sample classes
|
||||
#
|
||||
# Author: Peter Yared
|
||||
#
|
||||
# Created: 8/1/03
|
||||
# CVS-ID: $Id$
|
||||
# Copyright: (c) 2003, 2004 ActiveGrid, Inc. (Port of wxWindows classes by Julian Smart et al)
|
||||
# License: wxWindows license
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
# This isn't the most object oriented code (it is somewhat repetitive,
|
||||
# but it is true to the wxWindows C++ demos.
|
||||
#----------------------------------------------------------------------
|
||||
|
||||
|
||||
import wx
|
||||
import wx.lib.docview
|
||||
_ = wx.GetTranslation
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------
|
||||
# TextEdit document and view classes
|
||||
|
||||
class TextEditDocument(wx.lib.docview.Document):
|
||||
|
||||
|
||||
def OnSaveDocument(self, filename):
|
||||
view = self.GetFirstView()
|
||||
if not view.GetTextSW().SaveFile(filename):
|
||||
return False
|
||||
self.Modify(False)
|
||||
self.SetDocumentSaved(True)
|
||||
## if wx.Platform == "__WXMAC__":
|
||||
## fn = wx.Filename(filename)
|
||||
## fn.MacSetDefaultTypeAndCreator()
|
||||
return True
|
||||
|
||||
|
||||
def OnOpenDocument(self, filename):
|
||||
view = self.GetFirstView()
|
||||
if not view.GetTextSW().LoadFile(filename):
|
||||
return False
|
||||
self.SetFilename(filename, True)
|
||||
self.Modify(False)
|
||||
self.UpdateAllViews()
|
||||
self._savedYet = True
|
||||
return True
|
||||
|
||||
|
||||
def IsModified(self):
|
||||
view = self.GetFirstView()
|
||||
if view:
|
||||
return wx.lib.docview.Document.IsModified(self) or (view.GetTextSW() and view.GetTextSW().IsModified())
|
||||
else:
|
||||
return wx.lib.docview.Document.IsModified(self)
|
||||
|
||||
|
||||
def Modify(self, mod):
|
||||
view = self.GetFirstView()
|
||||
wx.lib.docview.Document.Modify(self, mod)
|
||||
if not mod and view and view.GetTextSW():
|
||||
view.GetTextSW().DiscardEdits()
|
||||
|
||||
|
||||
class TextEditView(wx.lib.docview.View):
|
||||
|
||||
|
||||
def OnCreate(self, doc, flags):
|
||||
flags = doc.GetDocumentManager().GetFlags()
|
||||
if flags & wx.lib.docview.DOC_SDI and doc.GetDocumentManager().GetMaxDocsOpen() == 1:
|
||||
self._frame = wx.GetApp().GetMainFrame()
|
||||
self.SetFrame(self._frame)
|
||||
sizer = wx.BoxSizer()
|
||||
self._textsw = MyTextWindow(self, self._frame, wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE)
|
||||
sizer.Add(self._textsw, 1, wx.EXPAND, 0)
|
||||
self._frame.SetSizer(sizer)
|
||||
self._frame.Layout()
|
||||
self.Activate(True)
|
||||
return True
|
||||
elif flags & wx.lib.docview.DOC_MDI:
|
||||
self._frame = wx.lib.docview.DocMDIChildFrame(doc, self, wx.GetApp().GetMainFrame(), -1, wx.GetApp().GetAppName(), (10, 10), (300, 300), wx.DEFAULT_FRAME_STYLE)
|
||||
self.SetFrame(self._frame)
|
||||
sizer = wx.BoxSizer()
|
||||
self._textsw = MyTextWindow(self, self._frame, wx.DefaultPosition, wx.DefaultSize, wx.TE_MULTILINE)
|
||||
sizer.Add(self._textsw, 1, wx.EXPAND, 0)
|
||||
self._frame.SetSizer(sizer)
|
||||
self._frame.Layout()
|
||||
self.Activate(True)
|
||||
return True
|
||||
else: # flags & wx.lib.docview.DOC_SDI
|
||||
self._frame = wx.GetApp().CreateChildFrame(doc, self)
|
||||
width, height = self._frame.GetClientSize()
|
||||
self._textsw = MyTextWindow(self, self._frame, (0, 0), (width, height), wx.TE_MULTILINE)
|
||||
self._frame.SetTitle(_("TextEditView"))
|
||||
self._frame.Show(True)
|
||||
self.Activate(True)
|
||||
return True
|
||||
|
||||
|
||||
# Since ProcessEvent is not virtual, we have to trap the relevant events using this pseudo-ProcessEvent instead of EVT_MENU
|
||||
def ProcessEvent(self, event):
|
||||
id = event.GetId()
|
||||
if id == wx.ID_UNDO:
|
||||
self._textsw.Undo()
|
||||
return True
|
||||
elif id == wx.ID_REDO:
|
||||
self._textsw.Redo()
|
||||
return True
|
||||
else:
|
||||
return wx.lib.docview.View.ProcessEvent(self, event)
|
||||
|
||||
|
||||
def GetTextSW(self):
|
||||
return self._textsw
|
||||
|
||||
|
||||
def OnDraw(self, dc):
|
||||
pass
|
||||
|
||||
|
||||
def OnClose(self, deleteWindow = True):
|
||||
if not self.GetDocument().Close():
|
||||
return False
|
||||
self.Activate(False)
|
||||
if deleteWindow:
|
||||
if self.GetDocument().GetDocumentManager().GetMaxDocsOpen() == 1 and self.GetDocument().GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI:
|
||||
if self._textsw:
|
||||
self._textsw.Destroy()
|
||||
return True
|
||||
else:
|
||||
self._frame.Destroy()
|
||||
return True
|
||||
return True
|
||||
|
||||
|
||||
class MyTextWindow(wx.TextCtrl):
|
||||
|
||||
|
||||
def __init__(self, view, frame, pos, size, style):
|
||||
wx.TextCtrl.__init__(self, frame, -1, "", pos, size, style)
|
||||
self._view = view
|
||||
|
||||
|
||||
|
||||
#----------------------------------------------------------------------
|
||||
#----------------------------------------------------------------------
|
||||
# TextEdit Sample Application
|
||||
|
||||
|
||||
class MyApp(wx.PySimpleApp):
|
||||
|
||||
|
||||
def OnInit(self):
|
||||
|
||||
|
||||
demoMode = wx.GetSingleChoiceIndex(_("Select the demo mode"),
|
||||
_("wxPython DocView Demo"),
|
||||
[_("SDI Single Document"), _("SDI"), _("MDI")])
|
||||
|
||||
if demoMode == 0 or demoMode == 1:
|
||||
flags = wx.lib.docview.DOC_SDI
|
||||
elif demoMode == 2:
|
||||
flags = wx.lib.docview.DOC_MDI
|
||||
else:
|
||||
return False
|
||||
|
||||
self.SetAppName(_("DocView Demo"))
|
||||
|
||||
docManager = wx.lib.docview.DocManager(flags = flags)
|
||||
docManager.AssociateTemplate(wx.lib.docview.DocTemplate(docManager,
|
||||
_("Text"),
|
||||
"*.text;*.txt",
|
||||
_("Text"),
|
||||
_(".txt"),
|
||||
_("Text Document"),
|
||||
_("Text View"),
|
||||
TextEditDocument,
|
||||
TextEditView))
|
||||
#if wx.Platform == "__WXMAC__":
|
||||
# wx.FileName.MacRegisterDefaultTypeAndCreator("txt", 'TEXT', 'WXMA')
|
||||
|
||||
if demoMode == 0:
|
||||
docManager.SetMaxDocsOpen(1)
|
||||
|
||||
if demoMode == 2: # MDI
|
||||
self._frame = MyMDIFrame(docManager, None, -1, _("DocView Demo"), (0, 0), (500, 400), wx.DEFAULT_FRAME_STYLE)
|
||||
else: # SDI
|
||||
self._frame = MyFrame(docManager, None, -1, _("DocView Demo"), (0, 0), (500, 400), wx.DEFAULT_FRAME_STYLE)
|
||||
|
||||
fileMenu = wx.Menu()
|
||||
editMenu = None
|
||||
|
||||
fileMenu.Append(wx.ID_NEW, _("&New..."))
|
||||
fileMenu.Append(wx.ID_OPEN, _("&Open..."))
|
||||
|
||||
if demoMode == 2: # MDI
|
||||
fileMenu.Append(wx.ID_CLOSE, _("&Close"))
|
||||
fileMenu.AppendSeparator()
|
||||
|
||||
if demoMode == 0 or demoMode == 2: # Single Doc or MDI
|
||||
fileMenu.Append(wx.ID_SAVE, _("&Save"))
|
||||
fileMenu.Append(wx.ID_SAVEAS, _("Save &As"))
|
||||
fileMenu.AppendSeparator()
|
||||
fileMenu.Append(wx.ID_PRINT, _("&Print"))
|
||||
fileMenu.Append(wx.ID_PRINT_SETUP, _("Page &Setup"))
|
||||
fileMenu.Append(wx.ID_PREVIEW, _("Print Pre&view"))
|
||||
|
||||
editMenu = wx.Menu()
|
||||
editMenu.Append(wx.ID_UNDO, _("&Undo"))
|
||||
editMenu.Append(wx.ID_REDO, _("&Redo"))
|
||||
|
||||
self._frame.editMenu = editMenu
|
||||
|
||||
fileMenu.AppendSeparator()
|
||||
fileMenu.Append(wx.ID_EXIT, _("E&xit"))
|
||||
|
||||
docManager.FileHistoryUseMenu(fileMenu)
|
||||
|
||||
helpMenu = wx.Menu()
|
||||
helpMenu.Append(wx.ID_ABOUT, _("&About"))
|
||||
|
||||
menuBar = wx.MenuBar()
|
||||
menuBar.Append(fileMenu, _("&File"))
|
||||
if editMenu:
|
||||
menuBar.Append(editMenu, _("&Edit"))
|
||||
menuBar.Append(helpMenu, _("&Help"))
|
||||
|
||||
self._frame.SetMenuBar(menuBar)
|
||||
self._frame.Centre(wx.BOTH)
|
||||
self._frame.Show(True)
|
||||
|
||||
self.SetTopWindow(self._frame)
|
||||
|
||||
if demoMode == 0: # Single doc
|
||||
docManager.OnFileNew(None)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
def GetMainFrame(self):
|
||||
return self._frame
|
||||
|
||||
|
||||
def GetDemoMode(self):
|
||||
return self._demoMode
|
||||
|
||||
|
||||
def CreateChildFrame(self, doc, view):
|
||||
subframe = wx.lib.docview.DocChildFrame(doc, view, self.GetMainFrame(), -1, wx.GetApp().GetAppName(), (10, 10), (300, 300), wx.DEFAULT_FRAME_STYLE)
|
||||
|
||||
fileMenu = wx.Menu()
|
||||
fileMenu.Append(wx.ID_NEW, _("&New"))
|
||||
fileMenu.Append(wx.ID_OPEN, _("&Open"))
|
||||
fileMenu.Append(wx.ID_CLOSE, _("&Close"))
|
||||
fileMenu.AppendSeparator()
|
||||
fileMenu.Append(wx.ID_SAVE, _("&Save"))
|
||||
fileMenu.Append(wx.ID_SAVEAS, _("Save &As"))
|
||||
fileMenu.AppendSeparator()
|
||||
fileMenu.Append(wx.ID_PRINT, _("&Print"))
|
||||
fileMenu.Append(wx.ID_PRINT_SETUP, _("Page &Setup"))
|
||||
fileMenu.Append(wx.ID_PREVIEW, _("Print Pre&view"))
|
||||
|
||||
editMenu = wx.Menu()
|
||||
editMenu.Append(wx.ID_UNDO, _("&Undo"))
|
||||
editMenu.Append(wx.ID_REDO, _("&Redo"))
|
||||
|
||||
helpMenu = wx.Menu()
|
||||
helpMenu.Append(wx.ID_ABOUT, _("&About"))
|
||||
|
||||
menuBar = wx.MenuBar()
|
||||
|
||||
menuBar.Append(fileMenu, _("&File"))
|
||||
menuBar.Append(editMenu, _("&Edit"))
|
||||
menuBar.Append(helpMenu, _("&Help"))
|
||||
|
||||
subframe.SetMenuBar(menuBar)
|
||||
subframe.Centre(wx.BOTH)
|
||||
return subframe
|
||||
|
||||
|
||||
class MyFrame(wx.lib.docview.DocParentFrame):
|
||||
|
||||
|
||||
def __init__(self, manager, frame, id, title, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, name = "frame"):
|
||||
wx.lib.docview.DocParentFrame.__init__(self, manager, frame, id, title, pos, size, style, name)
|
||||
self._frame = frame
|
||||
wx.EVT_MENU(self, wx.ID_ABOUT, self.OnAbout)
|
||||
|
||||
|
||||
def OnAbout(self, event):
|
||||
wx.MessageBox(wx.GetApp().GetAppName(), _("About DocView"))
|
||||
|
||||
|
||||
def GetMainFrame(self):
|
||||
return self._frame
|
||||
|
||||
|
||||
class MyMDIFrame(wx.lib.docview.DocMDIParentFrame):
|
||||
|
||||
def __init__(self, manager, frame, id, title, pos = wx.DefaultPosition, size = wx.DefaultSize, style = wx.DEFAULT_FRAME_STYLE, name = "frame"):
|
||||
wx.lib.docview.DocMDIParentFrame.__init__(self, manager, frame, id, title, pos, size, style, name)
|
||||
self._frame = frame
|
||||
wx.EVT_MENU(self, wx.ID_ABOUT, self.OnAbout)
|
||||
|
||||
|
||||
def OnAbout(self, event):
|
||||
wx.MessageBox(wx.GetApp().GetAppName(), _("About DocView"))
|
||||
|
||||
|
||||
def GetMainFrame(self):
|
||||
return self._frame
|
||||
|
||||
|
||||
app = MyApp()
|
||||
app.MainLoop()
|
||||
|
||||
|
||||
@@ -0,0 +1,168 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# Name: PyDocViewDemo.py
|
||||
# Purpose: Demo of Python extensions to the wxWindows docview framework
|
||||
#
|
||||
# Author: Peter Yared, Morgan Hua
|
||||
#
|
||||
# Created: 5/15/03
|
||||
# CVS-ID: $Id$
|
||||
# Copyright: (c) 2003 ActiveGrid, Inc.
|
||||
# License: wxWindows license
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
import sys
|
||||
import wx
|
||||
import wx.lib.docview
|
||||
import wx.lib.pydocview
|
||||
import activegrid.tool.TextEditor as TextEditor
|
||||
import activegrid.tool.FindService as FindService
|
||||
import wx.lib.pydocview as WindowMenuService
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Classes
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
class TextEditorApplication(wx.lib.pydocview.DocApp):
|
||||
|
||||
|
||||
def OnInit(self):
|
||||
wx.lib.pydocview.DocApp.OnInit(self)
|
||||
|
||||
wx.lib.pydocview.DocApp.ShowSplash(self, "activegrid/tool/images/splash.jpg")
|
||||
|
||||
self.SetAppName(wx.GetTranslation("wxPython DocView Demo"))
|
||||
config = wx.Config(self.GetAppName(), style = wx.CONFIG_USE_LOCAL_FILE)
|
||||
|
||||
docManager = wx.lib.docview.DocManager(flags = self.GetDefaultDocManagerFlags())
|
||||
self.SetDocumentManager(docManager)
|
||||
|
||||
textTemplate = wx.lib.docview.DocTemplate(docManager,
|
||||
wx.GetTranslation("Text"),
|
||||
"*.text;*.txt",
|
||||
wx.GetTranslation("Text"),
|
||||
wx.GetTranslation(".txt"),
|
||||
wx.GetTranslation("Text Document"),
|
||||
wx.GetTranslation("Text View"),
|
||||
TextEditor.TextDocument,
|
||||
TextEditor.TextView)
|
||||
docManager.AssociateTemplate(textTemplate)
|
||||
|
||||
textService = self.InstallService(TextEditor.TextService())
|
||||
findService = self.InstallService(FindService.FindService())
|
||||
optionsService = self.InstallService(wx.lib.pydocview.DocOptionsService())
|
||||
windowMenuService = self.InstallService(WindowMenuService.WindowMenuService())
|
||||
optionsService.AddOptionsPanel(TextEditor.TextOptionsPanel)
|
||||
filePropertiesService = self.InstallService(wx.lib.pydocview.FilePropertiesService())
|
||||
|
||||
self.SetDefaultIcon(getDocIcon())
|
||||
|
||||
if docManager.GetFlags() & wx.lib.docview.DOC_MDI:
|
||||
frame = wx.lib.pydocview.DocMDIParentFrame(docManager, None, -1, wx.GetApp().GetAppName())
|
||||
frame.Show(True)
|
||||
|
||||
wx.lib.pydocview.DocApp.CloseSplash(self)
|
||||
|
||||
self.OpenCommandLineArgs()
|
||||
|
||||
if not docManager.GetDocuments() and docManager.GetFlags() & wx.lib.docview.DOC_SDI:
|
||||
textTemplate.CreateDocument('', wx.lib.docview.DOC_NEW).OnNewDocument()
|
||||
|
||||
wx.CallAfter(self.ShowTip, docManager.FindSuitableParent(), wx.CreateFileTipProvider("activegrid/tool/data/tips.txt", 0))
|
||||
|
||||
return True
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Menu Bitmaps - generated by encode_bitmaps.py
|
||||
#----------------------------------------------------------------------------
|
||||
from wx import ImageFromStream, BitmapFromImage
|
||||
from wx import EmptyIcon
|
||||
import cStringIO
|
||||
|
||||
|
||||
def getDocData():
|
||||
return \
|
||||
'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00 \x00\x00\x00 \x08\x06\x00\
|
||||
\x00\x00szz\xf4\x00\x00\x00\x04sBIT\x08\x08\x08\x08|\x08d\x88\x00\x00\x05cID\
|
||||
ATX\x85\xed\x97\xcbo\x1b\xd7\x15\xc6\x7fw^\x1c\x92C\x8a\xa4DQ\xa2)\xd9\xb2%?\
|
||||
\xe0\xa7\x82\xc0\x85\x83"\xa8\x1b\x17AwYtQtU\xb4\x8b\xa2\x7fH\xfe\x8c\xee\
|
||||
\x8b\xac\x124\xab\x02E\n\x17h\x01\x17\x86Q7\xaac7~I\xb2hZ\xe2sH\xce\x83s\xef\
|
||||
\xedB\xa6dI~))\x90E\xf2\x01\x17\x98\xb9s\xe7\x9c\xef\x9c\xf9\xce\xb9w\x840L\
|
||||
\xbeK\x18\xdf\xa9\xf7\x1f\x08\x00\xa2\xd5ji!\x04\xe3\xf1ma\x9a\x02!\x0c\xe0\
|
||||
\xa0-\xa55O\xb6\x06t\xfb\x11\xa0\x98\xca\x99\x880\x0c5\xf0R\xe7B\x08\xb4\xde\
|
||||
\xbd6\xc4\xd8\xee\x0bk\xb5\xde3\'\x84f\x10J\x06aB4R\xd8\x96\xc1\x97\x8f{\xfc\
|
||||
\xfbq\x97-?\xa2\xe49\x9c\x9d\xf38u\xc4\xa3\x945\xb0\xc6\x8e\r!`\x1f\t!\xd8C\
|
||||
\x004\x89\xd4\x04\xb1$\x88%#\xa9(f,\xd6\xdb!\xab\x9b\x01\x9b\xbd\x98 \x96\
|
||||
\xb4z\x11\xa6\x80\xea\x94K\x9ch\xfe\xf5\xa0\xcb\xfa\xd6\x90\xea\xa4\xcb\x99Z\
|
||||
\x8e\xead\x96\xa2\x97\xc2\x14\t\xd6s\xf3h\x04JC"\xf5\xf3\xa1\x00M.c\xd1\xe9\
|
||||
\'\xf4\x82\x11\xc3H\xd2\x0f\x13\xda~L\xcb\x8fI\x12\xc9\x953\x93\\\xff\xaa\
|
||||
\xc9\x17\xb7\xb7\xf8j\xdd\xa7\x13J\x82aB\xad\x94\xe2\x83\xe5)\xba\xc3\x84\
|
||||
\xde a\xa6\x98\xe2\xc3wf\xb8\xbcX\xa2\xe89(\xa5\x08\x82\xd1\x98\x00\x04qB/\
|
||||
\x1c\xd1\xf6Gl\xf6"\x9euc\x84\xd0\xfc\xf4\\\x99Oo\xd4\xf9\xe2\xf6\x16w\x9f\
|
||||
\x0chG\t\xbe\x1f\x13\xf9#\xa63\x16\x1f\xff\xee\x027\xefw\xb9\xf5\xb0K\xc7\
|
||||
\x8f\x11\xa6`a\xc6\xe5\xdc\xbc\xc7\xfcT\x06/msa~\x82\xa5\xd9\x1c\x8em`\x08\
|
||||
\xd0Z\xa1\x94\x02\xc0\xb2,\x8b\x8d\xe6\x90\xcfnl\xf0\xf9\xcd\x06\xf1H\x13E\
|
||||
\x92h0\xa2\x906\xe9\x0eF\xf4#I<\x88\xb9w\xa7I\x9cs\xc8\xa5-\xcae\x97\xa3\x93\
|
||||
i\xdc\x94\xa0\xe4\xd9\x143\x16\xfd~\xc4\xf4D\x8ak\x17\xa6\xb9z\xae\xcc\xd1r\
|
||||
\x06\xc76)dm\xb2)\x03\xa5\xf7jLk\xb0\xc6\x9f~\xbd\x19r}\xa5\xc9\xb0\x9fl?\
|
||||
\x1d)&2\x16n\xe9\x19?_.sf>\xcf\xbd\xc7>x6\xaeka\n0S&~\x980\x88\x12l[\xb08\
|
||||
\x9b\xe1\xda\xa5\nW\xcfW8;\x9f\'\xefZ;\x02\xd5Z\xa3\xb5~\xae\xa5\xdd\xaa\xb3\
|
||||
\x94R\x94<\x87\xc5\xaa\xc7\xe9#9V\xee\xb61\x1d\x13\xc7\xb3I\xa7L\xfe[\x1f\
|
||||
\xf0\xd1\xe5\x19\x96O\x97\x08\x84\xa6\xd1\x0c\xe9\r\x136\xfd\x98F7f\xbd\x19Q\
|
||||
\xefD\xa4]\x93\xf7O\x95\xf9\xed\xb5\x05\xa6\x0bi\xd0\xa0\xb5\x06\xa5w\x8a\
|
||||
\xe6\xc5J\x13B`Y\x16\x96\x94\n\xc76\xf9\xd9\xc5il\x03>\x1e\xc6\x94\x8b.\xc7g\
|
||||
2\xcc\x16]\xc2(a\xbd\x19\xa2\xd0,U\xb2\xfc\xf1\xcf\xab\xb4\xba#\xd2\x9eM\xed\
|
||||
H\x96 N\xa8\xe4m~\xb4X\xe47W\x8f\x92\xcf\xd8\xe8\xfd\xb9~\x05l\xdb\xde\x16\
|
||||
\xa1R\x8a\xa9\xbc\xc3\xd5\xf3\x15\x8a\x9e\xc3\xadG\x1dV\xd6|\xfe\xfa\xe5\x16\
|
||||
\x83@"\xa4f\xf9D\x9eKKE\xe6k9\xaa\x15I\xca1\xc9y\x16\xbd0ay\xa1\xc0\xf2B\x91\
|
||||
B\xd6\xd9\x8ez\x7f-\xbf\x04\xe3lX\xdb\xcdF\xe3\x98\x06\xd5\x92Kmj\x96l\xc6\
|
||||
\xa4\xd1\x89\xf8\xc7\x9d6O\x9e\x05\xa8 \xc1\x16P\x9b\xcd\xf2\xd1{U\xfe\xb3\
|
||||
\xda\xe5\xd1\xd3!A?\xa1\x92Oq\xf1X\x81\x93\xd5\xdc[E\xbd\x1f;e8f\xae\xb5\xe0\
|
||||
lm\x82\xa7\xa7c\xd67CB\x7fD\xa4!\x1a):\xc3\x84_\xfd\xf8\x08\x1b\xad!\x8f\x1a\
|
||||
CD\xa4x\xf7x\x81\xc5\x19\x8fl\xcaDJu\xe8v.\xe28\xd6cu\x8e\xb3\xa1\x81`\xa4y\
|
||||
\xd8\x18\xf0\xc9\xdf\xd6ht\x02\x0c\xd3`\xc2\xb3\t\xa5\xa2\xde\x8eX\xdb\n0\
|
||||
\x81?\xfc\xfe"\x8b3y,\xcb\xf8F\x04,8\xb8\x0f\x18B\xe0\xa5\x04K\xb3Y~\xf9\xfe\
|
||||
\x1c\xc3(\xe1\xc6\xd7m>\xffg\x9d\x87\xf7{,\x1d\xcfsr6K\xde5\x01\x81T\x1a\xeb\
|
||||
%v\xde\x9a\xc0\x9e\x94<7\xa2\xb5&e\x19\x9c\x9d\xcbo\xef\th\xee\xac\xf6xp\xb7\
|
||||
\x8b\x1f\x8c\xa8\x98i\xe6\xa6\\6\xfd\x98\xf2\xc4\xb6(w\xeb\xfc[\x10x\x81\xca\
|
||||
\x9e\xe6qy\xb1Dm2\x83e\x18\xdcZ\xed\xd2\xe8\x84,L\xbb\xdc\xaf\x0f\xa8\x163L\
|
||||
\xe6R\x87\x0b}\xec%\x8e\xe3\x9d\xba\xd9\xcf~,\xcc\xf1\xbc\xd2\xb0\xd9\r\xb8\
|
||||
\xf9\xa0\xc3\xdf\xef5Yy\xd2\xe7|-\xc7/\xae\xd4\xb8t\xac\x88\x94\xf2\xff\x99\
|
||||
\x81\x83\x84L\x01\xd5R\x1a\xcb2\t\x13\xcd\xd7\x8d!\xd7\xef\xb4x\xf7D\x89ss\
|
||||
\x13\x98\xc6\xee\xf9\xe1M\xd0Z\x93$\xc9\xe1\x8edZk\x94\x86r>\xc5\x85\xa3\x05\
|
||||
\xde;9\x89\xd2\xb0\xb2\xd6\xe3\xee\x86\x8fa\x18\xe3\x85oM\xe0\xb5\x198\x00!P\
|
||||
J\x03\x9a\xc5J\x86_\xff\xe4\x18\x00\xb7\x1ev\xf8\xd3\xcd\xa7,\xcd\xe6\xb0\
|
||||
\x0e\x11\x92R\xea\xf5\x1ax\x15\xf3\x9dk\xa0\xd9O\xf8\xcb\xed\x06\x1b\xed\x80\
|
||||
\x13\x95,\x1f\x9c\x9f\xc6s\xdf\x1c\xd7\xf6\x81$\xc08\xd0\xbb\xdf\x80=;\x1a0\
|
||||
\x9dw\xb8rj\x92w\x16\nH\xa9h\xf9\x11\xe1H\x1e \xfb*[\x96\x94r\xe7\xe6\xb0\n\
|
||||
\xd6Z\xa3\x94b\xae\x94"\x97\x12<\xde2\x08\xa2\x98 2\xb0\r\xe7\xb5}AJ\xb9]5\
|
||||
\xf5z]\x03\xbb\x02\xfa\x06\x10\x80m\x1b\x18\xa6\xc9\xda3\x1f\xd71\xc9\xb9\
|
||||
\xf6k\xdf\x91R\x12E\x11\xe2\x87\x7f\xc3\xef=\x81\xff\x01\x1d\xae\x83\xc3q\
|
||||
\xb9\xc6\x9f\x00\x00\x00\x00IEND\xaeB`\x82'
|
||||
|
||||
|
||||
|
||||
def getDocBitmap():
|
||||
return BitmapFromImage(getDocImage())
|
||||
|
||||
|
||||
def getDocImage():
|
||||
stream = cStringIO.StringIO(getDocData())
|
||||
return ImageFromStream(stream)
|
||||
|
||||
|
||||
def getDocIcon():
|
||||
icon = EmptyIcon()
|
||||
icon.CopyFromBitmap(getDocBitmap())
|
||||
return icon
|
||||
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Main
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
sys.stdout = sys.stderr
|
||||
|
||||
app = TextEditorApplication(redirect = False)
|
||||
app.MainLoop()
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
Tips for PyDocViewDemo App
|
||||
wxWindows rules!
|
||||
Use the source, Luke!
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 30 KiB |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user