Volver al índice ; Previo: X Toolkit

Motif

Introducción

En principio Motif es un conjunto de normas propuesto por OSF que especifican un modo de presentación y comportamiento de los interfaces de usuario gráficos. El modelo elegido está basado en MS-Windows y Presentation Manager.

Un programador podría construir una aplicación que cumpla las "guías de estilo" de Motif pero, normalmente, usará una biblioteca de objetos de diálogo que cumplan con los requisitos de la especificación, como el conjunto de widgets definido por OSF.

Además de la guía de estilo y la biblioteca de widgets, en Motif también se incluyen un gestor de ventanas (mwm) y un lenguaje de especificación de interfaces de usuario (UIL).

Widgets simples

La clase Primitive de Motif es una subclase de Core que actúa también como metaclase y de ella se derivan todas las widgets de tipo simple (no compuesto). Incluye recursos que, entre otras cosas, controlan la clásica apariencia tridimensional de las ventanas de Motif. A continuación se describen algunas de las subclases de Primitive:

Label
Etiqueta que incluye un texto o un pixmap.
PushButton
Subclase de Label. Botón de diálogo que cambia de aspecto cuando el usuario lo "empuja".
ToggleButton
Subclase de Label. Botón de diálogo con dos estados entre los que va cambiando alternativamente cada vez que el usuario lo activa.
CascadeButton
Subclase de Label. Un tipo especial de botón al que se le asocia una widget que actuará como un menú que se desplegará de forma automática cuando se active el botón.
DrawnButton
Subclase de Label. Muy similar a PushButton pero usado por aplicaciones que quieren dibujar la imagen que hay dentro del botón.
ArrowButton
Botón con una flecha apuntando en una dirección (arriba, abajo, a la derecha o a la izquierda).
Separator
Actúa como separador entre dos zonas.
List
Permite construir una lista de elementos de texto que el usuario puede seleccionar.
ScrollBar
Clásica barra de scroll.
Text
Gestiona un editor de texto completo de una (clase TextField) o varias líneas.
Otro tipo de widget simple son los gadgets. Se trata de una widget sin ventana asociada (la entrada y salida gráfica de la widget se lleva a cabo sobre la ventana asociada a la widget padre). Por lo tanto, no es una subclase de Core sino de RectObj. Motif proporciona versiones gadget de las widgets más simples. Existe, por ejemplo, la clase PushButtonGadget.

Widgets compuestas

La clase Manager de Motif es una subclase de Constraint que actúa también como metaclase y de ella se derivan todas las widgets de tipo compuesto (widgets contenedoras). Incluye recursos que, entre otras cosas, controlan la clásica apariencia tridimensional de las ventanas de Motif. La principal diferencia entre las distintas subclases de Manager es como gestionan la posición y tamaño de las widgets hijas. A continuación se describen algunas de las subclases de Manager:

BulletinBoard
Permite colocar a los hijos en posiciones absolutas dentro de la ventana padre.
Form
Subclase de BulletinBoard. Permite un control muy fino de las posiciones y tamaños de las widgets hijas y su comportamiento ante un cambio de tamaño de la ventana padre.
SelectionBox
Subclase de BulletinBoard. Se trata de una widget muy específica orientada a la selección de elementos de una lista, ya sea usando el ratón o escribiendo el nombre del elemento. Contiene una lista con barra de scroll, un campo para la entrada de una línea de texto (clase TextField) y tres botones (clase PushButton) etiquetados, por defecto, como: Ok, Cancel y Help.
MessageBox
Subclase de BulletinBoard. Se trata de una widget muy específica orientada a mostrar un mensaje (de información, de aviso, de error, etc.). Además del mensaje contiene tres botones (clase PushButton) etiquetados, por defecto, como: Ok, Cancel y Help.
DrawingArea
Proporciona un área en la que la aplicación puede dibujar gráficos. Los eventos expose se propagan a la aplicación como callbacks.
Frame
Proporciona un marco con aspecto tridimensional para widgets que normalmente no tienen borde.
PanedWindow
Gestiona sus hijos organizándolos en regiones verticales ofreciendo al usuario una manera de controlar el tamaño de cada región.
RowColumn
Organiza sus hijos en filas y columnas. Orientado a la construcción de menús.
Scale
Proporciona un objeto similar a una barra de scroll que permite al usuario introducir valores en un determinado rango.
ScrolledWindow
Proporciona dos barras de scroll (horizontal y vertical) que permiten ver una determinada parte de un objeto de gran tamaño.
MainWindow
Subclase de ScrolledWindow. Proporciona un marco adecuado para ser la widget base de una aplicación típica.

Menús

En un interfaz de usuario hay diferentes tipos de menús:

En Motif existen numerosas funciones de conveniencia que facilitan la creación de los diferentes tipos de menús. La estructura básica de un menú es la siguiente:

  1. Una widget de tipo MenuShell (subclase de OverrideShell) que le proporciona independencia del resto de la aplicación.
  2. Una widget de tipo RowColumn para organizar las opciones del menú.
  3. Widgets de tipo Label que sirvan como nombre del menú o sus secciones.
  4. Widgets de tipo Separator que sirvan para separar las posibles secciones del menú.
  5. Widgets de tipo PushButton para aquellas opciones del menú que no despliegan a su vez otro menú.
  6. Widgets de tipo CascadeButton para aquellas opciones que desplieguen otro menú.

Diálogos

En muchas ocasiones la aplicación quiere mostrar una ventana temporal para, por ejemplo, mostrar un mensaje de error o pedir al usuario que introduzca una determinada información. En estos casos, lo normal es mostrar esta ventana con el estilo popup (aparecerá encima del resto de las ventanas). A este tipo de comportamiento se le denomina diálogo.

En Motif existen numerosas funciones de conveniencia que facilitan la creación de diferentes tipos de diálogos. La estructura básica de un diálogo es la siguiente:

  1. Una widget de tipo DialogShell (subclase de TransientShell) que le proporciona independencia del resto de la aplicación.
  2. La widget que se quiere mostrar. Podría ser de alguna de las siguientes clases: BulletinBoard, SelectionBox, Form, MessageBox, etc.

Volver al índice ; Previo: X Toolkit