X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/18c45cd6dc74b8c37bf6e0c920cd010d3b77135b..d1dc2b32e00303839aec0077aefcbc60bd712f00:/wxPython/samples/docview/DocViewDemo.py?ds=inline diff --git a/wxPython/samples/docview/DocViewDemo.py b/wxPython/samples/docview/DocViewDemo.py new file mode 100644 index 0000000000..55eb2a1a28 --- /dev/null +++ b/wxPython/samples/docview/DocViewDemo.py @@ -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() + +