This page was last modified 13:43, 30 October 2007.
Arquitetura View na Series60
From Forum Nokia Wiki
Em Symbian encontramos muito a relação de separar a UI da Engine do programa. Um programador ao projetar seu programa deve escolher qual arquitetura irá utilizar na sua 'user interface'. Temos três tipos diferentes de arquitetura:
Traditional Symbian OS Control-Based Architecture ( Arquitetura tradicional ).
Dialog-Based Architecture ( Arquitetua baseada em dialogs )
Avkon View-Switching Architecture ( Arquitetura Avkon View - Series60 específica )
.
Cabe ao programador análisar qual dessas três arquiteturas se encaixa melhor no projeto, caso não saiba diferencia-las verifique o artigo Projetando a User Interface.
Contents |
O que é um view?
View é uma forma de você apresentar dados para usuários através da 'user interface'. Um view não apresenta o dado diretamente , ele o faz através de containers (controles). O view é responsável por fazer a criação e a destruição do controle que gerencia.
Características dos views
Aplicações que demandam várias telas para representar diferentes estados de uma aplicação frequentemente utilizam-se de Views. Por exemplo em um jogo, cada estado do jogo poderia ser representado por um View. Exemplo:
Tela Inicial
Opções
Área do jogo
Créditos
O servidor de views é responsável por ativar e desativar cada um deles. Por padrão apenas um view pode estar ativo por vez e devem ser identificados por uma UId única. Esta mesma UId será utilizada na hora que for necessária a troca de um view por outro.
Nota: Cada View possui informações como seu UId e o UId da aplicação a qual pertence.
Diferenças ao se trabalhar com views
Para aqueles acostumados com a arquitetura tradicional teremos algumas mudanças. Teremos uma classe a mais que será o view. Será de responsábilidade dele instanciar o controle e não mais da appui, esta classe é derivada de CaknView. Outra mudança é a nossa classe AppUi que será derivada de CaknViewAppUi para poder trabalhar com views. Você nunca deve utilizar views sem derivar sua appui desta classe.
Outra mudança significativa é que reduzimos significamente as obrigações da AppUi, agora cada view pode implementar seu próprio HandleCommandL() assim como outros Handles. Isto permite que cada view possua seu próprio menubar por exemplo (é preciso que seja implementado no seu arquivo de recursos um AVKON_VIEW). Ainda sim é aconselhável que estes handles possuam implementações default na classe AppUi para aqueles views mais genéricos.
Classe CAknView
Esta classe oferece funcionalidades para se trabalhar com views, ao se derivar desta classe o programador deve implementar os métodos DoActivateL(), DoDeactivate() e Id(), eles serão responsáveis por instânciar, exibir e deletar o controle. Eles serão utilizados pelo servidor de views na hora de ativar ou desativar um view.
Visão básica destes métodos:
virtual IMPORT_C void DoActivateL (const TVwsViewId &aPrevViewId, TUid aCustomMessageId, const TDesC8 &aCustomMessage)=0
Este método é responsável por fazer a instancialização e exibição do seu controle. Ele será chamado quando um usuário fizer um pedido ao servidor para ativar um view. Ao ativar um view é possível passar uma mensagem que pode ser utilizada para realizar uma operação em específico, isto é opcional.
Nota: aPrevViewId contêm informações sobre o view anterior , como o seu UId e o UId da aplicação responsável por este view.
virtual void DoDeactivate ()=0
Este método será chamado quando o seu view estar por ser desativado, ele é chamado ao término da sua aplicação ao quando o usuário faz requisição para ativar outro view (Lembrando apenas é possível ter um view ativado por vez).
Nota: Este método não pode abandonar.
A troca entre views é feita passando o UId correspondente ao view que queremos que seja ativado. Cada view precisa implementar o método Id(), este método retorna o UId referente aquele view. O framework é responsável por chamar este método.
virtual IMPORT_C TUid Id () const =0
IMPORTANTE: Mesmo que a classe view não implemente seu próprio arquivo de recursos é preciso fazer uma chamada ao método BaseConstructL() na sua instancialização.
Classe CAknViewAppUi
Para utilizar views é preciso que a sua classe AppUi seja derivada de CAknViewAppUi , pois ela oferece as funcionalidades necessárias para isto. O procedimento é bastante simples, instanciamos o nosso view e então registramos ele ao servidor de views. Para fazer este registro utilizamos o método:
void AddViewL(CAknView *aView);
Após registrarmos os views da nossa aplicação é preciso determinar qual view será exibido quando a aplicação iniciar ou quando vier para foreground, isto é feito com o método:
void SetDefaultViewL(const MCoeView &aView);
Ordem dos eventos
Estes comandos são feitos pelo framework através do servidor de views quando um view precisa ser ativado (Considerando que nenhum outro está ativado no momento).
Nota: Entre as chamadsa de DoActivateL() e DoDeactivate é chamado o método HandleForegroundEventL(TBool), será passado como argumento ETrue quando o view estiver para ser ativado e EFalse quando estiver para ser desativado.
View a ser ativado:
1. É feita uma chamada a DoActivateL().
2. HandleForegroundEventL() échamado com argumento ETrue.
View a ser desativado:
1. É chamado DoDeactivate().
2. HandleForegroundEventL() é chamado com argumento EFalse.
Troca de views
Não irei tratar da troca de views entre aplicações, irei apenas me focar nas ações com views locais da aplicação.
Para ativarmos um view temos o método ActivateLocalView(), este método recebe como argumento o UId referente ao view que queremos ativar, na sua sobrecarga podemos passar também uma mensagem para o view que estar para ser ativado.
Definição deste método:
void ActivateLocalViewL (TUid aViewId);
Ativa o view sem passar uma mensagem.
void ActivateLocalViewL (TUid aViewId, TUid aCustomMessageId, const TDesC8 &aCustomMessage) ;
Ativa o view passando uma mensagem específica.
Exemplo de menu de opções único para o view
Criando um arquivo de recursos para views
Exemplo de uma aplicação utilizando views
A ser escrito.
Referência
Developing Series 60 Applications: A Guide for Symbian OS C++ Developers
| Related Discussions | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Is Series60 compatible with Symbian v7.0s(Typhoon) | kcramu | Symbian Tools & SDKs | 1 | 2002-12-11 19:15 |
| Choose IAP for video streaming session | molst | Symbian Media (Graphics & Sounds) | 2 | 2006-12-05 08:01 |
| Series 60 Cellphone list | earamsey | Mobile Java General | 2 | 2004-07-08 01:58 |
| how to switch between views | ddhungry | General Symbian C++ | 1 | 2002-11-19 16:07 |
| 编译Menu control example老是BUILD错误!?? | saltedfish | Symbian | 4 | 2003-09-15 06:18 |
