Principes de base des opérations glisser-déposer dans AIR

Adobe AIR 1.0 et les versions ultérieures

Pour obtenir une explication rapide de l’utilisation des opérations glisser-déposer dans une application AIR et des exemples de code correspondants, voir les articles de démarrage rapide dans Adobe Developer Connection :

L’API glisser-déposer contient les classes suivantes.

Package

Classes

flash.desktop

Les constantes utilisées dans l’API glisser-déposer sont définies dans les classes suivantes :

flash.events

NativeDragEvent

Décomposition des mouvements glisser-déposer

Le mouvement glisser-déposer est composé de trois étapes, comme suit :

Initialisation
Un utilisateur initialise une opération de glisser-déposer en faisant glisser un composant ou un élément de composant tout en maintenant enfoncé le bouton de la souris. Le composant source de l’élément glissé porte généralement le nom d’initiateur du glissement et distribue les événements nativeDragStart et nativeDragComplete . Une application Adobe AIR démarre une opération de glissement en appelant la méthode NativeDragManager.doDrag() en réponse à un événement mouseDown ou mouseMove .

Si l’opération de glissement commence à l’extérieur d’une application AIR, aucun objet initiateur ne déclenche les événements nativeDragStart ou nativeDragComplete .

Glissement
Tout en maintenant enfoncé le bouton de la souris, l’utilisateur déplace le curseur vers un autre composant, une autre application ou le bureau. Pendant la durée du glissement, l’objet initiateur distribue des événements nativeDragUpdate . (Cet événement n’est toutefois pas distribué dans AIR pour Linux.) Lorsque l’utilisateur place la souris sur une cible de dépôt potentielle dans une application AIR, la cible distribue un événement nativeDragEnter . Le gestionnaire d’événement peut inspecter l’objet événement pour déterminer si les données glissées sont disponibles dans un format géré par la cible. Si tel est le cas, il autorise l’utilisateur à déposer les données sur la cible en appelant la méthode NativeDragManager.acceptDragDrop() .

Tant que le mouvement de glissement survole un objet interactif, celui-ci distribue des événements nativeDragOver . Lorsque le mouvement de glissement quitte l’objet interactif, celui-ci distribue un événement nativeDragExit .

Dépôt
L’utilisateur relâche la souris sur une cible de dépôt appropriée. Si la cible est un composant ou une application AIR, l’objet cible déclenche un événement nativeDragDrop . Le gestionnaire d’événement peut accéder aux données transférées à partir de l’objet événement. Si la cible n’est ni un composant, ni une application AIR, le système d’exploitation ou une autre application gère le dépôt. Dans les deux cas de figure, l’objet initiateur distribue un événement nativeDragComplete (sous réserve que le glissement ait débuté à partir d’AIR).

La classe NativeDragManager contrôle les mouvements de glissement vers l’intérieur et l’extérieur. Tous les membres de la classe NativeDragManager étant statiques, ils ne créent pas d’occurrence de cette dernière.

Objet Clipboard

Les données glissées vers une application ou un composant ou à partir de ces derniers sont contenues dans un objet Clipboard. Un objet Clipboard unique peut proposer plusieurs représentations des mêmes informations pour augmenter les chances qu’une autre application comprenne et utilise les données. Une image peut par exemple être incluse en tant que données d’image, objet Bitmap sérialisé ou fichier. Le rendu des données dans un format peut être confié à une fonction de rendu qui n’est pas appelée tant que les données n’ont pas été lues.

Une fois le mouvement de glissement démarré, il n’est possible d’accéder à l’objet Clipboard qu’à partir d’un gestionnaire associé aux événements nativeDragEnter , nativeDragOver et nativeDragDrop . Lorsque le mouvement de glissement est terminé, l’objet Clipboard ne peut être ni lu ni réutilisé.

Un objet application peut être transféré sous forme de référence et d’objet sérialisé. Les références sont valables uniquement dans leur application d’origine. Les transferts d’objets sérialisés sont valides d’une application AIR à une autre, mais sont réservés aux objets qui demeurent valides lorsqu’ils sont sérialisés et désérialisés. Les objets sérialisés sont convertis au format AMF3 (Action Message Format for ActionScript 3), qui permet de transférer des données sous forme de chaînes.

Utilisation de la structure Flex

Dans la plupart des cas, il est recommandé d’utiliser l’API glisser-déposer d’Adobe® Flex™ lors de la création d’applications Flex. La structure Flex propose un jeu de fonctions équivalentes lorsqu’une application Flex est exécutée dans AIR (elle utilise la classe NativeDragManager d’AIR en interne). Flex gère également un jeu plus limité de fonctions lorsqu’une application ou un composant s’exécute dans l’environnement plus restrictif d’un navigateur. Il est impossible d’utiliser les classes AIR dans des composants ou applications qui tournent en dehors de l’environnement d’exécution AIR.