Outils pour utilisateurs

Outils du site

A PCRE internal error occured. This might be caused by a faulty plugin

allegro:addon_dialog

====== Différences ====== Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

allegro:addon_dialog [2011/12/14 23:45]
mrhide [MessageBox]
allegro:addon_dialog [2012/06/29 17:06] (Version actuelle)
mrhide [Dialogs Natifs]
Ligne 1: Ligne 1:
-===== Dialogs Natifs =====+===== Allegro — Dialogs Natifs =====
  
 Les dialogs natifs sont très pratiques et très rapides/​simples à implémenter,​ de quoi nous éviter bien des peines vu qu'on a pas à le coder dans notre jeu. Les dialogs natifs sont très pratiques et très rapides/​simples à implémenter,​ de quoi nous éviter bien des peines vu qu'on a pas à le coder dans notre jeu.
Ligne 6: Ligne 6:
  
   * FileChooser — Pour Ouvrer/​Sauver un fichier   * FileChooser — Pour Ouvrer/​Sauver un fichier
-  * MessageBox — Affiche un message avec un ou plusieurs ​boutons +  * MessageBox — Affiche un message avec un ou deux boutons 
-  * TextLog — Affiche un log (texte plutôt long, avec uns scrollbar)+  * TextLog — Affiche un log (texte plutôt long, avec une scrollbar)
  
 ===== Exemples ===== ===== Exemples =====
Ligne 18: Ligne 18:
 ==== MessageBox ==== ==== MessageBox ====
  
-C'est de loin le plus simple à utiliser, en plus il est utilisable avant même l'​appel à la fonction al_init() ; il suffit d'​appeler la fonction **al_show_native_message_box** (attention c'est une fonction bloquante) :+C'est de loin le plus simple à utiliser, en plus il est utilisable avant même l'​appel à la fonction ​**al_init** ; il suffit d'​appeler la fonction **al_show_native_message_box** (attention c'est une fonction bloquante) :
  
 <code c> <code c>
Ligne 95: Ligne 95:
    int value;    int value;
  
-   if (!al_open_native_text_log("​Console",​ ALLEGRO_TEXTLOG_NO_CLOSE | ALLEGRO_TEXTLOG_MONOSPACE)) {+   if (!(log = al_open_native_text_log("​Console",​ ALLEGRO_TEXTLOG_NO_CLOSE | ALLEGRO_TEXTLOG_MONOSPACE))) {
       /* Failed */       /* Failed */
    }    }
Ligne 112: Ligne 112:
   * **ALLEGRO_TEXTLOG_MONOSPACE** — Pour que chaque caractère aient la même largeur   * **ALLEGRO_TEXTLOG_MONOSPACE** — Pour que chaque caractère aient la même largeur
 Elle renvoit false en cas d'​échec. Elle renvoit false en cas d'​échec.
 +
 +===== Menus =====
 +
 +Depuis la version 5.1, allegro permet d'​ajouter une barre de menu à notre display, ainsi qu'un menu contextuel (clic-droit).
 +
 +{{ :​allegro:​menus.png?​nolink&​ | Exemple des menus sous windows }}
 +<​html>​
 +<p style="​text-align:​center;​margin-top:​0px;​font-size:​0.9em"><​em>​Exemple des menus sous windows</​em></​p>​
 +</​html>​
 +
 +Un display ne peut avoir qu'une seule barre de menu, par contre on doit nous même écouter les évents de la souris et afficher le menu contextuel (popup menu) ce qui permet de pouvoir changer le menu en fonction de la zone cliquée.
 +
 +===== Exemples =====
 +
 +Les menus font partie du greffon //Native Dialogs// donc il faut inclure le header :
 +
 +<code c>#​include <​allegro5/​allegro_native_dialog.h></​code>​
 +
 +Ils ont besoin que le greffon soit initialisé :
 +
 +<code c>​al_init_native_dialog_addon();</​code>​
 +
 +Ensuite on peut créer un menu de différentes manières :
 +
 +  * En une seule fois avec **al_build_menu**
 +  * En plusieurs appels successifs à **al_append_menu_item**
 +
 +==== Première méthode ====
 +On crée une variable de type **ALLEGRO_MENU_INFO** qui contient une description de notre menu :
 +
 +<code c>
 +ALLEGRO_MENU *menu = NULL;
 +ALLEGRO_MENU_INFO menu_info[] = {
 +   ​ALLEGRO_START_OF_MENU("&​Fichier",​ 1), 
 +      {"&​Ouvrir",​ 2, 0, NULL},
 +      ALLEGRO_START_OF_MENU("​Fichiers &​Récents...",​ 3),
 +         ​{"​kikoo.png",​ 4, 0, NULL},
 +         ​{"​wallpp.jpg",​ 5, 0, NULL},
 +      ALLEGRO_END_OF_MENU,​
 +      ALLEGRO_MENU_SEPARATOR,​
 +      {"&​Fermer",​ 6, 0, NULL},
 +   ​ALLEGRO_END_OF_MENU,​
 +   ​ALLEGRO_START_OF_MENU("&​Aide",​ 7), 
 +      {"À &​propos",​ 8, 0, NULL},
 +   ​ALLEGRO_END_OF_MENU,​
 +   ​ALLEGRO_END_OF_MENU
 +};
 +menu = al_build_menu(menu_info);​
 +</​code>​
 +
 +La macro **ALLEGRO_START_OF_MENU** ajoute un sous menu qui contiendra des éléments (boutons), **ALLEGRO_END_OF_MENU** ferme un menu. On doit rajouter un **ALLEGRO_END_OF_MENU** final pour fermer le menu qu'on crée.
 +
 +Chaque élément est crée de cette manière :
 +
 +<code c>
 +{
 +   "&​Ouvrir",​ /* Le libellé de notre élément, le '&'​ précède la lettre pour le mnemonic */
 +   ​2, ​        /* l'ID pour savoir quel bouton du menu a été cliqué */
 +   ​0, ​        /* flags d'​option */
 +   ​NULL ​      /* une icône (ALLEGRO_BITMAP) */
 +}
 +</​code>​
 +
 +Les //flags// sont :
 +  * **ALLEGRO_MENU_ITEM_DISABLED** — l'​entrée est grisée, et ne peut être cliquée
 +  * **ALLEGRO_MENU_ITEM_CHECK_BOX** — une case à cocher précède le libellé
 +  * **ALLEGRO_MENU_ITEM_CHECKED** — précoche la case (à utiliser avec le flag précédent)
 +
 +Maintenant on ajoute notre menu à notre display avec **al_set_display_menu** puis pour recevoir les events :
 +
 +<code c>
 +al_register_event_source(event_queue,​ al_get_default_menu_event_source());​
 +</​code>​
 +
 +==== Seconde méthode ====
 +Nous allons créer un menu contextuel (ce qui est tout aussi faisable avec la méthode décrite dans le paragraphe précédent) :
 +
 +<code c>
 +ALLEGRO_MENU *pmenu;
 +pmenu = al_create_popup_menu();​
 +al_append_menu_item(pmenu,​ "​É&​diter",​ 10, 0, NULL, NULL);
 +al_append_menu_item(pmenu,​ "&​Supprimer",​ 11, 0, NULL, NULL);
 +</​code>​
 +
 +Le premier paramètre est le popup-menu, les 4 suivant correspondent à la structure décrite dans le paragraphe précédent et le dernier paramètre permet d'​ajouter un sous menu.
 +
 +la gestion de l'​apparition du menu contextuel se fait //​manuellement//​ : il faut la déclencher explicitement avec **al_popup_menu**.
 +
 +=====
 +
 +Tout dialog crée doit être détruit avec **al_destroy_menu**,​ (une fois sur le menu parent suffit à détruire tout les sous-menus).
 +
 +Tout clic sur un menu déclenche un event de type **ALLEGRO_EVENT_MENU_CLICK**.
 +
 +Selon l'​implémentation,​ l'​ajout d'un menu au display réduit sa taille, le display génère donc un event de type **ALLEGRO_EVENT_DISPLAY_RESIZE** on peut connaître la taille perdu en faisant la différence avec la valeur renvoyée par **al_get_display_height**.
 +
 +[[allegro:​addons|Liste des greffons]]
allegro/addon_dialog.1323902742.txt.gz · Dernière modification: 2011/12/14 23:45 par mrhide