//--------------------------------------------------------------------------------------- void ImoTreeAlgoritms::remove_staffobj(Document* pDoc, ImoStaffObj* pSO) { //get and save relations vector<ImoId> relIds; ImoRelations* pRels = pSO->get_relations(); if (pRels) { list<ImoRelObj*>& relations = pRels->get_relations(); if (relations.size() > 0) { list<ImoRelObj*>::iterator it; for (it = relations.begin(); it != relations.end(); ++it) { relIds.push_back( (*it)->get_id() ); } } } //delete object ImoInstrument* pInstr = pSO->get_instrument(); pInstr->delete_staffobj(pSO); //ask relations to reorganize themselves if (relIds.size() > 0) { vector<ImoId>::iterator itV; for (itV = relIds.begin(); itV != relIds.end(); ++itV) { ImoRelObj* pRO = static_cast<ImoRelObj*>( pDoc->get_pointer_to_imo(*itV) ); if (pRO) pRO->reorganize_after_object_deletion(); } } }