AIRã®ãã©ãã°&ããããå¯Ÿå¿æ©èœ
ä»åã¯ãAIRã®ãã©ãã°&ããããæ©èœã«ã€ããŠè§£èª¬ããã
AIRã®ãã©ãã°&ããããæ©èœã¯ããã€ãã£ãOSãšå®å šã«çµ±åãããŠãããéåžžã«äœ¿ãåæã®è¯ããã®ã ãä»ã®ã¢ããªã±ãŒã·ã§ã³ãšã®éã§ã·ãŒã ã¬ã¹ã«ããŒã¿ã®åãæž¡ããè¡ãããšãå¯èœã§ãããAPIãã³ã³ãã¯ãã«ãŸãšãŸã£ãŠãããèŠããŠãããŠæã¯ãªãã
ãŸããAIRã«ããããã©ãã°&ãããããšããåäœã®æŠèŠãçè§£ãããã
ãã©ãã°&ãããããšã¯ããã©ãã°åŠçãéå§ããäž»äœ(ã€ãã·ãšãŒã¿ãšåŒã¶)ãåŠçãéå§ããAIRã¢ããªã±ãŒã·ã§ã³ã®äžããã©ãã°ããªããééããæçµçã«ã©ããã«ãããããããããšããåäœã ãšèšããã
ããã§ã¯ããAIRã¢ããªã±ãŒã·ã§ã³å ããå€éš(ãã€ãã£ãOSç°å¢)ã«ããŒã¿ããã©ãã°&ãããããããå Žåãšããå€éšããAIRã¢ããªã±ãŒã·ã§ã³å ã«ããŒã¿ããã©ãã°&ããããããããšããå Žåã«åããŠèãããAIRã¢ããªã±ãŒã·ã§ã³å ã§ãã©ãã°ãéå§ããããããããå Žåã¯ããããäºã€ã®åäœãçµã¿åããã£ããã®ãšèããã°ããã
ã§ã¯ããAIRã¢ããªã±ãŒã·ã§ã³å ããå€éšã«ããŒã¿ããã©ãã°&ãããããããå Žåã§ãããã以äžã®å³ãèŠãŠããã ãããã
|
|
AIRã¢ããªã±ãŒã·ã§ã³å ããå€éšã«ããŒã¿ããã©ãã°&ããããããéã®ã€ã¡ãŒãž |
ãã®å³ããèªã¿åããã®ã¯ã
-
flash.desktop.DragManagerã¯ã©ã¹ã®staticã¡ãœããdoDrag()ã«ãããã©ãã°åŠçãéå§ããã - ãã©ãã°ãããããŒã¿ã¯ã
flash.desktop.TransferableDataã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ãã衚ããã
ãšããç¹ã ã
AIRã®ãã©ãã°&ããããåŠçã¯ããã®2ã€ã®ã¯ã©ã¹ãäžå¿ãšãªã£ãŠAPIãæ§ç¯ãããŠããã
flash.desktop.TransferableDataã¯ã©ã¹ã¯ããã©ãã°äžã®ããŒã¿ãæœè±¡åããã¯ã©ã¹ã§ãããŒã¿èªäœã®ã»ãã«ããŒã¿åœ¢åŒã®æ
å ±ãä¿æããŠããã
ããŒã¿ã®åœ¢åŒã¯éåžžã«éèŠã§ããã©ãã°&ãããããåãä»ãããåŠããå€å®ããããã«äœ¿çšãããããå€éšã¢ããªã±ãŒã·ã§ã³ãšã®ããŒã¿ãããåãããéã®ãããã³ã«ãšããŠãå©çšãããã
ããŒã¿åœ¢åŒã¯flash.desktop.TransferableFormatsã¯ã©ã¹ã«å®æ°ãšããŠå®çŸ©ãããŠããã以äžã®ãããªãã®ãå©çšã§ããã
| ãã©ãŒããã | 説æ | ActionScriptå |
|---|---|---|
| BITMAP_FORMAT | ããããããç»åããŒã¿ | flash.display.BitmapData |
| FILE_LIST_FORMAT | ãã¡ã€ã«(è€æ°) | flash.filesystem.Fileã®é å |
| TEXT_FORMAT | æåå | String |
| URL_FORMAT | URL | String |
TransferableFormatsã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãããã©ãã°äžã®ããŒã¿ãååŸããActionScriptã®ãªããžã§ã¯ããšããŠåãæ±ãããã«ã¯ãããŒã¿ã®åœ¢åŒã«åãããŠå€æãè¡ãå¿
èŠãããã
ãã®å€æãèªåã§è¡ãã¡ãœããããTransferableFormats.dataForFormat(ãã©ãŒãããæåå)ã ã以äžã®ããã«äœ¿çšããã
var transfer:TransferableData = ...
var draggedText:String = transfer.dataForFormat(TransferableFormats.TEXT_FORMAT) as String;
ããŒã¿ã®åœ¢åŒã«ãã£ãŠæ»ãå€ã®åã¯ç°ãªãã圢åŒãšActionScriptã«ãããåã®å¯Ÿå¿ã¯ãäžã®è¡šãåç §ããŠã»ããã
ãŸãéèŠãªã®ãããã©ãã°&ããããã«äŒŽã£ãŠçºçããã€ãã³ãã ã å³äžã§ç·è²ã§è¡šããã€ãã³ã(NATIVE_DRAG_STARTãNATIVE_DRAG_COMPLETE)ã¯ãã©ãã°åŠçã®ã€ãã·ãšãŒã¿ã«ããªã¬ã³ãžã§è¡šããã€ãã³ãã¯ãã©ãã°ã®éã«ééããã³ã³ããŒãã³ãã«å¯ŸããŠäŒããããã
åã€ãã³ãã®è©³çްãªèª¬æã¯åŸè¿°ããã
次ã«ããå€éšããAIRã¢ããªã±ãŒã·ã§ã³å ã«ããŒã¿ããã©ãã°&ãããããããå Žåã ã
|
|
å€éšããAIRã¢ããªã±ãŒã·ã§ã³å ã«ããŒã¿ããã©ãã°&ããããããéã®ã€ã¡ãŒãž |
åã®äŸãšåããããã©ãã°ãããããŒã¿ã¯ãflash.desktop.TransferableDataã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«ãã衚ãããã
泚ç®ãã¹ãã¯ãå€éšã§ãã©ãã°ãéå§ãããããã€ãã·ãšãŒã¿ãååšãããNATIVE_DRAG_STARTã€ãã³ããNATIVE_DRAG_COMPLETEã€ãã³ãã¯çºçããªããšããããšã ã
ã§ã¯ãå³äžã«ç»å Žããã€ãã³ãã«ã€ããŠç°¡åã«èª¬æããã
- NATIVE_DRAG_START - AIRã¢ããªã±ãŒã·ã§ã³å ãããã©ãã°åŠçãéå§ãããéãã€ãã·ãšãŒã¿ã«å¯ŸããŠéç¥ããã
- NATIVE_DRAG_ENTER - ã³ã³ããŒãã³ãã®é åå ã«ããã©ãã°ç¶æ ã§ããŠã¹ã«ãŒãœã«ãå ¥ã£ãŠããéã«åŒã³åºããããAIRã¢ããªã±ãŒã·ã§ã³å ã§ãã©ãã°ãéå§ãããšããã®çŽåŸã«ããŠã¹ã«ãŒãœã«ã®äžã«ããã³ã³ããŒãã³ãã«ãã®ã€ãã³ããéç¥ããã
- NATIVE_DRAG_OVER - ã³ã³ããŒãã³ãã®é åå ããã©ãã°ããªããã«ãŒãœã«ãééãããšæç¶çã«çºçãã
- NATIVE_DRAG_DROP - ã³ã³ããŒãã³ãå ã«ããŒã¿ããããããããéãã³ã³ããŒãã³ãã«å¯ŸããŠéç¥ããã
- NATIVE_DRAG_EXIT - ãã©ãã°ç¶æ ã§ã³ã³ããŒãã³ãå€ã«ã«ãŒãœã«ãç§»åããéããããã¯ãã©ãã°ãéäžã§ãã£ã³ã»ã«(ESCããŒãæŒããªã©ããŠ)ããéãã³ã³ããŒãã³ãã«å¯ŸããŠãã®ã€ãã³ããéç¥ããã
- NATIVE_DRAG_COMPLETE - ããããããããããã£ã³ã»ã«ããããã«ãããããããã©ãã°ãçµäºããéãã€ãã·ãšãŒã¿ã«å¯ŸããŠéç¥ããã
ããã§ãAIRã®ãã©ãã°&ããããåŠçã®æŠèŠã¯å€§äœã€ãããããšãšæããã§ã¯æ¬¡ã«ããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ãäŸã«æããŠå®éã®ã³ãŒããèŠãŠãããã
ãµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã«ãã解説
ä»åçšæãããµã³ãã«ã¢ããªã±ãŒã·ã§ã³ã¯ãäžå€®ã®ãã£ã³ãã¹ã«ãã¡ã€ã«ããã©ãã°&ããããããããšã®ã§ããåçŽãªã¢ããªã±ãŒã·ã§ã³ã ããã©ãã°&ããããããããšããã®äœçœ®ã«ãã¡ã€ã«ã®ã¢ã€ã³ã³ãšååã匵ãä»ããããã
|
|
|
ç»é¢äžå€®ã®ãã£ã³ãã¹ã«ãã¡ã€ã«ããã©ãã°&ãããããããšããã¡ã€ã«ã®ã¢ã€ã³ã³ãšååã匵ãä»ãããã(å·Šãããããåãå³ãããããåŸ)ã |
|
ãŸãã貌ãã€ããã¢ã€ã³ã³ãå€éšã«ãã©ãã°&ãããããããšããã¡ã€ã«ãã³ããŒãããã
|
|
ãã©ãã°&ããããã«ãããã¡ã€ã«ã®ã³ã㌠|
ããŸãã¡å®çšæ§ã«ã¯ä¹ãããã®ã®ããã©ãã°&ããããã®åºç€ãåŠã¶ã«ã¯ååãªãµã³ãã«ã ã以äžããã®ãµã³ãã«ã³ãŒãã§ãããããéãããããã«æããããé ã远ã£ãŠã¿ãŠããã°é£ããããšã¯äœããªãããšããããã ããã
ãã€ã³ãã ãæŒããããæ¹ã¯ããªã¹ãã®åŸã®è§£èª¬ãåèã«ããŠããã ãããã
AIRDragDropExample.mxml
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.Label;
import mx.core.UIComponent;
import flash.desktop.*;
import flash.display.Bitmap;
import flash.filesystem.File;
// ã«ãŒãèŠçŽ ãWindowedApplicationãã®applicationComplete屿§ã«æå®ãããåæåã¡ãœãã
private function init():void {
// (1) ãã£ã³ãã¹ã«ãã©ãã°&ããããé¢é£ã®ã€ãã³ããªã¹ãã远å
canvas.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onCanvasDragEnter);
canvas.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onCanvasDragDrop);
}
// ãã£ã³ãã¹ã«ãã©ãã°ãããéåŒã³åºããããªã¹ã
private function onCanvasDragEnter(event:NativeDragEvent):void {
var data:TransferableData = event.transferable;
// (2) ãã©ãã°ãããããŒã¿ããã¡ã€ã«ã§ããã°ããã©ãã°&ãããããåãä»ãã
if (data.hasFormat(TransferableFormats.FILE_LIST_FORMAT)) {
DragManager.acceptDragDrop(canvas);
}
}
// ãã£ã³ãã¹ã«ãããããããéåŒã³åºããããªã¹ã
private function onCanvasDragDrop(event:NativeDragEvent):void {
// (3) ãã£ã³ãã¹å
ã®ãã©ãã°&ããããã®å Žåãç¡èŠãã
if (DragManager.dragInitiator != null) {
return;
}
// (4) è€æ°ãã¡ã€ã«ãããããããããšããåæã§ããŒã¿ãååŸ
var files:Array = event.transferable.dataForFormat(
TransferableFormats.FILE_LIST_FORMAT) as Array;
// ããããããããã¡ã€ã«ãã«ãŒãããªãã
for each (var file:File in files) {
// (5) ã¢ã€ã³ã³ãšã©ãã«ã®è²Œãä»ã
var icon:Icon = file.icon;
for each (var bitmapData:BitmapData in icon.bitmaps) {
// 32x32ã®ã¢ã€ã³ã³ã®ã¿å¯Ÿè±¡ãšãã
if (bitmapData.height == 32) {
// ã¢ã€ã³ã³ç»åãã³ã³ããŒãã³ããšããŠãã£ã³ãã¹ã«è¿œå
var iconImage:UIComponent = new UIComponent();
iconImage.addChild(new Bitmap(bitmapData));
iconImage.x = event.localX; // ããŠã¹ã®çŸåšåº§æšã«çœ®ã
iconImage.y = event.localY;
// ãã¡ã€ã«ã®ãã¹ãã³ã³ããŒãã³ãã®ååã«ããŠãã
iconImage.name = file.nativePath;
canvas.addChild(iconImage);
// ã¢ã€ã³ã³ã®ã©ãã«ããã£ã³ãã¹ã«è¿œå
var iconLabel:Label = new Label();
iconLabel.text = file.name;
iconLabel.x = iconImage.x + 32;
iconLabel.y = iconImage.y + 8;
canvas.addChild(iconLabel);
// ã¢ã€ã³ã³ãã¯ãªãã¯ãããéã®åŠç
iconImage.addEventListener(MouseEvent.MOUSE_DOWN, onIconMouseDown);
}
}
}
}
// ã¢ã€ã³ã³äžã§ããŠã¹ã¯ãªãã¯ãããéã®åŠç
private function onIconMouseDown(event:MouseEvent):void {
var mouseTarget:UIComponent = event.target as UIComponent;
// ã³ã³ããŒãã³ãåããã¡ã€ã«ã®ãã¹ãšããFileãªããžã§ã¯ãäœæ
var filePath:String = mouseTarget.name;
var file:File = new File(filePath);
// ã¯ãªãã¯ãããã³ã³ããŒãã³ãã®åèŠçŽ ãããããããããŒã¿
var iconBitmap:Bitmap = mouseTarget.getChildAt(0) as Bitmap;
// (6) ãã©ãã°&ããããããããŒã¿ãäœæ
var transfer:TransferableData = new TransferableData();
transfer.addData(iconBitmap.bitmapData, TransferableFormats.BITMAP_FORMAT, true);
transfer.addData([file], TransferableFormats.FILE_LIST_FORMAT, true);
// (7) ãã©ãã°ãéå§
DragManager.doDrag(canvas, transfer, iconBitmap.bitmapData, new Point(20, 20), null);
}
]]>
</mx:Script>
<mx:Label x="10" y="10" text="äžã®ãã£ã³ãã¹ã«ã¯ãã¡ã€ã«ããã©ãã°ïŒããããã§ããŸãã"/>
<mx:Canvas id="canvas" y="36" width="100%" height="302" backgroundColor="#FCFAFA"/>
</mx:WindowedApplication>
以äžããã€ã³ãã解説ããã
(1) ã¢ããªã±ãŒã·ã§ã³ãèµ·åããçŽåŸã«è¡ã£ãŠããã®ã¯ããã©ãã°&ãããããåãä»ãããã£ã³ãã¹ã«å¯ŸããŠããã©ãã°é¢é£ã®ã€ãã³ããªã¹ããç»é²ããåŠçã ããã£ã³ãã¹ã«ãã©ãã°ç¶æ
ã®ããŠã¹ã«ãŒãœã«ãå
¥ã£ãŠããæã«onCanvasDragEnterã¡ãœãããããããããè¡ãããéã«onCanvasDragDropã¡ãœãããåŒã³åºãããããã«ããŠããã
// (1) ãã£ã³ãã¹ã«ãã©ãã°&ããããé¢é£ã®ã€ãã³ããªã¹ãã远å
canvas.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER, onCanvasDragEnter);
canvas.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP, onCanvasDragDrop);
(2) ãã©ãã°ç¶æ
ã®ããŠã¹ã«ãŒãœã«ããã£ã³ãã¹ã®äžã«å·®ãæãã£ãéã«è¡ãããšã¯ããã©ãã°&ãããããåãä»ãããã©ãããAIRã©ã³ã¿ã€ã ã«æããããšã ã
ã€ãã³ããªã¹ãã«æž¡ãããNativeDragEventã¯ããã©ãã°ãããŠããããŒã¿ãžã®åç
§ãä¿æããŠãããããããã£transferableãåç
§ããã°ã¢ã¯ã»ã¹ããããšãã§ãããä»åãã£ã³ãã¹ããã©ãã°&ãããããåãä»ããã®ã¯ãã¡ã€ã«ã®ã¿ãªã®ã§ãTransferableData.hasFormat(ãã©ãŒãããæåå)ã䜿çšããŠããã©ãã°ãããããŒã¿ã®åœ¢åŒããã¡ã€ã«ã¿ã€ããå«ããã©ãããã§ãã¯ããŠããã
// ãã£ã³ãã¹ã«ãã©ãã°ãããéåŒã³åºããããªã¹ã
private function onCanvasDragEnter(event:NativeDragEvent):void {
var data:TransferableData = event.transferable;
// (2) ãã©ãã°ãããããŒã¿ããã¡ã€ã«ã§ããã°ããã©ãã°&ãããããåãä»ãã
if (data.hasFormat(TransferableFormats.FILE_LIST_FORMAT)) {
DragManager.acceptDragDrop(canvas);
}
}
ãã©ãã°ãåãä»ããå Žåã¯ãDragManager.acceptDragDrop(*ãã©ãã°ãåãä»ããã³ã³ããŒãã³ã*)ãåŒã³åºãã°è¯ãããããããšãããŠã¹ã«ãŒãœã«ããã©ãã°å¯èœã衚ããã®ã«å€åããã
(3) ãã£ã³ãã¹ã«ãã©ãã°&ãããããããéåŒã³åºããããªã¹ãã§ã¯ããŸãåããã£ã³ãã¹å ãããã©ãã°&ããããããããã®ãªã®ãããããšãå€éšãããã©ãã°&ããããããããã®ãªã®ãããã§ãã¯ããŠãããAIRã¢ããªã±ãŒã·ã§ã³å€ããã®ãã©ãã°&ããããã§ããã°ãã€ãã·ãšãŒã¿ãååšããªãããã以äžã®ãããªãã§ãã¯ã§ãã®å€å®ãè¡ãããšããããã ã
// (3) ãã£ã³ãã¹å
ã®ãã©ãã°&ããããã®å Žåãç¡èŠãã
if (DragManager.dragInitiator != null) {
return;
}
(4) ãã©ãã°ãããããŒã¿ããActionScriptãªããžã§ã¯ããžã®å€æãè¡ã£ãŠãããåè¿°ãããšãããTransferableData.dataForFormat(ããŒã¿åœ¢åŒ)ãåŒã³åºãã ãã ãããã«ããããã©ãã°ããããã¡ã€ã«ãflash.filesystem.Fileãªããžã§ã¯ãã®é
åãšããŠååŸããŠããã
// (4) è€æ°ãã¡ã€ã«ãããããããããšããåæã§ããŒã¿ãååŸ
var files:Array = event.transferable.dataForFormat(
TransferableFormats.FILE_LIST_FORMAT) as Array;
(5) ã¢ã€ã³ã³ãšã©ãã«ããã£ã³ãã¹ã«è²Œãä»ããŠããéšåã®åŠçã¯ããã©ãã°&ãããããšçŽæ¥é¢ä¿ããªãã®ã§è©³çްãªèª¬æã¯è¡ããªãã以äžã®ãããªã³ãŒãã§ããã¡ã€ã«ã«é¢é£ä»ããããŠããã¢ã€ã³ã³ãååŸããããšãã§ãããããããããã¡ã€ã«é¢é£ã®APIããåããªããã°ããã¡ãã®èšäºãåç §ããŠããã ãããã
// (5) ã¢ã€ã³ã³ãšã©ãã«ã®è²Œãä»ã
var icon:Icon = file.icon;
...
(6) (5)ãŸã§ã¯ããã£ã³ãã¹ã«ãã©ãã°&ãããããããããæã®åŠçã§ãã£ãããããããã¯ãã£ã³ãã¹ãããã¡ã€ã«ã¢ã€ã³ã³ããã©ãã°&ããããããããåŠçã®èª¬æãšãªãã
ãã¡ã€ã«ã¢ã€ã³ã³äžã§ããŠã¹ã®ãã¿ã³ãæŒããããããŸãã¯ãã©ãã°ããããŒã¿ãšãªãTransferableDataã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããŒã¿åœ¢åŒã«åãããŠããŒã¿ã远å ããå¿
èŠãããã
TransferableData.addData(ããŒã¿ãããŒã¿åœ¢åŒãã·ãªã¢ã©ã€ãºãããã©ãã)ã¡ãœãããçšããŠããã¡ã€ã«ã远å ããŠããã®ã¿ãªãããããã§ã¯ã¢ã€ã³ã³ç»åèªäœããããããã圢åŒã§è¿œå ããŠããã
// (6) ãã©ãã°&ããããããããŒã¿ãäœæ
var transfer:TransferableData = new TransferableData();
transfer.addData(iconBitmap.bitmapData, TransferableFormats.BITMAP_FORMAT, true);
transfer.addData([file], TransferableFormats.FILE_LIST_FORMAT, true);
(7) æåŸã«ãDragManager.doDrag()ã¡ãœãããå©çšããŠãã©ãã°ãè¡ããdoDrag()ã¡ãœããã®åŒæ°ãé çªã«èª¬æãããšã以äžã®ããã«ãªãã
- ã€ãã·ãšãŒã¿ - ä»»æã®ã³ã³ããŒãã³ããæå®ã§ãããããã§ã¯ãã£ã³ãã¹ãæå®ããŠãã
-
ãã©ãã°ããããŒã¿ -
TransferableDataãªããžã§ã¯ããæå®ãã - ãã©ãã°äžã®ã¢ã€ã³ã³ - ãã©ãã°äžã®ã¢ã€ã³ã³ããããããã圢åŒã§æå®ãããçç¥å¯èœãããã§ã¯ããã¡ã€ã«ã¢ã€ã³ã³ãæå®ãã
- ã¢ã€ã³ã³ãšããŠã¹ã«ãŒãœã«ã®äœçœ®é¢ä¿ - çç¥å¯èœ
-
ãã©ãã°ã蚱容ããã¢ã¯ã·ã§ã³ - çç¥å¯èœãAIRã§ã¯ããã©ãã°åäœã"copy"(ã³ããŒ)ã"move"(ç§»å)ã"link"(ãªã³ã¯ã®äœæ)ã«å€§å¥ãããã¢ã¯ã·ã§ã³ããšåŒãã§ããã詳ããã¯
DragManagerã¯ã©ã¹ã®ãªãã¡ã¬ã³ã¹ãåç §ããŠã»ãã
// (7) ãã©ãã°ãéå§
DragManager.doDrag(canvas, transfer, iconBitmap.bitmapData, new Point(20, 20), null);
ä»åã¯ãAIRãæã€ãã©ãã°&ããããæ©èœã®åºæ¬ã説æãããæ¬¡åã¯ããã©ãã°&ããããã«é¡äŒŒããåŠçãšããŠã³ããŒ&ããŒã¹ãã«ã€ããŠèª¬æããã