Integer lists.
Here you will find examples to use list.
Integer lists. The lists can be be filled either with the object IDs of the list panels (e.g. the Product Pool) or 'manually'.
static List alloc(
int classid,
int selection_type = 0,
int id_index = 1)
Get the object list of the panel which contains the objects of the desired classid. If no corresponding panel is found, 0 is returned. Otherwise the list will be filled with the desired IDs of the loaded objects. The result list must be deleted again using list::release.
[ab v3.3 R3136] InDesign® removes all list entries from invisible panels. It's a mess to refill the list again. But, if we have the data, we can use them. So list::alloc
still works for invisible panels too now.
ATTENTION : But take care! This will work for kAll and kEyeMarked only. Invisible lists still don't have a selection,
so kSelected still returns an empty list!
Name | Type | Default | Description |
Return | List | Created list of the 0 | |
classid | int | - | Class ID of the panel The following panels are supported:
|
selection_type | int | kAll | kAll : All datasets of the panel kEyeMarked : Only the eye marked datasets of the panel kSelected : Selected panel entries only |
id_index | int | 1 | Which IDs are to be fetched? 1 = ID, 2 = ID2, 3 = ID3 |
Create a list with the IDs of the marked products
#include "internal/panels.h"
List li = list::alloc ((kPanelProducts, kEyeMarked, 1);
static List alloc()
Create a new empty list. The list must be deleted again using list::release.
Name | Type | Default | Description |
Return | List | Created list or 0 |
Create a new empty list
List = list::alloc (); : list::release (li);
Export all odd pages of the current document to a PDF.
int main() { List pnums = list::alloc (); int p;
for (p = 0; p < document::pages (); p += 2) { list::append (pnums, p); }
document::pdf_export (0, "$DESKTOP/aaa.pdf", "", 2, pnums);
return 0; }
static int release(List li)
Delete a created list again using list::alloc
Name | Type | Default | Description |
li | List | - | List to be deleted |
static int length(List li)
Ascertain the number of elements of a list
Name | Type | Default | Description |
Return | int | Number of entries in the list | |
li | List | - | List |
int len = list::length (li);
static int first(List li)
Get the first entry of a non-empty list
Name | Type | Default | Description |
Return | int | First value of the list | |
li | List | - | List with at least one element |
The following example can be used for lists that have no 0-entry.
int main () { List li = list::alloc (); int i;
for (i=1; i<6; i++) list::insert (li, 3*i); for (i=list::first (li); i; i=list::next (li)) { showmessage ("%d", i); } list::release (li); }
static int next(List li)
Get the next entry in a list.
Name | Type | Default | Description |
Return | int | Next value of the list | |
li | List | - | List with at least one element after the current list pointer |
The following example can be used for lists that have no 0-entry.
int main () { List li = list::alloc (); int i;
for (i=1; i<6; i++) list::insert (li, 3*i); for (i=list::first (li); i; i=list::next (li)) { showmessage ("%d", i); } list::release (li);
static int prev(List li)
Get the previous entry in the list.
Name | Type | Default | Description |
Return | int | Value of the preceding entry in the list | |
li | List | - | List with at least one element after the current list pointer |
The following example can be used for lists that have no 0-entry.
int main () { List li = list::alloc (); int i;
for (i=1; i<6; i++) list::insert (li, 3*i); for (i=list::last (li); i; i=list::prev (li)) { showmessage ("%d", i); } list::release (li); }
static int last(List li)
Get the last entry in a non-empty list
Name | Type | Default | Description |
Return | int | First value of the list Wert der Liste | |
li | List | - | List with all least one element |
The following example can be used for lists that have no 0-entry.
int main () { List li = list::alloc (); int i;
for (i=1; i<6; i++) list::insert (li, 3*i); for (i=list::last (li); i; i=list::prev (li)) { showmessage ("%d", i); } list::release (li);
static int get_pos(
List li,
int val,
int setPos = 0)
Search for the position of a value in the list. If the value is not found, the function returns -1. List positions are 0-based, meaning the first element has the position 0, the last the position-1.
Name | Type | Default | Description |
Return | int | >= 0 : First occurrence of the value in the list -1 : Value not found |
|
li | List | - | List in which the value is to be searched for |
val | int | - | This value is searched for |
setPos | int | 0 | 0 : Do not change list positions 1 : Set current list positions at place of finding |
pos = list::get_pos (li, val [, setPos]);
static int get(
List li,
int pos,
int doSelect= 0)
Get the i-te element of the list. List positions are 0-based, meaning the first element has the position 0, the last the position-1.
Name | Type | Default | Description |
Return | int | Value of the list at the position i or -1 | |
li | List | - | List from which the element is to be fetched |
pos | int | - | 0-based list position |
setPos | int | 0 | 0 : Do not change list positions 1 : Set list position to pos |
k = list::get (li, pos [, setPos]);
static int append(List li, int val)
Append elements to the list
Name | Type | Default | Description |
Return | int | 1 action successful, 0 otherwise | |
li | List | - | List to which the append to be made |
val | int | - | Value to be appended |
list::append (li, k);
static int insert(
List li,
int val,
int pos = -1)
Insert element in the list. List positions are 0-based, meaning the first element has the position 0, the last the position-1.
Name | Type | Default | Description |
Return | int | 1 Action successful, 0 otherwise | |
li | List | - | List to which the append to be made |
val | int | - | Value to be appended |
pos | int | - | Insert point. 0 = list start, Value < 0 or >= length = append |
list::insert (li, 3, 0);
static int remove(
List li,
int val,
int rmAll = 1)
All occurrences of a value will be removed from the list. Since R1396 (26.6.2009) you can remove the first entry only by setting the new parameter rmAll to 0.
Name | Type | Default | Description |
Return | int | 1 action successful, 0 otherwise | |
li | List | - | List to which the append is to be made |
val | int | - | Value which is to be removed from the list |
rmAll | int | - | Delete one or all entries of the given value 1 : remove all 0 : remove first (if) |
The example illustrates the functioning of remove and remove_pos
int main () { int i; List li = list::alloc ();
for (i=1; i< 6; i++) list::append (li, i); list::insert (li, 2);
for (i=0; i< list::length (li); i++) { // 123452 showmessage ("1:%d", i+1, list::get (li, i)); }
list::remove_pos (li, 3); for (i=0; i< list::length (li); i++) { // 12352 showmessage ("2:%d", i+1, list::get (li, i)); }
list::remove (li, 2); for (i=0; i< list::length (li); i++) { // 135 showmessage ("3:%d", i+1, list::get (li, i)); }
list::release (li); }
static int remove_pos(List li, int pos)
Remove a position from the list. List positions are 0-based, meaning the first element has the position 0, the last the position-1.
Name | Type | Default | Description |
Return | int | 1 action successful, 0 otherwise | |
li | List | - | List |
pos | int | - | 0-based delete position |
The example illustrates the functioning of remove and remove_pos
int main () { int i; List li = list::alloc ();
for (i=1; i< 6; i++) list::append (li, i); list::insert (li, 2);
for (i=0; i< list::length (li); i++) { // 123452 showmessage ("1:%d", i+1, list::get (li, i)); }
list::remove_pos (li, 3); for (i=0; i< list::length (li); i++) { // 12352 showmessage ("2:%d", i+1, list::get (li, i)); }
list::remove (li, 2); for (i=0; i< list::length (li); i++) { // 135 showmessage ("3:%d", i+1, list::get (li, i)); }
list::release (li); }
static int clear(List li)
Remove all elements of the list
Name | Type | Default | Description |
Return | int | 1 action successful, 0 otherwise | |
li | List | - | Liste |
list::clear (li);
static int reload(long classid, long reloadAll = 0)
Reload the data records of a panel list. To reload the complete list, set reloadAll to 1. If you want only to update the linkbuttons of the list(s), you can use the command placeholder::update_link_states.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
classid | int | - | Palettennummer specified by Werk II 0 - update all open panels |
reloadAll | int | 0 | Reload complete list? 0 : No, only reload list entries 1 : Yes, reload the complete list |
Reload the panel 'Product Pool'
err_code = list::reload (3);
static int classid(List li)
ClassID of the list entries. Using this class will initialise the list (list::alloc).
Name | Type | Default | Description |
Return | int | 0 or ClassID. | |
li | List | - | Lists the class ID of which is to be ascertained |
static int index(List li)
Which IDs are contained in the list. The list is updated with this value.
Name | Type | Default | Description |
Return | int | 0 : Undefined 1 : ID 2 : ID2 3 : ID3 |
|
li | List | - | List the index type of which is to be ascertained |
static int complete(List li)
Does the list contain all the IDs of the panel, or only the selected entries?
Name | Type | Default | Description |
Return | int | 0 : Only selected entries 1 : All entries of the panel |
|
li | List | - | List |
static char* gettext(
List li,
long index,
char* attribute,
char* result)
Get the value of the list element. The requestable elements are dependent on the ClassID of the list.
If the list was created as to be a panel list (alloc with ClassID) only its class id, selection type and length are used. The results are taken from panel directly, not from the current list content.
If the list was created as to be a common list, the given attribute is ignored and the result is taken from the list.
Palette | ClassId | Name | Type |
Product pool | kPanelProducts | ID | int |
ID2 | int | ||
ID3 | int | ||
StringID, STRINGID and since v3.1 R1800 with postfix 1, 2, 3 for Multi-StringIDs | char* | ||
Num | char* | ||
Name | char* | ||
Depth | int | ||
ClassID | int | ||
ImageID | int | ||
StatementID | int | ||
HasPlacement | int | ||
DocID | int | ||
Masterpage | char* | ||
Grid | char* | ||
GridElement | char* | ||
GridID | int | ||
GridElementID | int | ||
PageitemID, template of product | int | ||
Previews | kPanelPreviews | ID | int |
ID2 | int | ||
ID3 | int | ||
StringID, STRINGID and since v3.1 R1800 with postfix 1, 2, 3 for Multi-StringIDs | char* | ||
Key | int | ||
Key2 | int | ||
Key3 | int | ||
MyClassID | int | ||
ToDelete | int | ||
Width | int | ||
Height | int | ||
Resolution | int | ||
BitDepth | int | ||
Path | char* | ||
FileName | char* | ||
Format | char* | ||
Column1 | char* | ||
Column2 | char* | ||
Column3 | char* | ||
Text | char* | ||
ImageAlign | int | ||
ImageSize | float | ||
ClipIndex | int | ||
ClipFlags | int | ||
ClipToFrame | int | ||
ClipTolerance | float | ||
ClipMinPathsize | float | ||
ClipInset | float | ||
AlphaIndex | int | ||
AlphaChannel | string | ||
Templates | kPanelPageitems | ID | int |
ID2 | int | ||
ID3 | int | ||
ToDelete | int | ||
Name | char* | ||
Type | char* | ||
Mandant | char* | ||
State | char* | ||
Description | char* | ||
Left | float | ||
Top | float | ||
Right | float | ||
Bottom | float | ||
Page Templates | kPanelPageTemplates | ID | int |
Name | char* | ||
Activated | int | ||
PageType | int | ||
Oposite | int | ||
Successor | int | ||
Masterpages | int | ||
Docu | char* | ||
BackLayers | char* | ||
PageScript | int | ||
Publikationen | kPanelPublications | see Publications-Tags, at this point only the panel specific tags are sensfull of course. It' allowed to use parent. tags here. |
Name | Type | Default | Description |
Return | String or char* | (Depends on parameter result) Attribute value or empty. The result is a pointer to result. When type of result is char* the pointer must have adequate allocated memory (char[100], alloc (100)). | |
li | List | - | List The following panles are supported:
|
index | int | - | 0-based list index. The index depends on how the list was allocated (kAll, kEyeMarked, kSelected), see here. |
attribute | String or char* | - | Attributname int and float values are converted into strings automatically. If you want get int or float values, use getint resp getfloat instead of gettext. |
result | String or char* | - | Reserved memory for the result. |
The example shows the StringID for every product marked with the "eye".
int main () { char s1[512]; List prod = list::alloc (3,1,1); int i = 0;
for (i=0; i<list::length (prod); i++) { list::gettext (prod, i, "StringID", s1);
showmessage (s1); }
return 0; }
static int getint(
List li,
long index,
char* attribute)
Get the value of a list element as an integer. The requestable elements are dependent on the ClassID of the list. If the attribute contains a text value, the result of the call is undefined.
If the list was created as to be a panel list (alloc with ClassID) only its class id, selection type and length are used. The results are taken from panel directly, not from the current list content.
If the list was created as to be a common list, the given attribute is ignored and the result is taken from the list.
Name | Type | Default | Description |
Return | int | Attribute value | |
li | List | - | List The following panles are supported:
|
index | int | - | 0-based list index. The index depends on how the list was allocated (kAll, kEyeMarked, kSelected), see here. |
attribute | String or char* | - | name of attribute. You should only take values marked in the above list above list as to be int Other values may cause InDesign to crash! |
static float getfloat(
List li,
long index,
char* attribute)
Get the value of a list element as a decimal. The requestable elements are dependent on the ClassID of the list. If the attribute contains a text value, the result of the call is undefined.
If the list was created as to be a panel list (alloc with ClassID) only its class id, selection type and length are used. The results are taken from panel directly, not from the current list content.
If the list was created as to be a common list, the given attribute is ignored and the result is taken from the list.
Name | Type | Default | Description |
Return | float | Attribute value | |
li | List | - | List The following panles are supported:
|
index | int | - | 0-based list index. The index depends on how the list was allocated (kAll, kEyeMarked, kSelected), see here. |
attribute | String or char* | - | name of attribute. You should only take values marked in the above list above list as to be float Other values may cause InDesign to crash! |
static int open_tree(int panel, int depth)
Open all entries of a panel.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
panel | int | - | What list to open? kPanelProducts (=3) : Product pool No more panels supported for now! To get the panelIDs, use the include #include "internal/panels.h". |
depth | int | - | Maximum depth 0 : Close all entries -1 : Open entries one level -2 : Open entries like deepest level -3 : Open all entries -4 : Close all entries othwise : Open all entries up to this level. Already opened entries of lower levels are kept open. |
static int get_autoload(int classID = 3)
Is the "autoload"-Button of the requested panel activated or not? The function only supports the ProductPool panel (classID 3). Otherwise 1 is returned. Under InDesign® Server the fucntion returns 1.
Name | Type | Default | Description |
Return | int | 1 : Yes, the button is activated (red), classIDs not equal 3, InDesign® Server 0 : No |
|
classID | int | 3 | ClassID of requested panel. Only the product pool (classID 3) is supported for now. |
static int set_autoload(int classID = 3, int newState = 1)
Set the "autoload"-Button of the requested panel. The function only supports the Product Pool panel (classID 3). For all other panels and under InDesign® Server the functions does nothing.
Name | Type | Default | Description |
Return | int | Old state | |
classID | int | 3 | ClassID of requested panel. Only the product pool (classID 3) is supported for now. |
newState | int | 1 | new state 0 : inactive (gray) 1 : active (green) |
static char* to_xml(List list, char* rootElementName = "integers")
Generate a XML structure of a List object.
If you think about using this function, you might be interested in further information about cscript / java interaction. Related information can be found here.
Name | Type | Default | Description |
Return | char * | xml string or 0 on errors. The result string is valid until the next time a to_xml function is called and must not be changed or released. | |
list | List | - | object |
rootElementName | String or char* | integers | name of the root element |
static List from_xml(char* xml)
Create a List object from a xml structure.
If you think about using this function, you might be interested in further information about cscript / java interaction. Related information can be found here.
Name | Type | Default | Description |
Return | List | object of type List. This list must be released using productlist::release. | |
xml | String or char* | - | xml structure |
static int add_all(
List target,
List src,
int deleteFromSource)
Append all elements from list src to list target. If deleteFromSource is non-zero, all elements are removed from source list. (but not deleted)
Name | Type | Default | Description |
Return | int | 0 oder Fehlercode. | |
target | List - | target list | |
src | List - | source list | |
deleteFromSource | 0 | delete elements from source |
static int sort(List li, int direction = 0)
Sort a list.
Name | Type | Default | Description |
Return | int | 0 or ErrorCode | |
li | List | - | List to sort |
direction | int | 0 | sort direction 0 : ascent 1 : descent |
int main () { List li = list::alloc (); int åi;
list::insert (li, 12); list::insert (li, 20); list::insert (li, 9); list::insert (li, 3); list::insert (li, 42);
wlog ("", "sort ascent\n"); list::sort (li); for (i = 0; i < list::length (li); i++) wlog ("", "%d\t%d\n", i+1, list::get (li, i)); wlog ("", "\n\n");
wlog ("", "sort descent\n"); list::sort (li, 1); for (i = 0; i < list::length (li); i++) wlog ("", "%d\t%d\n", i+1, list::get (li, i)); wlog ("", "\n\n");
return 0; }
The following example can be used for list which have no 0-entry.
int main () { List li = list::alloc (); int i;
for (i=1; i<6; i++) list::insert (li, 3*i);
for (i=list::first (li); i; i=list::next (li)) { showmessage ("%d", i); } list::release (li); }
The following example too can be used for lists that have no 0-entry. Because the lists here are created as ID lists of the panel Product Pool, it is secured : The list plugins only contain entries the first ID of which is > 0.
int main () { List li, li2, li3; int id, id2, id3;
li = list::alloc (3, 0, 1);// All IDs li2 = list::alloc (3, 0, 2);// All ID2s li3 = list::alloc (3, 0, 3);// All ID3s
if (!li || !li2 || !li3) { showmessage ("'Product pool not opened."); return 1; }
id = list::first (li); id2 = list::first (li2); id3 = list::first (li3); while (id) { showmessage ("ID=(%d, %d, %d", id, id2, id3);
id = list::next (li); id2 = list::next (li2); id3 = list::next (li3); }
list::release (li); list::release (li2); list::release (li3); }
The third example functions for user-defined lists
int main () { List li = list::alloc (); int i; int val;
for (i = 1; i < 6; i++) list::insert (li, 3*i); for (i = 0; i < list::length (li); i++) { val = list::get (li, i) showmessage ("%d", val); } list::release (li); }
The following example illustrates the functioning of remove and remove_pos
int main () { int i; List li = list::alloc ();
for (i=1; i< 6; i++) list::append (li, i); list::insert (li, 2);
for (i=0; i< list::length (li); i++) { // 123452 showmessage ("1:%d", i+1, list::get (li, i)); }
list::remove_pos (li, 3); for (i=0; i< list::length (li); i++) { // 12352 showmessage ("2:%d", i+1, list::get (li, i)); }
list::remove (li, 2); for (i=0; i< list::length (li); i++) { // 135 showmessage ("3:%d", i+1, list::get (li, i)); }
list::release (li); }
Alphabetic index HTML hierarchy of classes or Java