Menú: conceptos básicosFlash Player 9 y posterior, Adobe AIR 1.0 y posterior Para ver una explicación rápida y ejemplos de código de la creación de menús nativos en aplicaciones de AIR, consulte los siguientes artículos de inicio rápido del Centro de desarrollo de Adobe:
Las clases de menú nativo permiten acceder a las funciones del menú nativo del sistema operativo donde se ejecuta la aplicación. Se pueden utilizar los objetos NativeMenu para menús de aplicación (disponibles en Mac OS X), menús de ventana (disponibles en Windows y Linux), menús contextuales y menús emergentes. Fuera de AIR, se pueden utilizar las clases del menú contextual para modificar el menú contextual que muestra automáticamente Flash Player cuando un usuario hace clic con el botón derecho o presiona comando y hace clic en un objeto de la aplicación. (En las aplicaciones de AIR no se muestra ningún menú contextual automático.) Clases de menúEntre las clases de menú se incluyen:
Variedades de menúAIR admite los siguientes tipos de menús:
Menús predeterminados (sólo AIR)El sistema operativo o una clase incorporada de AIR proporciona los siguientes menús predeterminados:
Menús contextualesEn el contenido SWF, a cualquier objeto que hereda de InteractiveObject se le puede asignar un menú contextual asignando un objeto de menú a la propiedad contextMenu. Se incluyen varios comandos de manera predeterminada, incluidos Forward (Avanzar), Back (Atrás), Print (Imprimir), Quality (Calidad) y Zoom. En el motor de ejecución de AIR, el objeto de menú asignado a contextMenu puede ser del tipo NativeMenu o ContextMenu. En el motor de ejecución de Flash Player, sólo está disponible la clase ContextMenu. Puede detectar eventos de menú nativo o eventos de menús contextuales con el uso de las clases ContextMenu y ContextMenuItem; ambas se distribuyen. Una ventaja que ofrecen las propiedades del objeto ContextMenuEvent es que contextMenuOwner identifica el objeto al que se asocia el menú y mouseTarget identifica el objeto en el que se hizo clic para abrir el menú. Esta información no está disponible en el objeto NativeMenuEvent. El siguiente ejemplo crea un objeto Sprite y añade un simple menú contextual de edición: var sprite:Sprite = new Sprite();
sprite.contextMenu = createContextMenu()
private function createContextMenu():ContextMenu{
var editContextMenu:ContextMenu = new ContextMenu();
var cutItem:ContextMenuItem = new ContextMenuItem("Cut")
cutItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCutCommand);
editContextMenu.customItems.push(cutItem);
var copyItem:ContextMenuItem = new ContextMenuItem("Copy")
copyItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doCopyCommand);
editContextMenu.customItems.push(copyItem);
var pasteItem:ContextMenuItem = new ContextMenuItem("Paste")
pasteItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, doPasteCommand);
editContextMenu.customItems.push(pasteItem);
return editContextMenu
}
private function doCutCommand(event:ContextMenuEvent):void{trace("cut");}
private function doCopyCommand(event:ContextMenuEvent):void{trace("copy");}
private function doPasteCommand(event:ContextMenuEvent):void{trace("paste");}
Nota: a diferencia del contenido SWF que se muestra en un entorno de navegador, los menús contextuales en AIR no tienen comandos incorporados.
Personalización de un menú contextual de Flash PlayerEn un navegador o proyector, los menús contextuales en el contenido SWF siempre disponen de elementos incorporados. Se pueden eliminar todos los comandos predeterminados del menú, excepto Configuración y Acerca de. Si se establece la propiedad showDefaultContextMenu del objeto Stage en false, se eliminan estos comandos del menú contextual. Para crear un menú contextual personalizado para un objeto de visualización específico hay que crear una nueva instancia de la clase ContextMenu, llamar al método hideBuiltInItems() y asignar dicha instancia a la propiedad contextMenu de la instancia de DisplayObject. El siguiente ejemplo proporciona un cuadrado dibujado dinámicamente con un comando de menú contextual para aplicarle un color aleatorio: var square:Sprite = new Sprite();
square.graphics.beginFill(0x000000);
square.graphics.drawRect(0,0,100,100);
square.graphics.endFill();
square.x =
square.y = 10;
addChild(square);
var menuItem:ContextMenuItem = new ContextMenuItem("Change Color");
menuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,changeColor);
var customContextMenu:ContextMenu = new ContextMenu();
customContextMenu.hideBuiltInItems();
customContextMenu.customItems.push(menuItem);
square.contextMenu = customContextMenu;
function changeColor(event:ContextMenuEvent):void
{
square.transform.colorTransform = getRandomColor();
}
function getRandomColor():ColorTransform
{
return new ColorTransform(Math.random(), Math.random(), Math.random(),1,(Math.random() * 512) - 255, (Math.random() * 512) -255, (Math.random() * 512) - 255, 0);
}
Estructura del menú nativo (AIR)Los menús nativos, por naturaleza, se crean en jerarquías. Los objetos NativeMenu contienen objetos secundarios NativeMenuItem. Los objetos NativeMenuItem que, a su vez, representan los submenús pueden tener objetos NativeMenu. El objeto de menú principal o raíz en la estructura representa la barra de menús para los menús de aplicación y de ventana. (Los menús contextuales, de icono y los menús emergentes no cuentan con una barra de menús). El siguiente diagrama muestra la estructura de un menú típico. El menú raíz representa la barra de menús y contiene dos elementos de menú que hacen referencia a un submenú Archivo y a un submenú Editar. El submenú Archivo en esta estructura contiene dos elementos de comando y un elemento que hace referencia a un submenú Menú Abrir reciente, que contiene tres elementos. El submenú Editar contiene tres comandos y un separador. La definición de un submenú requiere un objeto NativeMenu y NativeMenuItem. El objeto NativeMenuItem define la etiqueta que se muestra en el menú principal y permite al usuario abrir el submenú. El objeto NativeMenu actúa como un contenedor para los elementos en el submenú. El objeto NativeMenuItem hace referencia al objeto NativeMenu a través de la propiedad submenu de NativeMenuItem. Para ver un ejemplo de código que crea este menú, consulte Ejemplo de menú nativo: Menú de aplicación y de ventana (AIR). Eventos de menúLos objetos NativeMenu y NativeMenuItem distribuyen eventos preparing, displaying y select: Preparing: siempre que el objeto está a punto de comenzar una interacción con el usuario, los elementos de menú distribuyen un evento preparing a cualquiera de los detectores registrados. La interacción incluye la apertura del menú o la selección de un elemento con un método abreviado de teclado.
Nota: el evento preparing sólo está disponible para Adobe AIR 2.6 y posterior.
Equivalentes de teclas para comandos de menú nativo (AIR)Se puede asignar un equivalente de tecla (a veces llamado acelerador) a un comando de menú. El elemento de menú distribuye un evento select a cualquier detector registrado cuando se presiona la tecla o combinación de teclas. El menú que contiene el elemento debe ser parte del menú de aplicación o de la ventana activa para que se invoque el comando. Los equivalentes de teclas tienen dos partes, una cadena que representa la tecla principal y un conjunto de teclas modificadoras que también se deben presionar. Para asignar la tecla principal, establezca la propiedad keyEquivalent del elemento de menú a la cadena de un solo carácter para dicha tecla. Se utiliza una letra mayúscula, la tecla Mayús se añade automáticamente al conjunto modificador. En Mac OS X, el modificador predeterminado es la tecla de comando (Keyboard.COMMAND). En Windows y Linux, es la tecla de control (Keyboard.CONTROL). Estas teclas predeterminadas se añaden automáticamente al conjunto modificador. Para asignar diferentes teclas modificadoras, asigne un nuevo conjunto que contenga los códigos de tecla deseados a la propiedad keyEquivalentModifiers. El conjunto predeterminado se sobrescribe. Si utiliza los modificadores predeterminados o si asigna su propio conjunto modificador, se añade la tecla Mayús si la cadena que asigna a la propiedad keyEquivalent es una letra mayúscula. Las constantes de los códigos de tecla para utilizar en las teclas modificadoras se definen en la clase Keyboard. La cadena equivalente de la tecla asignada se muestra automáticamente junto al nombre del elemento de menú. El formato depende del sistema operativo del usuario y las preferencias del sistema. Nota: si asigna el valor Keyboard.COMMAND a un conjunto de modificadores de teclas en el sistema operativo Windows, no se muestra ningún equivalente de tecla en el menú. Sin embargo, se debe utilizar la tecla de control para activar el comando de menú.
En el siguiente ejemplo se asigna Ctrl+Mayús+G como el equivalente de tecla para un elemento de menú: var item:NativeMenuItem = new NativeMenuItem("Ungroup");
item.keyEquivalent = "G";
En este ejemplo se asigna Ctrl+Mayús+G como el equivalente de tecla configurando directamente el conjunto modificador: var item:NativeMenuItem = new NativeMenuItem("Ungroup");
item.keyEquivalent = "G";
item.keyEquivalentModifiers = [Keyboard.CONTROL];
Nota: los equivalentes de teclas solo se activan para menús de ventana y de aplicación. Si se añade un equivalente de tecla a un menú contextual o emergente, el mismo se muestra en la etiqueta de menú, pero el comando de menú asociado nunca se invoca.
Letras de selección (AIR)Las letras de selección son parte de la interfaz del teclado del sistema operativo a los menús. Linux, Mac OS X y Windows permiten a los usuarios abrir menús y seleccionar comandos con el teclado, pero hay pequeñas diferencias. En Mac OS X, el usuario escribe las primeras letras del menú o comando y presiona la tecla de retorno. La propiedad mnemonicIndex se omite. En Windows, solo una letra es significativa. Como valor predeterminado, la letra significativa es el primer carácter de la etiqueta, pero si se asigna una letra de selección al elemento de menú, entonces el carácter significativo se convierte en la letra designada. Si dos elementos en un menú tienen el mismo carácter significativo (independientemente si se ha asignado una letra de selección) entonces la interacción del teclado con el menú cambia ligeramente. En lugar de presionar una sola letra para seleccionar el menú o comando, el usuario debe presionar la letra tantas veces como sea necesario para resaltar el elemento deseado y luego presionar la tecla Intro para completar la selección. Para mantener un comportamiento coherente, debe asignar una letra de selección exclusiva para cada elemento en un menú para los menús de ventana. En Linux, no se proporciona ninguna letra de selección predeterminada. Es necesario especificar un valor para la propiedad mnemonicIndex de un elemento de menú para proporcionar una letra de selección. Se debe especificar la letra de selección como un índice en la cadena de la etiqueta. El índice del primer carácter en una etiqueta es 0. Por consiguiente, para utilizar “r” como la letra de selección para un elemento de menú denominado “Formato,” se debe establecer la propiedad mnemonicIndex igual a 2. var item:NativeMenuItem = new NativeMenuItem("Format");
item.mnemonicIndex = 2;
Estado de los elementos de menúLos elementos de menú tienen dos propiedades de estado, checked y enabled:
Asociación de un objeto a un elemento de menúLa propiedad data de la clase NativeMenuItem permite hacer referencia a un objeto arbitrario en cada elemento. Por ejemplo, en un menú “Abrir reciente”, puede asignar el objeto File para cada documento a cada elemento de menú. var file:File = File.applicationStorageDirectory.resolvePath("GreatGatsby.pdf")
var menuItem:NativeMenuItem = docMenu.addItem(new NativeMenuItem(file.name));
menuItem.data = file;
|
|