Attributes that are intrinsic to all objects and thus not inherited, or shared, by aliases.
While most attributes are inherited from prototypes, a few attributes are intrinsic, i.e. their values apply to specific notes and are not inherited via prototypes or aliases. For example, $Xpos and $Ypos are not inherited (because moving a prototype should not move notes that happen to use the prototype!). $Width and $Height are also not inherited, but note changes allowing one-time setting of height and width on first applying a prototype. If they were, then resizing a prototype might in turn resize notes that inherit from that prototype—perhaps covering other notes or disrupting a complex map. A separate case is an attribute like $RuleDisabled for prototypes, for controlling scope of action code execution as explained under disabling action inheritance.
There are few examples:
- $Xpos
- $Ypos
- $Height
- $Width
- $Container
- $ID
- $OutlineOrder
- $OutlineDepth
- $SiblingOrder
- $DisplayExpressionDisabled
- $RuleDisabled
- $TimelineBand
- $Searchable
- $EdictDisabled
- $Flags
- $InboundLinkCount
- $OutboundLinkCount
See a full listing of intrinsic attributes: be aware that many read-only system attributes are also intrinsic. Whether a note is intrinsic or not is also noted on the Document Inspector's System tab. It can also be verified in the TBX document's XML.
User attributes are never intrinsic and cannot be made so.
Aliases can show a discrete $DisplayName but it can only be set via conditional Display Expression code. Simply using the Text Inspector's Title sub-tab's $DisplayExpression input box with non-conditional code always sets both the original's and all aliases' $DisplayName to the same value.
For an alias to use a different $DisplayName from its original or other aliases (in different containers), the conditional code needs to identify the context of the note in scope. This is most easily done by looking at an attribute of the note's parent as this is always discrete to the individual original or alias. Using data stored in the parent's attribute(s) is also a neat way for the conditional code to insert different values in different branches of the expression's code.
Intrinsic attributes are also significant if setting attribute values of a note via an alias, such as in an agent's action. If it is necessary to use values from the original note and not the alias, then code should use 'original' designator. Thus, in an agent action:
$Xpos = 4;
…sets the $Xpos of the alias currently being processed. To make the action set the attribute in the original of the alias, use:
$Xpos(original) = 4;
You might want to set both the alias and original values, in which case, this also works:
$Xpos = 4;$Xpos(original) = $Xpos;
Of course, for all non-intrinsic attributes, setting the attribute in the alias also sets it for the original and using the original designator is not required (though it would still work if you used it by mistake).
The intrinsic status of an attribute is not inheritable.