]>
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
):