Thanks for the feedback. I was away in Greece for a week, then catching up, or I would have replied sooner.
As for clicking thru to the Roles, I've asked a few people, and this seems to be preferred, and of course NORMA works in a similar way. I will try to set it up like that. How does this sound: for binaries or bigger, you have on each role's context menu three new items:
-- Add a role [to the left of / below] this role --(I'd try to get this wording to adjust appropriately and automatically)
-- Add a role [to the right of / above] this role
-- Remove this role
For a unary, you'd have just the first two of these.
I'll assume for the moment that's all doable. My question now is, how do we want the connections to behave? (BTW, yes it's true, the "adjustable" f.t.s don't lose connections, whether you add or subtract roles. That's because the roles are all there, hidden or shown. But that leaves all the connection points active; which is what we're trying to avoid, by taking a different approach. Unfortunately, in this new approach we have to decide, and specify, each connection we want to be there post-adjustment :-/ This approach is doable only with VB, not with shape-sheets...)
There are connection-points at certain positions around the role-boxes: some are the usual, mid-side points for role-connectors. There are connection-points at the corners of role-boxes, also, where two role-boxes meet. (External constraints might connect there.) And we've got rows of connection-points for internal uniqueness constraints: 4 rows for a quaternary f.t. or bigger, 3 rows for a ternary, and 1 row for a binary (0 rows for a unary. So, we lose some internal-UC-connection-points when removing roles from a quaternary or smaller.) How about this behavior:
-- When adding a role, retain all the internal-U.C. connections on the roles already there. (This may, of course, cause a U.C. to span the new role when the user dis\d not intend that... but I think less often than not.)
-- Also when adding a role, keep all connections to the existing role-boxes, except for these situations:
---- Connections to the corner of a role-box should not be retained when a role has been inserted between this role and the other that was sharing that corner
---- Connections to an "end" of the fact type must be moved, if that connection-point was eliminated by adding a role-box to that end; in this situation, the connector must be moved to the top or bottom mid-point of its role-box
-- When removing a role, re-glue things to connection-points retained; don't re-glue anything that was glued to a connection-point now lost. Connections to a role-corner that was shared with a role now removed, should *not* be re-glued.
Does this sound reasonable? Any cases that it doesn't cover? Any other suggestions for improvement?