X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fcontainer.cpp;h=77d1771416d47ae112be9c1e74fd5d663a408200;hb=11cff81f10ccca1b31288fce04d696e715b922b0;hp=757828aad73e064af821d04816807a82fa93702a;hpb=70297ac8ec7453e4196f4b58056bcfe4b04f2aca;p=architektonas diff --git a/src/container.cpp b/src/container.cpp index 757828a..77d1771 100644 --- a/src/container.cpp +++ b/src/container.cpp @@ -25,6 +25,7 @@ Container::Container(Vector p1, Object * p/*= NULL*/): Object(p1, p), dragging(false), draggingHandle1(false), draggingHandle2(false)//, needUpdate(false) { type = OTContainer; + state = OSInactive; } @@ -34,6 +35,7 @@ Container::Container(const Container & copy): Object(copy.position, copy.parent) // Use overloaded assignment operator *this = copy; type = OTContainer; + state = OSInactive; } @@ -54,11 +56,18 @@ Container & Container::operator=(const Container & from) // 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(uint i=0; i::const_iterator i; + +// for(uint i=0; iCopy(); - // Need to copy the object here... + // Need to actually COPY the object here, not copy the pointer only!! + // (which we do now, above :-P) objects.push_back(object); } @@ -71,8 +80,10 @@ Container & Container::operator=(const Container & from) { QRectF boundary; +//int a=1; for(std::vector::iterator i=objects.begin(); i!=objects.end(); i++) { +//printf("Containter::Draw item #%i [%X]...\n", a++, *i); (*i)->Draw(painter); boundary = boundary.united((*i)->Extents()); } @@ -85,7 +96,7 @@ Container & Container::operator=(const Container & from) painter->SetPen(QPen(Qt::blue, 2.0, Qt::DashLine)); painter->SetBrush(QBrush(Qt::NoBrush)); - painter->DrawRect(boundary); + painter->DrawPaddedRect(boundary); } } @@ -151,6 +162,9 @@ printf("Container::Collided: Deleting object ($%X)\n", *i); } } + if (snapToGrid) + point = SnapPointToGrid(point); + // We check to see if the container we're trying to access is the // DrawingView's document. If so, we ignore the state of the container. // Otherwise, we care about the state of the container. :-) @@ -478,7 +492,7 @@ void Container::ResizeAllDimensions(double newSize) // Only put "CONTAINER" markers if *not* the top level container // if (parent != NULL) if (!isTopLevelContainer) - fprintf(file, "CONTAINER\n"); + fprintf(file, "CONTAINER %i\n", layer); for(uint i=0; iEnumerate(file); @@ -488,3 +502,21 @@ void Container::ResizeAllDimensions(double newSize) fprintf(file, "ENDCONTAINER\n"); } + +/*virtual*/ Object * Container::Copy(void) +{ +#warning "!!! This doesn't take care of attached Dimensions !!!" +/* +This is a real problem. While having a pointer in the Dimension to this line's points +is fast & easy, it creates a huge problem when trying to replicate an object like this. + +Maybe a way to fix that then, is to have reference numbers instead of pointers. That +way, if you copy them, ... you might still have problems. Because you can't be sure if +a copy will be persistant or not, you then *definitely* do not want them to have the +same reference number. +*/ + Container * c = new Container(position, parent); + *c = *this; + return c; +} +