khanat-opennel-code/code/ryzom/client/data/gamedev/interfaces_v3/webbrowser.lua
2017-03-15 17:43:49 +02:00

161 lines
3.5 KiB
Lua

-- global
WebBrowser = {
template = "webig_browser",
apps = {}
}
function WebBrowser:openWindow(id, url)
-- default value if url is not set
url = url or "http://app.ryzom.com/"
local newWindow = false
local app = self:findAppById(id)
if not app then
app = {}
app.id = id
app.title = ""
app.url = url
-- getUI() object
app.uiWindow = nil
app.winid = "ui:interface:" .. id
app.winw = 780
app.winh = 500
app.minimized = true
app.activeUrl = ""
table.insert(self.apps, app)
end
if not app.uiWindow then
-- if there is window present (eg, 'webig'), then reuse it
app.uiWindow = getUI(app.winid, false)
if not app.uiWindow then
app.uiWindow = createRootGroupInstance(self.template, app.id, {
x = 0, y = 0, w = app.winw, h = app.winh, home = app.url,
browse_redo = "ui:interface:" .. app.id .. ":browser:header_opened:browse_redo",
browse_undo = "ui:interface:" .. app.id .. ":browser:header_opened:browse_undo",
browse_refresh = "ui:interface:" .. app.id .. ":browser:header_opened:browse_refresh"
})
if not app.uiWindow then
return
end
app.uiWindow:center()
end
newWindow = true
end
app.activeUrl = url
-- trigger on_open event
if not app.uiWindow.opened then
app.uiWindow.opened = true
end
-- trigger on_active event
if not app.uiWindow.active then
app.uiWindow.active = true
end
local html = app.uiWindow:find("html")
html:browse(url)
setTopWindow(app.uiWindow)
end
function WebBrowser:findAppById(id)
for k,app in pairs(self.apps) do
if app.id == id then
return app
end
end
return nil
end
function WebBrowser:findAppFromUiCaller()
-- id = app123
local id = getUICaller().id:match("ui:interface:([^:]*):?")
local app = self:findAppById(id)
if app then
return app
end
end
function WebBrowser:onActive()
if app then
self:restoreWindow(app)
end
end
function WebBrowser:onClickHeaderClose()
local app = self:findAppFromUiCaller()
if app then
self:saveWindow(app)
end
end
function WebBrowser:onClickHeaderOpen()
local app = self:findAppFromUiCaller()
if app then
self:restoreWindow(app)
end
end
-- save current window dimension and minimize window
function WebBrowser:saveWindow(app)
app.minimized = true
app.winw = app.uiWindow.w
app.winh = app.uiWindow.h
-- minimize
app.uiWindow.w = 150
app.uiWindow.h = 0
end
function WebBrowser:restoreWindow(app)
if app.minimized then
app.uiWindow.w = app.winw
app.uiWindow.h = app.winh
app.minimized = false
end
end
function WebBrowser:onClickRedo()
-- caller is :header_opened:browse_redo
local uiWindow = getUICaller().parent.parent
local html = uiWindow:find("html")
if html ~= nil then
runAH(nil, "browse_redo", "name=" .. html.id)
end
end
function WebBrowser:onClickUndo()
-- caller is :header_opened:browse_undo
local uiWindow = getUICaller().parent.parent
local html = uiWindow:find("html")
if html ~= nil then
runAH(nil, "browse_undo", "name=" .. html.id)
end
end
function WebBrowser:onClickRefresh()
-- caller is :header_opened:browse_refresh
local uiWindow = getUICaller().parent.parent
local html = uiWindow:find("html")
if html ~= nil then
html:refresh()
end
end
function WebBrowser:onClickHome()
-- caller is :header_opened:browse_home
local uiWindow = getUICaller().parent.parent
local html = uiWindow:find("html")
if html ~= nil then
html:browse("home")
end
end