Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Menu contextuel paramétrable

Envoyé par : cokinou

Date : 10/01/2007 14:23

Bonjour,

J'ai quelques problème avec l'affichage d'une popup context. Voilà, j'ai une liste de ligne et je voudrais ouvrir un menu contextuel avec plusieurs élément, dont supprimer la ligne. Le problème, c'est que je n'arrive pas à voir comment paramétrer le menu contextuel.

voilà mon code XUL de ma liste :

 <listbox>
    <listhead>
       <listheader label="id"/>
       <listheader label="name"/>
    </listhead>
    <listitem context="contextMenu">
       <listcell label="1"/>
       <listcell label="dupont"/>
    </listitem>
    <listitem context="contextMenu">
       <listcell label="2"/>
       <listcell label="martin"/>
    </listitem>
    ...
 </listbox>

voilà mon code XUL de mon menu :

 <popupset>
    <popup id="contextMenu">
       <menuitem label="Editer le nom" oncommand="edit('#id#');"/>
       <menuseparator/>
       <menuitem label="Supprimer" oncommand="delete('#id#');"/>
    </popup>
 </popupset>

Et j'aimerai que mes #id# soit remplacé par le label du premier listcell de la ligne.... Je n'ai pas du tout compris comment je pouvais faire ca....

Pour le code de remplacement, il y a pas de problème, mais comment faire pour retrouver la ligne sur laquelle j'ai cliqué ?

J'ai essayé avec oncontextmenu="" et showPopup() mais sans succès non plus....

Vous auriez une idée ?

Merci d'avance

# Re: Menu contextuel paramétrable

Envoyé par : papy

Date : 10/01/2007 14:53

Le plus simple à mon gout et de modifier ton menu grace à l'évènement onpopupshowing de ton menu.

Pour ca, en gros tu fait comme suis :

  1. dans ton handler onpopupshowing tu apelle une fonction, on va l'apeller genMenu
  2. dans ta fonction genMenu, tu recupere le widget qui a ouvert le menu contextuel (c'est à dire ta liste) avec la propriete popupNode du document
  3. toujours dans la fonction genMenu, tu regarde quel est l'élément sélectionné de ta liste, tu génère les handler oncommand de tes menuitem et tu les affectes avec la fonction setAttribute

# Re: Menu contextuel paramétrable

Envoyé par : cokinou

Date : 10/01/2007 16:00

J'avais vu cette fonction mais je n'avais pas pensé rechercher l'élément sélectionné dans la liste pour trouver l'id....

En plus, je ne connaissais pas la propriété popupNode donc merci beaucoup, elle va me permettre de bien simplifier mon code ;-)

Merci beaucoup pour l'aide ;-)

# Re: Menu contextuel paramétrable

Envoyé par : papy

Date : 10/01/2007 16:12

De rien, je me suis bien cassé la tête pour trouver cette propriété, elle n'est pas vraiment documentée, juste mentionnée dans des commentaires, perdu sur le site de XULPlanet ;) En passant il y a l'equivalent pour les tooltips : document.tooltipNode

# Re: Menu contextuel paramétrable

Envoyé par : Raphael

Date : 10/01/2007 22:52

Wahou... c'est pas un peu compliqué tout ça ? Pas possible de juste récupérer l'id via le DOM et les propriétés du listbox pour le filer à ta fonction delete() qui elle se chargera d'effacer la ligne correspondante ?

Enfin bon, apparemment vous vous êtes bien entendu, c'est le plus important, peut-être est-ce moi qui code avec les pieds ? XD

# Re: Menu contextuel paramétrable

Envoyé par : cokinou

Date : 11/01/2007 09:42

papy a écrit:

De rien, je me suis bien cassé la tête pour
trouver cette propriété, elle n'est pas vraiment
documentée, juste mentionnée dans des
commentaires, perdu sur le site de XULPlanet ;) En
passant il y a l'equivalent pour les tooltips :
document.tooltipNode

Ca c'est sur que pour trouver les propriétés d'un élément, il faut pas mal rechercher.... et des fois c'est complètement par hasard qu'on tombe sur la bonne propriété.... et des fois on trouve rien alors on fait un truc super complexe qui, en fait existe déjà :-( En tout cas, c'est bon à savoir les propriété document.popupNode et document.tooltipNode, ca peut pas mal aider :-)

Raphael a écrit:

Wahou... c'est pas un peu compliqué tout ça ? Pas
possible de juste récupérer l'id via le DOM et les
propriétés du listbox pour le filer à ta fonction
delete() qui elle se chargera d'effacer la ligne
correspondante ?

Enfin bon, apparemment vous vous êtes bien
entendu, c'est le plus important, peut-être est-ce
moi qui code avec les pieds ? XD

En fait, c'est vrai que j'aurai pu récupérer les propriétés à partir du DOM afin de trouver l'élément sélectionné de ma liste.... mais si jamais je dois faire ca sur d'autres éléments qu'une liste, avec le document.popupNode ma fonction fonctionnera toujours vu qu'elle est indépendante du type d'élément ;-) Parcourir le DOM peut semble-t-il être plus simple (quoique ?), mais beaucoup moins générique ;-)

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.