드래그인 동작 지원
Adobe AIR 1.0 이상
드래그인 동작을 지원하려면 응용 프로그램(또는 보다 일반적으로는 응용 프로그램의 시각적 구성 요소)이 nativeDragEnter 또는 nativeDragOver 이벤트에 응답해야 합니다.
일반적인 드롭 작업의 단계
일반적으로 드롭 작업의 이벤트 시퀀스는 다음과 같습니다.
사용자가 클립보드 객체를 구성 요소 위로 드래그합니다.
구성 요소가 nativeDragEnter 이벤트를 전달합니다.
nativeDragEnter 이벤트 핸들러는 이벤트 객체를 검사하여 사용 가능한 데이터 포맷 및 허용되는 작업을 확인합니다. 구성 요소가 드롭을 처리할 수 있으면 NativeDragManager.acceptDragDrop()을 호출합니다.
NativeDragManager는 해당 객체를 드롭할 수 있음을 나타내도록 마우스 커서를 변경합니다.
사용자가 구성 요소 위에 객체를 드롭합니다.
수신 구성 요소는 nativeDragDrop 이벤트를 전달합니다.
수신 구성 요소는 이벤트 객체 안의 Clipboard 객체로부터 원하는 포맷의 데이터를 읽습니다.
드래그 동작이 AIR 응용 프로그램 내부에서 시작된 경우 시작한 대화형 객체가 nativeDragComplete 이벤트를 전달합니다. 동작이 AIR 외부에서 시작된 경우 피드백을 보내지 않습니다.
드래그인 동작 확인
사용자가 클립보드 항목을 시각적 구성 요소의 경계에 드래그하면 구성 요소는 nativeDragEnter 및 nativeDragOver 이벤트를 전달합니다. 구성 요소가 클립보드 항목을 허용할 수 있는지 여부를 확인하기 위해 이들 이벤트의 핸들러는 이벤트 객체의 clipboard 및 allowedActions 속성을 검사할 수 있습니다. 구성 요소가 드롭을 허용할 수 있음을 신호하기 위해 이벤트 핸들러는 NativeDragManager.acceptDragDrop() 메서드를 호출하여 수신 구성 요소에 참조를 전달해야 합니다. 두 개 이상의 등록된 이벤트 수신기가 acceptDragDrop() 메서드를 호출할 경우 목록의 마지막 핸들러가 우선권을 갖습니다. acceptDragDrop() 호출은 수신 객체의 경계에서 마우스가 떠나고 nativeDragExit 이벤트를 트리거할 때까지 유효합니다.
doDrag()에 전달되는 allowedActions 매개 변수에서 둘 이상의 작업이 허용될 경우 사용자는 수정자 키를 눌러서 허용되는 작업 중 어떤 작업을 수행하려 하는지를 나타낼 수 있습니다. 사용자가 드래그 동작을 완료하면 드래그 관리자는 커서 이미지를 변경하여 어떤 작업이 발생할 것인지를 사용자에게 알려 줍니다. 의도한 작업은 NativeDragEvent object의 dropAction 속성에 의해 보고됩니다. 드래그 동작의 작업 집합은 참고용입니다. 전송에 관련된 구성 요소는 적절한 비헤이비어를 구현해야 합니다. 예를 들어 이동 작업을 완료하려면 드래그 시작자는 드래그된 항목을 제거하고 드롭 대상이 이를 추가합니다.
드래그 대상은 NativeDragManager 클래스의 dropAction 속성을 설정하여 세 가지 가능한 작업 중 한 가지로 드롭 작업을 제한할 수 있습니다. 사용자가 키보드를 사용하여 다른 작업을 선택하려 할 경우 NativeDragManager는 사용 불가 커서를 표시합니다. nativeDragEnter 및 nativeDragOver 이벤트의 핸들러에 dropAction 속성을 설정합니다.
다음 예제에서는 nativeDragEnter 또는 nativeDragOver 이벤트의 이벤트 핸들러를 보여 줍니다. 이 핸들러는 드래그되는 클립보드에 텍스트 포맷의 데이터가 있는 경우 드래그인 동작만 허용합니다.
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
}
}
드롭 완료
사용자가 해당 동작을 허용한 대화형 객체 위에 드래그된 항목을 드롭하면 대화형 객체는 nativeDragDrop 이벤트를 전달합니다. 이 이벤트의 핸들러는 이벤트 객체의 clipboard 속성으로부터 데이터를 추출할 수 있습니다.
클립보드에 응용 프로그램에서 정의한 포맷이 포함되어 있을 때, Clipboard 객체의 getData() 메서드로 전달된 transferMode 매개 변수는 드래그 관리자가 참조를 반환하는지 또는 객체의 일련화된 버전을 반환하는지를 판별합니다.
다음 예제에서는 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));
}
이벤트 핸들러가 종료되면 더 이상 Clipboard 객체가 유효하지 않습니다. 객체 또는 해당 데이터에 액세스하려 할 경우 오류가 발생합니다.
구성 요소의 시각적 형태 업데이트
구성 요소는 NativeDragEvent 이벤트에 근거하여 시각적 형태를 업데이트할 수 있습니다. 다음 표에서는 다양한 이벤트에 대한 응답으로 일반적인 구성 요소가 변경할 수 있는 변경 유형에 대해 설명합니다.
이벤트
|
설명
|
nativeDragStart
|
시작 대화형 객체는 nativeDragStart 이벤트를 사용하여 드래그 동작이 해당 대화형 객체로부터 시작되었다는 시각적 피드백을 제공합니다.
|
nativeDragUpdate
|
시작 대화형 객체는 nativeDragUpdate 이벤트를 사용하여 동작 중에 해당 상태를 업데이트합니다. Linux 환경에서는 AIR에서 이 이벤트를 사용할 수 없습니다.
|
nativeDragEnter
|
잠재적인 수신 대화형 객체는 이 이벤트를 사용하여 초점을 맞추거나 드롭 허용 또는 허용 불가능을 시각적으로 나타냅니다.
|
nativeDragOver
|
잠재적인 수신 대화형 객체는 이 이벤트를 사용하여 지도 표시와 같이 복잡한 구성 요소의 "핫" 영역으로 마우스가 들어 오는 경우와 같이 대화형 객체 내에서 마우스 움직임에 반응합니다.
|
nativeDragExit
|
잠재적인 수신 대화형 객체는 이 이벤트를 사용하여 드래그 동작이 해당 경계 외부에서 움직일 때 해당 상태를 복원합니다.
|
nativeDragComplete
|
시작 대화형 객체는 이 이벤트를 사용하여 목록에서 항목을 제거하는 것과 같이 연관된 데이터 모델을 업데이트하고 해당 시각적 상태를 복원합니다.
|
드래그인 동작 중 마우스 위치 추적
드래그 동작이 구성 요소 위에 머물러 있는 동안 구성 요소는 nativeDragOver 이벤트를 전달합니다. 이 이벤트는 수 밀리초마다 그리고 마우스가 움직일 때마다 전달됩니다. nativeDragOver 이벤트 객체는 구성 요소 위에서 마우스 위치를 판별하는 데 사용할 수 있습니다. 마우스 위치를 파악하는 것은 구성 요소가 복잡하지만 하위 구성 요소로 구성되어 있지는 않은 경우 유용할 수 있습니다. 예를 들어 응용 프로그램에서 지도가 들어 있는 비트맵을 표시하고 사용자가 정보를 드래그하면 지도상의 구역이 강조 표시되도록 할 경우, nativeDragOver 이벤트에 보고되는 마우스 좌표를 사용하여 지도 안에서의 마우스 위치를 추적합니다.