O Modelo da Apresentação <A NAME=modapr2> </A>



next up previous contents
Next: O Modelo da Up: Implementação do MIU Previous: Estrutura Geral do

O Modelo da Apresentação  

O Modelo da Apresentação pode ser dividido num módulo genérico (ModApr) de processamento de eventos - cuja principal responsabilidade é implementar as comunicações com o Controlador de Diálogo - e um frontend que implementará o aspecto gráfico da interface e a tradução dos diferentes eventos de e para o utilizador, tanto em Modo Menu como em Modo Comando.

É em ModApr que é colocada a informação resultante da compilação dos Descritores de Apresentação, ele conterá ainda informação relativa aos canais para comunicação com o Controlador de Diálogo e o Modelo da Apresentação.

A Descritores do tipo MENU são modelados pelos tuplos:

  MENU :: NAME:  STR
          POS:   STR
          COLOR: STR
          SEL :  STR
          OPCS:  Option-list;
  Option :: GI:   EvId
            NAME: STR;
os DB por:
  DB :: NAME:  STR
        POS:   STR
        COLOR: STR
        VARS:  VarId -> ViewType
        GIS:   EvId -> DBGIView
        CMDS:  CmdId -> LxDef;

Na descrição gráfica das variáveis, se elas forem de um dos tipos pré-definidos, poder-se-á utilizar um dos métodos de visualização também pré-definidos:

Todos eles partilham um conjunto de definições léxicas descritas no tipo LexDef. Actualmente, estão contempladas a posição, o nome, e a cor. Mais características podem ser introduzidas sem perturbar o funcionamento de frontends já existentes uma vez que cada um utiliza apenas aquelas que consegue implementar ou de que tem conhecimento.

ViewType = PreDefView | GISym;
PreDefView = HimSelf | RadioBox | OptionMenu | Scale;
HimSelf :: DEF: LxDef;
RadioBox :: VALS: STR -> Value
            DEF:   LxDef;
OptionMenu :: VALS: STR -> Value
              DEF:   LxDef;
Scale :: MIN: Value
         MAX: Value
         DEF:  LxDef;       
DBGIView :: DEF:   LxDef
            OPEN:  Bool;
LxDef :: POS:   STR
         NAME:  STR
         COLOR: STR;

Caso se trate de uma variável cujo tipo é definido utilizando modelos, é feita a indicação do Guião de Interacção responsável pelo seu controlo. Nesta situação é criada uma instância desse Guião e o diálogo referente à variável é desviado para ela. O valor da variável é enviado à instância referida através da mensagem SetValMsg e a instância é activada; quando termina, o valor devolvido por ela é enviado de novo para o Controlador de Diálogo, à instância onde a variável está declarada, como valor lido para a variável em causa.

A definição léxica dos GI's contém, para além das definições léxicas normais, o valor booleano que indica se a descrição léxica do Guião deve ser apresentada automaticamente ou nãogif.

Os comandos são descritos utilizando simplesmente LexDef.

Podemos então definir ModApr:

  ModApr :: GLOBAL:  GISym -> GlobalInfo
            VIEWS:   ViewId -> ViewDescr
            DEFAULT: ViewId
            MAIN:    GISym
            INST:    CHAN
            INSM:    CHAN
            OUTST:   CHAN
            OUTSM:   CHAN;
  GlobalInfo = VarId -> TypeId;
  ViewDescr = GISym -> GIView;
  GIView = MENU | DB;

Como é evidente, as definições léxicas descritas são relevantes apenas quando o frontend está a funcionar em Modo Menu, uma vez que o Modo Comando terá uma sintaxe fixagif. Pelo mesmo motivo, em Modo Comando não é necessário recorrer aos Guiões de síntese de modelos.

Para estudar a implementação de um frontend procedeu-se ao desenvolvimento de um para XMetoo. Dada a quase inexistência de facilidades de input/output da linguagemgif, o resultado obtido não prima pela "user frendliness", no entanto possui todas as características necessárias a um frontend mais poderoso (em X11 por exemplo).

A principal tarefa que lhe compete é, por um lado, apresentar ao utilizador a implementação da descrição gráfica dos diferentes elementos da interface, por outro, gerir o input/output de valores. Para tal, é mantida uma tabela das instâncias actualmente criadas onde se regista, para além da hierarquia em que elas estão organizadas (selectores FATHER e CHILDREN), os valores das suas variáveis e qual a variável a que o resultado da sua conclusão deve ser atribuído se ele existir (VALUES e VAR) e ainda uma máscara onde estão definidos os eventos válidos (EVMASK) e a indicação se a instância já foi activada (ACTIVE).

  InstInfo :: FATHER:   OpcInstId
              EVMASK:   EvMask
              VAR:      OpcVarId         /* Vari'avel do Pai */
              VALUES:   VarId -> OpcValue
              CHILDREN: EvId -> InstId
              ACTIVE:   Bool;

Quando em Modo Menu, em cada instante o utilizador deve escolher de entre todas as instâncias activas qual a que pretende utilizar (corresponderá à colocação do rato sobre uma janela). De seguida, e dentro dessa instância, pode interactuar com todos os seus elementos que geram eventos válidos nesse contexto.

Em Modo Comando é utilizada uma sintaxe semelhante à do XMetoo. Os Guiões e os argumentos são vistos como funções, os comandos não são utilizados sendo as frases confirmadas com Return. A invocação do Guião GInsPal é feita do seguinte modo (neste caso está a utilizar-se o sinónimo do Guião):

cmd> (inspal (pal "Ola") (sig "Hello"))

Caso seja detectado um erro na frase (quer sintático quer semântico) o Modelo da Apresentação muda automaticamente para Modo Menu, preservando o estado em que o erro ocorreu. Assim, se no exemplo anterior em vez de sig tivesse sido escrito sgi - ou se em vez de uma string tivesse sido escrito um inteiro - a interface passava para Modo Menu apresentando a Dialog Box de GInsPal, tendo o argumento pal o valor "Ola".

  
Figure 25: Composição do Modelo da Apresentação

Na fig. 25 são apresentados os ficheiros que compõem o Modelo da Apresentação. Os ficheiros io.n e leituras.n implementam o input/output, neste caso os métodos pré-definidos são considerados apenas para leitura (a apresentação do valor é sempre feita directamente) à excepção dos métodos HimSelf e Scale que são traduzidos para leituras simples (embora no caso do segundo os limites sejam verificados), todos os outros são implementados como menus. O ficheiro fexm.n é o corpo principal do front-end e modapr.n o do ModApr, maprcom.n implementa as comunicações.



next up previous contents
Next: O Modelo da Up: Implementação do MIU Previous: Estrutura Geral do



Jose Franscisco Creissac Campos
Wed Jan 31 20:30:35 MET 1996