I think most is covered but a couple of extra observations.
Issue #1
Consider ‘locking’ the affected notes.containers that must not move. Lock state is stored in $Lock, which is easily set via the Properties Inspector’s More tab or via a stamp.
When a note is locked the following cannot be altered:
- map position ($Xpos, $Ypos)
- size ($Height, $Width)
It is still possible to alter colour, shape, etc., just not the above. For locked containers (note or agent) in addition:
- title bar height is fixed ($TitleHeight) , i.e. title area vs. viewport area split
- you can’t drag the child map within the viewport.
- you can’t drag items out of the viewport (i.e. promote the to the current map)—though you can drop items onto the viewport and they are moved to the child map.
Important note: locked items don’t show re-size handles (duh - they can’t be re-sized) but this can confuse as they are perhaps the most obvious indication of selected items in map view.
Dragging a locked item causes the whole map to move, i.e. as if click-dragging the background map.
Issue #3
Aside from the “how do you re-trigger…?” aspect, a few notes. An undefined attribute name in $DisplayedAttributes will cause that name to be used in the Displayed Attributes table (and Get Info) in light grey:
How to find these, or to check if any have crept in unnoticed? IOW, as a periodic check. Well, we know they will be in the Displayed Attributes of (some) notes. So (tested in v9.1.0, FWIW):
$MyDAList == values("DisplayedAttributes");
Give us all attributes (defined or not) in use via Displayed Attributes. We can also check for an attribute’s category (i.e. group) like so:
$MyString = attribute("MyList")["category"];
… returns sandbox. An undefined attribute’s name returns nothing. So we can do this:
$MyList=;
values("DisplayedAttributes").each(anAttr){
if(attribute(anAttr)["category"]==""){
$MyList += anAttr;
}
};
$MyList now contains the names of any undefined Displayed Attributes. By chaining .each()
to the output of values()
(which we know returns a Set-type list) we avoid needing another attribute or variable in the code. Here I used a List for the result; it arrives as a Set, though here the difference does not matter. However, we do know the result may be more than one item plus we need it in an attribute so we can do things with it, like use $MyList’s value(s) to:
- find notes using that
- use the Inspector to define a suitable user attribute
In which order you do the two probably depends on the whether the (undefined) attribute name(s) indicate their purpose or not. If not, looking at the notes via which they arrived might help.