Метод Dialog:setOnDone
Используется для установки функции обработчика диалогового окна (тип: function). Функция вызывается, когда диалог был закрыт пользователем, и возвращает значение в зависимости от нажатой пользователем кнопки (см. раздел Forms.DialogCode).
Подробное описание соответствий параметров кнопок и кодов возврата диалога приведено в разделах ui.DialogButtons:addButton, Forms.DialogButton, Forms.DialogButtonRole, Forms.DialogCode.
В следующем примере в случае, если пользователь нажал кнопку ОК, возвращается значение DialogCode_Accepted. В случае нажатия кнопки Отменавозвращается значение DialogCode_Rejected.
Пример
local contextWrapper = { context = nil}
local dialogButtons = ui:DialogButtons{}
dialogButtons:addButton("OK", Forms.DialogButtonRole_Accept)
dialogButtons:addButton("Cancel", Forms.DialogButtonRole_Reject)
dlg = ui:Dialog {
Name = "Hello, world!"
Size = Forms.Size(600,300),
Buttons = dialogButtons,
ui:Column {
ui:Row {lblHello},
ui:Row {txtEntryField}
}
}
dlg:setOnDone(function(ret)
if ret == Forms.DialogCode_Accepted then
-- OK pressed
else
-- Cancel pressed
end
end)
contextWrapper.handler = function(context)
contextWrapper.context = context
context.doWithDocument(function(document)
context.showDialog(dlg)
end)
end
Стоит обратить особое внимание на то, что если в обработчике результата необходимо производить действия с документом, стоит использовать context.doWithDocument.
dlg:setOnDone(function(ret)
if ret == Forms.DialogCode_Accepted then
contextWrapper.context.doWithDocument(function(document)
local firstSheet = document:getBlocks():getTable(0)
local cell = firstSheet:getCell("A1")
cell:setText("Cell content")
local textProps = cell:getRange():getTextProperties()
textProps.bold = true
textProps.italic = true
local rgba = DocumentAPI.ColorRGBA(121,112,212,255)
textProps.textColor = DocumentAPI.Color(rgba)
cell:getRange():setTextProperties(textProps)
end)
else
-- Cancel pressed
end
end)