]> Shamusworld >> Repos - architektonas/blobdiff - src/container.cpp
Whitespace changes. :-P
[architektonas] / src / container.cpp
index 6050f3217b73ecea8f7bb33ef63df8ec77d740d4..b3f7347c541897395a192c9b4e26f029226f11d6 100644 (file)
@@ -1,3 +1,4 @@
+//
 // container.cpp: Container object
 //
 // Part of the Architektonas Project
@@ -19,7 +20,6 @@
 #include "dimension.h"
 #include "painter.h"
 
-
 Container::Container(Vector p1, Object * p/*= NULL*/): Object(p1, p),
        isTopLevelContainer(false),
        dragging(false), draggingHandle1(false), draggingHandle2(false),
@@ -29,7 +29,6 @@ Container::Container(Vector p1, Object * p/*= NULL*/): Object(p1, p),
        state = OSInactive;
 }
 
-
 // Copy constructor
 Container::Container(const Container & copy): Object(copy.position, copy.parent)
 {
@@ -39,13 +38,11 @@ Container::Container(const Container & copy): Object(copy.position, copy.parent)
        state = OSInactive;
 }
 
-
 Container::~Container()
 {
        Clear();
 }
 
-
 // Assignment operator
 Container & Container::operator=(const Container & from)
 {
@@ -66,7 +63,6 @@ printf("Container: Copying object $%08X...\n", *i);
        return *this;
 }
 
-
 /*virtual*/ void Container::Draw(Painter * painter)
 {
        QRectF boundary;
@@ -91,13 +87,11 @@ printf("Container: Copying object $%08X...\n", *i);
        }
 }
 
-
 /*virtual*/ Vector Container::Center(void)
 {
        return position;
 }
 
-
 /*
  We need at least *three* handles for this object:
  - one for moving
@@ -111,7 +105,6 @@ I click here and drag there?"
 Also: should put the snap logic into the Object base class (as a static method)...
 */
 
-
 // Need to add checking here for clicking on a member of a group (Container),
 // and checking for if it's a top level container (the DrawingView's document).
 /*
@@ -123,12 +116,13 @@ having to ungroup them first (like Inkscape).
 /*virtual*/ bool Container::Collided(Vector point)
 {
        objectWasDragged = false;
-//     Vector v1 = position - point;
-
        bool collision = false;
+       lastObjectClicked = NULL;
 
-       // NOTE that this deletes the object on mouse down instead of mouse up. Have to
-       // check to see how it feels to do it that way...
+       // NOTE that this deletes the object on mouse down instead of mouse up.
+       // Have to check to see how it feels to do it that way...
+       // N.B.: This only works because the toolAction is not set, &
+       //       Object::ignoreClicks isn't set either...
        if (deleteActive)
        {
                for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end();)
@@ -149,7 +143,11 @@ printf("Container::Collided: Deleting object ($%X)\n", *i);
                for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
                {
                        if ((*i)->Collided(point))
+                       {
                                collision = true;
+                               lastObjectClicked = *i;
+//printf("Container::Collided: lastObjectClicked = %X\n", lastObjectClicked);
+                       }
                }
        }
 
@@ -196,9 +194,10 @@ class so that we can leverage that stuff here as well.
 // into parts and keep subdividing until an acceptable number of objects lie within
 // the slice. This way, the GUI will still be responsive and *not* have to test
 // every object for collision.
-/*virtual*/ void Container::PointerMoved(Vector point)
+/*virtual*/ bool Container::PointerMoved(Vector point)
 {
        std::vector<Object *>::iterator i;
+       lastObjectHovered = penultimateObjectHovered = NULL;
 
        if (!isTopLevelContainer)
        {
@@ -210,7 +209,7 @@ class so that we can leverage that stuff here as well.
                        else
                                state = OSInactive;
 
-                       return;
+                       return false;
                }
 
                // No need to do any checking if we're already selected...
@@ -248,20 +247,24 @@ class so that we can leverage that stuff here as well.
                        needUpdate = true;
                }
 
-               return;
+               return false;
        }
 
        for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
        {
 //             if (objects[i]->GetState() == OSSelected)
-               (*i)->PointerMoved(point);
+               if ((*i)->PointerMoved(point))
+               {
+                       penultimateObjectHovered = lastObjectHovered;
+                       lastObjectHovered = *i;
+               }
        }
 
        // Generic container doesn't need this???
 //     needUpdate = false;
+       return (lastObjectHovered == NULL ? false : true);
 }
 
-
 /*virtual*/ void Container::PointerReleased(void)
 {
        if (!isTopLevelContainer)
@@ -292,7 +295,6 @@ have to worry about keeping track of old states...
                (*i)->PointerReleased();
 }
 
-
 /*virtual*/ bool Container::NeedsUpdate(void)
 {
        // If this is *not* a top level container, then we treat it as an
@@ -313,14 +315,12 @@ have to worry about keeping track of old states...
        return false;
 }
 
-
 /*virtual*/ void Container::Add(Object * object)
 {
        objects.push_back(object);
 printf("Container: Added object (=$%X). size = %li\n", object, objects.size());
 }
 
-
 /*virtual*/ QRectF Container::Extents(void)
 {
        QRectF bounds;
@@ -331,7 +331,6 @@ printf("Container: Added object (=$%X). size = %li\n", object, objects.size());
        return bounds;
 }
 
-
 void Container::Delete(Object * objectToDelete)
 {
        std::vector<Object *>::iterator i = objects.begin();
@@ -349,7 +348,6 @@ void Container::Delete(Object * objectToDelete)
        }
 }
 
-
 void Container::DeleteSelectedItems(void)
 {
        std::vector<Object *>::iterator i = objects.begin();
@@ -366,7 +364,6 @@ void Container::DeleteSelectedItems(void)
        }
 }
 
-
 void Container::Clear(void)
 {
        std::vector<Object *>::iterator i = objects.begin();
@@ -379,21 +376,18 @@ printf("Container: Deleting object ($%X)...\n", *i);
        }
 }
 
-
 void Container::SelectAll(void)
 {
        for(unsigned int i=0; i<objects.size(); i++)
                objects[i]->state = OSSelected;
 }
 
-
 void Container::DeselectAll(void)
 {
        for(unsigned int i=0; i<objects.size(); i++)
                objects[i]->state = OSInactive;
 }
 
-
 int Container::ItemsSelected(void)
 {
        int selected = 0;
@@ -405,7 +399,6 @@ int Container::ItemsSelected(void)
        return selected;
 }
 
-
 Object * Container::SelectedItem(unsigned int index)
 {
        unsigned int selectedIndex = 0;
@@ -424,7 +417,6 @@ Object * Container::SelectedItem(unsigned int index)
        return NULL;
 }
 
-
 void Container::MoveContentsTo(Container * newContainer)
 {
        // Sanity check
@@ -442,7 +434,6 @@ void Container::MoveContentsTo(Container * newContainer)
        objects.clear();
 }
 
-
 void Container::CopyContentsTo(Container * newContainer)
 {
        // Sanity check
@@ -454,7 +445,6 @@ void Container::CopyContentsTo(Container * newContainer)
                newContainer->Add((*i)->Copy());
 }
 
-
 void Container::MoveSelectedContentsTo(Container * newContainer)
 {
        // Sanity check
@@ -476,7 +466,6 @@ void Container::MoveSelectedContentsTo(Container * newContainer)
        }
 }
 
-
 void Container::CopySelectedContentsTo(Container * newContainer)
 {
        // Sanity check
@@ -491,7 +480,6 @@ void Container::CopySelectedContentsTo(Container * newContainer)
        }
 }
 
-
 void Container::ResizeAllDimensions(double newSize)
 {
        for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
@@ -503,7 +491,6 @@ void Container::ResizeAllDimensions(double newSize)
        }
 }
 
-
 /*virtual*/ void Container::Enumerate(FILE * file)
 {
        // Only put "CONTAINER" markers if *not* the top level container
@@ -519,7 +506,6 @@ void Container::ResizeAllDimensions(double newSize)
                fprintf(file, "ENDCONTAINER\n");
 }
 
-
 /*virtual*/ Object * Container::Copy(void)
 {
 #warning "!!! This doesn't take care of attached Dimensions !!!"
@@ -537,14 +523,12 @@ 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++)
@@ -554,14 +538,12 @@ same reference number.
        }
 }
 
-
 /*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++)
@@ -571,7 +553,6 @@ same reference number.
        }
 }
 
-
 /*virtual*/ void Container::Save(void)
 {
        Object::Save();
@@ -580,7 +561,6 @@ same reference number.
                (*i)->Save();
 }
 
-
 /*virtual*/ void Container::Restore(void)
 {
        Object::Restore();
@@ -588,4 +568,3 @@ same reference number.
        for(std::vector<Object *>::iterator i=objects.begin(); i!=objects.end(); i++)
                (*i)->Restore();
 }
-