Example #1
0
//---------------------------------------------------------------------------------------
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();
        }
    }
}