Example #1
0
//////////////////////////////////////////////////////////////
// Track the change for the specified object
//
void MgMapBase::TrackChange(CREFSTRING objectId, bool layer, MgObjectChange::ChangeType type, CREFSTRING param)
{
    if(m_trackChangesDisabled)
        return;

    MG_TRY()

    //check if there is already a changelist for this object. If not, created it
    Ptr<MgChangeList> changeList = (MgChangeList*)m_changeLists->FindItem(objectId);
    if(changeList == NULL)
    {
        changeList = new MgChangeList(objectId, layer);
        if(changeList == NULL)
            throw new MgOutOfMemoryException(L"MgMapBase.TrackChange", __LINE__, __WFILE__, NULL, L"", NULL);

        m_changeLists->Add(changeList);
    }

    //create a change record and adds it to the change list
    Ptr<MgObjectChange> change = new MgObjectChange(type);
    if(change == NULL)
        throw new MgOutOfMemoryException(L"MgMapBase.TrackChange", __LINE__, __WFILE__, NULL, L"", NULL);

    change->SetParam(param);

    changeList->AddChange(change);

    MG_CATCH_AND_THROW(L"MgMapBase.TrackChange")
}