|
|
|
dev:loading_the_studio_or_other_partial_documents_from_xml [2018/02/07 16:07] |
dev:loading_the_studio_or_other_partial_documents_from_xml [2022/05/06 16:07] (current) |
| | [[http://sourceforge.net/mailarchive/message.php?msg_name=200707191038.26906.cannam%40all-day-breakfast.com|Mail archive link]] |
| | <code> |
| | |
| | Unlike our XML export code, which is located within the particular class being |
| | exported, we only have one single large XML import class (RoseXmlHandler, in |
| | src/document/) which reads a complete document in one go. |
| | |
| | In cases where we only need to import part of a document -- for example, when |
| | importing a .rgd device file, which consists of just the studio element from |
| | a .rg file -- we do it by importing the file as if it were a complete |
| | document, into a new RosegardenGUIDoc object, and then copying the devices we |
| | need from the imported document to the current one as appropriate. The |
| | plugin case would be quite similar to that, I expect. |
| | |
| | You can see an example of this logic in the interaction of BankEditorDialog |
| | (src/gui/studio) and ImportDeviceDialog (src/dialogs -- don't ask why these |
| | two related dialogs are in different parts of the source tree, it's probably |
| | a reorganisational mistake). The former calls doImport on the latter, which |
| | calls importFromRG if the source is a .rgd file, and this function |
| | (ImportDeviceDialog::importFromRG) does what I just described -- it loads a |
| | complete document from the .rgd file, and then copies the device and bank |
| | structures from it into local data members which are subsequently queried |
| | using the various get...() methods by BankEditorDialog. |
| | |
| | Note also that RosegardenGUIDoc::openDocument doesn't care whether the file |
| | it's loading is plain or gzipped XML. |
| | |
| | </code> |
| |