//------------------------------------------------------------------------------- //------------------------------------------------------------------------------- SPErr PIUGetInfoByIndex(uint32 index, DescriptorClassID desiredClass, DescriptorKeyID desiredKey, void * returnData, void * returnExtraData) { SPErr error = kSPNoError; PIActionReference reference = NULL; PIActionDescriptor result = NULL; PIActionDescriptor * data; if (returnData == NULL) error = kSPBadParameterError; if (error) goto returnError; error = sPSActionReference->Make(&reference); if (error) goto returnError; if (desiredKey) { error = sPSActionReference->PutProperty(reference, classProperty, desiredKey); if (error) goto returnError; } error = sPSActionReference->PutIndex(reference, desiredClass, index); if (error) goto returnError; error = sPSActionControl->Get(&result, reference); if (error) goto returnError; if (desiredKey) { error = PIUGetSingleItemFromDescriptor(result, desiredKey, returnData, returnExtraData); if (error) goto returnError; } else { data = (PIActionDescriptor *)returnData; *data = result; result = NULL; } returnError: if (reference != NULL) sPSActionReference->Free(reference); if (result != NULL) sPSActionDescriptor->Free(result); return error; }
//------------------------------------------------------------------------------- //------------------------------------------------------------------------------- SPErr PIUGetBackgroundInfo(DescriptorKeyID desiredKey, void * returnData, void * returnExtraData) { SPErr error = kSPNoError; PIActionReference reference = NULL; PIActionDescriptor result = NULL; PIActionDescriptor * data; if (returnData == NULL) error = kSPBadParameterError; if (error) goto returnError; error = sPSActionReference->Make(&reference); if (error) goto returnError; error = sPSActionReference->PutProperty(reference, classBackgroundLayer, keyBackground); if (error) goto returnError; error = sPSActionReference->PutEnumerated(reference, classDocument, typeOrdinal, enumTarget); if (error) goto returnError; error = sPSActionControl->Get(&result, reference); if (error) goto returnError; if (desiredKey) { error = PIUGetSingleItemFromDescriptor(result, desiredKey, returnData, returnExtraData); if (error) goto returnError; } else { data = (PIActionDescriptor *)returnData; *data = result; result = NULL; } returnError: if (reference != NULL) sPSActionReference->Free(reference); if (result != NULL) sPSActionDescriptor->Free(result); return error; }
//------------------------------------------------------------------------------- // // GetActionInfo // // This gets all the keys that the classAction and classActionSet // //------------------------------------------------------------------------------- SPErr GetActionInfo(char* logfilename) { PIActionDescriptor result = NULL; uint32 setCounter = 1; int32 actionSetCount, actionsInSet; SPErr error = kSPNoError; DescriptorTypeID typeID = 0; DescriptorTypeID actionTypeID = 0; sPSActionControl->StringIDToTypeID("Getting Action Set Info", &typeID); sPSActionControl->StringIDToTypeID("Getting Action Info", &actionTypeID); while (setCounter) { // the action stuff doesn't work so well // try to get information out of each set until we fail // then exit gracefully error = PIUGetInfoByIndex(setCounter, classActionSet, 0, &result, 0); if (error) { error = 0; break; } PIUDumpDescriptor(typeID, result, logfilename); //this should give me the same answer error = PIUGetSingleItemFromDescriptor(result, keyCount, &actionSetCount, NULL); // redudancy check for my sanity, yep it works the same. error = sPSActionDescriptor->GetInteger(result, keyCount, &actionSetCount); if (error) goto returnError; // looks like it is not counting itself actionSetCount++; //this should give me the same answer error = PIUGetSingleItemFromDescriptor(result, keyNumberOfChildren, &actionsInSet, NULL); // redudancy check for my sanity, yep it works the same. error = sPSActionDescriptor->GetInteger(result, keyNumberOfChildren, &actionsInSet); if (error) goto returnError; if (result) sPSActionDescriptor->Free(result); result = NULL; for (int32 counter = 1; counter <= actionsInSet; counter++) { error = PIUGetInfoByIndexIndex(counter, setCounter, classAction, classActionSet, 0, &result, NULL); PIUDumpDescriptor(actionTypeID, result, logfilename); if (result) sPSActionDescriptor->Free(result); result = NULL; } setCounter++; } returnError: if (result) sPSActionDescriptor->Free(result); return (error); }