git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15189 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			202 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| #----------------------------------------------------------------------
 | |
| 
 | |
| import sys, os
 | |
| import StructuredText
 | |
| from wxPython.wx import *
 | |
| 
 | |
| 
 | |
| USE_WXHTML = 1
 | |
| 
 | |
| 
 | |
| if not USE_WXHTML:
 | |
|     try: # try to load the IE ActiveX control
 | |
|         from wxPython.lib.activexwrapper import MakeActiveXClass
 | |
|         import win32com.client.gencache
 | |
|         browserModule = win32com.client.gencache.EnsureModule(
 | |
|             "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 0, 1, 1)
 | |
|     except:
 | |
|         USE_WXHTML = 1
 | |
| 
 | |
| if not USE_WXHTML:
 | |
|     BrowserClass = MakeActiveXClass(browserModule.WebBrowser)
 | |
| 
 | |
|     class MyHtmlWindow(BrowserClass):
 | |
|         def SetPage(self, html):
 | |
|             import tempfile
 | |
|             filename = tempfile.mktemp('.html')
 | |
|             f = open(filename, 'w')
 | |
|             f.write(html)
 | |
|             f.close()
 | |
|             self.Navigate(os.path.abspath(filename))
 | |
|             self.filename = filename
 | |
| 
 | |
|         def OnDocumentComplete(self, pDisp=None, URL=None):
 | |
|             os.unlink(self.filename)
 | |
| 
 | |
| else:
 | |
|     from wxPython.html import *
 | |
|     MyHtmlWindow = wxHtmlWindow
 | |
| 
 | |
| 
 | |
| 
 | |
| class StxFrame(wxFrame):
 | |
|     title = "StxViewer"
 | |
|     def __init__(self, stxFile):
 | |
|         wxFrame.__init__(self, None, -1, self.title, size=(650, 700),
 | |
|                          style=wxDEFAULT_FRAME_STYLE|wxNO_FULL_REPAINT_ON_RESIZE)
 | |
| 
 | |
|         ##self.CreateStatusBar()
 | |
| 
 | |
|         menu = wxMenu()
 | |
|         menu.Append(10, "&Open\tCtrl-O", "Open a Structured Text file")
 | |
|         EVT_MENU(self, 10, self.OnOpen)
 | |
|         menu.Append(20, "&Close", "Close the current file")
 | |
|         EVT_MENU(self, 20, self.OnClose)
 | |
|         menu.Append(30, "&Save\tCtrl-S", "Save the current file")
 | |
|         EVT_MENU(self, 30, self.OnSave)
 | |
|         menu.Append(40, "Save &as", "Save the current file to a new name")
 | |
|         EVT_MENU(self, 40, self.OnSaveAs)
 | |
|         menu.Append(45, "Save as &html", "Save the current file as HTML")
 | |
|         EVT_MENU(self, 45, self.OnSaveAsHTML)
 | |
|         menu.AppendSeparator()
 | |
|         menu.Append(50, "&Refresh\tCtrl-R", "Reload the file from disk")
 | |
|         EVT_MENU(self, 50, self.OnRefresh)
 | |
|         menu.AppendSeparator()
 | |
|         menu.Append(60, "E&xit\tCtrl-X", "Close the application")
 | |
|         EVT_MENU(self, 60, self.OnExit)
 | |
| 
 | |
| 
 | |
|         menuBar = wxMenuBar()
 | |
|         menuBar.Append(menu, "&File")
 | |
|         self.SetMenuBar(menuBar)
 | |
| 
 | |
| 
 | |
|         nb = wxNotebook(self, -1)
 | |
|         EVT_NOTEBOOK_PAGE_CHANGED(self, -1, self.OnPageChanged)
 | |
| 
 | |
|         self.htmlWin = MyHtmlWindow(nb, -1)
 | |
|         nb.AddPage(self.htmlWin, "View")
 | |
| 
 | |
|         self.editWin = wxTextCtrl(nb, -1, "", style=wxTE_MULTILINE)
 | |
|         self.editWin.SetFont(wxFont(10, wxTELETYPE, wxNORMAL, wxNORMAL))
 | |
|         nb.AddPage(self.editWin, "Edit")
 | |
| 
 | |
|         self.viewHtml = wxTextCtrl(nb, -1, "", style=wxTE_MULTILINE|wxTE_READONLY)
 | |
|         self.viewHtml.SetFont(wxFont(10, wxTELETYPE, wxNORMAL, wxNORMAL))
 | |
|         nb.AddPage(self.viewHtml, "HTML")
 | |
| 
 | |
|         self.LoadStxFile(stxFile)
 | |
| 
 | |
| 
 | |
|     def LoadStxFile(self, stxFile):
 | |
|         self.file = stxFile
 | |
|         if stxFile is not None:
 | |
|             text = open(stxFile).read()
 | |
|             self.SetTitle(self.title + ': ' + stxFile)
 | |
|         else:
 | |
|             text = ""
 | |
|             self.SetTitle(self.title)
 | |
|         self.LoadStxText(text)
 | |
| 
 | |
| 
 | |
|     def LoadStxText(self, text):
 | |
|         # Old ST
 | |
|         html = str(StructuredText.html_with_references(text))
 | |
| 
 | |
|         # NG Version
 | |
|         #st = StructuredText.Basic(text)
 | |
|         #doc = StructuredText.Document(st)
 | |
|         #html = StructuredText.HTMLNG(doc)
 | |
| 
 | |
|         self.htmlWin.SetPage(html)
 | |
|         self.editWin.SetValue(text)
 | |
|         self.viewHtml.SetValue(html)
 | |
|         self.html = html
 | |
| 
 | |
| 
 | |
|     def OnPageChanged(self, evt):
 | |
|         if evt.GetOldSelection() == 1:  # if it was on the edit page
 | |
|             text = self.editWin.GetValue()
 | |
|             self.LoadStxText(text)
 | |
| 
 | |
| 
 | |
|     def OnOpen(self, evt):
 | |
|         dlg = wxFileDialog(self, defaultDir=os.getcwd(),
 | |
|                            wildcard = "STX files (*.stx)|*.stx|"
 | |
|                                       "Text files (*.txt)|*.txt|"
 | |
|                                       "All files (*.*)|*.*",
 | |
|                            style=wxOPEN)
 | |
|         if dlg.ShowModal() == wxID_OK:
 | |
|             self.LoadStxFile(dlg.GetPath())
 | |
|         dlg.Destroy()
 | |
| 
 | |
| 
 | |
| 
 | |
|     def OnClose(self, evt):
 | |
|         self.LoadStxFile(None)
 | |
| 
 | |
| 
 | |
|     def OnSave(self, evt):
 | |
|         if not self.file:
 | |
|             self.OnSaveAs(evt)
 | |
|         else:
 | |
|             text = self.editWin.GetValue()
 | |
|             open(self.file, 'w').write(text)
 | |
|             self.LoadStxFile(self.file)
 | |
| 
 | |
| 
 | |
|     def OnSaveAs(self, evt):
 | |
|         dlg = wxFileDialog(self, "Save as...", defaultDir=os.getcwd(),
 | |
|                            wildcard = "STX files (*.stx)|*.stx|"
 | |
|                                       "Text files (*.txt)|*.txt|"
 | |
|                                       "All files (*.*)|*.*",
 | |
|                            style=wxSAVE)
 | |
|         if dlg.ShowModal() == wxID_OK:
 | |
|             file = dlg.GetPath()
 | |
|             text = self.editWin.GetValue()
 | |
|             open(file, 'w').write(text)
 | |
|             self.LoadStxFile(file)
 | |
|         dlg.Destroy()
 | |
| 
 | |
| 
 | |
|     def OnSaveAsHTML(self, evt):
 | |
|         dlg = wxFileDialog(self, "Save as...", defaultDir=os.getcwd(),
 | |
|                            wildcard = "HTML files (*.html)|*.html|"
 | |
|                                       "All files (*.*)|*.*",
 | |
|                            style=wxSAVE)
 | |
|         if dlg.ShowModal() == wxID_OK:
 | |
|             file = dlg.GetPath()
 | |
|             text = self.editWin.GetValue()
 | |
|             self.LoadStxText(text)
 | |
|             open(file, 'w').write(self.html)
 | |
|         dlg.Destroy()
 | |
| 
 | |
| 
 | |
| 
 | |
|     def OnRefresh(self, evt):
 | |
|         self.LoadStxFile(self.file)
 | |
| 
 | |
| 
 | |
|     def OnExit(self, evt):
 | |
|         self.Close(true)
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| app = wxPySimpleApp()
 | |
| wxInitAllImageHandlers()
 | |
| 
 | |
| if len(sys.argv) > 1:
 | |
|     filename = sys.argv[1]
 | |
| else:
 | |
|     filename = None
 | |
| 
 | |
| frame = StxFrame(filename)
 | |
| frame.Show(true)
 | |
| app.MainLoop()
 | |
| 
 | |
| 
 | |
| 
 |