]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/samples/docview/DocViewDemo.py
   1 #---------------------------------------------------------------------------- 
   3 # Purpose:      Port of the wxWindows docview sample classes 
   9 # Copyright:    (c) 2003-2005 ActiveGrid, Inc. (Port of wxWindows classes by Julian Smart et al) 
  10 # License:      wxWindows License 
  11 #---------------------------------------------------------------------------- 
  15 #---------------------------------------------------------------------- 
  16 # This isn't the most object oriented code (it is somewhat repetitive, 
  17 # but it is true to the wxWindows C++ demos. 
  18 #---------------------------------------------------------------------- 
  26 #---------------------------------------------------------------------- 
  27 #---------------------------------------------------------------------- 
  28 # TextEdit document and view classes 
  30 class TextEditDocument(wx
.lib
.docview
.Document
): 
  33     def OnSaveDocument(self
, filename
): 
  34         view 
= self
.GetFirstView() 
  35         if not view
.GetTextSW().SaveFile(filename
): 
  38         self
.SetDocumentSaved(True) 
  39 ##        if wx.Platform == "__WXMAC__": 
  40 ##            fn = wx.Filename(filename) 
  41 ##            fn.MacSetDefaultTypeAndCreator() 
  45     def OnOpenDocument(self
, filename
): 
  46         view 
= self
.GetFirstView() 
  47         if not view
.GetTextSW().LoadFile(filename
): 
  49         self
.SetFilename(filename
, True) 
  57         view 
= self
.GetFirstView() 
  59             return wx
.lib
.docview
.Document
.IsModified(self
) or (view
.GetTextSW() and view
.GetTextSW().IsModified()) 
  61             return wx
.lib
.docview
.Document
.IsModified(self
) 
  64     def Modify(self
, mod
): 
  65         view 
= self
.GetFirstView() 
  66         wx
.lib
.docview
.Document
.Modify(self
, mod
) 
  67         if not mod 
and view 
and view
.GetTextSW(): 
  68             view
.GetTextSW().DiscardEdits() 
  71 class TextEditView(wx
.lib
.docview
.View
): 
  74     def OnCreate(self
, doc
, flags
): 
  75         flags 
= doc
.GetDocumentManager().GetFlags() 
  76         if flags 
& wx
.lib
.docview
.DOC_SDI 
and doc
.GetDocumentManager().GetMaxDocsOpen() == 1: 
  77             self
._frame 
= wx
.GetApp().GetMainFrame() 
  78             self
.SetFrame(self
._frame
) 
  80             self
._textsw 
= MyTextWindow(self
, self
._frame
, wx
.DefaultPosition
, wx
.DefaultSize
, wx
.TE_MULTILINE
) 
  81             sizer
.Add(self
._textsw
, 1, wx
.EXPAND
, 0) 
  82             self
._frame
.SetSizer(sizer
) 
  86         elif flags 
& wx
.lib
.docview
.DOC_MDI
: 
  87             self
._frame 
= wx
.lib
.docview
.DocMDIChildFrame(doc
, self
, wx
.GetApp().GetMainFrame(), -1, wx
.GetApp().GetAppName(), (10, 10), (300, 300), wx
.DEFAULT_FRAME_STYLE
) 
  88             self
.SetFrame(self
._frame
) 
  90             self
._textsw 
= MyTextWindow(self
, self
._frame
, wx
.DefaultPosition
, wx
.DefaultSize
, wx
.TE_MULTILINE
) 
  91             sizer
.Add(self
._textsw
, 1, wx
.EXPAND
, 0) 
  92             self
._frame
.SetSizer(sizer
) 
  94             self
._frame
.Show(True) 
  97         else:  # flags & wx.lib.docview.DOC_SDI 
  98             self
._frame 
= wx
.GetApp().CreateChildFrame(doc
, self
) 
  99             width
, height 
= self
._frame
.GetClientSize() 
 100             self
._textsw 
= MyTextWindow(self
, self
._frame
, (0, 0), (width
, height
), wx
.TE_MULTILINE
) 
 101             self
._frame
.SetTitle(_("TextEditView")) 
 102             self
._frame
.Show(True) 
 107     # Since ProcessEvent is not virtual, we have to trap the relevant events using this pseudo-ProcessEvent instead of EVT_MENU 
 108     def ProcessEvent(self
, event
): 
 113         elif id == wx
.ID_REDO
: 
 117             return wx
.lib
.docview
.View
.ProcessEvent(self
, event
) 
 124     def OnDraw(self
, dc
): 
 125         """ For Print and Print Preview """ 
 129     def OnClose(self
, deleteWindow 
= True): 
 130         if not self
.GetDocument().Close(): 
 134             if self
.GetDocument().GetDocumentManager().GetMaxDocsOpen() == 1 and self
.GetDocument().GetDocumentManager().GetFlags() & wx
.lib
.docview
.DOC_SDI
: 
 136                     self
._textsw
.Destroy() 
 139                 self
._frame
.Destroy() 
 144 class MyTextWindow(wx
.TextCtrl
): 
 147     def __init__(self
, view
, frame
, pos
, size
, style
): 
 148         wx
.TextCtrl
.__init
__(self
, frame
, -1, "", pos
, size
, style
) 
 153 #---------------------------------------------------------------------- 
 154 #---------------------------------------------------------------------- 
 155 # TextEdit Sample Application 
 158 class MyApp(wx
.PySimpleApp
): 
 164         demoMode 
= wx
.GetSingleChoiceIndex(_("Select the demo mode"), 
 165                                            _("wxPython DocView Demo"), 
 166                                            [_("SDI Single Document"), _("SDI"), _("MDI")]) 
 168         if demoMode 
== 0 or demoMode 
== 1: 
 169             flags 
= wx
.lib
.docview
.DOC_SDI
 
 171             flags 
= wx
.lib
.docview
.DOC_MDI
 
 175         self
.SetAppName(_("DocView Demo")) 
 177         docManager 
= wx
.lib
.docview
.DocManager(flags 
= flags
) 
 178         docManager
.AssociateTemplate(wx
.lib
.docview
.DocTemplate(docManager
, 
 187         #if wx.Platform == "__WXMAC__": 
 188         #     wx.FileName.MacRegisterDefaultTypeAndCreator("txt", 'TEXT', 'WXMA') 
 191             docManager
.SetMaxDocsOpen(1) 
 193         if demoMode 
== 2:  # MDI 
 194             self
._frame 
= MyMDIFrame(docManager
, None, -1, _("DocView Demo"), (0, 0), (500, 400), wx
.DEFAULT_FRAME_STYLE
) 
 196             self
._frame 
= MyFrame(docManager
, None, -1, _("DocView Demo"), (0, 0), (500, 400), wx
.DEFAULT_FRAME_STYLE
) 
 201         fileMenu
.Append(wx
.ID_NEW
, _("&New...")) 
 202         fileMenu
.Append(wx
.ID_OPEN
, _("&Open...")) 
 204         if demoMode 
== 2:  # MDI 
 205             fileMenu
.Append(wx
.ID_CLOSE
, _("&Close")) 
 206             fileMenu
.AppendSeparator() 
 208         if demoMode 
== 0 or demoMode 
== 2:  # Single Doc or MDI 
 209             fileMenu
.Append(wx
.ID_SAVE
, _("&Save")) 
 210             fileMenu
.Append(wx
.ID_SAVEAS
, _("Save &As")) 
 211             fileMenu
.AppendSeparator() 
 212             fileMenu
.Append(wx
.ID_PRINT
, _("&Print")) 
 213             fileMenu
.Append(wx
.ID_PRINT_SETUP
, _("Page &Setup")) 
 214             fileMenu
.Append(wx
.ID_PREVIEW
, _("Print Pre&view")) 
 217             editMenu
.Append(wx
.ID_UNDO
, _("&Undo")) 
 218             editMenu
.Append(wx
.ID_REDO
, _("&Redo")) 
 220             self
._frame
.editMenu 
= editMenu
 
 222         fileMenu
.AppendSeparator() 
 223         fileMenu
.Append(wx
.ID_EXIT
, _("E&xit")) 
 225         docManager
.FileHistoryUseMenu(fileMenu
) 
 228         helpMenu
.Append(wx
.ID_ABOUT
, _("&About")) 
 230         menuBar 
= wx
.MenuBar() 
 231         menuBar
.Append(fileMenu
, _("&File")) 
 233             menuBar
.Append(editMenu
, _("&Edit")) 
 234         menuBar
.Append(helpMenu
, _("&Help")) 
 236         self
._frame
.SetMenuBar(menuBar
) 
 237         self
._frame
.Centre(wx
.BOTH
) 
 238         self
._frame
.Show(True) 
 240         self
.SetTopWindow(self
._frame
) 
 242         if demoMode 
== 0:  # Single doc 
 243             docManager
.OnFileNew(None) 
 248     def GetMainFrame(self
): 
 252     def GetDemoMode(self
): 
 253         return self
._demoMode
 
 256     def CreateChildFrame(self
, doc
, view
): 
 257         subframe 
= wx
.lib
.docview
.DocChildFrame(doc
, view
, self
.GetMainFrame(), -1, wx
.GetApp().GetAppName(), (10, 10), (300, 300), wx
.DEFAULT_FRAME_STYLE
) 
 260         fileMenu
.Append(wx
.ID_NEW
, _("&New")) 
 261         fileMenu
.Append(wx
.ID_OPEN
, _("&Open")) 
 262         fileMenu
.Append(wx
.ID_CLOSE
, _("&Close")) 
 263         fileMenu
.AppendSeparator() 
 264         fileMenu
.Append(wx
.ID_SAVE
, _("&Save")) 
 265         fileMenu
.Append(wx
.ID_SAVEAS
, _("Save &As")) 
 266         fileMenu
.AppendSeparator() 
 267         fileMenu
.Append(wx
.ID_PRINT
, _("&Print")) 
 268         fileMenu
.Append(wx
.ID_PRINT_SETUP
, _("Page &Setup")) 
 269         fileMenu
.Append(wx
.ID_PREVIEW
, _("Print Pre&view")) 
 272         editMenu
.Append(wx
.ID_UNDO
, _("&Undo")) 
 273         editMenu
.Append(wx
.ID_REDO
, _("&Redo")) 
 276         helpMenu
.Append(wx
.ID_ABOUT
, _("&About")) 
 278         menuBar 
= wx
.MenuBar() 
 280         menuBar
.Append(fileMenu
, _("&File")) 
 281         menuBar
.Append(editMenu
, _("&Edit")) 
 282         menuBar
.Append(helpMenu
, _("&Help")) 
 284         subframe
.SetMenuBar(menuBar
) 
 285         subframe
.Centre(wx
.BOTH
) 
 289 class MyFrame(wx
.lib
.docview
.DocParentFrame
): 
 292     def __init__(self
, manager
, frame
, id, title
, pos 
= wx
.DefaultPosition
, size 
= wx
.DefaultSize
, style 
= wx
.DEFAULT_FRAME_STYLE
, name 
= "frame"): 
 293         wx
.lib
.docview
.DocParentFrame
.__init
__(self
, manager
, frame
, id, title
, pos
, size
, style
, name
) 
 295         wx
.EVT_MENU(self
, wx
.ID_ABOUT
, self
.OnAbout
) 
 298     def OnAbout(self
, event
): 
 299         wx
.MessageBox(wx
.GetApp().GetAppName(), _("About DocView")) 
 302     def GetMainFrame(self
): 
 306 class MyMDIFrame(wx
.lib
.docview
.DocMDIParentFrame
): 
 308     def __init__(self
, manager
, frame
, id, title
, pos 
= wx
.DefaultPosition
, size 
= wx
.DefaultSize
, style 
= wx
.DEFAULT_FRAME_STYLE
, name 
= "frame"): 
 309         wx
.lib
.docview
.DocMDIParentFrame
.__init
__(self
, manager
, frame
, id, title
, pos
, size
, style
, name
) 
 311         wx
.EVT_MENU(self
, wx
.ID_ABOUT
, self
.OnAbout
) 
 314     def OnAbout(self
, event
): 
 315         wx
.MessageBox(wx
.GetApp().GetAppName(), _("About DocView")) 
 318     def GetMainFrame(self
):