The class provides methods to deal with interctive objects like push buttons, multi state objects, text fields and so on.
The class provides methods to deal with interctive objects like push buttons, multi state objects, text fields and so on.
Here you will find three test documents:
comet_pdf -i \$DESKTOP/inter3.w2ml --interactive 1 -L
Interactive objects are used in interactive PDFs and in folios generated by InDesign®. The following interactive objects are supported by InDesign®.
Value | Constant | Short Description |
0 | kMultistate | State objek, not supported by comet_pdft |
1 | kPushbutton | Button |
2 | kTextfield | Text edit field |
3 | kCheckbox | Check box |
4 | kRadiobutton | Radio button |
5 | kListboxfield | List field |
6 | kCombobox | Combo box | 7 | kSignature | Signature field |
The state of an object defines, how the object looks like. In the screenshot you can see a check box with several faces:
Only buttons, check boxes and radio buttons can have a state. The following table shows all avaible states for interactive objects:
Value | Constant | Used in |
-1 | kStateInvalid | Invalid or unknown state |
0 | kStateNormal | button |
1 | kStateOver | |
2 | kStateDown | |
3 | kStateNormalOn | check box, radio button |
4 | kStateNormalOff | |
5 | kStateOverOn | |
6 | kStateOverOff | |
7 | kStateDownOn | |
8 | kStateDownOff | |
0 | kStateFirst | Usefull for loops |
8 | kStateLast |
Illustrator® does not provide interactive objects. The functions of the module interactive therefore have no meaning in Illustrator®.
Please note that comet_pdf must be started with the \URL [option --interactive N]{../InDesign/Plugins/comet_pdf.html#interactive} to create an interactive PDF. If the option is missing, the interactive elements of the document are not exported to the PDF.
Interactive objects may receive the following events:
Value | Constant | Notes |
-1 | kNoEvt | |
0 | kAnyEvt | |
1 | kMouseUpEvt | InDesign® standard |
2 | kMouseDownEvt | |
3 | kMouseEnterEvt | |
4 | kMouseExitEvt | |
5 | kOnFocusEvt | |
6 | kOnBlurEvt | |
7 | kOpenEvt | See here |
8 | kCloseEvt | |
9 | kVisibleEvt | |
10 | kInvisibleEvt | |
11 | kActivateEvt | |
12 | kCalculateEvt | |
13 | kFormatEvt | |
14 | kKeystrokeEvt | |
15 | kValidateEvt |
Interactive elements can have different options in the exported PDF. In the lower part of the panel Formfields and Buttons (see above), these options can be set.
A number of important options used by PDF viewers such as Adobe Acrobat can not be set in InDesign®. As a workaround we create Frame Labels to define these data. comet_pdf can read these properties and set them in the target document. To set the values, open the panel Frame Labels and select the desired Form area. With the + button of the panel you now can set the properties. The corresponding descriptions can be found at the end of the following table.
Again, these settings have no effect on PDFs exported directly from InDesign®.
The following table shows all options supported by set_pdf_option and get_pdf_option. The options defined in frame labels can be edited by the help of panel Frame Labels in additions (see column 4 of following table).
Wert | Konstante | Type | Bemerkung |
0 | kPDFPrintVisible | bool (0 | 1) |
Visibility. Default is visible everywhere until v4.2 R33133 0 : no print sonst : visible everywhere 0: no print 1 : isible everywhere 2 : hidden 3 : noview Unfortunately, InDesign® treats the visibility as a bool value only and can support the values 0 and 1 therefore only. Instead of 2 or 3, the value 0 (no print) is automatically set here. So to set the visibility of an interactive field in PDFs created by comet_pdf to hidden or no view, the property must be set directly by comet_pdf. |
1 | kPDFRequired | required fiels of PDF | |
2 | kPDFPassword | Use bullet points or stars for writing | |
3 | kPDFReadonly | ||
4 | kPDFMultiline | ||
5 | kPDFScrollable | Scrollbar is shown, if the text exceeds the frame | |
6 | kPDFTaborder | int | Tab order. In InDesign® you can define the tab order using the menu Object -> Interactiv -> Set Tab Order. |
7 | kPDFArticleorder | not implemented | |
8 | kPDFFontsize | float | |
9 | kPDFTooltip | String/char* | |
10 | kPDFFieldValue | Button value | |
11 | kPDFCheckedByDefault | int | Selected by default |
12 | kPDFFontname | String/char* |
Font and font color. The font is given as a comma separated pair of font name and face (e.g. "Arial Narrow, Italic"). If you specify a font, a font size (kPDFFontsize) must also be specified! The color is specified as the name of an existing color field. |
13 | kPDFFontcolor | ||
14 | kPDFListAllowMultiple | int |
Listboxes only Multiple selection possible? |
15 | kPDFListEditable | Comboboxes only Is the field editable, or, in other words: Can own values be entered? | |
16 | kPDFListSort | List fields only Sort list values? | |
17 | kPDFListValues | StringList | List fields only Entries of list |
18 | kPDFDefaultValue | String/char* | The value is shown when opening the document and after resetting the form fields. |
30 | kPDFFieldName | String/char* |
Name of the field. The names must be unique. Only radio buttons that belong to the same group are given the same name. The name can be used in Javascripts to address the form field. this.getField ('name'); |
Values supported by frame labels. The 4th column describes the key/value pairs of these labels. | |||
19 | kPDFUnionSelect | int |
priint_FormField_UnionSelect If the value is equal to 1, radio buttons with the equal button value (kPDFFieldValue) are selected at the same time. |
20 | kPDRichText | int |
priint_FormField_RichText Text formatting allowed. The specification is only allowed in text fields with RGB text colors. |
21 | kPDFMaxChar | int |
priint_FormField_MaxChar >= 0 Permitted maximum number of characters in the text field. Use 0 for unlimited. |
22 | kPDFCalcOrder | int |
priint_FormField_CalcOrder >= 0 Calculation sequence of the fields. The value is only used if the form field has a calculation (kCalculateEvt). Default is 10 plus the maximum CalcOrder used in the cuurent the page. |
23 | kPDFSpellCheck | int |
priint_FormField_SpellCheck Enable spell checking in the text box. |
24 | kPDFCaption | String/char* |
priint_FormField_Caption Labelling of pushbuttons |
25 | kPDFCaptionRollover | String/char* |
priint_FormField_CaptionRollover Text on roll overs. The specification is ignored by Acrobat. |
26 | kPDFCaptionDown | String/char* |
priint_FormField_CaptionDown Text on mouse clicks. The specification is ignored by Acrobat. |
27 | kPDFFileSelect | int |
priint_FormField_FileSelect Here is the official description from Adobe : Allows the user to enter a file path as the field’s value when a file is submitted along with the form. This option is available only when Scroll Long Text is the only selected option in the Options tab. But for this to work, you need to write Javascripts. You can find more information on the Internet, we do not further support this option. |
28 | kPDFBorderStyle | String/char* |
priint_FormField_BorderStyle Border style of push buttons, checkboxes and radio buttons. The color and thickness of the borders are taken from the settings of the InDesign® object. Please note, that form fields can only have integer frame thicknesses. Other values the border thickness are rounded up accordingly. The dashed can be extended by two int-numbers : the length of the strokes and the length of the gaps in points. We pass this information to the PDF - but Acrobat always uses 3, 3 anyway. |
29 | kPDFButtonStyle | String/char* |
priint_FormField_ButtonStyle Which character is shown when checkboxes and radiobuttons are activated? The color of the frame edge is used as drawing color. |
Action may perform several tasks. The table shows a complete list of tasks available for actions:
Wert | Konstante | Beschreibung | Bemerkungen |
1 | kGoToAnchor | Go to destination | |
2 | kGoToFirstPage | Go to first page | |
3 | kGoToLastPage | Go to last page | |
4 | kGoToNextPage | Go to next page | |
5 | kGoToPreviousPage | Go to previous page | |
6 | kGoToURL | Go to URL | |
7 | kShowHideFields | Show/Hide buttons and forms | |
8 | kSound | Sound | |
9 | kMovie | Video | |
10 | kAnimation | Animation | Nur Liquid-HTML5 und SWF |
11 | kGoToPage | Go to page | |
12 | kSwitchToMSOState | Go to state | |
13 | kSwitchToNextMSOState | Go to next state | |
14 | kSwitchToPrevMSOState | Go to previous state | |
21 | kResetForm | Clear form | Nur PDF |
15 | kGoToNextView | Go to next view | |
16 | kGoToPreviousView | Go to previous view | |
17 | kOpenFile | Open file | |
19 | kPrintForm | Print form, not supported by CS5.5 | |
20 | kSubmitForm | Submit form, not supported by CS5.5 | |
18 | kViewZoom | Zoom view | |
22 | kExecJavascript | Execute JavaScript | See here |
There seems to be no way in InDesign® to prepare PDFs for document events like recalculation of fields or similar. This affects both the UI and the SDK for developing plug-ins. To enable you to create Javascript implementations in InDesign® as well, we have introduced the priint_FormField_Actions frame label. Open the panel Frame Labels for this purpose. There you can create new key/value pairs using the + button. Give the new entry the key name priint_FormField_Actions . In the value field enter the action(s) including the Javascript.
The syntax of the value is as follows:
event-id task-id "what ever you want"
Any number of actions are possible. The actions are executed in the order of their definition. Here you can find a documetation of the Acrobat JavaScript APIs from Adobe.
Please note that the corresponding functions have no effect for PDFs exported directly from InDesign®.
The example shows an alert box when a button is clicked.
1 := Event kMouseUpEvt
22 := Task kExecJavascript
priint_FormField_Actions
1 22 "alert ('Hallo Paul');"
Calculate the value of a field as the sum of the values of other fields.
12 := Event kCalculateEvt
22 := Task kExecJavascript
priint_FormField_Actions
12 22 "event.value = this.getField ('t1').value + this.getField ('t2').value + this.getField ('t3').value;"
Two actions are defined : Calculate the 19% VAT included in a price and display the result with two decimal places.
12 := Event kCalculateEvt
13 := Event kFormatEvt
22 := Task kExecJavascript
priint_FormField_Actions
12 22 "event.value = this.getField ('t6').value - this.getField ('t6').value / 1.19"
13 22 "event.value = Number (event.value).toFixed(2);"
There seems to be no possibility in InDesign® to default values for form fields. To enable you to make the corresponding settings in InDesign®, we have introduced the frame label priint_FormField_DefaultValue: Please open the Frame Labels panel for this purpose. There you can create new key/value pairs using the + button. Give the new entry the key name priint_FormField_DefaultValue and enter the desired default.
Attention: For lists and combo boxes it is very important that the default (in exactly the given notation) also occurs in the list values. Non-existing defaults cause comet_pdf to abort during PDF creation in case of non-existing list entries!
int is_multistate(ItemRef frameRef)
Does the frame have a multistate object?
Name | Type | Default | Description |
Return | int | 0 : No 1 : Yes, the object is a multi state or part of of a multi state |
|
frameRef | ItemRef | - | Valid reference to a frame or interactive objekt |
int is_formfield(ItemRef frameRef)
Does the frame have a formfield object (but is not a multistate)?
Formfiels are all alle interactive objects except the object states (multi states).
Name | Type | Default | Description |
Return | int | 0 : No 1 : Yes, the object is form field or part of of a form field |
|
frameRef | ItemRef | - | Valid reference to a frame or interactive objekt |
static int create(
ItemRef resref,
ItemRef frameRef,
int type = 2,
char* name = 0,
int rmvAddits = 0)
Create a new interactive object from an existing frame.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
resref | ItemRef | - | On successful return it contains the new created states object (may be 0, but if not 0, it must be allocated using item::alloc) |
frameRef | ItemList | - | Frame to convert to an interactive object 0 : Current script frame |
type | int | kTextfield | Object type, see here |
name | String/char* | 0 | Name of new object
The names of interactive fields must be unique!
To create unique names, you can use the frame UID, for example:
sprintf (name, "UID%d", item::getint (frameRef)); |
rmvAddits | int | 0 | In radio buttons and check boxes InDesign® automatically creates a black mark for the active state.
Shall I remove it? 0 : No 1 . Yes Using comet_pdf, this option is ignored. |
Create a button from the current frame (or - under comet_pdf - the frame with UID 227). If you click the button, a message is shown.
#include "internal/types.h"
int main () { ItemRef fr = item::alloc (); ItemRef mso = item::alloc (); ItemRef action = item::alloc ();
if (system::version () == -1) item::define (fr, 0, 227); else item::define (fr, 0, item::getint (gFrame));
interactive::create (mso, fr, kPushbutton, "123"); interactive::set_pdf_option (fr, kPDFCaption, "My Button"); interactive::set_pdf_option (fr, kPDFCaptionRollover, "My Button Rollover"); interactive::set_pdf_option (fr, kPDFCaptionDown, "My Button Down");
if (system::version () == -1) { interactive::add_action (fr, kMouseUpEvt, kExecJavascript, action); interactive::set_task_data (fr, action, "app.alert('Hallo Paul');"); } else { // Take care to take the *mso* in this case! frame::set_script_tag (mso, "1 22 \"app.alert ('Hello Paul');\"", "priint_FormField_Actions"); }
return 0; }
static int create_multistate(
ItemRef resref,
ItemList states,
char* name = 0)
Create a new multi state object from a given list of objects. Different to interactive::create this function can create a multi state object with more states in one step.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
resref | ItemRef | - | On successful return it contains the new created states object (may be 0, but if not 0, it must be allocated using item::alloc) |
states | ItemList | - | List of states |
name | String/char* | 0 | Name of new object, may be 0 or "" |
Create an object from the selected frames. The frames are justified at the top left corner of their bounding box.
int main () { ItemList frames = itemlist::selected (); ItemList states = itemlist::alloc (); ItemRef mso = item::alloc (); ItemRef fr = item::alloc (); int i; float l, t, r, b;
if (gRun > 1) return 0;
if (itemlist::length (frames) == 0) { showmessage ("Please select one or more frames and try again."); return 0; }
if (itemlist::length (frames) > 1) { itemlist::bbox (frames, &l, &t, &r, &b); for (i = 0; i < itemlist::length (frames); i++) { itemlist::get (frames, fr, i); frame::moveto (fr, l, t); } }
interactive::create_multistate (mso, frames, "myname");
return 0; }
static int resolve(
ItemRef frameRef,
int state = -1,
int doRmv = 0,
ItemList resultList = 0)
Resolve interactive objects. In the following table you can see, what is done with the frames of interactive objects:
Resolve a single state - state >= 0 | Resolve all - state kStateInvalid | |||
Type of object | doRmv = 0 | doRmv = 1 | doRmv = 0 | doRmv = 1 |
Multistate | Resolved frames are remaining in the document. | Relsolve frames are removed. | All frames of the multistate are remaining in the document. Same like the flyout menu Release all states to objects of panel Object states. | The interactive object and all ots frames are removed. |
Buttons, check boxes, radio buttons | Only the frames of the active state are remaining in the document, all other frames are removed. Like the button Convert to Object of panel Button and Forms. | |||
No effect | The frame of the former interactive object becomes a 'normal' frame again. |
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first.
0 : Current script frame |
state | int | kStateInvalid | What to resolve? See above table please. The state kStateNormal of buttons and kStateNormalOn and kStateNormalOff of radio buttons and check boxes are never resolvable. Using comet_pdf the parameter has no effect. |
doRmv | int | 0 | Remove resolved frames? 0 : No 1 : Yes See above table please. Using comet_pdf the parameter has no effect. |
outItems | ItemList | 0 | List of resolved and still remaining frames. 0 or alloaceted ItemList. Using comet_pdf the parameter is left untouched. |
static int get(
ItemRef frameRef,
ItemRef out_mso,
int* out_state)
Search the interactive object containing a frame. This can be a multi state objects, buttons, text fields, ... . Use item::get_class to find out the objects class.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode 1244 : The frame is not part of an interactive object |
|
frameRef | ItemRef | - | Valid frame reference 0 : current script frame |
out_mso | ItemRef | - | allocated ItemRef for the interactive object |
out_state | int* | 0 | State containing frameRef, only valid after successful return. In comet_pdf the status always has the value -1. kStateInvalid The frameRef points to an interactive object itself. otherwise : State of frame, see here |
int main () { ItemRef mso = item::alloc (); int state;
frame::get_interactive (gFrame, mso, &state); showmessage ("MSO : %d\nState : %d\n", item::getint (mso), state);
return 0; }
static int set_pdf_option(
ItemRef frameRef,
int type,
int value)
Set PDF options of an interactive object.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first.
0 : Current script frame |
typ | int | - | Option to change, see here |
value | int, float, String/char* | - | New value of option. The data type of the value depends on the type of option, see here. Take care! Wrong data types may crash InDesign®! |
#include "internal/types.h"
int main () { ItemRef mso = item::alloc (); ItemRef fr = item::alloc (); int ival; char sval [512];
interactive::create (mso, gFrame, kTextfield, "Paul 1");
interactive::set_pdf_option (gFrame, kPDFTooltip, "Helpless, helpless, helpless"); interactive::get_pdf_option (gFrame, kPDFTooltip, sval, 511); wlog ("", "Tooltip (%s)\n", sval);
interactive::set_pdf_option (gFrame, kPDFCheckedByDefault, 1); interactive::get_pdf_option (gFrame, kPDFCheckedByDefault, &ival); wlog ("", "Checked by default (%d)\n", ival);
interactive::set_pdf_option (gFrame, kPDFFieldValue, "höpöhöpö"); interactive::get_pdf_option (gFrame, kPDFFieldValue, sval, 511); wlog ("", "Field value (%s)\n", sval);
interactive::set_pdf_option (gFrame, 12, "Geogrotesque"); interactive::get_pdf_option (gFrame, 12, sval, 511); wlog ("", "Font (%s)\n", sval);
interactive::set_pdf_option (gFrame, 13, "Seitenkopf"); interactive::get_pdf_option (gFrame, 13, sval, 511); wlog ("", "Color (%s)\n", sval);
return 0; }
static int get_pdf_option(
ItemRef frameRef,
int type,
int* value)
Get PDF options from an interactive object.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first.
0 : Current script frame |
typ | int | - | Option to retrieve, see here |
value | int, float, String/char* | - | Current value of option. The data type of the value depends on the type of option, see here. Take care! Wrong data types may crash InDesign®! |
maxlen | int | -1 | Maximum length, only for char* types |
#include "internal/types.h"
int main () { ItemRef mso = item::alloc (); ItemRef fr = item::alloc (); int ival; char sval [512];
interactive::create (mso, gFrame, kTextfield, "Paul 1");
interactive::set_pdf_option (gFrame, kPDFTooltip, "Helpless, helpless, helpless"); interactive::get_pdf_option (gFrame, kPDFTooltip, sval, 511); wlog ("", "Tooltip (%s)\n", sval);
interactive::set_pdf_option (gFrame, kPDFCheckedByDefault, 1); interactive::get_pdf_option (gFrame, kPDFCheckedByDefault, &ival); wlog ("", "Checked by default (%d)\n", ival);
interactive::set_pdf_option (gFrame, kPDFFieldValue, "höpöhöpö"); interactive::get_pdf_option (gFrame, kPDFFieldValue, sval, 511); wlog ("", "Field value (%s)\n", sval);
interactive::set_pdf_option (gFrame, 12, "Geogrotesque"); interactive::get_pdf_option (gFrame, 12, sval, 511); wlog ("", "Font (%s)\n", sval);
interactive::set_pdf_option (gFrame, 13, "Seitenkopf"); interactive::get_pdf_option (gFrame, 13, sval, 511); wlog ("", "Color (%s)\n", sval);
return 0; }
static int get_frames(
ItemRef frameRef,
ItemList resultList,
int state = -1)
Get a list of all items (frames or groups) of an states object. To find out the state inside an interactive object of a given frame please use the function get.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first.
0 : Current script frame |
resultList | ItemList | - | Result list. The list must be intited by itemlist::alloc. The list is cleared on function start. |
state | int | kStateInvalid | State to get the frames from: kStateInvalid : All otherwise : see here |
static int add_frame(
ItemRef frameRef,
ItemRef addThis,
int state = -1,
int replace = 0)
Add a frame or group to a state of an interactive object.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame Attention: If you replace a state frame, you may remove exactly this frame. Therefor we strongly recommend to use the reference to interactive object here rather than any of its state frames! Use interactive::get to get the reference to the interactive object. |
addThis | ItemRef | - | Valid frame or group reference to add. |
state | int | kStateInvalid | State to add the frame to. You have to care care on the objeects type: State object (Multistate): -1 : Add as new state otherwise : 0-based index of state.(If too big, a new state is created.) Buttons, Radio-Buttons, Checkboxes: Valid state, see here. Other: It is not allowed to replace frames here. |
replace | int | 0 | Remove old frames of state? 0 : No 1 : Yes |
static int get_actions(
ItemRef frameRef,
int eventType,
ItemList actions)
Get a list of (all) actions of a interactive object.
Multi state objects does NOT have actions!
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame |
eventType | int | - | Type of event, see table events. |
actions | ItemList | - | Allocted list for results or 0. For state objects and normal frames the result list is empty. |
#include "internal/types.h"
int main () { ItemList actions = itemlist::alloc (); ItemRef action = item::alloc (); int e, i;
if (gRun > 1) return 0;
interactive::get_actions (gFrame, kAnyEvt, actions); wlog ("", "%d actions in object %d\n", itemlist::length (actions),   item::getint (gFrame));
for (e = kMouseUpEvt; e < kValidateEvt; e++) { interactive::get_actions (gFrame, e, actions); wlog ("", " %d actions of type %d in object %d\n",   itemlist::length (actions),   e,   item::getint (gFrame)); }
interactive::get_actions (gFrame, kAnyEvt, actions); for (i = 0; i < itemlist::length (actions); i++) { itemlist::get (actions, action, i); wlog ("", "Action %d with UID %d is triggered by event %d\n", i, item::getint (action), interactive::get_event (gFrame, action)); }
return 0; }
static int count_actions(ItemRef frameRef = 0)
Count the actions of an interactive object. The function alwys returns the number of the actions regardless of their event types. To count the actions for one event type, please use get_actions and ask for the length of the result list.
Name | Type | Default | Description |
Return | int | Number of actions | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame |
static int get_nth_action(
ItemRef frameRef,
int index,
ItemRef outRef = 0)
Get an action of an interactive element by its index.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode
@ @param frameRef ItemRef - Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame |
|
index | int | - | Index of action in all actions of the object regardless of their event types |
outRef | ItemRef | 0 | Variable for the result 0 : ignore sonst : allocated ItemRef for the result |
#include "internal/types.h"
int main () { ItemRef action = item::alloc (); int a, A;
if (gRun > 1) return 0;
A = interactive::count_actions(gFrame); for (a = 0; a < A; a++) { interactive::get_nth_action (gFrame, a, action); wlog ("", "Action %d : triggered by %d, task %d\n", a, interactive::get_event (gFrame, action), interactive::get_task (gFrame, action)); }
return 0; }
static int add_action(
ItemRef frameRef,
int eventType,
int task,
ItemRef out_actionRef = 0)
Add an action to an interactive object.
Please note, that actions with targets appear in the action list before actions that do not have targets and they cannot be mixed. Therefor, a new added action must not necessarily be the last in the action list.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame The function has no effect for state objects (multistates). |
eventType | int | - | Event that triggers the action, see here |
task | int | - | Task to execute, see here. Use set_task_data to change the parameter of the task. |
out_actionRef | ItemRef | 0 | ItemRef for the new created action 0 : ignore otherwise: llocated ItemRef |
#include "internal/types.h"
int main () { ItemRef action = item::alloc ();
if (gRun > 1) return 0;
interactive::add_action (gFrame, kMouseUpEvt, kOpenFile, action);
return 0; }
The function creates a "Submit form" actions and then a "Sound" action. In the action list the Sound will appear before the Submit anyway.
#include "internal/types.h"
int main () { ItemRef action = item::alloc ();
if (gRun > 1) return 0;
interactive::add_action (gFrame, kMouseUpEvt, kSubmitForm, action); interactive::add_action (gFrame, kMouseUpEvt, kSound, action);
return 0; }
static int move_action(
ItemRef frameRef,
ItemRef actionRef,
int eventType,
int newPosition)
Move an action of an interactive object.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode
@ @param frameRef ItemRef - Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame |
|
actionRef | ItemRef | - | Valid action of frameRef |
eventType | int | - | Destination event type, see here. 0 : leave untouched |
newPosition | int | - | New position in actions list of event. If >=0, the action will moved to the end of the list. |
Make the last "mouse exit" action the first one:
#include "internal/types.h"
int main () { ItemList actions = itemlist::alloc (); ItemRef action = item::alloc ();
if (gRun > 1) return 0;
interactive::get_actions (gFrame, kMouseExitEvt, actions); if (itemlist::length (actions) > 0) { itemlist::get (actions, action, itemlist::length (actions)-1); interactive::move_action(0, action, 0, 0); }
return 0; }
static int remove_action(ItemRef frameRef, ItemRef actionRef)
Delete an action of an interactive object.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode
@ @param frameRef ItemRef - Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame |
|
actionRef | ItemRef | - | Valid action of frameRef |
Delete the last mouse exit action.
#include "internal/types.h"
int main () { ItemList actions = itemlist::alloc (); ItemRef action = item::alloc ();
if (gRun > 1) return 0;
interactive::get_actions (gFrame, kMouseExitEvt, actions); if (itemlist::length (actions) > 0) { itemlist::get (actions, action, itemlist::length (actions)-1); interactive::remove_action(0, action); }
return 0; }
static int get_event(ItemRef frameRef, ItemRef actionRef)
Event, that triggers an interactice objects action.
Name | Type | Default | Description |
Return | int | Triggering event for the given action, see table events. | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame The function has no effect for state objects (multistates). |
actionRef | ItemRef | Valid action of interactive object of frameRef. |
#include "internal/types.h"
int main () { ItemList actions = itemlist::alloc (); ItemRef action = item::alloc (); int e, i;
if (gRun > 1) return 0;
interactive::get_actions (gFrame, kAnyEvt, actions); wlog ("", "%d actions in object %d\n", itemlist::length (actions),   item::getint (gFrame));
for (e = kMouseUpEvt; e < kValidateEvt; e++) { interactive::get_actions (gFrame, e, actions); wlog ("", " %d actions of type %d in object %d\n",   itemlist::length (actions),   e,   item::getint (gFrame)); }
interactive::get_actions (gFrame, kAnyEvt, actions); for (i = 0; i < itemlist::length (actions); i++) { itemlist::get (actions, action, i); wlog ("", "Action %d with UID %d is triggered by event %d\n", i, item::getint (action), interactive::get_event (gFrame, action)); }
return 0; }
static int get_task(ItemRef frameRef, ItemRef actionRef)
Get the task executed by an action.
Name | Type | Default | Description |
Return | int | Task of action, see table Action tasks. | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame The function has no effect for state objects (multistates). |
actionRef | ItemRef | - | Valid action of interactive object of frameRef. |
#include "internal/types.h"
int main () { ItemList actions = itemlist::alloc (); ItemRef action = item::alloc (); int e, i;
if (gRun > 1) return 0;
interactive::get_actions (gFrame, kAnyEvt, actions); wlog ("", "%d actions in object %d\n", itemlist::length (actions),   item::getint (gFrame));
for (e = kMouseUpEvt; e < kValidateEvt; e++) { interactive::get_actions (gFrame, e, actions); wlog ("", " %d actions of type %d in object %d\n",   itemlist::length (actions),   e,   item::getint (gFrame)); }
interactive::get_actions (gFrame, kAnyEvt, actions); for (i = 0; i < itemlist::length (actions); i++) { itemlist::get (actions, action, i); wlog ("", "Action %d with UID %d is triggered by event %d, task %d\n", i, item::getint (action), interactive::get_event (gFrame, action), interactive::get_task (gFrame, action)); }
return 0; }
static int get_task_data(
ItemRef frameRef,
ItemRef actionRef,
int* eventType = 0,
char* eventName = 0,
int* enabled = 0,
char* sval1 = 0,
char* sval2 = 0,
char* sval3 = 0,
char* sval4 = 0,
char* sval5 = 0,
int* ival1 = 0,
int* ival2 = 0,
int* ival3 = 0,
int* ival4 = 0,
int* ival5 = 0,
IDTypeList* lval = 0)
Get the parameter of a task of an action of an interactive object.
The parameters sval1-5, ival1-5 and lval are filled in in dependency of the task performed by the action. Its allowed to set 0 for every variable. The following table describes the event types and their parameters.
Action type | Parameter | Description |
kGoToAnchor (1) : Go to anchor | /span[src]{sval1} | Complete path of destination file |
sval2 | Name of anchor | |
sval3 | PDF-Name of anchor | |
ival1 | Zoom | |
ival2 | UID of anchor | |
kGoToFirstPage (2) : Go to first page | ival1 | Zoom |
kGoToLastPage (3) : Go to last page | ||
kGoToNextPage (4) : Go to next page | ||
kGoToPreviousPage (5) : Go to previous page | ||
kGoToURL (6) : Go to URL | sval1 | URL |
kShowHideFields (7) : Show/Hide buttons | lval | List of [UID, state] entries id1 : UID of push button id2 : 0 (hide), 1 (show) |
kSound (8) : Audio | ival1 | Operation 0 : Play 1 : Stop 2 : Pause 3 : Resume |
ival2 | Sound-UID | |
ival3 | Volume (0-100) | |
ival4 | Synchronous? (0, 1) | |
ival5 | Repeat? (0, 1) | |
kMovie (9) : Video | ival1 | Operation 0 : Play 1 : Stop 2 : Pause 3 : Resume |
ival2 | Movie-UID | |
ival3 | NavigationPointID | |
kAnimation (10) : Animation | ival1 | Operation<> 0 : Play 1 : Stop 2 : Pause 3 : Resume |
ival2 | UID der Animation | |
ival3 | Auto repeat? (0, 1) | |
kGoToPage (11) : Go to page | ival1 | 1-based page number |
ival2 | Zoom | |
kSwitchToMSOState (12) : Go to state kSwitchToNextMSOState (13) : Go to next state kSwitchToPrevMSOState (14) : Go to previous state |
ival1 | UID of state |
ival2 | 0-based index in state | |
ival3 | switchToPriorStateOnRollOff (0, 1) | |
ival4 | loopAtBeginningOrEnd (0, 1) | |
kGoToNextView (15) : Go to next view kGoToPreviousView (16) : Go to previous view |
no parameters | |
kOpenFile (17) : Open file | sval1 | Complete path to file |
kViewZoom (18) : Zoom view | ival1 | Zoom |
kPrintForm (19) : Print form | No additional information necessary, not supported by CS5.5 | |
kSubmitForm (20) : Submit form | sval1 | Ziel-URLto send, not supported by CS5.5 |
kResetForm (21) : Clear form | No additional information necessary | |
kExecJavascript (22) : Execute JavaScript | See here |
ID | Name |
0 | Full screen |
0 | Current zoom |
1 | Actual size |
2 | Fit in window |
3 | Fit width |
4 | Fit visible |
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame The function has no effect for state objects (multistates). |
actionRef | ItemRef | - | Valid action of interactive object of frameRef. |
eventType | int* | 0 | Triggering event of task 0 : ignore |
eventName | String/char* | 0 | Name of task 0 : Name |
enabled | int* | 0 | Task enabled? 0 : nein 1 : yes |
sval1-5 | String/char* | 0 | see above |
ival1-5 | int* | 0 | see above |
lval | IDTypeList | 0 | see above |
#include "internal/types.h"
int main () { ItemList actions = itemlist::alloc (); ItemRef action = item::alloc (); int i, etype, eenabled; char ename [512], sval1 [512];
if (gRun > 1) return 0;
interactive::get_actions (gFrame, kMouseUpEvt, actions); for (i = 0; i < itemlist::length (actions); i++) { itemlist::get (actions, action, i); if (interactive::get_task (gFrame, action) == kSubmitForm) { interactive::get_task_data (gFrame, action, &etype, ename, &eenabled, sval1); wlog ("", "Submit '%s' (%d, '%s', %d)\n", sval1, etype, ename, eenabled); } }
return 0; }
static int set_task_data(
ItemRef frameRef,
ItemRef actionRef,
...)
Change the properties of an formield task.
The function may chenge the current document selection.
Take care to use the task dependent function parameters! To get an actions task you may use get_task. The following table lists the function parameters in dependence of the actions task:
Task | Parameter | Description |
kGoToAnchor (1) : Go to anchor | String/char* | Complete path of destination file |
int | UID of anchor | |
int | Zoom | |
kGoToFirstPage (2) : Go to first page | int | Zoom |
kGoToLastPage (3) : Go to last page | ||
kGoToNextPage (4) : Go to next page | ||
kGoToPreviousPage (5) : Go to previous page | ||
kGoToURL (6) : Go to URL | String/char* | URL of the destination page |
kShowHideFields (7) : Show/hide buttons | IDTypeList | List of button UIDs and their visibility id1 : UID of the button id2 : 0 (invisible), 1 (visible), 2 (Leave unchanged) |
kSound (8) : Audio | int | Operation 0 : Play 1 : Stop 2 : Pause 3 : Rewind |
int | Sound-UID | |
int | Lautstärke (0-100) | |
int | Synchron? (0, 1) | |
int | Automatisch wiederholen? (0, 1) | |
kMovie (9) : Video | int | Operation 0 : Play 1 : Stop 2 : Pause 3 : Rewind |
int | Movie-UID | |
int | NavigationPointID | |
kAnimation (10) : Animation | int | Operation 0 : Play 1 : Stop 2 : Pause 3 : Rewind |
int | UID of animation | |
int | Repeat automatically? (0, 1) | |
kGoToPage (11) : Go to page | int | 1-basierte Page number |
int | Zoom | |
kSwitchToMSOState (12) : Go to status kSwitchToNextMSOState (13) : Go to next status kSwitchToPrevMSOState (14) : Go to previous status |
int | UID of status |
int | 0-based index of the status | |
int | switchToPriorStateOnRollOff (0, 1) | |
int | loopAtBeginningOrEnd (0, 1) | |
kGoToNextView (15) : Go to next view kGoToPreviousView (16) : Go to previous view |
no further parameters | |
kOpenFile (17) : Open file | String/char* | Full path of the file |
kViewZoom (18) : View zoom | int | Zoom |
kPrintForm (19) : Print form | no further parameters | |
kSubmitForm (20) : Send form | String/char* | Target URL for sending the form |
kResetForm (21) : Reset form | no further parameters | |
kExecJavascript (22) : Execute JavaScript | String/char* | Javascript source code. You can find more information here. |
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
frameRef | ItemRef | - | Valid frame reference. If frameRef is not an interactive object, the functions tries to find this object at first. 0 : Current script frame The function has no effect for state objects (multistates). |
actionRef | ItemRef | - | Valid action of interactive object of frameRef. |
... | ... | - | Task specific parameters. See above table. |
#include "internal/types.h"
int main () { ItemRef action = item::alloc (); int result;
if (gRun > 1) return 0;
result = interactive::add_action (gFrame, kMouseUpEvt, kSubmitForm, action); wlog ("", "add action : %d\n", result);
result = interactive::set_task_data (gFrame, action, "ftp://www.sawadee.th/hallo.pdf"); wlog ("", "set_task_data : %d\n", result);
return 0; }
Creating a Javascript action. When the button is clicked, the currently selected item of the popup menu (Combobox) C3 is displayed. The line separators in the display text are encoded with \013 here.
#include "internal/types.h" int main () { ItemRef fr = item::alloc (); ItemRef action = item::alloc (); char * js = "var field = this.getField('C3');\ var selectedIndex = field.currentValueIndices;\ var exportValue = field.getItemAt(selectedIndex);\ var displayValue = field.getItemAt(selectedIndex, false);\ app.alert ('Index : ' + selectedIndex + '\\013Exportvalue : \"' + exportValue + '\"\\013DisplayValue : ' + displayValue + '\"');\ ";
item::define (fr, 0, 221); interactive::add_action (fr, kMouseUpEvt, kExecJavascript, action); interactive::set_task_data (fr, action, js);
return 0; }
Alphabetic index HTML hierarchy of classes or Java