]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/samples/docview/DocViewDemo.py
55eb2a1a281ee0427a073d0fe61c5510feae7ee1
1 #----------------------------------------------------------------------------
3 # Purpose: Port of the wxWindows docview sample classes
9 # Copyright: (c) 2003, 2004 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
)
96 else: # flags & wx.lib.docview.DOC_SDI
97 self
._frame
= wx
.GetApp().CreateChildFrame(doc
, self
)
98 width
, height
= self
._frame
.GetClientSize()
99 self
._textsw
= MyTextWindow(self
, self
._frame
, (0, 0), (width
, height
), wx
.TE_MULTILINE
)
100 self
._frame
.SetTitle(_("TextEditView"))
101 self
._frame
.Show(True)
106 # Since ProcessEvent is not virtual, we have to trap the relevant events using this pseudo-ProcessEvent instead of EVT_MENU
107 def ProcessEvent(self
, event
):
112 elif id == wx
.ID_REDO
:
116 return wx
.lib
.docview
.View
.ProcessEvent(self
, event
)
123 def OnDraw(self
, dc
):
127 def OnClose(self
, deleteWindow
= True):
128 if not self
.GetDocument().Close():
132 if self
.GetDocument().GetDocumentManager().GetMaxDocsOpen() == 1 and self
.GetDocument().GetDocumentManager().GetFlags() & wx
.lib
.docview
.DOC_SDI
:
134 self
._textsw
.Destroy()
137 self
._frame
.Destroy()
142 class MyTextWindow(wx
.TextCtrl
):
145 def __init__(self
, view
, frame
, pos
, size
, style
):
146 wx
.TextCtrl
.__init
__(self
, frame
, -1, "", pos
, size
, style
)
151 #----------------------------------------------------------------------
152 #----------------------------------------------------------------------
153 # TextEdit Sample Application
156 class MyApp(wx
.PySimpleApp
):
162 demoMode
= wx
.GetSingleChoiceIndex(_("Select the demo mode"),
163 _("wxPython DocView Demo"),
164 [_("SDI Single Document"), _("SDI"), _("MDI")])
166 if demoMode
== 0 or demoMode
== 1:
167 flags
= wx
.lib
.docview
.DOC_SDI
169 flags
= wx
.lib
.docview
.DOC_MDI
173 self
.SetAppName(_("DocView Demo"))
175 docManager
= wx
.lib
.docview
.DocManager(flags
= flags
)
176 docManager
.AssociateTemplate(wx
.lib
.docview
.DocTemplate(docManager
,
185 #if wx.Platform == "__WXMAC__":
186 # wx.FileName.MacRegisterDefaultTypeAndCreator("txt", 'TEXT', 'WXMA')
189 docManager
.SetMaxDocsOpen(1)
191 if demoMode
== 2: # MDI
192 self
._frame
= MyMDIFrame(docManager
, None, -1, _("DocView Demo"), (0, 0), (500, 400), wx
.DEFAULT_FRAME_STYLE
)
194 self
._frame
= MyFrame(docManager
, None, -1, _("DocView Demo"), (0, 0), (500, 400), wx
.DEFAULT_FRAME_STYLE
)
199 fileMenu
.Append(wx
.ID_NEW
, _("&New..."))
200 fileMenu
.Append(wx
.ID_OPEN
, _("&Open..."))
202 if demoMode
== 2: # MDI
203 fileMenu
.Append(wx
.ID_CLOSE
, _("&Close"))
204 fileMenu
.AppendSeparator()
206 if demoMode
== 0 or demoMode
== 2: # Single Doc or MDI
207 fileMenu
.Append(wx
.ID_SAVE
, _("&Save"))
208 fileMenu
.Append(wx
.ID_SAVEAS
, _("Save &As"))
209 fileMenu
.AppendSeparator()
210 fileMenu
.Append(wx
.ID_PRINT
, _("&Print"))
211 fileMenu
.Append(wx
.ID_PRINT_SETUP
, _("Page &Setup"))
212 fileMenu
.Append(wx
.ID_PREVIEW
, _("Print Pre&view"))
215 editMenu
.Append(wx
.ID_UNDO
, _("&Undo"))
216 editMenu
.Append(wx
.ID_REDO
, _("&Redo"))
218 self
._frame
.editMenu
= editMenu
220 fileMenu
.AppendSeparator()
221 fileMenu
.Append(wx
.ID_EXIT
, _("E&xit"))
223 docManager
.FileHistoryUseMenu(fileMenu
)
226 helpMenu
.Append(wx
.ID_ABOUT
, _("&About"))
228 menuBar
= wx
.MenuBar()
229 menuBar
.Append(fileMenu
, _("&File"))
231 menuBar
.Append(editMenu
, _("&Edit"))
232 menuBar
.Append(helpMenu
, _("&Help"))
234 self
._frame
.SetMenuBar(menuBar
)
235 self
._frame
.Centre(wx
.BOTH
)
236 self
._frame
.Show(True)
238 self
.SetTopWindow(self
._frame
)
240 if demoMode
== 0: # Single doc
241 docManager
.OnFileNew(None)
246 def GetMainFrame(self
):
250 def GetDemoMode(self
):
251 return self
._demoMode
254 def CreateChildFrame(self
, doc
, view
):
255 subframe
= wx
.lib
.docview
.DocChildFrame(doc
, view
, self
.GetMainFrame(), -1, wx
.GetApp().GetAppName(), (10, 10), (300, 300), wx
.DEFAULT_FRAME_STYLE
)
258 fileMenu
.Append(wx
.ID_NEW
, _("&New"))
259 fileMenu
.Append(wx
.ID_OPEN
, _("&Open"))
260 fileMenu
.Append(wx
.ID_CLOSE
, _("&Close"))
261 fileMenu
.AppendSeparator()
262 fileMenu
.Append(wx
.ID_SAVE
, _("&Save"))
263 fileMenu
.Append(wx
.ID_SAVEAS
, _("Save &As"))
264 fileMenu
.AppendSeparator()
265 fileMenu
.Append(wx
.ID_PRINT
, _("&Print"))
266 fileMenu
.Append(wx
.ID_PRINT_SETUP
, _("Page &Setup"))
267 fileMenu
.Append(wx
.ID_PREVIEW
, _("Print Pre&view"))
270 editMenu
.Append(wx
.ID_UNDO
, _("&Undo"))
271 editMenu
.Append(wx
.ID_REDO
, _("&Redo"))
274 helpMenu
.Append(wx
.ID_ABOUT
, _("&About"))
276 menuBar
= wx
.MenuBar()
278 menuBar
.Append(fileMenu
, _("&File"))
279 menuBar
.Append(editMenu
, _("&Edit"))
280 menuBar
.Append(helpMenu
, _("&Help"))
282 subframe
.SetMenuBar(menuBar
)
283 subframe
.Centre(wx
.BOTH
)
287 class MyFrame(wx
.lib
.docview
.DocParentFrame
):
290 def __init__(self
, manager
, frame
, id, title
, pos
= wx
.DefaultPosition
, size
= wx
.DefaultSize
, style
= wx
.DEFAULT_FRAME_STYLE
, name
= "frame"):
291 wx
.lib
.docview
.DocParentFrame
.__init
__(self
, manager
, frame
, id, title
, pos
, size
, style
, name
)
293 wx
.EVT_MENU(self
, wx
.ID_ABOUT
, self
.OnAbout
)
296 def OnAbout(self
, event
):
297 wx
.MessageBox(wx
.GetApp().GetAppName(), _("About DocView"))
300 def GetMainFrame(self
):
304 class MyMDIFrame(wx
.lib
.docview
.DocMDIParentFrame
):
306 def __init__(self
, manager
, frame
, id, title
, pos
= wx
.DefaultPosition
, size
= wx
.DefaultSize
, style
= wx
.DEFAULT_FRAME_STYLE
, name
= "frame"):
307 wx
.lib
.docview
.DocMDIParentFrame
.__init
__(self
, manager
, frame
, id, title
, pos
, size
, style
, name
)
309 wx
.EVT_MENU(self
, wx
.ID_ABOUT
, self
.OnAbout
)
312 def OnAbout(self
, event
):
313 wx
.MessageBox(wx
.GetApp().GetAppName(), _("About DocView"))
316 def GetMainFrame(self
):