std::vector<Staff *> Measure::GetFirstStaffGrpStaves(ScoreDef *scoreDef) { assert(scoreDef); std::vector<Staff *> staves; std::vector<int>::iterator iter; std::vector<int> staffList; // First get all the staffGrps AttComparison matchType(STAFFGRP); ArrayOfObjects staffGrps; ArrayOfObjects::iterator staffGrpIter; scoreDef->FindAllChildByComparison(&staffGrps, &matchType); // Then the @n of each first staffDef for (staffGrpIter = staffGrps.begin(); staffGrpIter != staffGrps.end(); ++staffGrpIter) { StaffDef *staffDef = dynamic_cast<StaffDef *>((*staffGrpIter)->GetFirst(STAFFDEF)); if (staffDef) staffList.push_back(staffDef->GetN()); } // Get the corresponding staves in the measure for (iter = staffList.begin(); iter != staffList.end(); ++iter) { AttNIntegerComparison matchN(STAFF, *iter); Staff *staff = dynamic_cast<Staff *>(this->FindChildByComparison(&matchN, 1)); if (!staff) { // LogDebug("Staff with @n '%d' not found in measure '%s'", *iter, measure->GetUuid().c_str()); continue; } staves.push_back(staff); } if (staves.empty()) LogDebug("Empty @staff array"); return staves; }
StaffDef *ScoreDef::GetStaffDef( int n ) { StaffDef *staffDef = NULL; this->ResetList( this ); ListOfObjects* childList = this->GetList(this); ListOfObjects::iterator iter; for (iter = childList->begin(); iter != childList->end(); ++iter) { staffDef = dynamic_cast<StaffDef*>(*iter); if (staffDef && (staffDef->GetN() == n) ) { return staffDef; } } return staffDef; }