Boa tarde senhores!
Mais uma vez preciso da ajuda de vocês.
Há duas semanas pedi uma mão pra carregar imagens dinamicamente, o Roberto Gerson me sugeriu o NCLEdit.
Estudei a API, achei um exemplo
no Fórum do Software Público e tentei usar aqui, funcionou na VM 0.10.10, mas não na VM 0.12.3, como o próprio tópico
no fórum indica.
Usei a VM 0.10.10 nos testes, mas, ao fazer um teste com o NCLEdit tentando adicionar um novo documento NCL recebi um doloroso "segmentation fault" do ginga...
Como não encontrei nenhum outro exemplo do uso do NCLEdit na internet, preciso de uma ajuda para resolver esse problema, estou enviando anexado 3 códigos muito simples, que escrevi para ficar claro meu problema.
1 - Um teste com o ncl montado na mão, onde eu importo um ncl sem problemas. testeDocumentoImportado.ncl
3 - Por ultimo o que eu preciso, mas não funciona. testNCLEditDocumentoImportado.ncl
Este terceiro está assim:
<?xml version="1.0" encoding="ISO-8859-1"?>
<head>
<importedDocumentBase id="ibase"></importedDocumentBase>
<regionBase>
<region id="rlua" width="20%" height="20%" left="50%"/>
<region id="rimg" width="20%" height="20%"/>
</regionBase>
<descriptorBase>
<descriptor id="dlua" region="rlua"/>
<descriptor id="dimg" region="rimg"/>
</descriptorBase>
<connectorBase>
<causalConnector id="onEndAttributionStart">
<simpleCondition role="onEndAttribution" />
<simpleAction role="start" />
</causalConnector>
</connectorBase>
</head>
<body id="bodyId">
<port id="p1" component="lua1"/>
<media id="lua1" src="NCLEditDocumentoImportado.lua" descriptor="dlua">
<property name="img1Start"/>
<property name="keyPressed"/>
</media>
</body>
</ncl>
Onde o documento NCLEditDocumentoImportado.lua é como se segue:
local function handler(evt)
if evt.class == 'ncl' and evt.type == 'presentation' and evt.action == 'start' then
local commandAddNode = {}
commandAddNode["class"] = 'edit'
commandAddNode["documentId"] = 'editcmd'
commandAddNode["command"] = 'addImportedDocumentBase'
commandAddNode["compositeId"] = 'bodyId'
commandAddNode["data"] = '<?xml version="1.0" encoding="UTF-8"?><importedDocumentBase></importedDocumentBase>'
--postagem do comando de edicao addNode
print('Enviando o primeiro....---------------------------')
print('--------------------------------------------------')
local commandAddLink = {}
commandAddLink["class"] = 'edit'
commandAddLink["documentId"] = 'editcmd'
commandAddLink["command"] = 'addImportNCL'
commandAddLink["compositeId"] = 'ibase'
commandAddLink["data"] = '<?xml version="1.0" encoding="UTF-8"?><importNCL documentURI="/misc/ncl30/ncledit/exemplo_03/main.ncl" alias="widget"/>'
--postagem do comando de edicao addLink
print('Enviando o Segundo....----------------------------')
print('--------------------------------------------------')
commandAdd = {}
commandAdd["class"] = 'edit'
commandAdd["documentId"] = 'editcmd'
commandAdd["command"] = 'addContext'
commandAdd["compositeId"] = 'bodyId'
commandAdd["data"] = '<?xml version="1.0" encoding="UTF-8"?><context id="importExemplo" refer="widget#idbody"/>'
--postagem do comando de edicao addLink
print('Enviando o Terceiro....---------------------------')
print('--------------------------------------------------')
--postagem do comando de atribuicao para que o noadicionado comece a tocar
event.post{class='ncl', type='attribution', action='start', name='img1Start', value='yes'}
event.post{class='ncl', type='attribution', action='stop', name='img1Start', value='yes'}
end
end
event.register(handler)
O resultado é:
(...)
ApplicationPlayerAdapter::updateStatus with code = '5' param = '0x25, ,editcmd,<?xml version="1.0" encoding="UTF-8"?><importNCL documentURI="/misc/ncl30/ncledit/exemplo_03/main.ncl" alias="widget"/>' and type = '10'
ApplicationPlayerAdapter::updateStatus NCLEDIT newParam = '0x25,-1,editcmd,<?xml version="1.0" encoding="UTF-8"?><importNCL documentURI="/misc/ncl30/ncledit/exemplo_03/main.ncl" alias="widget"/>'
PresentationEngineManager::updateStatus NCLEDIT
FormatterMediator::editingCommand(0x25): '3'
TimeStamp: 1.857
ComponentManager::releaseComponentFromObject 'NclDocumentConverter'
../../launcher.sh: line 14: 999 Segmentation fault /usr/local/sbin/ginga --ncl $1
Espero que possam me ajudar, é o útimo ponto pra eu encerrar a implementação proposta na minha monografia :D
PS: Pra fazer os testes e executar com sucesso o exemplo testeNCLEdit.ncl é importante executar o ncl de dentro da pasta da aplicação, já que o caminho relativo pra encontrar a imagem é baseado no local em que o 'launcher' é chamado, assim:
../../launcher.sh testeNCLEdit.ncl
Obrigado!
--
Welington Veiga
'Há pessoas que transformam o sol numa simples mancha amarela, mas há aquelas que fazem de uma simples mancha amarela o próprio sol.'