From: Chris C. <ca...@al...> - 2002-11-24 09:53:37
|
I've just wasted some time trying to work up a nice generic way of=20 merging one file (of any supported type) into the current=20 composition, and have ended up realising not only that the subject is=20 rather problematic but also that our current MIDI file merge is=20 somewhat broken too. The problem is in the Studio. At the moment the Composition and the=20 Studio both belong to a document. When we load a file, at the=20 moment, we generate a new Composition and then swap its contents into=20 the document's existing Composition. For the Studio stuff, however,=20 we always just refer to the document's Studio from the outset. So=20 for example in MIDI file import and merge, one of the first things we=20 do is clear the document's Studio's instruments in preparation for=20 replacing them with the new file's instruments. When we're merging,=20 of course, we don't want to do that. I can fix that for MIDI merge,=20 but: My scheme for generic merging was initially based on the wrong=20 assumption that a Studio belonged to a Composition, not a document. =20 So I started writing a merge method into Composition=20 ("mergeFrom(const Composition &)") that looked at the MIDI program=20 values for the instruments in the other Composition and from them=20 assigned new instruments in its own Studio in order to create new=20 Tracks to copy the other Composition's data into. This obviously=20 can't work because the Composition turns out not to own the Studio. =20 Either the merge method will have to be in the document class=20 ("mergeFrom(const RosegardenGUIDoc &)"), which will cause=20 difficulties because we do not at the moment create a new document=20 when we load something, or else we have to assume that we're happy=20 for the file we're merging in to blast the current Studio, or else we=20 have to modify all of the file load methods so that they can be told=20 that they're merging and not clear out the Studio in that case. Obviously the second of these is unsatisfactory, but the question is:=20 should we take this as an opportunity to do file load correctly (i.e.=20 with a new document, instead of this idiotic=20 create-new-Composition-and-swap() crap that we do at the moment), or=20 shall we continue with that shitty old hack but instead add some=20 logic to all of the file load methods so that they know they're doing=20 a merge and so not to blitz the Studio before they begin? Nah, that's what I thought. Chris |