Blog sur Flash,Flex,Papervision,A.I.R., …

L’API ‘Drag And Drop’ de AIR (3ème Partie)

26 juin 2007 par PeZ

Cet article a été mis à jour le 13 décembre 2007 afin de respecter les changements qui ont été apportés à la Beta 3 de AIR.

Cette série d'articles touche à sa dernière partie. Celle-ci porte sur les types d'actions d'un Drag&Drop et sur le rendu différé

1. Types d'actions

Généralement, une action de glisser/déposer peut avoir 3 conséquences sur l'élément d'origine de l'opération: Soit il est copié, soit déplacé ou sinon un raccourci est crée.
Le résultat de cette opération dépend ainsi de 2 facteurs :

  • Quelles sont les types d'actions autorisés par le composant initiateur
  • Quel est le type d'action accepté par le composant destinataire

Ainsi, un composant qui n'est autorisé qu'à être copié lors d'un D&D , ne peut pas être accepté par un composant qui autorise uniquement le déplacement.

La classe NativeDragOptions permet de spécifier quels types d'actions on veut autoriser pour un composant lors d'un D&D en définissant les variables booléennes des propriétés 'allowCopy', 'allowMove', 'allowLink'. Par défaut , toutes les actions sont autorisées pour un composant.

Généralement ces effets sont définis dans la propriété dropActions d'un NativeDragEvent. Ces propriétés sont accessibles depuis la classe NativeDragActions qui dispose des constantes nécessaires :

NativeDragActions.COPY
NativeDragActions.LINK
NativeDragActions.MOVE
NativeDragActions.NONE

Si aucune valeur n'est spécifiée, une action par défaut est choisie, suivant les actions autorisées par le composant déplacé et en respectant cet ordre : COPY,MOVE,LINK.

J'ai réalisé un petit exemple qui implémente ces concepts: cliquez sur ce lien pour le télécharger.

2. Rendu différé

Pour rappel, il est possible lorsque l'on souhaite effectuer un D&D de données, de les présenter sous différents formats pour augmenter les chances qu'un application tierce puisse les recevoir. (voir l'objet Clipboard dans la 1ère partie).
Seulement, il peut arriver que la création d'un format soit relativement couteuse pour la machine virtuelle et que l'on aimerait que la fonction qui effectue le traitement ne soit appelé uniquement si le récepteur (une application ou un composant interne) accepte ce dit format.
Plutôt que d'utiliser la méthode 'addData', on peut alors utiliser la méthode 'setDataHandler' dans laquelle on définit le nom de la méthode qui effectue le traitement. Cette méthode sera appelée seulement dans le cas ou le récepteur accepte le type spécifié.
Par exemple :

Actionscript:
  1. var monImage:Clipboard = new Clipboard();
  2. monImage.setData( ClipboardFormats.BITMAP_FORMAT, image.bitmap );
  3. monImage.setDataHandler( ClipboardFormats.FILE_FORMAT,creerFichierJPEG );

monImage est est accessible dans 2 formats : un bitmap et un fichier JPEG. La conversion de l'image en JPEG est effectuée en différée par la méthode 'creeFichierJPEG' (qui doit obligatoirement renvoyer un objet de type File en retour).
Ainsi, si l'image est glissé vers Photoshop, la fonction creeFichierJPEG ne sera pas appelée et les ressources seront économisées.

Technorati , , , ,
Publié dans A.I.R. posséde

3 Responses

  1. Blip dit:

    Salut,

    Juste un petit message d’encouragement et de remerciement pour les tutos !

    comme c’est un blog qui vient de naitre, un petit message d’encouragement ne fait jamais de mal :)

    a plus !

  2. Nivek2 dit:

    un couragement de plus !

  3. PeZ dit:

    Merci pour les encoragements. A noter que depuis la nouvelle version, il y a eu quelques petits changements. Par exemple, la classe ClipboardFormats qui remplace la TransferableFormats.

    Dès que j’ai le temps , je met les articles à jour.

Laissez un commentaire

Note: La modération des commentaires est activée et votre envoi peut-etre différé.