Pour prendre en charge le mouvement de glissement vers l’intérieur, votre application (ou, le plus souvent, un composant visuel de cette dernière) doit répondre aux événements
nativeDragEnter
ou
nativeDragOver
.
Etapes d’une opération de dépôt standard
La séquence d’événements suivante est caractéristique d’une opération de dépôt :
-
L’utilisateur fait glisser un objet Clipboard vers un composant.
-
Le composant distribue un événement
nativeDragEnter
.
-
Le gestionnaire d’événement
nativeDragEnter
examine l’objet événement pour vérifier les formats de données disponibles et les actions autorisées. Si le composant peut gérer le dépôt, il appelle
NativeDragManager.acceptDragDrop()
.
-
NativeDragManager modifie le curseur de la souris pour indiquer que l’objet peut être déposé.
-
L’utilisateur dépose l’objet sur le composant.
-
Le composant cible distribue un événement
nativeDragDrop
.
-
Le composant cible lit les données au format approprié à partir de l’objet Clipboard au sein de l’objet événement.
-
Si le mouvement de glissement a débuté dans une application AIR, l’objet initiateur interactif distribue un événement
nativeDragComplete
. Si le mouvement a débuté en dehors d’AIR, aucun compte rendu n’est envoyé.
Confirmation d’un mouvement de glissement vers l’intérieur
Lorsqu’un utilisateur fait glisser un élément Clipboard vers les limites d’un composant visuel, celui-ci distribue les événements
nativeDragEnter
et
nativeDragOver
. Pour déterminer si le composant peut accepter l’élément Clipboard, les gestionnaires de ces événements peuvent vérifier les propriétés
clipboard
et
allowedActions
de l’objet événement. Pour signaler que le composant peut accepter le dépôt, le gestionnaire d’événement doit appeler la méthode
NativeDragManager.acceptDragDrop()
et transmettre une référence au composant récepteur. Si plusieurs écouteurs d’événement enregistrés appellent la méthode
acceptDragDrop()
, le dernier gestionnaire de la liste prime. L’appel
acceptDragDrop()
demeure valide jusqu’à ce que la souris quitte les limites de l’objet qui accepte l’élément, déclenchant ainsi l’événement
nativeDragExit
.
Si plusieurs actions sont autorisées par le paramètre
allowedActions
transmis à
doDrag()
, l’utilisateur peut indiquer l’action autorisée qu’il souhaite exécuter en maintenant enfoncée une touche de modification. Le gestionnaire de glissement modifie l’image associée au curseur pour indiquer à l’utilisateur l’action qui se produirait s’il achevait le dépôt. L’action prévue est signalée par la propriété
dropAction
de l’objet NativeDragEvent. L’action associée à un mouvement de glissement est définie à titre indicatif uniquement. Les composants impliqués dans le transfert doivent mettre en œuvre le comportement approprié. Pour achever une action de déplacement, par exemple, l’initiateur du glissement peut supprimer l’élément glissé et la cible du dépôt peut l’ajouter.
La cible du glissement peut limiter l’action de dépôt à l’une des trois actions gérées en définissant la propriété
dropAction
de la classe NativeDragManager. Si un utilisateur tente de sélectionner une autre action par le biais du clavier, NativeDragManager affiche le curseur
unavailable
. Définissez la propriété
dropAction
des gestionnaires associés aux événements
nativeDragEnter
et
nativeDragOver
.
L’exemple suivant illustre un gestionnaire associé à l’événement
nativeDragEnter
ou
nativeDragOver
. Ce gestionnaire accepte un mouvement de glissement vers l’intérieur sous réserve que l’objet Clipboard en cours de glissement contienne des données au format texte.
import flash.desktop.NativeDragManager;
import flash.events.NativeDragEvent;
public function onDragIn(event:NativeDragEvent):void{
NativeDragManager.dropAction = NativeDragActions.MOVE;
if(event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)){
NativeDragManager.acceptDragDrop(this); //'this' is the receiving component
}
}
Achèvement du dépôt
Lorsque l’utilisateur dépose un élément glissé sur un objet interactif qui a accepté le mouvement, ce dernier distribue un événement
nativeDragDrop
. Le gestionnaire de cet événement peut extraire les données de la propriété
clipboard
de l’objet événement.
Si la propriété clipboard contient un format défini par l’application, le paramètre
transferMode
transmis à la méthode
getData()
de l’objet Clipboard détermine si le gestionnaire de glissement renvoie une référence ou une version sérialisée de l’objet.
L’exemple suivant illustre un gestionnaire associé à l’événement
nativeDragDrop
:
import flash.desktop.Clipboard;
import flash.events.NativeDragEvent;
public function onDrop(event:NativeDragEvent):void {
if (event.clipboard.hasFormat(ClipboardFormats.TEXT_FORMAT)) {
var text:String =
String(event.clipboard.getData(ClipboardFormats.TEXT_FORMAT,
ClipboardTransferMode.ORIGINAL_PREFERRED));
}
Lorsque le gestionnaire d’événement se referme, l’objet Clipboard n’est plus valide. Toute tentative d’accès à l’objet ou aux données correspondantes génère une erreur.
Mise à jour de l’apparence visuelle d’un composant
Un composant peut mettre à jour son apparence visuelle en fonction des événements NativeDragEvent. Le tableau ci-dessous décrit les types de modifications effectuées par un composant standard en réponse à divers événements :
Evénement
|
Description
|
nativeDragStart
|
L’objet interactif initiateur peut utiliser l’événement
nativeDragStart
pour indiquer visuellement qu’il est la source du mouvement de glissement.
|
nativeDragUpdate
|
L’objet interactif initiateur peut utiliser l’événement nativeDragUpdate pour mettre à jour son état au cours du mouvement. (Cet événement n’existe pas dans AIR pour Linux.)
|
nativeDragEnter
|
Un objet interactif récepteur potentiel peut utiliser cet événement pour prendre le focus ou indiquer visuellement s’il peut ou non accepter le dépôt.
|
nativeDragOver
|
Un objet interactif récepteur potentiel peut utiliser cet événement pour répondre au mouvement de la souris au sein de l’objet interactif (lorsque la souris pénètre dans une zone « sensible » d’un composant complexe tel qu’un plan de rues, par exemple).
|
nativeDragExit
|
Un objet interactif récepteur potentiel peut utiliser cet événement pour restaurer son état lorsqu’un mouvement de glissement quitte ses limites.
|
nativeDragComplete
|
L’objet interactif initiateur peut utiliser cet événement pour mettre à jour le modèle de données correspondant (en supprimant un élément d’une liste, par exemple) et restaurer son état visuel.
|
Suivi de la position de la souris lors d’un mouvement de glissement vers l’intérieur
Si un mouvement de glissement survole un composant, ce dernier distribue des événements
nativeDragOver
. Ces événements sont distribués toutes les quelques millisecondes, ainsi qu’à chaque déplacement de la souris. L’objet événement
nativeDragOver
permet également de déterminer la position de la souris au-dessus du composant. Connaître la position de la souris peut s’avérer utile dans des circonstances où le composant récepteur est complexe, mais ne possède pas de sous-composants. Par exemple, si votre application a affiché une image bitmap contenant une carte de rue et que vous souhaitez mettre en évidence les zones de la carte dans lesquelles l’utilisateur a fait glisser des informations, vous pouvez utiliser les coordonnées de la souris indiquées par l’événement
nativeDragOver
pour assurer le suivi de la position de la souris au sein de la carte.
|
|
|