Supporto del movimento di trascinamento verso interno

Adobe AIR 1.0 e versioni successive

Per supportare il movimento di trascinamento verso interno, l'applicazione (o, più tipicamente, un componente visivo dell'applicazione) deve rispondere a eventi nativeDragEnter o nativeDragOver

Fasi di una tipica operazione di rilascio

La sequenza di eventi riportata di seguito è tipica di un'operazione di rilascio:

  1. L'utente trascina un oggetto Clipboard su un componente.

  2. Il componente invia a un evento nativeDragEnter .

  3. Il gestore eventi nativeDragEnter esamina l'oggetto evento per verificare i formati di dati disponibili e le azioni consentite. Se il componente può gestire il rilascio, chiama NativeDragManager.acceptDragDrop() .

  4. NativeDragManager cambia il cursore del mouse a indicare che l'oggetto può essere rilasciato.

  5. L'utente rilascia l'oggetto sul componente.

  6. Il componente ricevente invia a un evento nativeDragDrop .

  7. Il componente ricevente legge i dati nel formato desiderato dall'oggetto Clipboard con l'oggetto evento.

  8. Se il movimento di trascinamento originato in un'applicazione AIR, l'oggetto interattivo promotore invia un evento nativeDragComplete Se il movimento è originato all'esterno di AIR, non viene inviato alcun feedback.

Riconoscimento di un movimento di trascinamento verso interno

Quando un utente trascina un elemento degli appunti nei limiti di un componente visivo, il componente invia eventi nativeDragEnter e nativeDragOver . Per determinare se il componente può accettare l'elemento di appunti, il gestore di questi eventi può verificare le proprietà clipboard e allowedActions dell'oggetto evento. Per segnalare che il componente possa accettare il rilascio, il gestore eventi deve chiamare il metodo NativeDragManager.acceptDragDrop() , passando un riferimento al componente ricevente. Se più di un listener di eventi registrato chiama il metodo acceptDragDrop() , l'ultimo gestore dell'elenco ha la precedenza. La chiamata acceptDragDrop() rimane valida finché il mouse non lascia i limiti dell'oggetto accettante, attivando l'evento nativeDragExit .

Se è concessa più di un'azione nel parametro allowedActions passato a doDrag() , l'utente è in grado di indicare quale delle azioni concesse intende eseguire tenendo premuto un tasto modificatore. Il gestore di trascinamento modifica l'immagine del cursore per indicare all'utente quale azione si verificherebbe una volta completato il rilascio. L'azione desiderata è riportata dalla proprietà dropAction dell'oggetto NativeDragEvent. L'azione impostata per il movimento di trascinamento è solo consultivo. I componenti coinvolti nel trasferimento devono implementare il comportamento appropriato. Per completare un'azione di spostamento, ad esempio, il promotore del trascinamento potrebbe rimuovere l'elemento trascinato e la destinazione di rilascio potrebbe aggiungerla.

La destinazione di trascinamento può limitare l'azione di rilascio a una delle tre possibili azioni impostando la proprietà dropAction della classe NativeDragManager. Se un utente cerca di selezionare un'azione differente mediante la tastiera, la classe NativeDragManager visualizza il cursore non disponibile . Impostate la proprietà dropAction nei gestori per entrambi gli eventi nativeDragEnter e nativeDragOver .

L'esempio seguente illustra un gestore eventi per un evento nativeDragEnter o nativeDragOver Tale gestore accetta solo un movimento di trascinamento verso interno se gli appunti trascinati contengono dati in formato testo.

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 
    } 
}

Completamento del rilascio

Quando l'utente rilascia un elemento trascinato su un oggetto interattivo che ha accettato il movimento, l'oggetto interattivo invia un evento nativeDragDrop . Il gestore di questo evento può estrarre i dati dalla proprietà clipboard dell'oggetto evento.

Quando gli appunti contengono un formato definito dall'applicazione, il parametro transferMode passato al metodo getData() dell'oggetto Clipboard determina se il gestore di trascinamento restituisce un riferimento o una versione serializzata dell'oggetto.

L'esempio seguente illustra un gestore eventi per l'evento 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)); 
}

Una volta chiuso il gestore eventi, l'oggetto Clipboard non è più valido. Qualsiasi tentativo di accedere all'oggetto o ai suoi dati genera un errore.

Aggiornamento dell'aspetto visivo di un componente

Un componente può aggiornare l'aspetto visivo in base agli eventi NativeDragEvent. La tabella seguente descrive i tipi di cambiamenti che avrebbe un componente tipico in risposta ai differenti eventi:

Evento

Descrizione

nativeDragStart

L'oggetto interattivo promotore può utilizzare l'evento nativeDragStart al fine di fornire il feedback visivo che il movimento di trascinamento originato da tale oggetto interattivo.

nativeDragUpdate

L'oggetto interattivo promotore può utilizzare l'evento nativeDragUpdate per aggiornarne lo stato durante il movimento. (Questo evento non esiste in AIR per Linux.)

nativeDragEnter

Un potenziale oggetto interattivo ricevente può utilizzare questo evento per essere evidenziato o indicare visivamente che possa o non possa accettare il rilascio.

nativeDragOver

Un potenziale oggetto interattivo ricevente può utilizzare questo evento per rispondere allo spostamento del mouse all'interno dell'oggetto interattivo, come quando il mouse entra in un'area "hot" di un componente complesso come la visualizzazione della mappa di una strada.

nativeDragExit

Un potenziale oggetto interattivo ricevente può utilizzare questo evento per ripristinarne lo stato quando un movimento di trascinamento si sposta all'esterno dei suoi limiti.

nativeDragComplete

L'oggetto interattivo promotore può utilizzare questo evento per aggiornarne il modello di dati associato, come la rimozione di un elemento da un elenco, e ripristinarne lo stato visivo.

Monitoraggio della posizione del mouse durante un movimento di trascinamento verso interno

Mentre il movimento di trascinamento resta su un componente, questo invia eventi nativeDragOver . Questi eventi vengono inviati con un intervallo di pochi millisecondi e anche ogni qual volta il mouse si sposta. L'oggetto evento nativeDragOver consente di determinare la posizione del mouse sul componente. L'accesso alla posizione del mouse può essere utile in situazioni in cui il componente ricevente è complesso, ma non è composto da componenti secondari. Ad esempio, se l'applicazione ha visualizzato un bitmap contenente una mappa di strada e si è voluto evidenziare zone sulla mappa quando l'utente ha trascinato informazioni all'interno, è possibile utilizzare le coordinate del mouse riportate nell'evento nativeDragOver per monitorare la posizione del mouse all'interno della mappa.