#!/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()