Motif
Maria Alice G. V. Ferreira
2003
Maria Alice G. V. Ferreira – EP – USP - 2003
MOTIF - Padrão para interfaces


“Mecanismo e não política” - critério de projeto do XWindows  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
Aplicativo
MOTIF (Xm)
X Intrinsics (Xt)
Xlib
X-Protocol
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 reutilização das classes
Valem todos os termos definidos para objetos.
Cada “widget” do Motif é um objeto.
Maria Alice G. V. Ferreira – EP – USP - 2003
Object
RectObj
Core
XmPrimitive
Composite
Constraint
XmGadget
Shell
XmManager
Figura 2.1. - Programming Motif - Keith D. Gregory
- Springer-Verlag, New York, 1992
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
Athena
Motif
Open
Look
Xt Intrinsics
Motif
Xt
Motif
Interviews
Motif
Garnet
Fonte: User Interface Software Tools - Brad A. Myers - Submitted for Publication,
1994.
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
TheProg
Form_1
Label_1
Form_1
Label_2
Form_2
Label_1
Label_1
Label_2
Label_2
Form_2
TheProg
TheProg.Form_1
TheProg.Form_1.Label_
1
TheProg.Form_1.Label_
2
Maria Alice G. V. Ferreira – EP – USP - 2003
Label_1
Label_2
TheProg.Form_1.Form_2
TheProg.Form_1.Form_2.Label_1
TheProg.Form_1.Form_2.Label_2
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:
TheProg.Form_1.width:
TheProg.Form_1.background:
200
300
Gray25
*Form_2.height:
*Form_2.width:
*Form_2.background:
100
300
Gray50
*XmLabel1.height:
*XmLabel1.width:
50
100
*.Label_1.fontList:
-*-times-medium-r-*--*-180-*
*.Form_1.Label_2.fontList:
*.Form_1.Label_1.alignment:
*.Form_1.Label_2.alignment:
-*-times-medium-r-*--*-180-*
ALIGNMENT_BEGINNING
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 executadas 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
Client Communications
Colormap State
Exposure
Keyboard Focus
Keyboard Input
Maria Alice G. V. Ferreira – EP – USP - 2003
Eventos
ClientMessage
PropertyNotify
SelectionClear
SelectionNotify
SelectionRequest
ColormapNotify
Expose
GraphicsExpose
NoExpose
FocusIn
FocusOut
KeyPress
KeyRelease
Tipos de Eventos (cont)
Categoria
Pointer / Button
Keymap State
Structure Control
Maria Alice G. V. Ferreira – EP – USP - 2003
Eventos
ButtonPress
ButtonRelease
EnterNotify
LeaveNotify
MotionNotify
KeymapNotify
CirculateRequest
ConfigureRequest
MapRequest
ResizeRequest
Tipos de Eventos
Categoria
Window State
Maria Alice G. V. Ferreira – EP – USP - 2003
Eventos
CirculateNotify
ConfigureNotify
CreateNotify
DestroyNotify
GravityNotify
MapNotify
MappingNotify
ReparentNotify
UnmapNotify
VisibilityNotify
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 solto
etc..........
Maria Alice G. V. Ferreira – EP – USP - 2003
Árvore de classe de Botões do Motif
Object
RectObj
Core
XmGadget
XmPrimitive
Composite
XmArrowButton
XmLabel
XmDrawnButton
XmCascadeButton
Maria Alice G. V. Ferreira – EP – USP - 2003
XmToggleButton
XmPushButton
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; //timestamp
int
x,y; // da janela onde ocorre o evento
int
x_root, y_root;
unsigned
int_state; //estado dos modificadores, ao
//ocorrer o evento
char
is_hint;
Boolean
same_screen;} XMotionEvent;
Maria Alice G. V. Ferreira – EP – USP - 2003
Program Template
#include <Xm/Xm.h>
widget appshell;
Carrega X11/Intrinsic.h
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();
}
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/
Maria Alice G. V. Ferreira – EP – USP - 2003
Download

Ambiente Motif