I've tried drilling down in teh AM code to get to currentToolOptions but it's an OBJECTTYPE - which I don't know how to turn into an actionreference
This is what I've got so far:
var str = "";
var topLevelObject = "application";
str += "Top Level Object: " + topLevelObject + "\n";
var r = new ActionReference ();
r.putEnumerated (stringIDToTypeID (topLevelObject), stringIDToTypeID ("ordinal"), stringIDToTypeID ("targetEnum"));
var d = executeActionGet (r);
var str = topLevelObject + " properties:\n";
var q = " - ";
for (var i = 0; i < d.count; i++)
{
str += typeIDToStringID(d.getKey(i)) + ':' + d.getType(d.getKey(i)) + "\n";
}
str += "\nDescriptor:\n";
var secondLayerObject = "currentToolOptions"; //Objecttpe
//currentToolOptions:DescValueType.OBJECTTYPE
str += secondLayerObject + "\n"
r = new ActionReference();
r.putEnumerated(stringIDToTypeID(secondLayerObject), stringIDToTypeID("object"), stringIDToTypeID("targetEnum"));
d = executeActionGet(r); // failes here
for (var i = 0; i < d.count; i++)
{
str += typeIDToStringID(d.getKey(i)) + q + d.getType(d.getKey(i)) + "\n";
}
alert(str);
Edited 2025-01-01
I included a check to enable/disable the setting depending on its current state.
// enable or disable pressure for size depending on the current setting;
// 2025, use it at your own risk;
try {var ref = new ActionReference();
ref.putEnumerated( charIDToTypeID("capp"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var applicationDesc = executeActionGet(ref);
var enabled = applicationDesc.getObjectValue(stringIDToTypeID("currentToolOptions")).getBoolean(stringIDToTypeID("usePressureOverridesSize"));
if (enabled == false) {setCTO([["usePressureOverridesSize", true]], true)}
else {setCTO([["usePressureOverridesSize", false]], true)};
} catch (e) {};
/*
<javascriptresource>
<name>Switch Sample Mode</name>
<enableinfo>true</enableinfo>
<category>Hirlin Scripts</category>
</javascriptresource>
// Oleksii Hirlin 2021
*/
function getCTO(){
var ref = new ActionReference();
ref.putProperty(stringIDToTypeID("property"), stringIDToTypeID("currentToolOptions"));
ref.putEnumerated(stringIDToTypeID("application"), stringIDToTypeID("ordinal"), stringIDToTypeID("targetEnum"));
return executeActionGet(ref).getObjectValue(stringIDToTypeID("currentToolOptions"));
};
// setting currentToolOptions with options array
function setCTO( options, isIdTypeString ){
var desc = new ActionDescriptor();
var ref = new ActionReference();
ref.putClass( stringIDToTypeID( app.currentTool ) );
desc.putReference( stringIDToTypeID( "target" ), ref );
// getting current tool options so that they do not get reset
var ctoObj = getCTO();
// check if we are setting the eyedropper tool
if ( app.currentTool=="eyedropperTool" ){
ctoObj.putInteger( stringIDToTypeID( options[0][0] ), options[0][1] );
} else {
// iteration through options array and putting booleans into cto descriptor
for (var i=0; i < options.length; i++){
if (isIdTypeString==true){
ctoObj.putBoolean( stringIDToTypeID( options[i][0] ), options[i][1] );
} else {
ctoObj.putBoolean( charIDToTypeID( options[i][0] ), options[i][1] );
}
}
}
desc.putObject( stringIDToTypeID( "to" ), stringIDToTypeID( "currentToolOptions" ), ctoObj );
executeAction( stringIDToTypeID( "set" ), desc, DialogModes.NO );
};