]> Shamusworld >> Repos - architektonas/blobdiff - src/container.cpp
Added mouse wheel zoom.
[architektonas] / src / container.cpp
index 77d1771416d47ae112be9c1e74fd5d663a408200..6050f3217b73ecea8f7bb33ef63df8ec77d740d4 100644 (file)
@@ -22,7 +22,8 @@
 
 Container::Container(Vector p1, Object * p/*= NULL*/): Object(p1, p),
        isTopLevelContainer(false),
-       dragging(false), draggingHandle1(false), draggingHandle2(false)//, needUpdate(false)
+       dragging(false), draggingHandle1(false), draggingHandle2(false),
+       hit(false)//, needUpdate(false)
 {
        type = OTContainer;
        state = OSInactive;
@@ -53,22 +54,12 @@ Container & Container::operator=(const Container & from)
                return *this;
 
        Clear();
-
-       // Small problem with this approach: if the copied object goes out of scope,
-       // all of the objects we copied in here will be deleted. D'oh!
-       // For this COPY constructor to be meaningful, we have to actually COPY the
-       // objects in this Container, not just MOVE a copy of the POINTER! D-:
        std::vector<Object *>::const_iterator i;
 
-//     for(uint i=0; i<from.objects.size(); i++)
        for(i=from.objects.begin(); i!=from.objects.end(); i++)
        {
-//             Object * object = from.objects[i];
+printf("Container: Copying object $%08X...\n", *i);
                Object * object = (*i)->Copy();
-
-               // Need to actually COPY the object here, not copy the pointer only!!
-               // (which we do now, above :-P)
-
                objects.push_back(object);
        }
 
@@ -441,7 +432,6 @@ void Container::MoveContentsTo(Container * newContainer)
                return;
 
        // Shuffle the contents of this container to the new one
-//     for(unsigned int i=0; i<objects.size(); i++)
        for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
        {
                newContainer->Add(*i);
@@ -453,6 +443,18 @@ void Container::MoveContentsTo(Container * newContainer)
 }
 
 
+void Container::CopyContentsTo(Container * newContainer)
+{
+       // Sanity check
+       if (newContainer == NULL)
+               return;
+
+       // Shuffle the contents of this container to the new one
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+               newContainer->Add((*i)->Copy());
+}
+
+
 void Container::MoveSelectedContentsTo(Container * newContainer)
 {
        // Sanity check
@@ -475,6 +477,21 @@ void Container::MoveSelectedContentsTo(Container * newContainer)
 }
 
 
+void Container::CopySelectedContentsTo(Container * newContainer)
+{
+       // Sanity check
+       if (newContainer == NULL)
+               return;
+
+       // Copy the contents of this container to the new one
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+       {
+               if ((*i)->state == OSSelected)
+                       newContainer->Add((*i)->Copy());
+       }
+}
+
+
 void Container::ResizeAllDimensions(double newSize)
 {
        for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
@@ -520,3 +537,55 @@ same reference number.
        return c;
 }
 
+
+/*virtual*/ void Container::Rotate(Point point, double angle)
+{
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+               (*i)->Rotate(point, angle);
+}
+
+
+/*virtual*/ void Container::RotateSelected(Point point, double angle)
+{
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+       {
+               if ((*i)->state == OSSelected)
+                       (*i)->Rotate(point, angle);
+       }
+}
+
+
+/*virtual*/ void Container::Mirror(Point p1, Point p2)
+{
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+               (*i)->Mirror(p1, p2);
+}
+
+
+/*virtual*/ void Container::MirrorSelected(Point p1, Point p2)
+{
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+       {
+               if ((*i)->state == OSSelected)
+                       (*i)->Mirror(p1, p2);
+       }
+}
+
+
+/*virtual*/ void Container::Save(void)
+{
+       Object::Save();
+
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+               (*i)->Save();
+}
+
+
+/*virtual*/ void Container::Restore(void)
+{
+       Object::Restore();
+
+       for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
+               (*i)->Restore();
+}
+