X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Futils.cpp;h=02d6b20ef9c6fe977aa9efe5de0a4f5e6e70baa7;hb=e78daf62eb771ee29a59035d16cf63c1e6ebe144;hp=12f7146ad4418ea74d145074847981b562c81651;hpb=0fcc2d879e1e0ca17eeaceae2159f5143a06586f;p=architektonas diff --git a/src/utils.cpp b/src/utils.cpp index 12f7146..02d6b20 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -90,6 +90,25 @@ Object * CopyObject(Object * obj) } +void MoveSelectedObjectsTo(std::vector & dest, std::vector & from) +{ + std::vector::iterator i = from.begin(); + + while (i != from.end()) + { + Object * obj = (Object *)(*i); + + if (obj->selected) + { + dest.push_back(*i); + from.erase(i); + } + else + i++; + } +} + + void AddObjectsTo(std::vector & dest, std::vector & from) { for(std::vector::iterator i=from.begin(); i!=from.end(); i++) @@ -106,6 +125,38 @@ void ClearSelected(std::vector & v) } +void SelectAll(std::vector & v) +{ + std::vector::iterator i; + + for(i=v.begin(); i!=v.end(); i++) + ((Object *)(*i))->selected = true; +} + + +// +// Recursively go down thru the Container's vectors, deleting all the objects +// contained therein. Once that is done, the main Container can be deleted. We +// don't have to worry about the underlying std::vectors, as they have their +// own destructors--plus they don't take ownership of objects, which is why we +// have to keep track of that stuff ourselves. :-P Believe it or not, this is a +// Good Thing(TM). ;-) +// +void DeleteContents(std::vector & v) +{ + std::vector::iterator i; + + for(i=v.begin(); i!=v.end(); i++) + { + Object * obj = (Object *)(*i); + + if (obj->type == OTContainer) + DeleteContents(((Container *)obj)->objects); + + delete obj; + } +} + void DeleteSelectedObjects(std::vector & v) { std::vector::iterator i = v.begin(); @@ -125,6 +176,26 @@ void DeleteSelectedObjects(std::vector & v) } +// +// This is used to remove selected objects from one container in order to move +// them to a different container. +// +void RemoveSelectedObjects(std::vector & v) +{ + std::vector::iterator i = v.begin(); + + while (i != v.end()) + { + Object * obj = (Object *)(*i); + + if (obj->selected) + v.erase(i); + else + i++; + } +} + + void SavePointsFrom(std::vector & v, std::vector & save) { save.clear(); @@ -156,3 +227,21 @@ void RestorePointsTo(std::vector & v, std::vector & s) } +void TranslateObject(Object * obj, Point delta) +{ + if (obj->type == OTContainer) + { + Container * c = (Container *)obj; + std::vector::iterator i; + + for(i=c->objects.begin(); i!=c->objects.end(); i++) + TranslateObject((Object *)*i, delta); + } + else + { + obj->p[0] += delta; + obj->p[1] += delta; + } +} + +