maria alice g. v. ferreira – ep – usp - 2003 motif maria alice g. v. ferreira 2003
TRANSCRIPT
Maria Alice G. V. Ferreira – EP – USP - 2003
Motif
Maria Alice G. V. Ferreira2003
Maria Alice G. V. Ferreira – EP – USP - 2003
MOTIF - Padrão para interfaces
“Mecanismo e não política” - critério de projeto do X-Windows fornece um mecanismo para a implementação de interfaces Homem-máquina, mas não força a aparência dos programas que utilizam o padrão.• portabilidade• “look and feel” próprio de cada projetista não tolhe a
criatividade. X Intrinsics (Xt) - introduz o conceito de “widget”: um
objeto auto-suficiente, que fornece algum tipo de funcionalidade de interface (produzido pelo X Consortium)
Maria Alice G. V. Ferreira – EP – USP - 2003
Arquitetura do MOTIF
Desenvolvimento por camadas
X-Protocol
Aplicativo
MOTIF (Xm)
X Intrinsics (Xt)
Xlib
Maria Alice G. V. Ferreira – EP – USP - 2003
Xlib, Xt e Xm Xlib - fornece a interface em linguagem C que permite ao
aplicativo se comunicar com o X-Protocol Xt - fornece elementos de nível mais alto que o Xlib para o
programador: Objetos, que são as widgets Manipulação da geometria dos widgets Tratamento dos eventos: identificação e despacho
Xm – Aspectos de nível de abstração mais alto: aspecto visual tridimensional, drag and drop, gerenciador de janelas etc
UIL – User Interface Language
Maria Alice G. V. Ferreira – EP – USP - 2003
Vantagens da orientação a objetos Classe e instância Herança - novos objetos podem ser gerados a partir de
objetos já existentes, de forma organizada:• os programas que usavam os objetos “antigos”
continuam usando estes objetos• os programas que necessitam dos novos objetos utilizam
somente os “novos” objetos - os herdados Hierarquia de objetos - conjunto dos objetos antigos
(ancestrais) e novos (descendentes) --> facilita a reuti-lização das classes
Valem todos os termos definidos para objetos. Cada “widget” do Motif é um objeto.
Maria Alice G. V. Ferreira – EP – USP - 2003
Figura 2.1. - Programming Motif - Keith D. Gregory- Springer-Verlag, New York, 1992
RectObj Object
Core XmGadget
Composite XmPrimitive
Constraint Shell
XmManager
Maria Alice G. V. Ferreira – EP – USP - 2003
Árvore de Classes do Motif A árvore de classe baseia-se no conceito de Herança, central à
implementação do Motif: classes de suporte classes instanciáveis
RectObj, Object, Core - raiz dos conjuntos de widgets. Fornecem funções de instanciação e manutenção do nível básico do sistema de janelas.
Xm Primitive - classe que suporta as widgets primitivas, ou seja, as que não são superclasses para outras classes. Fornecem detalhes de aparência às primitivas.
Composite - widgets que podem dar origem a outras widgets - definidas por Xt.
Maria Alice G. V. Ferreira – EP – USP - 2003
Algumas implementações para MOTIF
Fonte: User Interface Software Tools - Brad A. Myers - Submitted for Publication, 1994.
Motif
Motif MotifMotif
AthenaOpenLook
Xt Intrinsics
Xt Interviews Garnet
Maria Alice G. V. Ferreira – EP – USP - 2003
Conceitos
Modelo centrado no usuário – o usuário detém o controle da interface.
Separação entre aplicação e interface Mecanismo de “callback” típico “Widgets” com restrições (constraints) – objetos
que estão “amarrados” aos objetos-pai por compromissos especificados.
Maria Alice G. V. Ferreira – EP – USP - 2003
Conceitos Recursos (atributos) - interface entre o programador e o
código interno da “widget”. Recursos possuem valores associados. Uma “widget” típica possui dúzias de recursos, mas a maioria é herdada da superclasse-mãe. Os recursos são identificados por nomes (ex: topShadowColor). Para se atribuir ou consultar um recurso em um programa é necessário conhecer-se o seu nome.
Valor Default - é o valor atribuído ao recurso caso o projetista não atribua um valor próprio, no programa.
Arquivos de recursos - arquivos em formato texto, que especificam os valores iniciais para os recursos das “widgets” de um programa (similares aos *.sui da SUIT).
Maria Alice G. V. Ferreira – EP – USP - 2003
Exemplo
Label_2
Label_1
Label_1
Label_2
Form_1
Form_2
TheProg
Form_1
Form_2 Label_1
Label_1 Label_2
Label_2
TheProgTheProg.Form_1TheProg.Form_1.Label_1TheProg.Form_1.Label_2
TheProg.Form_1.Form_2TheProg.Form_1.Form_2.Label_1TheProg.Form_1.Form_2.Label_2
Maria Alice G. V. Ferreira – EP – USP - 2003
Resource file – corresponde a figura anterior (trecho)
! Sample resource file to produce output of figure 3.3!*.foreground: Black*.background: White
TheProg.Form_1.height: 200TheProg.Form_1.width: 300TheProg.Form_1.background: Gray25
*Form_2.height: 100*Form_2.width: 300*Form_2.background: Gray50
*XmLabel1.height: 50*XmLabel1.width: 100
*.Label_1.fontList: -*-times-medium-r-*--*-180-*
*.Form_1.Label_2.fontList: -*-times-medium-r-*--*-180-**.Form_1.Label_1.alignment: ALIGNMENT_BEGINNING*.Form_1.Label_2.alignment: ALIGNMENT_END
Maria Alice G. V. Ferreira – EP – USP - 2003
Eventos tratados no sentido da programação por eventos o programador deve especificar funções a serem execu-tadas
quando da ocorrência de um evento e a “widget” é responsável em chamá-las “callback functions”
XtMainLoop - é a função responsável pelo gerenciamento dos eventos e seu encaminhamento apropriado às “widgets” responsáveis pelo seu tratamento.
o evento de mouse é encaminhado a janela de menor prioridade na hierarquia, localizada na posição em que ocorre o evento. Determina-se se esta janela deseja tratar o evento, o que é feito através de “event mask”.
o evento de teclado é encaminhado à janela que possui o focus do teclado.
Maria Alice G. V. Ferreira – EP – USP - 2003
Eventos (cont)
“timestamp” - contagem em milisegundos a partir do início de operação do servidor (32 bits); reiniciado a cada 49,71 dias, aproximadamente.
A maioria dos eventos são manipulados pelas próprias “widgets”. Os programas recebem os eventos registrando um gerenciador de eventos para cada “widget”. O nome do evento é especificado, juntamente com o nome da rotina que irá manipulá-lo. Cada “widget” mantém uma lista destes gerenciadores para cada tipo de evento.
Os eventos são registrados através de XtAddEventHandler; esta função adiciona um gerenciador de eventos à lista de cada “widget”; se existem vários gerenciadores para um determinado evento, eles são chamados sem ordem pré-estabelecida.
Maria Alice G. V. Ferreira – EP – USP - 2003
Tipos de Eventos
Categoria EventosClient Communications ClientMessage
PropertyNotifySelectionClearSelectionNotifySelectionRequest
Colormap State ColormapNotifyExposure Expose
GraphicsExposeNoExpose
Keyboard Focus FocusInFocusOut
Keyboard Input KeyPressKeyRelease
Maria Alice G. V. Ferreira – EP – USP - 2003
Tipos de Eventos (cont)
Categoria EventosPointer / Button ButtonPress
ButtonReleaseEnterNotifyLeaveNotifyMotionNotify
Keymap State KeymapNotifyStructure Control CirculateRequest
ConfigureRequestMapRequestResizeRequest
Maria Alice G. V. Ferreira – EP – USP - 2003
Tipos de EventosCategoria EventosWindow State CirculateNotify
ConfigureNotify CreateNotifyDestroyNotifyGravityNotifyMapNotifyMappingNotifyReparentNotifyUnmapNotifyVisibilityNotify
Maria Alice G. V. Ferreira – EP – USP - 2003
Máscaras de Eventos(na forma: Máscara/Evento/Comentário)
ButtonMotionNotify / MotionNotify / informa se algum botão do mouse foi pressionado enquanto o mouse se movimenta
Button1MotionMask / MotionNotify / informa se o botão 1 do mouse foi pressionado enquanto o mouse se movimenta
Idem para os demais botões ButtonPressMask / ButtonPress / informa se algum botão
do mouse foi pressionado ButtonReleaseMask / ButtonRelease / informa se algum
botão do mouse foi soltoetc..........
Maria Alice G. V. Ferreira – EP – USP - 2003
Árvore de classe de Botões do Motif
RectObj Object
Core XmGadget
Composite XmPrimitive
XmArrowButton XmLabel
XmDrawnButton XmToggleButton
XmCascadeButton XmPushButton
Maria Alice G. V. Ferreira – EP – USP - 2003
XmPushButton - atributos
Maria Alice G. V. Ferreira – EP – USP - 2003
XmPushButton – atributos(herdados – parcial)
Maria Alice G. V. Ferreira – EP – USP - 2003
XmPushButton – atributos(herdados – parcial)
Maria Alice G. V. Ferreira – EP – USP - 2003
XmPushButton – atributos(herdados – parcial)
Maria Alice G. V. Ferreira – EP – USP - 2003
XMotion Event
typedef struct {int type;unsigned long serial;Boolean send_event;Display *display;Window window;Window root;Window subwindow;Time time; //timestampint x,y; // da janela onde ocorre o eventoint x_root, y_root;unsigned int_state; //estado dos modificadores, ao //ocorrer o eventochar is_hint;Boolean same_screen;} XMotionEvent;
Maria Alice G. V. Ferreira – EP – USP - 2003
Program Template
#include <Xm/Xm.h>widget appshell;
void main(argc,argv)int argc;char *argv[];
{appshell = XtInitialize argv[0],”Example_template”,NULL,0,&argc,&argv);// Incluir código do programa
XtRealizeWidget (appshell);XtMainLoop();
}
Carrega X11/Intrinsic.h
Realiza a captura de eventos
Maria Alice G. V. Ferreira – EP – USP - 2003
Gabarito do programa (comentários)
• Shell - uma “widget que fornece uma ligação entre o programa e a árvore-raiz. Permite a troca de informação entre o programa e o Window Manager
• appshell - o shell de nível mais alto em torno de um programa
Maria Alice G. V. Ferreira – EP – USP - 2003
// inserir código
the_label = XmCreateLabel (appshell,”TheLabel”,NULL,0);XtManageChild (the_label);XtAddEventHandler(the_label,PointerMotionMask|
ButtonPressMask| EnterWindowMask| LeaveWindowMask, False,EvtHandler,NULL);
Eventos a serem notificados
Nome do gerenciador de eventos
Maria Alice G. V. Ferreira – EP – USP - 2003
Gerenciador de eventos
void EvtHandler(w,client_data,evt_ptr);widget w;caddr_t client_data;XEvent *evt_ptr;{
switch (evt_ptr->type){case ButtonPress:.....break;case EnterNotify:.....break;case LeaveNotify:.....break;case MotionNotify:....break;default:break;}
}
Maria Alice G. V. Ferreira – EP – USP - 2003
Referências bibliográficas
Programming Motif - Keith D. Gregory - Springer-Verlag, New York, 1992.
Links: http://www.opengroup.org/openmotif/