The Clipboard

Another way of getting data from one program into another is via the system clipboard. Unlike other forms of data exchange, using the clipboard requires very little effort or code because you have to do is to plunk data into a particular BMessage. Some of the standard controls already do it for you. The BTextView class already implements copying, cutting, and pasting by way of keyboard accelerators. In cases like these, all that you will want to do is add some menu items for less advanced users.

Standardized Clipboard Data Formats

Plain Text

It is easiest to describe the basics with this code snippet. clipboard->AddData("text/plain", B_MIME_TYPE, your_text_string_here);

Styled Text

Use the same format as for plain text but add a text run array field to the message also. You probably won't need to worry about this unless you're writing a word processor or something similar. clipboard->AddData("application/x-vnd.Be-text_run_array", B_MIME_TYPE, run_array, run_array_size);

Generic File References

If the amount of data you wish to pass to another program is too large to place on the clipboard without straining the system, dump the data to a temporary file and place an entry_ref which points to it on the clipboard instead. Audio and video files commonly suffer from this problem. To do this, call AddRef() with the field name "refs" and add an entry_ref pointing to the file you wish to pass this may. Multiple entry_ref objects can be sent just by doing it more than once. If your program is going to handle these kinds of drops file references, it should look for multiple entries in the 'refs' field unless it would be inappropriate to do so.

Image Data

If your program uses a different kind of data than what has already been standardized, there are some guidelines you can follow so that other programs can use it. First, make sure that the data that is put on the clipboard is in as generalized a form as possible.

Field Type: B_STRING_TYPE
Name: class
Descriptions: "BBitmap"
Field Type: B_RECT_TYPE
Name: _frame
Descriptions: A BRect containing the bounds of the bitmap data in pixels
Field Type: B_INT32_TYPE
Name: _cspace
Descriptions: The color_space constant for the image data, such as B_RGBA32
Field Type: B_INT32_TYPE
Name: _bmflags
Descriptions: The Flags() argument from BBitmap
Field Type: B_INT32_TYPE
Name: _rowbytes
Descriptions: The number of bytes per row, including padding
Field Type: B_RAW_TYPE
Name: _data
Descriptions: The raw image data
Field Type: B_POINT_TYPE
Name: be:location
Descriptions: The location from which the image data was copied. May be ignored.