SOLVED (or at least it's a workaround that does what I want)
The Integer type parameter in iPlugAAX.xpp was set up as a continuous parameter with 128 steps and no apparent display text values. I commented out that entire section and moved the INT type down to the BOOL definition.
Doing this created a stepped control (INT) that works in Logic, Reaper and Pro Tools, etc., with SetDisplayText() values showing in the automation lanes.
I will only use BOOL parameter types (that show "On/Off" which corresponds to Logics' apparent "On/Off" forced text for bool) for On/Off controls, NOT controls where I want to specifically identify states such as "Hi/Lo", "Fast/Slow", etc. In those cases I will use the INT type.
The code change I made in iPlugAAX.cpp to do this:
Code:
/* case IParam::kTypeInt:
{
param = new AAX_CParameter<int>(paramID->Get(),
AAX_CString(p->GetNameForHost()),
(int)p->GetDefault(),
AAX_CLinearTaperDelegate<int>((int)p->GetMin(), (int)p->GetMax()),
AAX_CUnitDisplayDelegateDecorator<int>( AAX_CNumberDisplayDelegate<int>(), AAX_CString(p->GetLabelForHost())),
p->GetCanAutomate());
param->SetNumberOfSteps(128);
param->SetType(AAX_eParameterType_Continuous);
break;
}
*/
case IParam::kTypeEnum:
case IParam::kTypeInt: // move to here from above
case IParam::kTypeBool:
{
int nTexts = p->GetNDisplayTexts();
std::map<int, AAX_CString> displayTexts;
for (int j=0; j<p->GetNDisplayTexts(); j++)
{
int value;
const char* text = p->GetDisplayTextAtIdx(j, &value);
displayTexts.insert(std::pair<int, AAX_CString>(value, AAX_CString(text)) );
}
param = new AAX_CParameter<int>(paramID->Get(),
AAX_CString(p->GetNameForHost()),
(int)p->GetDefault(),
AAX_CStateTaperDelegate<int>((int)p->GetMin(), (int)p->GetMax()),
AAX_CStringDisplayDelegate<int>(displayTexts),
p->GetCanAutomate());
param->SetNumberOfSteps(nTexts);
param->SetType(AAX_eParameterType_Discrete);
break;
}