Reference Implementation
Window Logic
Set reference MessageRef to $cinst.$objs.MessagePane.$bobjs.iMessage
Calculate HeightRemainder as $cinst.$height-MessageRef.$height
Calculate NewHeight as tStringFields.$getWindowFieldHeightForAvailWidth(
MessageRef.$fieldstyle,
iMessage,
MessageRef.$width
)
Calculate NewHeight as NewHeight+HeightRemainder
Core Method
Calculate Height as $cinst.$getWindowFieldHeight(pFieldStyle)
Calculate LinesToAdd as 0
Calculate bitmapWidth as 18
Calculate TokenString as pText
While pos(chr(27),TokenString)>0
Calculate styleSubString as mid(TokenString,pos(chr(27),TokenString))
Calculate styleSubString as mid(styleSubString,1,pos(chr(35),styleSubString))
If asc(styleSubString,2)=kEscBmp
Calculate bmpCount as bmpCount+$cinst.$replace(TokenString,styleSubString,'',TokenString)
Else
Calculate TokenString as replaceall(TokenString,styleSubString,'')
End If
End While
Calculate Token as strtok(nam(TokenString),kCr)
While len(TokenString)>0|len(Token)>0
If len(Token)=0
Calculate LinesToAdd as LinesToAdd+1
Else
Calculate TokenWidth as $cinst.$getWindowFieldWidth(pFieldStyle,Token)+bmpCount*bitmapWidth
Calculate LinesToAdd as LinesToAdd+int(TokenWidth/pAvailWidth)+1
End If
Calculate Token as strtok(nam(TokenString),kCr)
End While
Quit method Height*LinesToAdd
Notes
- Handles styles and bitmaps
- Accurate wrapping
- Requires one call per field