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:
-
L'utente trascina un oggetto Clipboard su un componente.
-
Il componente invia a un evento
nativeDragEnter
.
-
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()
.
-
NativeDragManager cambia il cursore del mouse a indicare che l'oggetto può essere rilasciato.
-
L'utente rilascia l'oggetto sul componente.
-
Il componente ricevente invia a un evento
nativeDragDrop
.
-
Il componente ricevente legge i dati nel formato desiderato dall'oggetto Clipboard con l'oggetto evento.
-
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.
|
|
|