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...
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)
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 :
<?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>
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.