void DocumentMarkerController::removeMarkers(DocumentMarker::MarkerTypes markerTypes) { if (!possiblyHasMarkers(markerTypes)) return; ASSERT(!m_markers.isEmpty()); // outer loop: process each markered node in the document MarkerMap markerMapCopy = m_markers; MarkerMap::iterator end = markerMapCopy.end(); for (MarkerMap::iterator i = markerMapCopy.begin(); i != end; ++i) removeMarkersFromList(i->first.get(), i->second, markerTypes); m_possiblyExistingMarkerTypes.remove(markerTypes); }
void Sdf_MarkerUtils<Spec>::SetMarkers( Spec* owner, const MarkerMap& markers) { // Explicitly check permission here to ensure that any editing operation // (even no-ops) trigger an error. if (not owner->PermissionToEdit()) { TF_CODING_ERROR("Set %s: Permission denied", _MarkerPolicy::GetMarkerDescription()); return; } // Validate all connection paths; we don't want to author any changes if // an invalid path exists in the map. TF_FOR_ALL(newMarker, markers) { const SdfAllowed isValidPath = _MarkerPolicy::IsValidConnectionPath(newMarker->first); if (not isValidPath) { TF_CODING_ERROR("Set %s: %s", _MarkerPolicy::GetMarkerDescription(), isValidPath.GetWhyNot().c_str()); return; } } // Replace all markers; clear out all current markers and add in new // markers from the given map. SdfChangeBlock block; const SdfPathVector markerPaths = GetMarkerPaths(*owner); TF_FOR_ALL(oldPath, markerPaths) { if (markers.find(*oldPath) == markers.end()) { ClearMarker(owner, *oldPath); } } TF_FOR_ALL(newMarker, markers) { SetMarker(owner, newMarker->first, newMarker->second); }