Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# boite surgissante

Envoyé par : bd

Date : 19/07/2005 16:16

Bonjour, je cherche à réaliser une boite surgissante contenant une boite de liste (listbox). A en croire le tutorial xulplanet, cela semble possible:

Boîte surgissante simple
La boîte surgissante simple est une fenêtre surgissante qui apparaît quand l'utilisateur presse le bouton gauche de la souris sur un élément. Elles sont assez semblables aux menus sur les barres de menu, excepté qu'elles peuvent être placés n'importe où et peuvent contenir n'importe quel contenu. Un bon exemple est le menu déroulant qui apparaît quand vous maintenez le bouton de la souris enfoncé au-dessus des boutons "précédent" et "suivant" dans la fenêtre d'un navigateur.

Or, avec le code ci-dessous, j'en arrive à une segmentation fault à l'exécution...

<popupset>
<popup id="extractChoiceMenu" position="after_end">
<listbox>
<listitem label="Beurre de cacahuète"/>
<listitem label="Chocolat à tartiner"/>
<listitem label="Confiture de fraise"/>
<listitem label="Crême chantilly"/>
</listbox>
</popup>
</popupset>

Erreur de ma part, ou incompatibilité entre les éléments...?

Et si cela n'est simplement pas possible, comment peut-on supprimer dynamiquement les éléments d'un menu comme on peut le faire avec une liste? (en supposant que je remplace cette boite surgissante par un menu...)

Merci d'avance

# Re: boite surgissante

Envoyé par : chBok

Date : 19/07/2005 17:53

L'auteur du tutoriel a effectivement écrit que l'on pouvait mettre n'importe quel type d'éléments dans un menu surgissant.

Toutefois, il n'est pas logique dans un menu, de mettre un tableau de données (le <listbox>), ou même un arbre (<tree>). Je pense que c'est pour cette raison que le navigateur plante - il devrait d'ailleurs plutôt ignoré l'inclusion fautive !

Remplace tes <listitem> en <menuitem> et enlève les balises <listbox>

# Re: boite surgissante

Envoyé par : bd

Date : 19/07/2005 18:01

Certes, cela ne parait pas logique, mais pour ce que je voulais en faire, ça me paraissait plutôt pratique, dommage...

Je vais donc de ce pas remplacer mes "listitem" par des "menuitem"...

Seulement, mon problème est le suivant: avec une listbox, je sais supprimer dynamiquement tous les éléments à l'aide de la boucle suivante:

while (liste.getRowCount() > 0) {
   liste.removeItemAt(0);
}

Mais comment faire avec un menu...? puisque la méthode "getRowCount()" ne semble pas avoir son équivalent... et j'aurai besoin de vider le menu dynamiquement...

# Re: boite surgissante

Envoyé par : chBok

Date : 19/07/2005 18:08

Alors, tu peux regarder les fonctions du DOM décrites dans cette version provisoire du tutoriel :

- appendChild
- insertBefore
- replaceChild
- removeChild

Elles nécessitent de récupérer l'identifiant des éléments de ton menu, avec des id.

# Re: boite surgissante

Envoyé par : aurelien

Date : 19/07/2005 18:13

Edit je tapais je n'avais pas vu le message précédent, qui est plus utile que le mien...

Tu peux utiliser des templates ou modifier le dom. Un exemple combinant les 2 (c'est plus pour illustrer qu'autre chose ton objectif étant assez éloigné) : http://www.xulplanet.com/ndeakin/tests/x(..)

# Re: boite surgissante

Envoyé par : bd

Date : 20/07/2005 13:46

Grâce à votre aide, j'ai pu trouver une solution à mon problème... Il est normal que je vous en fasse profiter.

menupopup=document.getElementById('progChoicePopup');
// on ajoute un item dans le menu...
var item = document.createElement("menuitem");
item.setAttribute("id", "prog_item_"+i);
menupopup.appendChild(item);
		
// pour vider le menu
var notEmpty=true;
var compt=0;
while(notEmpty)
{
  try
 {
  menupopup.removeChild(document.getElementById('prog_item_'+compt));
  compt++;
 }
 catch(ex)
 {
  notEmpty=false;
 }
}

# Re: boite surgissante

Envoyé par : chBok

Date : 20/07/2005 14:30

bd a écrit:

Grâce à votre aide, j'ai pu trouver une solution à mon problème...
Il est normal que je vous en fasse profiter.

La solution passait donc bien par les fonctions du DOM. Donc, merci d'en faire profiter les utilisateurs du forum :)

Il n'est plus possible de poster des messages dans ce forum.


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.