Forums : Extensions

Aller à la discussion :  Plus récente Plus ancienne

# Remplir au chargement d'une table (tree) contenu dans un prefpane

Envoyé par : dombioinfo

Date : 27/03/2009 10:42

Bonjour,

Je développe une extension laquelle dispose d'une fenêtre de préférences (prefwindow).Sur un des onglets (prefpane) j'utilise l'attribut "onpaneload" associé à une fonction javascript fillTree() que j'ai écrite. Le problème c'est que la fonction est bien appelée, la boucle qu'elle contient est bien effectuée, mais la table n'est pas remplie et je n'ai pas de messages d'erreur. Voici le code xul du prefpane :

<prefpane id="bzPrefPaneModule" label="Modules Manager" onpaneload="fillTree();">
  <preferences></preferences>
  <vbox flex="1">		
    <vbox flex="1">
      <label value="Available modules on the server:" />
      <hbox flex="0">
        <html:style>
          treechildren::-moz-tree-checkbox {
            /* css pour les cellules non cochees */
            list-style-image: url("");
          }
          treechildren::-moz-tree-checkbox(checked) {
            /* css pour les cellules cochees */
            list-style-image: url("chrome://global/skin/checkbox/cbox-check.gif");
          }
        </html:style>
        <tree id="bzTreeModule" editable="true" flex="1" hidecolumnpicker="true" seltype="multiple" preference-editable="true" onsynctopreference="savePrefModule();">
          <treecols>
            <treecol id="select" type="checkbox" editable="true" flex="1" />
            <treecol id="modulename" label="Name" flex="1" />
            <splitter class="tree-splitter" />
            <treecol id="version" label="Version" flex="1" />
            <splitter class="tree-splitter" />
            <treecol id="enable" type="checkbox" editable="false" label="Enable" flex="1" />
          </treecols>
          <treechildren id="bzListModule">
            <!-- section remplie dynamiquement par le script -->
          </treechildren>
        </tree>
        <!-- <splitter /> -->
      </hbox>
    </vbox>
  </vbox>
</prefpane>

Maintenant le code de fillTree :

function fillTree () {
  var listAllModule = getPrefModulesList();
  var moduleTable = document.getElementById("bzListModule");
  for(var i=0; i<listAllModule.length; i++) {
    alert('truc'); // juste pour tester, ici ça bugge au niveau de l'affichage car seul le contour de la fenêtre apparaît donc pas de contenu
    // create a new row and add colomn in this row
    var treerowElement = document.createElement("treerow");
    // col selection (1)
    var treecellSelect = document.createElement("treecell");
    treecellSelect.setAttribute("value", "0");
    treerowElement.appendChild(treecellSelect);
    // col Name (2)
    var treecellName = document.createElement("treecell");
    treecellName.setAttribute("label", listAllModule[i].getName());
    treecellName.setAttribute("editable", "false");
    treerowElement.appendChild(treecellName);
    // col Version (3)
    var treecellVersion = document.createElement("treecell");
    treecellVersion.setAttribute("label", listAllModule[i].getVersion());
    treecellVersion.setAttribute("editable", "false");
    treerowElement.appendChild(treecellVersion);	
    // col Enable (4)
    var treecellEnable = document.createElement("treecell");
    treecellEnable.setAttribute("value", listAllModule[i].isActivated());
    //treecellEnable.setAttribute("label", "active");
    treecellEnable.setAttribute("editable", "false");
    treerowElement.appendChild(treecellEnable);
    // create a new item
    var treeitemElement = document.createElement("treeitem");
    treeitemElement.appendChild(treerowElement);
    moduleTable.appendChild(treeitemElement);
  }
}

Pour réaliser ceci je me suis basé sur le tutorial suivant http://www.rietta.com/firefox/Tutorial/p(..)

J'espère que quelqu'un pourra m'aider. Merci.

# Re: Remplir au chargement d'une table (tree) contenu dans un prefpane

Envoyé par : laurentj

Date : 27/03/2009 11:27

Tu as vérifié avec le DOM inspector que les éléments crées étaient bien présents ?

Parce que si ils ne sont pas là, mais que tu es sûr que ta fonction est appelé, alors c'est dans ton code que ça foire.

Si ils sont là, alors c'est peut être un problème de rafraichissement à l'affichage. Essaye par exemple de redimensionner la fenêtre à la souris. Parfois il peut y avoir des bugs d'affichage.

Sinon, ton tree vide, tu le vois au moins ? Tu vois tes trees cols et tout ? C'est pas un problème de flex plutôt ? Par exemple, y a pas de flex sur le treechildren, et y a un flex=0 sur une des hbox parente. C'est peut être ça : tu vois pas le contenu parce que ton tree n'est pas assez haut.

# Re: Remplir au chargement d'une table (tree) contenu dans un prefpane

Envoyé par : dombioinfo

Date : 27/03/2009 14:16

Oui j'ai vérifié le DOM. En fait la boucle (actuellement) doit faire 2 tours et avec un "alert()" à l'intérieur ça se vérifie, donc ici ok. Par contre dans le DOM effectivement il ne m'insère pas les balises treeitem et ses balises descendantes. A l'affichage, je vois la table c'est-à-dire uniquement les noms des colonnes. j'ai essayer de modifier les valeurs de flex mais ca n'a rien changé.

Une autre idée ?

# Re: Remplir au chargement d'une table (tree) contenu dans un prefpane

Envoyé par : dombioinfo

Date : 31/03/2009 11:54

Je viens de remarquer que ma table apparait après avoir fait afficher un autre onglet (prefpane) et être revenu sur l'onglet concerné. Ceci ressemble à un problème de rafraichissement de l'affichage. Si c'est bien cela comment y remédier ?

Merci

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.