Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# Recupérer treecell double-cliqué dans un arbre.

Envoyé par : souqueta

Date : 04/06/2006 18:08

Bonjour,

Rien n'y fait , je ne trouve pas le moyen de récupérer l'item surlequel j'ai double-cliqué dans mon arbre. La tache n'en est pas facilitée puisque seul tree peut prendre l'attribut ondblclick.

Du coup , des fonctions telles que :

- getCellText (index,colonne)
- treechildren.parentNode.treeBoxObject.getRowAt(event.clientX, event.clientY);
- treechildren.parentNode.treeBoxObject.getCellAt(event.clientX, event.clientY,...);

Ne me renvoient les index , voire la valeur text de l'item,mais jamais l'element lui même.

# Re: Recupérer treecell double-cliqué dans un arbre.

Envoyé par : omic

Date : 05/06/2006 00:32

Je ne comprend pas bien ce que tu veux dire par :

Ne me renvoient les index , voire la valeur text de l'item,
mais jamais l'element lui même.

Tu arrives donc à récupérer des valeurs ou non ?

Que veux-tu faire exactement ?

# Re: Recupérer treecell double-cliqué dans un arbre.

Envoyé par : souqueta

Date : 05/06/2006 08:16

J'aimerais pouvoir obtenir une référence sur l'objet (ici un treecell), surlequel j'ai double cliqué afin de pouvoir récupérer son identifiant.

Merci

# Re: Recupérer treecell double-cliqué dans un arbre.

Envoyé par : omic

Date : 06/06/2006 14:14

Voici un exemple qui affiche le contenu d'une cellule lors d'un double clique...

 <?xml version="1.0" ?>
 <?xml-stylesheet href="chrome://global/skin"?>
 <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         xmlns:html="http://www.w3.org/1999/xhtml">
   <vbox id="xf-index-vbox-navigator" flex="1">
   
   
   <html:script language="javascript">
   function debug(el){
     var index = el.currentIndex;
     var col = el.columns.getColumnAt(0);
     alert(el.view.getCellText(index,col));
   }
   </html:script>
   
   
     <tree id="xf-index-arbre" flex="1" style="width : 800px" seltype="single" enableColumnDrag="true" flags="dont-build-content" ondblclick="debug(this)">
         <treecols>
           <treecol id="xf-index-arbre-titre" label="Titre menu" primary="true" flex="8"/>
         </treecols>
        <treechildren>
            <treeitem container="true">
                <treerow>
                    <treecell label="Menu_1" />
                </treerow>
                <treechildren>
                    <treeitem>
                        <treerow>
                            <treecell class="treecell-indent" label="Sous_Menu_1-1" />
                        </treerow>
                    </treeitem>
                    <treeitem>
                        <treerow>
                            <treecell class="treecell-indent" label="Sous_Menu_1-2" />
                        </treerow>
                    </treeitem>
                </treechildren>
            </treeitem>
        </treechildren>
     </tree>
   </vbox>
 </window> 

# Re: Recupérer treecell double-cliqué dans un arbre.

Envoyé par : thefab

Date : 06/06/2006 14:34

omic > Pas besoin de placer script dans du HTML il existe aussi en XUL <script type="application/x-javascript">

récupérer l'item sur lequel j'ai double-cliqué dans mon arbre

Je n'y parviens pas non plus, au mieux j'arrive à récupérer treechildren, ensuite peut-être qu'avec des childNodes... si ton arbre n'est pas généré avec RDF:

JS

<script type="application/x-javascript">
function onDblClick(e)
  {
  alert(e.target.nodeName);
  alert(e.currentTarget.nodeName);
  alert(e.originalTarget.nodeName);
  }
</script>

XUL

<tree ondblclick="onDblClick(event);">

# Re: Recupérer treecell double-cliqué dans un arbre.

Envoyé par : souqueta

Date : 06/06/2006 19:20

Merci,

Pareil, j'obtiens une référence sur le treechildren, mais les infos supplémentaires que j'arrive à dégoter ne sont pas suffisantes pour accéder au treeitem voulu.

Je regrette un peu ici le bon vieux selectedItem de listBox...

A suivre.

# Re: Recupérer treecell double-cliqué dans un arbre.

Envoyé par : laurentj

Date : 07/06/2006 13:14

Il faut vous rappeler que, contrairement aux autres balises XUL, les balises treeitem, treechildren etc, ne servent pas directement à afficher. Ce sont juste des conteneurs d'informations. (ils n'ont pas de representation graphique si vous préférez).

Le moteur d'affichage du tree est spécifique par rapport aux autres balises XUL : il fait appel à l'objet stocké dans la propriété view poru afficher tel cellule ou ligne.

Cet objet est différent selon la manière dont est généré l'arbre. Voir le tableau sur la page de référence du tree.

Souqueta, dans ton exemple, tu as un contenu XUL classique, sans custom tree view, et sans flag "dont-build-content". Si tu t'en refère au tableau de la page sur le tree, tu vois que cela correspond au premier cas. Donc que l'objet view implémente nsITreeView (comme tous les view), mais aussi nsITreeContentView.

Et là, oh miracle, cette interface propose une méthode qui t'aidera à résoudre ton problème : getItemAtIndex

Donc normalement :

var index = montree.treeBoxObject.getRowAt(event.clientX, event.clientY)
var domItem = montree.contentView.getItemAtIndex(index);

Dans domItem, cela devrait être le treerow ou le treeitem. Ensuite, un coup de DOM pour aller sur les treecell ou récupérer les attributs que tu veux, te permettra d'arriver à tes fins.

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.