Tinderbox v9 Icon

Setting an attribute to re-enable inheritance via code

Once an attribute has been explicitly set (i.e. not via inheritance) to a non-default value, Tinderbox inheritance no longer occurs. This is deliberate, the rationale being that the user wants that note's attribute to retain the value; maintaining inheritance might cause the user-set value to be unintentionally over-written.

This can catch out the new user when prototypes are in use. One of the strengths of prototypes is that a change to the prototype is instantly imposed on all notes using that prototype except where a note's attribute has been explicitly changed.

A very simplistic example might be where a prototype sets note $Color, e.g. 'blue'. If the user sets a note using the prototype to $Color 'green', if the prototype's $Color is then changed to 'red' all the other note's using the prototype will go red, but not the one explicitly changed to green. Many new users would expect them all to go red.

So, fine if the user wanted to take an attribute out of the inheritance stream. But, what if it was a mistake? In the above scenario, if the user reset the changed note's $Color back to 'blue' would inheritance re-occur? No. That is because whilst the inherited colour is 'green', an explicitly set value is still seen as an explicitly set (i.e. non-inherited) value even if the same as the notional inherited value.

An easy way to confirm if an attribute value for a particular note is inherited or not is to view the attribute either as a Displayed Attribute or in the note's Get Info/Attributes tab (Cmd+Opt+i). Attributes being inherited are listed in normal weight text and those locally set in the note are shown in bold text.

How is inheritance re-enabled?

The trick is to set the attribute value to no value, something you cannot do by typing into a value input box (e.g. as in displayed Displayed Attributes). There are several approaches that can be used and which may appeal to different users' styles of work. The resetting process can be done in a number of ways:

Method 1: Use the Inspector (works for all currently selected items)

To change a single attribute for all selected note(s):

To change a multiple attributes, repeat the above process for each attribute in turn.

Method 2: Use Info view (works for current single item only)

To change a single attribute for a single note:

To change a multiple attributes, repeat the above process for each attribute in turn.

Method 3: Use Code (in an attribute or stamp)

Code can be run as a $Rule or $AgentAction or within a stamp.

To set any data-type of attribute to its inherited value:

$MyAttribute=; 

Note that no quotes are used around the semicolon. The above is not the same as simply setting a string to empty or a number to zero. Why? Because the latter is simply setting that value locally and thus still blocking inheritance.

If needing to reset a long list of attributes, consider using a list and loop.

Method 4: Use menu 'normal' options

A number of menus, pop-ups and context menus for setting values have a 'normal' item at the top of their value listing. For example, this can be seen with menus for setting $Color or $Badge (see example). In any of these, clicking the 'normal' option will reset the local attribute to re-inherit values.