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) :
L'ajout des écouteurs (probePopup est mon composant de popup en question) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
Donc ma méthode "probeEnterHandler" n'est déclenchée que lorsque je passe la souris sur l'objet probeTagsBin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ; }
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).
En effectuant une trace, je peut constater que event.target (et event.currentTarget) pointe bien sur mon objet canvas (pane_ProbeTagsView)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)); }
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.
Partager