| Project: | Mori |
| Version: | 1.6.11 |
| Component: | User interface |
| Category: | feature |
| Priority: | normal |
| Assigned: | Unassigned |
| Status: | active |
Description
Edit lock and step-child adoption: Original/Alias inheritance should not be implicitly bidirectional for edits and children.
While assigning children to or editing an original entry should be reflected by all its aliases, the propagation throughout the tree of similar changes may not make sense when made to an alias. To that end, aliases should have a lock icon (or similar) to enable editing to the original (and hence to all aliases) and aliases should each maintain their own children unless those "step-children" are adopted by the original (and hence by all aliases). Adoption should be a menu option or button from within the alias's child. A global preference to unlock all and force adoption would preserve the current behavior for those who wouldn't like what I'm suggesting.
Basically, I'm advocating for a more OOP-like inheritance (i.e. downward) with tools to allow in-place modification of parent classes from within derived classes instead of that being the default behavior.
An example of the sort of thing I'd like to do:
Story Notebook
{
Title { "Collared Greens" }
Mike { "Twenty something Mechanic" }
Murderer { "traumatized by broccoli as a child" }
Scenario Mike is Murderer
{
*Mike
{
*Murderer
}
}
Scenario Mike is not Murderer
{
*Mike
{
Three Mile Farmland { "Grew up on farm near nuclear reactor." }
}
*Murderer
}
}
but this won't work in Mori currently because trying to add Three Mile Farmland to *Mike in the second case will make it appear as a child in the first, plus *Murderer as a child of *Mike in the first makes it his child in the second as well (so a contradictory structure containing *Murderer twice). Here is the structure as it appears in Mori 1.6.11:
Story Notebook
{
Title { "Collared Greens" }
Mike { "Twenty something Mechanic" }
Murderer { "traumatized by broccoli as a child" }
Scenario Mike is Murderer
{
*Mike
{
Three Mile Farmland { "Grew up on farm near nuclear reactor." }
*Murderer
}
}
Scenario Mike is not Murderer
{
*Mike
{
Three Mile Farmland { "Grew up on farm near nuclear reactor." }
*Murderer
}
*Murderer
}
}
which doesn't mean at all what I want it to. Note also that Three Mile Farmland, added as an entry to *Mike in the second case does not appear to be an alias in the first, but editing/deleting either does so to the other, so they are linked.