Modal Dialogs / Support for 9.70

OTC now supports showing and answering modal dialogs.

addDialog(modaldialog, dialogId, cid, callback)

TODO:
-find out what the "popup" value does.. (Maybe someone knows)
This commit is contained in:
Samuel
2012-11-27 14:48:48 +01:00
parent bce8e90ede
commit eb979ef7cd
11 changed files with 217 additions and 11 deletions

View File

@@ -0,0 +1,69 @@
function init()
g_ui.importStyle('modaldialog.otui')
connect(g_game, { onModalDialog = onModalDialog,
onGameEnd = destroy })
end
function terminate()
disconnect(g_game, { onModalDialog = onModalDialog,
onGameEnd = destroy })
destroy()
end
function destroy()
if modalDialog then
modalDialog:destroy()
modalDialog = nil
end
end
function onModalDialog(id, title, message, enterId, enterText, escapeId, escapeText, choices)
if modalDialog then return end
modalDialog = g_ui.createWidget('ModalDialog', rootWidget)
local enterButton = modalDialog:getChildById('enterButton')
local escapeButton = modalDialog:getChildById('escapeButton')
local messageLabel = modalDialog:getChildById('messageLabel')
local choiceList = modalDialog:getChildById('choiceList')
modalDialog:setText(title)
messageLabel:setText(message)
enterButton:setText(enterText)
escapeButton:setText(escapeText)
local focusLabel = nil
for k, v in pairs(choices) do
local choiceId = v[1]
local choiceName = v[2]
local label = g_ui.createWidget('ChoiceListLabel', choiceList)
label.choiceId = choiceId
label:setText(choiceName)
label:setPhantom(false)
if not focusLabel then
focusLabel = label
end
end
choiceList:focusChild(focusLabel)
local enterFunc = function()
g_game.answerModalDialog(id, enterId, choiceList:getFocusedChild().choiceId)
destroy()
end
local escapeFunc = function()
g_game.answerModalDialog(id, escapeId, choiceList:getFocusedChild().choiceId)
destroy()
end
enterButton.onClick = enterFunc
modalDialog.onEnter = enterFunc
escapeButton.onClick = escapeFunc
modalDialog.onEscape = escapeFunc
return
end

View File

@@ -0,0 +1,10 @@
Module
name: game_modaldialog
description: Show and process modal dialogs
author: Summ
website: www.otclient.info
sandboxed: true
dependencies: [ game_interface ]
scripts: [ modaldialog.lua ]
@onLoad: init()
@onUnload: terminate()

View File

@@ -0,0 +1,61 @@
TextScrollbar < VerticalScrollBar
ChoiceListLabel < Label
font: verdana-11px-monochrome
background-color: alpha
text-offset: 2 0
focusable: true
$focus:
background-color: #ffffff22
color: #ffffff
ModalDialog < MainWindow
id: modalDialog
!text: tr('Title')
size: 280 230
@onEscape: self:destroy()
Label
id: messageLabel
anchors.top: parent.top
anchors.left: parent.left
anchors.right: parent.right
text-align: left
text: Message
height: 60
TextList
id: choiceList
vertical-scrollbar: choiceScrollBar
anchors.fill: parent
anchors.top: prev.bottom
anchors.bottom: next.top
margin-bottom: 10
margin-top: 10
padding: 1
focusable: false
Button
id: enterButton
!text: tr('Ok')
anchors.top: next.top
anchors.right: next.left
margin-right: 8
width: 60
Button
id: escapeButton
!text: tr('Cancel')
anchors.bottom: parent.bottom
anchors.right: parent.right
margin-top: 10
width: 60
VerticalScrollBar
id: choiceScrollBar
anchors.top: choiceList.top
anchors.bottom: choiceList.bottom
anchors.right: choiceList.right
step: 14
pixels-scroll: true