home *** CD-ROM | disk | FTP | other *** search
- /*
- File: SelectoramaScripting.c
-
- Copyright 1996 by Adobe Systems, Inc.
-
- C source file for scripting functions for Selectorama example.
- */
-
- #include "Selectorama.h"
-
- /*****************************************************************************/
-
- /* Checks the parameters against scripting-returned parameters, if any, and
- updates our parameters to match ones given to us by the scripting system. */
-
- Boolean ReadScriptParams (GPtr globals)
- {
- PIReadDescriptor token = NULL;
- DescriptorKeyID key = NULLID;
- DescriptorTypeID type = NULLID;
- double percent = 0;
- const double minValue = kPercentMin, maxValue = kPercentMax;
- unsigned long percentUnitPass = unitPercent;
- OSType x = typeNull;
- DescriptorKeyIDArray array = { keyShape, keyChannels, keyCreate, NULLID };
- int32 flags = 0;
- OSErr gotErr = noErr, stickyError = noErr;
- Boolean returnValue = true;
-
- if (DescriptorAvailable())
- { /* playing back. Do our thing. */
- token = OpenReader(array);
- if (token)
- {
- while (PIGetKey(token, &key, &type, &flags))
- {
- switch (key)
- {
- case keyArea:
- PIGetEnum(token, &x);
- gWhatArea = KeyToEnum(x, typeSelect);
- break;
- case keyAmount: // optional
- PIGetPinUnitFloat(token, &minValue, &maxValue, &percentUnitPass, &percent);
- gPercent = (short)percent;
- break;
- case keyChannels:
- PIGetEnum(token, &x);
- gWhatChannels = KeyToEnum(x, typeComposite);
- break;
- case keyCreate:
- PIGetEnum(token, &x);
- gCreate = KeyToEnum(x, typeCreate);
- break;
- }
- }
-
- stickyError = CloseReader(&token); // closes & disposes.
-
- if (stickyError)
- {
- if (stickyError == errMissingParameter) // missedParamErr == -1715
- ;
- /* (descriptorKeyIDArray != NULL)
- missing parameter somewhere. Walk IDarray to find which one. */
- else
- gResult = stickyError;
- }
- }
- returnValue = PlayDialog();
- /* return TRUE if want to show our Dialog */
- }
- return returnValue;
- }
-
- /*****************************************************************************/
-
- /* Writes our parameters to the scripting system. */
-
- OSErr WriteScriptParams (GPtr globals)
- {
- PIWriteDescriptor token = NULL;
- double percent = gPercent;
- OSErr gotErr = noErr;
-
- if (DescriptorAvailable())
- { /* recording. Do our thing. */
- token = OpenWriter();
- if (token)
- {
- PIPutEnum(token,
- keyArea,
- typeSelect,
- EnumToKey(gWhatArea, typeSelect));
- if (gWhatArea == iSelectRandom)
- PIPutUnitFloat(token, keyAmount, unitPercent, &percent);
- PIPutEnum(token,
- keyChannels,
- typeComposite,
- EnumToKey(gWhatChannels, typeComposite));
- PIPutEnum(token,
- keyCreate,
- typeCreate,
- EnumToKey(gCreate, typeCreate));
- gotErr = CloseWriter(&token); /* closes and sets to dialog optional */
- /* done. Now pass handle on to Photoshop */
- }
- }
- return gotErr;
- }
-
- /*****************************************************************************/
- /* Takes the property units and returns a corresponding enumerated number */
-
- short KeyToEnum (OSType key, OSType whatType)
- {
- switch (whatType)
- {
- case typeSelect:
- switch (key)
- {
- case selectMin:
- return iSelectMin;
- break;
- case selectMax:
- return iSelectMax;
- break;
- case selectRandom:
- return iSelectRandom;
- break;
- }
- break;
- case typeComposite:
- switch (key)
- {
- case useTarget:
- return iUseTarget;
- break;
- case useMerged:
- return iUseMerged;
- break;
- }
- break;
- case typeCreate:
- switch (key)
- {
- case createSelection:
- return iCreateSelection;
- break;
- case createMaskpath:
- return iCreateMaskpath;
- break;
- case createLayer:
- return iCreateLayer;
- break;
- }
- break;
- case typePISel:
- switch (key)
- {
- case createSelection:
- return piSelMakeMask;
- break;
- case createMaskpath:
- return piSelMakeWorkPath;
- break;
- case createLayer:
- return piSelMakeLayer;
- break;
- }
- break;
- }
- }
-
- /*****************************************************************************/
- /* Takes the property enumeration and returns the corresponding key */
-
- OSType EnumToKey (short keyEnum, OSType whatType)
-
- {
- switch (whatType)
- {
- case typeSelect:
- switch (keyEnum)
- {
- case iSelectMin:
- return selectMin;
- break;
- case iSelectMax:
- return selectMax;
- break;
- case iSelectRandom:
- return selectRandom;
- break;
- }
- case typeComposite:
- switch (keyEnum)
- {
- case iUseTarget:
- return useTarget;
- break;
- case iUseMerged:
- return useMerged;
- break;
- }
- break;
- case typeCreate:
- switch (keyEnum)
- {
- case iCreateSelection:
- return createSelection;
- break;
- case iCreateMaskpath:
- return createMaskpath;
- break;
- case iCreateLayer:
- return createLayer;
- break;
- }
- break;
- }
- }