XML de Configuração - netoleal/ASF2 GitHub Wiki
Toda a aplicação pode ser configurada por XML. Abaixo algumas observações:
A aplicação e as seções podem ter infinitos parâmetros de acordo com sua necessidade. Aguns exemplos:
Parâmetros Especiais
<debug>true</debug><!--Aplicação em modo debug-->
<showContextMenu>{debug}</showContextMenu><!--Exibe ou não o menu de contexto-->
<hideContextMenuBuiltIn>true</hideContextMenuBuiltIn><!--Exibe ou não os itens default do menu de contexto-->
<lockStageDuringTransitions>true</lockStageDuringTransitions><!--trava o clique no stage inteiro enquanto alguma seção estiver carregando durante a transição-->
Parâmetros simples
<titulo>Este é o título</titulo>
Parâmetros aninhados
<base>../</base>
<swf>{base}swf/</swf><!--resulta em "../swf/"-->
Parâmetros condicionais
<swf>
<if condition="{debug}">
<then>swf-debug/</then>
<else>swf/</else>
</if>
</swf> <!-- Resulta em "swf-debug/" caso a condição resulte em "true" e "swf/" caso contrário. É possível criar-se múltiplas condições como o exemplo abaixo -->
<param>
<if condition="(true && 1 gt; 2) || false || {locale} == 'pt-br'">
<then>
<if condition="!{loadFiles}">
<then>param value for condition TRUE and loadFiles = false</then>
<else>param value for condition TRUE and loadFiles = true</else>
</if>
</then>
<else>param value for condition FALSE</else>
</if>
</param> <!-- os operadores > e < precisam ser substituídos por:
gt; Maior que
lt; Menor que
gte: Maior ou igual a
lte; Menos ou igual a
Operadores lógicos podem ser usados das duas formas. = e == valem a mesma coisa. & e && também e assim por diante. -->
Você pode criar uma classe que será usada para inicializar sua aplicação. Para isso, o ASF possui uma interface chamada IMainController
package asf.interfaces
{
import asf.core.app.ASF;
public interface IMainController extends IDisposable
{
function init( p_app:ASF ):void;
}
}
Você cria uma classe que implementa essa interface e informa no application.xml o nome completo da classe:
No XML
<mainController>com.netoleal.asf.test.app.ASFTestMainController</mainController>
Exemplo de implementação
package com.netoleal.asf.test.app
{
import asf.core.app.ASF;
import asf.interfaces.IMainController;
public class ASFTestMainController implements IMainController
{
private var app:ASF;
public function init( p_app:ASF ):void
{
app = p_app;
app.navigation.openSection( { sectionID: "baseSection", withSubSection: "about" } );
}
public function dispose():void
{
app = null;
}
}
}
O Framework irá iniciar, carregar o application.xml, ler as configurações, carregar todas as dependências iniciais e, em seguida, criará uma instância do seu IMainController
e automaticamente executará o método init
passando como parâmetro uma referência da aplicação.
Você pode acessar seu IMainController
a partir da propriedade mainController
app.mainController
Layers podem ser criadas livremente e o aninhamento entre elas é livre e será respeitado no DisplayList.
<layers>
<base align="topleft" />
<sections />
<historyBar />
<menu align="topleft" margins="10,100" />
<logo align="topright" margins="-100,100" />
</layers>
Alguns parâmetros podem ser usados na seção:
<section id="Section 2" viewClass="com.netoleal.asf.test.view.sections.SecondSectionView" layer="sections" loadAtStart="false" keepDependencies="false" ignoreChildren="false">
- id: Identificação
-
viewClass: Classe que será instanciada após as dependencias serem carregadas. Essa classe precisa implementar
ISectionView
- layer: Em qual layer da app pai da seção a View será adicionada
- loadAtStart (default false) Inclui ou não as dependências dessa seção ao loading da pai
- keepDependencies (default false) Mantém ou não as dependências carregadas após a seção sair da navegação
- ignoreChildren (default false) Decide se as seções filhas abertas, serão ou não fechadas antes de fechar a seção na navegação.
-
closeOnNavigate (default true) Caso este parâmetro seja
false
, a seção não fechará quando o métodocloseAllActiveSections
for chamado e, consequentemente, continuará aberta durante a navegação até que você a feche manualmente. -
type Existem 3 tipos de seções.
- default Esse é o valor padrão. Representa o tipo normal de seções.
- url Use esse tipo para seções externas. O Framework usará os parâmetros "href" e "target"
- javascript Executa métodos javaScript. O Framework usará os parâmetros "method" e "target"
- href URL destino quando o tipo da seção é "url"
- method Função JavaScript executada quando o tipo da seção é "javascript"
- target Janela para abrir a url "href" ou destino para executar a função JavaScript
- closeCurrentBeforeOpen (default true) Fecha ou não as seções atuais antes de carregar e abrir a próxima seção
- setAsCurrent (default true) Caso o parâmetro "closeCurrentBeforeOpen" seja "false" e este seja "true", o framework carregará a próxima seção e só em seguida irá fechar a(s) anterior(es) para então abrir a próxima. Caso os dois sejam "false", nenhuma seção será fechada pela navegação.
Todas as seções possuem funcionalidades de application. Ou seja, também possuem dicionário, parâmetros, layers, sounds e sections
<section id="contact" viewClass="com.netoleal.asf.test.view.sections.ContactSectionView">
<files>
<file id="source" type="swf">{mainApp.base}{mainApp.swf}modules/Contact.swf</file>
</files>
<localization>
<locale>{mainApp.locale}</locale>
<file>{mainApp.base}locales/{mainApp.locale}/contact/dict.xml</file>
</localization>
</section>
<section id="source" type="url" href="{mainApp.base}swf/srcview/" target="_blank"/>
<section id="jsTest" type="javascript" method="alert('ASF Framework');" target="_self"/>
Application e Sections suportam sounds. Exemplo:
<sounds>
<sound id="embed" type="embed" volume="0.5" fadeIn="300" autoPlay="fx" loops="2" allowMultipleChannels="true">com.netoleal.asf.test.media.EmbedTrack</sound>
<sound id="track" type="url" volume="1" autoPlay="false" stream="true">{mainApp.base}media/sounds/track_01.mp3</sound>
<sound id="fx" ignoreIfPlaying="true" type="url" allowMultipleChannels="true" autoPlay="false" loops="1">{mainApp.base}media/sounds/fx.mp3</sound>
</sounds>
Parâmetros dos sounds
- id: identificação
- type: embed ou url. Caso for URL, o MP3 será carregado dinamicamente. Caso embed, um objeto sound exportado na Library de um FLA será instanciado e reproduzido
- stream: Caso true, o som será carregado apenas quando for executado. Caso contrário ele entra nas dependências da seção/aplicação atual
- volume: Volume do som (0-1)
- fadeIn: Reproduz efeito de fade no início da execução do som. Esse parâmetro é o tempo em millisegundos.
- autoPlay: Caso "true" reproduz quando a seção iniciar. Caso seja um ID de um outro som, esse será executado após o som com ID informado nesse parâmetro terminar.
- loops: Quantas vezes o som executa
- allowMultipleChannels: Permite ou não que o som será reproduzido novamente independente de já estar sendo executado. Ideal para efeitos. Se for definido como "false", ele vai parar a reprodução atual para iniciar outra.
- ignoreIfPlaying: Decide se o pode ser executado caso ele já esteja.