Problème drag&drop et Canvas
Bonjour à tous,
Cela fait quelques temps que je suis coincé par un problème mystérieux. N'ayant trouvé aucune documentation, je vous soumet mon soucis :
J'ai un popup (un Panel) composé d'un Canvas, contenant une image, prenant une toute petite partie du Canvas.
Le canvas doit pouvoir recevoir certains objets issus d'un drag&drop, et l'image aussi.
Ces deux objets ont donc des écouteurs spécifiques sur les évenements DragEvent.DRAG_ENTER et DragEvent.DRAG_DROP.
Jusque là, rien de particulier. Mon problème est qu'en fait les évènements liés au drag&drop ne sont activés que sur l'image contenue dans le canvas. Cependant, ce sont les bonnes méthodes qui sont appelées.
Comme un bout de code vaut mieux que des explications confuses, voici ce qui compose mon problème :
Le popup (ATTitleButtonPanel est un panel bidouillé pour avoir un bouton dans la zone de titre) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
<?xml version="1.0" encoding="utf-8"?>
<ATTitleButtonPanel
xmlns="com.ATImprovedComponents.*"
xmlns:mx="http://www.adobe.com/2006/mxml"
width="100%"
height="100%"
title="tags de la sonde">
<mx:Canvas id="pane_ProbeTagsView"
width="100%"
height="100%"
minWidth="200"
minHeight="50"
horizontalScrollPolicy="off">
<mx:Image id="probeTagsBin"
width="20"
height="20"
right="0"
bottom="0">
<mx:source>logos/recycle43.gif</mx:source>
</mx:Image>
</mx:Canvas>
</ATTitleButtonPanel> |
L'ajout des écouteurs (probePopup est mon composant de popup en question) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
private function createProbeTagPopup (AEvent : MouseEvent) : void
{
PopUpManager.addPopUp(this.probePopup ,Application.application.MODEView_canvas) ;
this.probePopup.btnClose.addEventListener(MouseEvent.CLICK , onProbeBtnCloseClick);
this.probePopup.pane_ProbeTagsView.addEventListener(DragEvent.DRAG_DROP , probeDropHandler);
this.probePopup.pane_ProbeTagsView.addEventListener(DragEvent.DRAG_ENTER , probeEnterHandler);
this.probePopup.probeTagsBin.addEventListener(MouseEvent.CLICK,resetProbeActivePropertiesOnEvent);
this.probePopup.probeTagsBin.addEventListener(DragEvent.DRAG_DROP , View.pane_ProbeTagsView.dropOntoBinHandler);
this.probePopup.probeTagsBin.addEventListener(DragEvent.DRAG_ENTER , View.pane_ProbeTagsView.dragEnterBinHandler) ;
this.probePopup.x = this.probeZone.x + 50 ;
this.probePopup.y = this.probeZone.y + 150 ;
} |
Donc ma méthode "probeEnterHandler" n'est déclenchée que lorsque je passe la souris sur l'objet probeTagsBin.
Si j'élimine probeTagBin du composant, alors aucun évènement n'est déclenché.
Voici enfin, la fameuse methode "probeEnterHandler" sensée être déclenchée lors de l'entrée dans le canvas (ce bout de code n'est pas de moi).
Code:
1 2 3 4 5 6 7 8
|
public static function probeEnterHandler(event:DragEvent):void
{
if (/**EMA 14 oct ...**/
event.dragSource.hasFormat("image")&& AllVariables.draggedObject!="atom_pane_NewIndexableAtoms"
/**...EMA 14 oct **/
|| event.dragSource.hasFormat("draggedProperties"))
{ DragManager.acceptDragDrop(UIComponent(event.target)); } |
En effectuant une trace, je peut constater que event.target (et event.currentTarget) pointe bien sur mon objet canvas (pane_ProbeTagsView)
Voila, ce n'est pas la première fois que je fais des actions de drag&drop dans des Canvas et je n'ai jamais eu ce genre de problèmes.
Si quelqu'un à une piste, je suis à votre écoute.
Merci d'avance.