Basic integration does not involve extensive use of the desktop application programmer's interface (API). Therefore, it does not provide other interaction with the desktop, such as drag and drop, session management, ToolTalk messaging, and programmatic access to the actions and data-typing database.
A few of the integration tasks covered in this chapter require source code modification. They are optional, and are discussed here because they are closely related to basic integration tasks.
Your application will provide a desktop registration package, and your installation script will automatically register your application.
Your application will provide data types for its data files.
Your application will change interface fonts and background, foreground, and shadow colors dynamically.
The desktop defines general interface font and color resources that are used if no corresponding application-specific resources exist.
Upon installation, the application is automatically registered. The system administrator has little or no additional work to do.
All the desktop's configuration files are gathered in one location. Furthermore, the application can easily be unregistered if, for example, the administrator wants to update it or to move it to a different application server.
This chapter guides you to that information and contains additional information specific to application programming.
See the section on modifying font and color resources in the chapter "Registering an Application" in the CDE Advanced User's and System Administrator's Guide.
See the text "Creating a Registration Package for Your Application" and "Registering an Application" in the CDE Advanced User's and System Administrator's Guide.
See the section on registering the application using dtappintegrate in the chapter "Registering an Application" in the CDE Advanced User's and System Administrator's Guide.
You should do complete integration if you have the ability to modify the application's source code.
When you do complete print integration, users can print data files on various printers by dropping them on printer drop zones (the Front Panel Printer control and printer icons in Print Manager). Certain other desktop behaviors are also implemented (see "Desktop Printing Environment Variables").
You should do partial integration if you do not have the ability to modify the application's source code, but you do have the ability to invoke printing by way of an action.
When you do partial integration, your application provides a subset of full-integration functionality. For example, by using the LPDEST environment variable, your application's printing mechanism will obtain the print destination from the drop zone.
If an application cannot supply a print action for its data files, you should configure the data files to display an error dialog box when users drop the files on printer drop zones.
If your print action starts a program that dereferences the four environment variables indicated in "Desktop Printing Environment Variables." then your data type is fully integrated. The print action must be written to be specific for the application's data type and should accept only a single file.
For example, the following print action is specific for a data type named ThisAppData:
ACTION Print
{
ARG_TYPE ThisAppData
EXEC_STRING print_command -file %(file)Arg_1%
}
If your application handles the ToolTalk Media message set Print request, then your print action could send a variant of it with the following actions.
If any of the four environment variables are not set, the corresponding message argument will be null. When the message argument is null, refer to "Desktop Printing Environment Variables" for the default interpretation.ACTION Print { ARG_TYPE ThisAppData ARG_CLASS FILE ARG_COUNT 1 TYPE TT_MSG TT_CLASS TT_REQUEST TT_SCOPE TT_SESSION TT_OPERATION Print TT_FILE %Arg_1% TT_ARG0_ MODE TT_IN TT_ARG0_ VTYPE %Arg_1% TT_ARG1_ MODE TT_IN TT_ARG1_ VTYPE LPDEST TT_ARG1_VALUE $LPDEST TT_ARG2_MODE TT_IN TT_ARG2_VTYPE DTPRINTUSERFILENAME TT_ARG2_VALUE $DTPRINTUSERFILENAME TT_ARG3_MODE TT_IN TT_ARG3_VTYPE DTPRINTSILENT TT_ARG3_VALUE $DTPRINTSILENT TT_ARG4_MODE TT_IN TT_ARG4_VTYPE DTPRINTFILEREMOVE TT_ARG4_VALUE $DTPRINTFILEREMOVE }
ACTION Print { ARG_TYPE ThisAppData ARG_CLASS BUFFER ARG_COUNT 1 TYPE TT_MSG TT_CLASS TT_REQUEST TT_SCOPE TT_SESSION TT_OPERATION Print TT_ARG0_MODE TT_IN TT_ARG0_VTYPE %Arg_1% TT_ARG0_VALUE %Arg_1% TT_ARG1_MODE TT_IN TT_ARG1_VTYPE LPDEST TT_ARG1_VALUE $LPDEST TT_ARG2_MODE TT_IN TT_ARG2_VTYPE DTPRINTUSERFILENAME TT_ARG2_VALUE $DTPRINTUSERFILENAME TT_ARG3_MODE TT_IN TT_ARG3_VTYPE DTPRINTSILENT TT_ARG3_VALUE $DTPRINTSILENT TT_ARG4_MODE TT_IN TT_ARG4_VTYPE DTPRINTFILEREMOVE TT_ARG4_VALUE false }
Your application can use dtlp if either of the following conditions is true:
If the file is ready to print, the Print action runs dtlp in the EXEC_STRING. For example:
ACTION Print
{
ARG_TYPE ThisAppData
EXEC_STRING dtlp %Arg_1%
}
If the application provides a conversion filter, the filter must be run before running dtlp. For example:
ACTION Print
{
ARG_TYPE MyAppData
EXEC_STRING /bin/sh `cat %Arg_1%| filter_name | dtlp`
}
where filter_name is the name of the print filter.
print_command [options]-file filename
where options provides a mechanism for dereferencing none, some, or all of the printing environment variables (see "Desktop Printing Environment Variables").The simplest form of this print command line omits options.
print_command -file filename
This command line lets users print your application's data files using the desktop printer drop zones. However, printing destination is not set by the drop zone. In addition, other print behaviors set by the environment variables are not implemented. For example, the desktop may not be able to direct silent printing or remove temporary files.If your print command line provides additional command-line options that correspond to the desktop printing environment variables, you can provide additional integration.
For example, the following command line provides the ability to dereference LPDEST:
print_command [-d destination] [-file filename]
where:destination is the destination printer.
The next print command line provides options for dereferencing all four variables:
print_command [-d destination] [-u user_file_name] [-s] [-e] -file filename
where:
Turning Environment Variables into Command-Line Switches
If your action is not capable of dereferencing the four environment variables, but it is capable of taking corresponding command-line options, this subsection explains how to turn the environment variable values into command-line options.
For example, this is a simple print action that deferences LPDEST:
ACTION Print
{
ARG_TYPE data_type
EXEC_STRING print_command -d $LPDEST -file %(file)Arg_1%
}
However, this print action may create unpredictable behavior if LPDEST isOne way to create a Print action that provides proper behavior when variables are not set is to create a shell script that is used by the Print action.
For example, the following action and the script it uses properly handle all four environment variables:
ACTION Print
{
ARG_TYPE data_type
EXEC_STRING app_root/bin/envprint %(File)Arg_1%
}
The contents of the envprint script follow:
#!/bin/sh
# envprint - sample print script
DEST=""
USERFILENAME=""
REMOVE=""
SILENT=""
if [ $LPDEST ] ; then
DEST="-d $LPDEST"
fi
if [ $DTPRINTUSERFILENAME ] ; then
USERFILENAME="-u $DTPRINTUSERFILENAME"
fi
DTPRINTFILEREMOVE=echo $DTPRINTFILEREMOVE | tr "[:upper:]" "[:lower:]"`
if [ "$DTPRINTFILEREMOVE" = "true" ] ; then
REMOVE="-e"
fi
DTPRINTSILENT=`echo $DTPRINTSILENT | tr "[:upper:]" "[:lower:]"`
if [ "$DTPRINTSILENT" = "true" ] ; then
SILENT="-s"
fi
print_command $DEST $USERFILENAME $REMOVE $SILENT -file $1
Nevertheless, you should provide a print action that runs when users drop your application's data files on a printer drop zone. Otherwise, the desktop may assume that the file contains text data, and the print output will be garbled.
The desktop provides a print action for this purpose named NoPrint. The NoPrint action displays a dialog box telling users that the data files cannot be printed using the printer drop zones.
The NoPrint action displays the Unable to Print dialog box shown in Figure 1-1.
Figure 1-1 Dialog box displayed by the built-in NoPrint action
To use the Unable to Print dialog box, create a print action specific to your data type that maps to the NoPrint action. For example, suppose the data type for your application is:
DATA_ATTRIBUTES MySpreadSheet_Data1
{
-
}
The following Print action maps to the NoPrint for this data type:
ACTION Print
{
ARG_TYPE MySpreadSheet_Data1
TYPE MAP
MAP_ACTION NoPrint
}