{{indexmenu_n>1}} ====== Menús de la Aplicación ===== \\ Para la creación de Menús de las aplicaciones en sus inicios, obsoleto en la actualidad, el uso del **APPWIZARD**, el cual brindaba viables bondades pero a la vez un poco estáticas y limitadas en cuanto a diseño. Es por esto que XOne ha implementado nuevas herramientas para dotar a las aplicaciones de Menús con mejor diseño y funcionalidad, así como orientados a los diseños que demandan las nuevas tendencias en Aplicaciones móviles. \\ Estas nuevas funcionalidades van orientadas inicialmente a la plataforma y conjuntamente al dispositivo. Quiere decir esto, que podremos personalizar tantos diseños de menús dentro de la aplicación como a los dispositivos que van dirigidos. Por ejemplo, podemos diseñar orientados a cual Plataforma Android o IOS y conjuntamente a que dispositivo va dirigido: móvil, tableta, smartwatch, etc. Así como según las orientaciones que queramos darle a las aplicaciones, portrait o landscape. En este acápite nos centraremos en la creación y desarrollo de los diferentes Menús para nuestras aplicaciones. \\ La base del funcionamiento de los menus actuales de las App de XOne, no es más que un diseño atractivo que lo que hace es dirigir al usuario a navegar dentro de la App según sus funcionalidades, esta navegación es a través de llamadas a diferentes grupos y colecciones\\ A continuación expondremos algunos diseños y como implementar sus funcionalidades. \\ \\ ^ Tipos de Menus ^ ^ | [[wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:start#A través de íconos o botones|A través de íconos o botones]] | Se definen iconos o botones desde pantalla principal que permiten acceso a diferentes funcionalidades y demás opciones en la App | | [[wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:start#A través del Grupo tipo Drawer|A través del Grupo tipo Drawer]] | Este menú es el que su diseño nos permite acceder desde cualquier pantalla y momento dentro de la App, se accede al hacer swipe desde uno de los bordes de la pantalla, tanto vertical como horizontal y no es más que un grupo de controles que es invisible hasta que se saca arrastrando con el dedo desde uno de los bordes laterales de la pantalla. Véase también:[[wiki:2.-desarrollo-app:2.3.-codigo:a.-estructura-xml:3.-nodo-group:start#grupo_desplegable_drawer|Grupo DRAWER]] | \\ Estos tipos de menus no son exclusivos, ellos pueden combinarse en una misma App, brindando mejor funcionalidad y apariencia. Actualmente la combinación de estos diseños es lo que destaca en las Apps XOne. \\ ===== A través de íconos o botones ===== \\ Se implementa desde la creación de un diseño que puede contener íconos, botones, frases,, etc que defina el programador para acceder a las opciones dentro de la App. \\ \\ {{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:screenshot_20231123-140433.png?190|}} {{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:screenshot_20231123-151101.png?190|}} {{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:img_3027.png?190|}} {{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:img_3028.png?190|}} {{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:screenshot_20231123-140110.png?190|}} \\ \\ Definimos una colección Menu que contiene las propiedades para definir botones, iconos o imágene y a cada uno estos se le asigna una funcionalidad que nos llevará a otras opciones dentro de la App, generalmente definido por un pushValue que nos lanza a otras pontallas, declaradas de igual forma en otra colección. Puede también definirse una propiedad tipo Contents para controlar las funcionalidades de íconos y botones. \\ \\ **Ejemplo:** \\ \\ En este caso se crea una colección que contiene varias propiedades type="B" y a través del atributo "onclick" le hemos asociado la función que nos lanza a la siguiente opción. \\ \\ \\ function irColl(collname){ var coll = appData.getCollection(collname); var obj = coll.createObject(); coll.addItem(obj); appData.pushValue(obj); } \\ \\ ===== A través del Grupo tipo Drawer ===== \\ Este es el tipo de menú que se puede mostrar u ocultar a través deslizar el dedo sobre la pantalla del dispositivo, la ventaja es que este menu puede ser accesible desde cualquier momento dentro de la App, aún sin estar en el Menu Principal, y si se combina con el menu antes descrito podremos crear una App más dinámica, que no necesita navegarse solo por un menú estático que nos hace avanzar o retroceder en una única dirección, a la vez que le proporciona agilidad y bondades asequibles al usuario.\\ \\ {{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:screenshot_20231123-145217.png?215|}} {{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:screenshot_20231124-132054.png?215|}} {{:wiki:2.-desarrollo-app:2.3.-codigo:b.-controles-xone:2.-menu:screenshot_20231124-132144.png?215|}} \\ Para que un grupo se comporte como DRAWER se tiene que definir el atributo **drawer-orientation**="left o right" en la declaración del grupo, este atributo indica que el grupo es un drawer y desde donde se despliega. \\ Veáse también: [[wiki:2.-desarrollo-app:2.3.-codigo:a.-estructura-xml:3.-nodo-group:start#grupo_desplegable_drawer|Grupo DRAWER]] \\ \\ **Ejemplo:** \\ \\ \\ **Ejemplo donde se combina el uso de Menú con botones y Menu con Drawer:** \\ \\ ===== Menú a través del fichero APPWIZARD.XML (OBSOLETO) ===== - Editando el fichero **APPWIZARD.XML** (Tenemos 2 niveles de Menús). - Si queremos personalizar los menús para hacerlos completamente a nuestro gusto o tenemos más de dos niveles de menús, podemos hacer nuestra propia colección de menús personalizada, con el diseño que queramos. Para indicarle al Framework que no utilice el fichero **APPWIZARD.XML** y que utilice en su lugar nuestra colección personalizada de menús, tenemos que definir el atributo **entry-point="NombreColeccionConMenuPersonalizado"** en el nodo app. \\ ==== Appwizard.xml ==== \\ El fichero **Appwizard.xml** define la estructura de menús para la aplicación. === Estructura del fichero APPWIZARD.XML === \\ \\ \\ * En la estructura anterior se repetirá el nodo **** tantas veces como usuarios distintos vayamos a tener en nuestra aplicación. * Dentro del nodo **" \\ === Atributos === \\ ^ Atributo ^ Descripción ^ | menu | es donde se pone el nombre del menú utilizado | | name | su valor debe ser único en todo el Appwizard | | Imgbk | sirve para llamar a una imagen, que saldrá de fondo en la pestaña | | mode | define como se va a entrar en la opción por defecto, si en modo listado (0) o modo edición (1) | | Mask | acciones que se pueden realizar, como editar, crear, borrar o filtrar | | Loadall | para cargar o no todos los datos de la coll | \\ === mask="valor" === Es un número que en binario indicará las operaciones que se podrán hacer sobre la colección.\\ \\ La codificación de ese número es la siguiente:\\ ^ **Posición BIT en Binario** ^ **Icono** ^ **Opción Asociada** ^ **Modo Listado (GRID)** ^ **Modo Edición (FORMULARIO)** ^ | 1 ( 0 0 0 0 0 0 **1** ) | {{wiki:iconos:nuevo.png}} | Crear nuevo | SI | SI | | 2 ( 0 0 0 0 0 **1** 0 ) | {{wiki:iconos:editar.png}} | Editar | SI | NO | | 4 ( 0 0 0 0 **1** 0 0 ) | {{wiki:iconos:borrar.png}} | Borrar | SI | SI | | 8 ( 0 0 0 **1** 0 0 0 ) | {{wiki:iconos:salir.png}} | Salir | SI | SI | | 16 ( 0 0 **1** 0 0 0 0 ) | {{wiki:iconos:filtro.png}} | Filtrar | SI | NO |\\ | 32 ( 0 **1** 0 0 0 0 0 ) | {{wiki:iconos:edit_inline.png}} | inline (Solo Pocket PC) | NO | SI |\\ | 64 ( **1** 0 0 0 0 0 0 ) | {{wiki:iconos:guardar.png}} | Guardar | NO | SI |\\ \\ \\ Hay varios sitios donde podemos definir la máscara(permisos) a una colección:\\ \\ ^ **Atributo** ^ **Nodo** ^ | **mask** | En fichero **appwizard.xml** en la llamada a la colección | | **editmask** | En el nodo **COLL** de definición de una colección | | **mask** | En el **PROP** de llamada a una colección **CONTENTS** | | **nomenmask** | En el nodo **COLL** de definición de una colección (Máscara cuando se llama desde una lupa a esta colección) | \\ /* =====Pantalla de login personalizada===== En algunos casos, podríamos necesitar personalizar la pantalla habitual de login. Lo único que tenemos que hacer es definir una colección con el diseño que queramos para el login. A esta colección hay que ponerle un atributo **login-coll="true"** que es el provoca que dicha colección se convierta en "Pantalla de Login". Fichero mappings.xml