Querying for Specific Specs in a File
Create a filter function to query for specific specs in a file and obtain
the specs in which you are interested.
Use tt_file_objects_query to find all the objects
in the named file. As the ToolTalk service finds each object, it calls your
filter function, and passes it the objid of the object and the two application-supplied
pointers. Your filter function does some computation and returns a Tt_filter_action value (TT_FILTER_CONTINUE
or TT_FILTER_STOP
)
to either continue the query, or to quit the search and return immediately.
Example 12–1 illustrates how to obtain a list of specs.
Example 12–1 Obtaining a List of Specifications
/*
* Called to update the scrolling list of objects for a file. Uses
* tt_file_objects_query to find all the ToolTalk objects.
*/
int
cntl_update_obj_panel()
{
static int list_item = 0;
char *file;
int i;
cntl_objid = (char *)0;
for (i = list_item; i >= 0; i--) {
xv_set(cntl_ui_olist, PANEL_LIST_DELETE, i, NULL);
}
list_item = 0;
file = (char *)xv_get(cntl_ui_file_field, PANEL_VALUE);
if (tt_file_objects_query(file,
(Tt_filter_function)cntl_gather_specs,
&list_item, NULL) != TT_OK) {
xv_set(cntl_ui_base_window, FRAME_LEFT_FOOTER,
“Couldn't query objects for file”, NULL);
return 0;
}
return 1;
}
|
Within the tt_file_objects_query function, the application
calls cntl_gather_specs, a filter function that inserts
objects into a scrolling list. Example 12–2 illustrates how
to insert the objid.
Example 12–2 Inserting the objid
/*
* Function to insert the objid given into the scrolling lists of objects
* for a file. Used inside tt_file_objects_query as it iterates through
* all the ToolTalk objects in a file.
*/
Tt_filter_action
cntl_gather_specs(objid, list_count, acc)
char *objid;
void *list_count;
void *acc;
{
int *i = (int *)list_count;
xv_set(cntl_ui_olist, PANEL_LIST_INSERT, *i,
PANEL_LIST_STRING, *i, objid,
NULL);
*i = (*i + 1);
/* continue processing */
return TT_FILTER_CONTINUE;
}
|