Chapter 5 Integrating with Drag and Drop
This chapter describes the drag-and-drop user model and
the Common Desktop Environment drag-and-drop convenience application program
interface (API), and describes how to use drag and drop.
Summary
The Common Desktop Environment contains an application program interface
(API) for drag and drop that is layered on top of Motif to provide convenient,
consistent, and interoperable drag and drop across the desktop. The Common
Desktop Environment drag-and-drop API makes it easier for developers to
implement drag and drop. With drag and drop, users can manipulate objects
on the screen directly by grabbing them, dragging them around the display,
and dropping them on other objects to perform a transfer of data.
Text, files, and buffers are the three categories of data that are used
with the Common Desktop Environment drag-and-drop API. Text
is defined, in this context, as any user-visible text such as text in type-in
fields. A file is a container of data that resides in
the file system. Each file also has a format that describes its contents. Buffers are data contained in memory. Typically, each buffer also
has a format that describes its contents.
Library and Header Files
To use drag and drop, you need to link to the DtSvc
library. The header file is Dt/Dnd.h.
Demo Program
A demo program containing an example of drag and drop is in /usr/dt/examples/dtdnd.
Using Drag and Drop
To Integrate with Drag and Drop
To integrate your application with drag and drop, follow these steps:
Include Dt/Dnd.h.
Link to libDtsvc.
As recipient: Register as a drop zone using DtDndDropRegister.
Optionally, write a drop animate callback.
Write a transfer callback.
As source: Recognize user action (possibly requiring a modification of translation
tables) and call DtDndDragStart.
Write a convert callback.
Write a drag finish callback.
Drag-and-Drop User Model
This section describes the user model behind drag and drop
to help you design an application that is consistent with the rest of the
desktop and users' expectations.
See the Common
Desktop Environment: Style Guide and Certification Checklist
for more information about the drag-and-drop user model and for guidelines
for the visual appearance of drag-and-drop elements.
When drag and drop is available for all applications on the desktop,
the system is more predictable to the user and is, therefore, easier to use
and to learn. Users leverage their learning across more applications by using
skills that they already know. In addition, many users prefer drag and drop
to using menus.
In this chapter, the term drop zone is used to describe places where
users can drop something. Drop zones are usually represented by a control
or icon graphic; for example, a trash icon or a type-in field graphic. The
term drop target is used to describe the rectangular area that represents
the drop zone.
Drag and Drop Capability
With the Drag and Drop capability, users can select and manipulate objects
represented as icons.
Note - Drag and drop is an accelerator to functionality that is accessible
through other user interface controls supported within your application.
However, not all users are able to take advantage of drag and drop. Do not
support any basic operations solely through drag and drop. Any basic function
that your application supports through drag and drop should also be supported
by menus, buttons, or dialog boxes.
Drag Icons
When users select
and manipulate icons using drag and drop, they expect the graphic icon that
represents the item being dragged to remain consistent from the selection
through the drag and drop. If the user selects a message icon in the File
Manager and starts to drag it, the source portion of the drag icon is represented
by that message icon. Providing this kind of consistency makes drag and drop
more predictable to the user. Where the destination application uses icons,
the icon shown should, in most cases, be the same one that was selected and
then dragged and dropped. This behavior is not, however, always appropriate
for all applications. Dragging text is an exception. A text drag icon is
used instead of dragging the selected text.
Both the source and destination applications specify the visual appearance
of drag icons. You are responsible for ensuring that an application has a
consistent and appropriate icon to drag. Although the drag-and-drop library
provides default icons, it is a good idea for you to specify your own for
each application. Most often, you should use the data-typing database to
obtain the icon associated with the type data represented by the icon. See Chapter 9, Accessing the Data-Typing Database.
When users start a drag without selecting an icon, it is appropriate
for you to provide a relevant drag icon. For example, in an appointment editor,
the user can select an appointment out of a scrolling list--which may
or may not show icons. You should use an appointment icon as the source
indicator. The destination application (for example, a File Manager) should
display the same appointment icon.
Parts of the Drag Icon
The drag icon
changes appearance to provide drag-over feedback when the user moves it over
potential drop zones.
The drag icon has three parts that combine to provide the drag-over
feedback:
A state indicator
An operation indicator
A source indicator
The state indicator is a pointer used for positioning
combined with a valid or invalid drop zone indicator. The valid state indicator
is an arrow pointer. The pointer has a hot spot so users can position it
in a predictable manner. The invalid state indicator--a circle with
a diagonal line--is displayed when users have positioned the cursor
over an invalid drop zone.
The operation indicator gives users feedback on
what operation is occurring during the drag; either move, copy, or link.
Because most drags are moves, users are given additional feedback when they
perform the less-frequent copy or link operations.
Note - The operation feedback is drawn on top of the state and source
feedback. This behavior is consistent with Motif drag-and-drop behavior.
The user can choose the drag operation move, copy, or link by pressing
and holding certain keys during a drag, as shown in Table 5-1.
Table 5-1 Keys Used to Modify a Drag Operation
Modifier Key | Operation |
Shift | Move |
Control | Copy |
Control and Shift | Link |
The source application can force a copy, as in the case of the read-only
File Manager window. When the user chooses an operation, the drop zone must
match that operation for the drop to succeed; otherwise, the drop zone is
invalid. In other words, if the user chooses a copy by holding down the
Control key, and then drags the drag icon over the trash icon, the drag icon
should show the trash icon as an invalid drop zone and any drop should fail,
because copying to the trash is not allowed.
The source indicator represents the selection (or
the item being dragged). The source indicator varies depending on whether
the selection represents single or multiple items and what kind of item the
selection represents.
|