Hi All,

> I would like everyone interested to step back from the nuts and bolts a bit,
> and try to come to terms about what the user interface for this feature
> would look like.

My initial thoughts were that the linked segment functionality might appear 
much like - for example - Muse's "clone" functionality:

 * When copy-pasting a segment there could be two options for the paste - 
"paste as copy" or "paste as link" so an extra edit menu item, maybe a choice 
dialog when doing a paste, or an extra key combo when doing a paste or a 
segment control-drag (alt-drag or ctrl-shift-drag for creating a linked segment 
perhaps, ctrl-shift-V for doing a linked paste perhaps, whatever doesn't 
trample on existing key combinations I guess)
 * The linked segments would behave and display identically. Any edit to any 
one of them automagically happens to all of the others.
 * An unlink edit menu item would be necessary for deep copying the data to the 
segment, analogous to the "turn repeats into copies" function which already 
exists.

That's how I imagined a "simple" implementation to appear to the user. This 
would cover the "Frère Jacques" and possibly "Pachelbel's Canon" use cases, and 
quite a lot of loop based sequencing cases for electronic music. It excludes 
linked segment stretch/squashes or transpositions.

However...

Now being aware of triggered segments, and encouraged by Chris' post the other 
day, I'm severely tempted by the possibilities of being able to do more cool 
stuff with linked segments - transposing them, stretch/squashing them, 
inverting them even!

Let's imagine for a moment that we've done a great job refactoring the 
triggered segment code for reuse in both the linked and triggered segment 
cases, all the object ownership and lifecycle issues properly sorted out etc... 

I imagine we'd still need the interface additions I described above in my 
"simple" case. I *think* you could get the transpose function interface for 
free by dint of the "Transpose" edit box in the Segment Parameters pane. Same 
with stretch/squash, you already have graphical resizing of segments, so for a 
linked segment the stretch/squash could be applied there. Problem being I 
suppose how do you choose whether the transformation was applied to the link or 
the underlying segment? Maybe you don't, maybe you make a rule that 
transformations are applied to links only. If you want to apply a transposition 
to the underlying segment, you have to open it up in an editor and move the 
notes. If you want to stretch/squash the underlying segment, you have to open 
up the editor and rewrite the segment with notes of different lengths. I think 
this is defensible.

What about note edits when a segment is linked? Say you have a linked segment 
which has been transposed and stretched. You open it up in the notation editor, 
I think you should see the notes after the transformations have been applied. 
Can you edit the notes directly in the transformed view and expect the 
underlying segment to be adjusted appropriately? Possible, but perhaps fiddly. 
How about for linked segments which have transformations applied you split the 
edit view to show the transformed and untransformed views simultaneously? Or 
make an action in the linked segment edit view to open up the underlying 
segment in a separate view? Either way, edits to be made to the underlying 
segment view would be immediately reflected in the transformed view - the 
transformed view's notes being uneditable directly.

To be honest, being so fresh to the code I feel like I'm giving Mario Andretti 
driving advice here! I hope some of those suggestions make some sense though.

Cheers,

Ian.


      


------------------------------------------------------------------------------

_______________________________________________
Rosegarden-devel mailing list
[email protected] - use the link below to unsubscribe
https://lists.sourceforge.net/lists/listinfo/rosegarden-devel

Reply via email to