-------------------------------------------------------------------------=--- -- Name: htmlwin.wx.lua -- Purpose: wxHtmlWindow wxLua sample -- Author: J Winwood -- Created: May 2002 -- Copyright: (c) 2002 Lomtick Software. All rights reserved. -- Licence: wxWidgets licence -------------------------------------------------------------------------=--- -- Load the wxLua module, does nothing if running from wxLua, wxLuaFreeze, or wxLuaEdit require("wx") frame = nil -- the main frame of the program html = nil -- the wxLuaHtmlWindow child of the frame (subclassed wxHtmlWindow) htmlTextPage = [[ wxLua Bound Widget demonstration

wxHtmlWidgetCell demonstration

There are three bound widgets below.


]] function CreateBoundWindow(event) local ax, ay, rc local fl = 0 -- parse the X parameter in the custom lua tag rc, ax = event.HtmlTag:GetParamAsInt("X") -- parse the Y parameter rc, ay = event.HtmlTag:GetParamAsInt("Y") -- if there is a float tag set the float if event.HtmlTag:HasParam("FLOAT") then fl = ax end -- create the control to embed local parent = nil if wx.wxCHECK_VERSION(2,7,0) then if event:GetHtmlParser() and event:GetHtmlParser():GetWindowInterface() and event:GetHtmlParser():GetWindowInterface():GetHTMLWindow() then parent = event:GetHtmlParser():GetWindowInterface():GetHTMLWindow() else print("FIXME: wxWidgets does not provide the html window for print previews?") print("1:", event:GetHtmlParser()) print("2:", event:GetHtmlParser():GetWindowInterface()) print("3:", event:GetHtmlParser():GetWindowInterface():GetHTMLWindow()) end else parent = event.HtmlParser.Window end if parent then local wnd = wx.wxTextCtrl( parent, wx.wxID_ANY, event.HtmlTag:GetParam("TEXT"), wx.wxPoint(0, 0), wx.wxSize(ax, ay), wx.wxTE_MULTILINE ) -- show the control wnd:Show(true) -- create the container widget cell local widget = wx.wxHtmlWidgetCell(wnd, fl) -- insert the cell into the document event.HtmlParser:OpenContainer():InsertCell(widget) event:SetParseInnerCalled(false) end end -- create the frame window frame = wx.wxFrame( wx.NULL, wx.wxID_ANY, "wxLuaHtmlWindow Demo", wx.wxDefaultPosition, wx.wxSize(450, 450), wx.wxDEFAULT_FRAME_STYLE ) -- create a simple file menu local fileMenu = wx.wxMenu() fileMenu:Append(wx.wxID_PREVIEW, "Print Pre&view", "Preview the HTML document") fileMenu:Append(wx.wxID_PRINT, "&Print", "Print the HTML document") fileMenu:Append(wx.wxID_EXIT, "E&xit", "Quit the program") -- create a simple help menu local helpMenu = wx.wxMenu() helpMenu:Append(wx.wxID_ABOUT, "&About", "About the wxLua wxHtmlWindow sample") -- create a menu bar and append the file and help menus local menuBar = wx.wxMenuBar() menuBar:Append(fileMenu, "&File") menuBar:Append(helpMenu, "&Help") -- insert the menu bar into the frame using the %property binding tag (eg. SetMenubar function) frame.MenuBar = menuBar -- create a simple status bar frame:CreateStatusBar(2) frame:SetStatusText("Welcome to wxLua.") frame:Connect(wx.wxID_PREVIEW, wx.wxEVT_COMMAND_MENU_SELECTED, function (event) local printing = wx.wxHtmlEasyPrinting("HtmlWindow.wx.lua", frame) printing:PreviewText(htmlTextPage) end ) frame:Connect(wx.wxID_PRINT, wx.wxEVT_COMMAND_MENU_SELECTED, function (event) local printing = wx.wxHtmlEasyPrinting("HtmlWindow.wx.lua", frame) printing:PrintText(htmlTextPage) end ) -- connect the selection event of the exit menu item to an -- event handler that closes the window frame:Connect(wx.wxID_EXIT, wx.wxEVT_COMMAND_MENU_SELECTED, function (event) frame:Close(true) end ) -- connect the selection event of the about menu item frame:Connect(wx.wxID_ABOUT, wx.wxEVT_COMMAND_MENU_SELECTED, function (event) wx.wxMessageBox('This is the "About" dialog of the wxHtmlWindow wxLua sample.\n'.. wxlua.wxLUA_VERSION_STRING.." built with "..wx.wxVERSION_STRING, "About wxLua", wx.wxOK + wx.wxICON_INFORMATION, frame ) end) -- create the html window html = wx.wxLuaHtmlWindow(frame) -- Override the virtual function -- virtual void wxLuaHtmlWindow::OnSetTitle(const wxString& title) html.OnSetTitle = function(self, title) frame.Title = frame.Title.." - "..title end -- when a lua custom tag is parsed in the html, this event handler -- will be invoked wx.wxGetApp():Connect(wx.wxID_ANY, wx.wxEVT_HTML_TAG_HANDLER, function (event) CreateBoundWindow(event) end) -- set the frame window and status bar html:SetRelatedFrame(frame, "wxHtmlWindow wxLua Sample : %s") html:SetRelatedStatusBar(1) -- load the document html:SetPage(htmlTextPage) -- html:LoadPage("testpage.html") -- show the frame window wx.wxGetApp().TopWindow = frame frame:Show(true) -- Call wx.wxGetApp():MainLoop() last to start the wxWidgets event loop, -- otherwise the wxLua program will exit immediately. -- Does nothing if running from wxLua, wxLuaFreeze, or wxLuaEdit since the -- MainLoop is already running or will be started by the C++ program. wx.wxGetApp():MainLoop()