This chapter describes the terminology in the Drag and Drop suite, which is available starting in AppleScript Studio version 1.2. This suite defines terms for working with drag and drop, including the drag info class to provide information about a drag, as well as events you use to handle dragging, tracking, preparing for a drop, and concluding a drop. For related information, see the pasteboard class.
Initial drag-and-drop support was added in AppleScript Studio 1.2. It provides the ability for various user interface elements to receive drag events. It does not, however, allow for initiating drag operations (other than those already supported by Cocoa classes).
Additional support for drag and drop was added in AppleScript Studio 1.4:
A new property, allows reordering, supports automatic reordering of items in data views. Setting this property to true for a table view allows the user to drag rows up and down within the table view, in effect changing the order. However, if the data source is sorted, then allows
reordering is ignored.
The Outline Reorder and Table Reorder example applications demonstrate how to use this feature.
You can drag and drop rows or items within a data view. In addition to the automatic support provided by allows
reordering, you can allow drag and drop of external items into data views, with the additional ability to specify where in the table or outline view to drop items.
In order to provide this support there are several new event handlers available to outline view and table view objects:
Among the classes that support drag and drop are button, clip view, color well, combo box control,image view, matrix, movie view, popup button, progress indicator, scroll view, slider, stepper, tab view, text field, text view, and view.
For an object to respond to any of the drag-and-drop event handlers (described in “Events”), you must register the drag types that the object can accept. You do this with the register command, using its drag
type parameter to supply a list of the supported pasteboard drag types. Possible pasteboard types are listed with the pasteboard class.
The drop event handler is the only required handler for supporting dropped data in AppleScript Studio. However, see the conclude drop handler for information on providing drag and drop for text view and text field objects.
The classes and events in the Drag and Drop suite are described in the following sections:
For enumerated constants, see “Enumerations.”
The Drag and Drop suite contains the following class:
Represents information and data for the current drag operation.
A drag info object is passed to each of the drag-and-drop event handlers described in “Events.”
The most useful property of the drag
info class is the pasteboard property. It contains the data for the drag, which your application can extract and use in the drop or other event handlers.
In addition to the properties it inherits from the item class, a drag info object has these properties:
destination window | ||||
| Access: | read only | |||
| Class: | window | |||
| the destination window for the dragging operation | ||||
image | ||||
| Access: | read only | |||
| Class: | anything | |||
| the image being dragged | ||||
image location | ||||
| Access: | read only | |||
| Class: | point | |||
not supported (through AppleScript Studio version 1.4); the location of the image being dragged; the location is returned as a two-item list of numbers {left, bottom}; see the bounds property of the window class for information on the coordinate system; for changes introduced in AppleScript Studio version 1.4, see the main discussion for the application class, as well as the coordinate system property of that class | ||||
location | ||||
| Access: | read only | |||
| Class: | point | |||
not supported (through AppleScript Studio version 1.4); the current location in the destination window for the dragging operation, as a two-item list of numbers {left, bottom}; each window has its own coordinate system, with the origin in the lower left corner; see the bounds property of the window class for more information on the coordinate system; for changes introduced in AppleScript Studio version 1.4, see the main discussion for the application class, as well as the coordinate system property of that class | ||||
pasteboard | ||||
| Access: | read only | |||
| Class: | pasteboard | |||
| the pasteboard that contains the drag data | ||||
sequence number | ||||
| Access: | read only | |||
| Class: | integer | |||
| not supported (through AppleScript Studio version 1.4); the unique identifier for the dragging operation | ||||
source | ||||
| Access: | read only | |||
| Class: | item | |||
| the source of the dragged data | ||||
source mask | ||||
| Access: | read only | |||
| Class: | enumerated constant from Drag Operation | |||
| defines the type of drag; not supported until AppleScript Studio version 1.4 | ||||
This class is not accessible in Interface Builder, and you cannot connect any event handlers to it.
The following example shows one way to examine a drag
info object in a drop event handler. This handler returns false, canceling the drop, if the pasteboard of the drag info does not contain the “string” type. If it does contain that type, the handler uses the string data from the pasteboard to set the title of the object the data was dropped on and returns true to complete the drop operation.
on drop theObject drag info dragInfo |
set dropped to false |
if "string" is in types of pasteboard of dragInfo then |
set title of theObject to contents of pasteboard of dragInfo |
set dropped to true |
end if |
return dropped |
end drop |
The image location, location, sequence
number, and source mask properties in this class are not supported, through AppleScript Studio version 1.4.
The drag info class was added in AppleScript Studio version 1.2.
Objects in the Drag and Drop Suite support the following events (an event is an action, typically generated through interaction with an application’s user interface, that causes a handler for the appropriate object to be executed). To determine which classes support which commands, see the individual class descriptions.
Called to complete a successful drop operation.
This handler is only called if both the prepare drop and drop event handlers were successful. You can use this handler, for example, to clean up any state that was set or changed in the prepare drop handler.
The drop handler is the only required handler for supporting dropped data in AppleScript Studio.
Both the text view and text field classes have built-in support for dropped text, provided automatically by the Cocoa classes they are based on (NSTextView and NSTextField). If that’s all the support for dropped text your application needs for objects of these types, you don’t need to do anything extra. However, an application that wants to handle data that is dropped on a text view or a text field, and not allow the default support to handle it, should take these steps:
register the drag types the text view or text field can handle; see the register command for details
connect a drop handler to handle dropped text for the text view or text field
connect an empty conclude drop handler for the text view or text field; this will prevent the text objects from providing their own support for dropped text
conclude drop |
reference | required | |
drag info |
drag info | required | |
a reference to the object whose conclude
drop handler is called
drag info drag infothe information about the drag operation
When you connect a conclude drop handler to an object in Interface Builder, AppleScript Studio supplies an empty handler template. Your handler can take any necessary steps to deal with the conclusion of the drop that it didn’t take care of in its drop handler. For example, the handler might clean up any state that was set or changed in the prepare drop handler.
on conclude drop theObject drag info dragInfo |
(* Statements to deal with the concluded drop. *) |
end conclude drop |
See also the description above for this class.
The conclude drop event handler was added in AppleScript Studio version 1.2.
Not supported (through AppleScript Studio version 1.4).
Support for this event handler is planned for a later version of AppleScript Studio.
drag |
reference | required | |
drag info |
drag info | required | |
a reference to the object whose drag handler is called
drag info drag infothe information about the drag operation
The drag event handler was added in AppleScript Studio version 1.2, although it does nothing in that version.
Called when a user drags the registered type of data into the bounds of the object.
Your application may not need a drag
entered handler, as the drop handler is the only required handler for supporting dropped data in AppleScript Studio.
drag entered |
reference | required | |
drag info |
drag info | required | |
a reference to the object whose drag
entered handler is called
drag info drag infothe information about the drag operation
When you connect a drag entered handler to an object in Interface Builder, AppleScript Studio supplies an empty handler template. The theObject parameter refers to the object for which a potential drag has entered the object’s bounds. The dragInfo parameter provides access to a drag info object that contains all pertinent information for the drag operation. Your handler can take any necessary steps, such as providing visual feedback that it can accept information from the drag.
on drag entered theObject drag info dragInfo |
(* Statements to deal with the drag entering. *) |
end drag entered |
The drag entered event handler was added in AppleScript Studio version 1.2.
Called when a user drags the registered type of data out of the bounds of the object.
Your application may not need a drag
exited handler, as the drop handler is the only required handler for supporting dropped data in AppleScript Studio.
drag exited |
reference | required | |
drag info |
drag info | required | |
a reference to the object whose drag
exited handler is called
drag info drag infothe information about the drag operation
When you connect a drag exited handler to an object in Interface Builder, AppleScript Studio supplies an empty handler template. The theObject parameter refers to the object for which a potential drag has exited the object’s bounds. The dragInfo parameter provides access to a drag info object that contains all pertinent information for the drag operation. Your handler can take any necessary steps, such as providing visual feedback that it is no longer waiting to accept information from the drag.
on drag exited theObject drag info dragInfo |
(* Statements to deal with the drag exiting. *) |
end drag exited |
The drag exited event handler was added in AppleScript Studio version 1.2.
Called when a user moves a registered drag type within the bounds of the object.
Your application may not need a drag
updated handler, as the drop handler is the only required handler for supporting dropped data in AppleScript Studio.
drag updated |
reference | required | |
drag info |
drag info | required | |
a reference to the object whose drag
updated handler is called
drag info drag infothe information about the drag operation
When you connect a drag updated handler to an object in Interface Builder, AppleScript Studio supplies an empty handler template. The theObject parameter refers to the object in whose bounds a drag with a registered type has moved. The dragInfo parameter provides access to a drag info object that contains all pertinent information for the drag operation. Your handler can take any necessary steps, such as providing visual feedback as to where the drag data might be inserted. Note however, that through AppleScript Studio version 1.3, you cannot access the location property of a drag info object, so the ability to determine an insertion point is limited.
on drag updated theObject drag info dragInfo |
(* Statements to deal with the drag updating. *) |
end drag updated |
The drag updated event handler was added in AppleScript Studio version 1.2.
Called when a user has dropped data with a registered data type onto an object.
You return false from this event handler to cancel the drop operation; otherwise you must return true to signal success for the drop operation.
You can examine the pasteboard property of the drag info parameter to obtain the data for the drop in the requested format. If you use the prepare drop handler to verify that the data you need is present, you will know that data is available when the drop handler is called.
The drop handler is the only required handler for supporting dropped data in AppleScript Studio. However, see the conclude drop event handler for information on providing drag and drop for text view and text field objects.
drop |
reference | required | |
drag info |
drag info | required | |
a reference to the object whose handler is called to receive the dropped data
drag info drag infothe information about the drag operation
The Drag and Drop sample application (distributed with AppleScript Studio, starting with version 1.2) demonstrates how various objects can accept dragged data. The following drop handler, from the file Text.applescript in that application, shows how to accept dragged text data in a text field.
The drop event handler is called when the appropriate type of data is dropped onto the object. All of the pertinent information about the drop is contained in the drag info object (passed in the drag info parameter). In this case, the handler just checks the pasteboard of the drag
info object for the “string” data type. If it is present, the handler uses it to set the contents of the passed text field (from the theObject parameter).
on drop theObject drag info dragInfo |
-- We are only interested in the "string" data type |
-- If that type is present, set the contents of the text |
-- field to the contents of the pasteboard |
if "string" is in types of pasteboard of dragInfo then |
set string value of theObject to contents of pasteboard of dragInfo |
end if |
return true |
end drop |
By default, the preferred type property for a pasteboard is “string”, which is why the handler above doesn’t set the preferred type. To explicitly set the preferred type of a pasteboard (in this example, the “general” pasteboard) to “string” before getting data from the pasteboard, you could use the following statements:
set preferred type of pasteboard "general" to "string" |
if "string" is in types of pasteboard "general" then |
set myString to contents of pasteboard "general" |
The drop event handler was added in AppleScript Studio version 1.2.
Called when a user has dropped the dragged data onto the object.
You return false from this event handler to cancel the drop operation; otherwise you must return true to continue the drop operation.
You can examine the pasteboard property of the drag
info parameter to determine, for example, whether it contains data in the format you want.
Your application may not need a prepare
drop handler, as the drop handler is the only required handler for supporting dropped data in AppleScript Studio.
prepare drop |
reference | required | |
drag info |
drag info | required | |
a reference to the object whose handler is called
drag info drag infothe information about the drag operation
When you connect a prepare drop handler to an object in Interface Builder, AppleScript Studio supplies an empty handler template. The theObject parameter refers to the object for which a drop is about to take place. The dragInfo parameter provides access to a drag info object that contains all pertinent information for the drag operation. Your handler can do any necessary preparation, such as making sure the necessary data is present for the drop operation to take place. The handler should return false to cancel the drop operation or true to allow it.
on prepare drop theObject drag info dragInfo |
(* Statements to prepare for a drop. |
In this example, only allow drop if string info available. *) |
if "string" is in types of pasteboard of dragInfo then |
return true |
else |
return false |
end if |
end prepare drop |
The prepare drop event handler was added in AppleScript Studio version 1.2.
© 2007 Apple Inc. All Rights Reserved. (Last updated: 2007-10-31)