+ id.program_number = PBD::atoi(number);
+ }
+ }
+}
+
+
+int
+Patch::set_state (const XMLNode& node, int /*version*/)
+{
+ assert(node.name() == "Patch");
+ _number = node.property("Number")->value();
+ _name = node.property("Name")->value();
+ XMLNode* commands = node.child("PatchMIDICommands");
+
+ if (commands) {
+ initialize_primary_key_from_commands(_id, commands);
+ } else {
+ string program_change = node.property("ProgramChange")->value();
+ assert(program_change.length());
+ assert(_bank);
+ assert(_bank->patch_primary_key());
+ if ( _bank && _bank->patch_primary_key() ) {
+ _id.msb = _bank->patch_primary_key()->msb;
+ _id.lsb = _bank->patch_primary_key()->lsb;
+ _id.program_number = PBD::atoi(program_change);