Forums : Xul, Xbl, JS...

Aller à la discussion :  Plus récente Plus ancienne

# [Résolu] Problème drag and drop et tree custom view

Envoyé par : papy

Date : 28/06/2006 16:19

Bonjour,

je suis en train d'implémenter le drag & drop en utilisant les wrappers javascript, tout se passe bien pour le drag, j'arrive correctement a créer la session et à droper mon contenu vers la barre de lien ou la barre d'adresse par exemple (j'ai une flavour text/unicode). En revanche dès que je fais un drop sur mes composants, FF s'emballe et utilise le CPU à 100%, plus moyen de contrôler l'interface etc... ma seule option est de le killer.

Le plus étrange dans tout ceci c'est que je continue d'avoir ce problème même si je ne met rien dans le gestionnaire d'évènement pour le drop (attribut ondragdrop). J'ai également essayé de ne pas mettre du tout d'attribut ondragdrop, même effet...

# Re: Problème drag and drop et tree custom view

Envoyé par : papy

Date : 28/06/2006 18:07

Bon, apres moulte tests, le drag and drop fonctionne a merveille dans tout les cas, sauf quand le composants sur lequel je drop est un arbre avec une custom view.

Tout ce que je cite plus haut est toujours valable, notamment la réaction même si je n'ai pas spécifié l'attribut ondragdrop. Donc je me demandais si il n'y avais pas un gestionnaire pour le drop activé de manière automatique pour ce cas.

Quoiqu'il en soit, au niveau de ma custom view les méthodes relatives au drag & drop existent bien :

...
canDrop: function(rowIdx, orient) { return false; },
drop: function(rowIdx, orient) { },
...

En passant elles ne semblent pas non plus être apellées, avec ou sans le gestionnaire dragdrop activé (j'ai ajouté des dump aux fonctions, pas de sortie)

# Re: Problème drag and drop et tree custom view

Envoyé par : papy

Date : 29/06/2006 12:04

Rectification, la méthode canDrop est bien apellé, en revanche pas la méthode drop.

Voila un exemple de code qui plante au cas où il y ai une âme charitable prête à tester ceci. J'ai inclue le code JS directement dans le XUL pour plus de facilité.

Infos :

  • Pour faire planter FF, il suffit d'essayer de dropper quelque chose sur l'arbre, un bookmark par exemple.
  • La valeur de retour de la méthode canDrop de la vue ne change rien, a part l'apparition d'un petit trait pour signaler le dropover dans l'arbre lorsqu'on retourne true.
  • Le seul dump visible dans la console est celui de la méthode canDrop
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css" ?>
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
   <script src="chrome://global/content/nsDragAndDrop.js" type="text/javascript"/>
   <script src="chrome://global/content/nsTransferable.js" type="text/javascript"/>
   <!-- Definition du code pour le drag and drop -->
   <script type="text/javascript"><![CDATA[
       function TreeView() {
           this.rowCount = 10;
           this.selection = null;
       }
       TreeView.prototype = {
           setTree: function(tree) { this.tree = tree; },
           getCellText: function(rowIdx, col) { return 'row '+rowIdx; },
           getImageSrc: function(rowIdx, col) { return ''; },
           canDrop: function(rowIdx, orient) { dump('can drop ?\n'); return false; },
           cycleCell: function(rowIdx, col) { },
           cycleHeader: function(col) { },
           drop: function(rowIdx, orient) { dump('drop !\n'); },
           isContainer: function(rowIdx) { return false; },
           isContainerOpen: function(rowIdx) { return false; },
           isContainerEmpty: function(rowIdx) { return true; },
           isEditable: function(rowIdx, col) { return false; },
           isSeparator: function(rowIdx) { return false; },
           isSorted: function() { return false; },
           getCellProperties: function(rowIdx, col, properties) { },
           getCellValue: function(rowIdx, col) { return 0; },
           getColumnProperties: function(col, properties) { properties = null; },
           getLevel: function() { return 0; },
           getParentIndex: function(rowIdx) { return 0; },
           getProgressMode: function(rowIdx, col) { return PROGRESS_NONE; },
           getRowProperties: function(rowIdx, properties) { properties = null; },
           hasNextSibling: function(rowIdx, afterIdx) { return false; },
           performAction: function(action) { dump('action : '+action+'\n'); },
           performActionOnCell: function(action, rowIdx, col) { dump('action on cell : '+action+'\n'); },
           performActionOnRow: function(action, rowIdx) { dump('action on row : '+action+'\n'); },
           selectionChanged: function() { },
           setCellText: function(rowIdx, col, value) { },
           setCellValue: function(rowIdx, col, value) { },
           toggleOpenState: function(rowIdx) { }
       };
       function init() {
           document.getElementById('tree1').view = new TreeView();
       }
   ]]></script>
   <tree id="tree1" flex="1">
       <treecols>
           <treecol primary="true" label="Colonne 1" flex="1"/>
       </treecols>
       <treechildren/>
   </tree>
   <!-- Affectation des vues -->
   <script>
       setTimeout('init();', 2000);
   </script>
</window>

# Re: Problème drag and drop et tree custom view

Envoyé par : papy

Date : 30/06/2006 10:37

Après avoir fouiner dans le code de quelques extensions et relu la référence sur les custom tree view j'ai fini par trouver l'erreur, toute bête, c'est rageant...

La méthode getParentIndex doit renvoyer -1 dans le cas ou il n'y a pas de parent, et non 0.

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.