Prise en charge du mouvement de glissement vers l’intérieur

Adobe AIR 1.0 et les versions ultérieures

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 :

  1. L’utilisateur fait glisser un objet Clipboard vers un composant.

  2. Le composant distribue un événement nativeDragEnter .

  3. 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() .

  4. NativeDragManager modifie le curseur de la souris pour indiquer que l’objet peut être déposé.

  5. L’utilisateur dépose l’objet sur le composant.

  6. Le composant cible distribue un événement nativeDragDrop .

  7. Le composant cible lit les données au format approprié à partir de l’objet Clipboard au sein de l’objet événement.

  8. 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.