X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fbase%2Frs_selection.cpp;h=d2ab97d69e7514078ded5051ac480729846d70e9;hb=bd2b29c8735d83ab48df13c3efee53f63570473e;hp=14e8153fbae53e2dc4b4d22be8e65305e6a121e4;hpb=16ce54abf01ca3032e42a5bb11a4afcf9014dcca;p=architektonas diff --git a/src/base/rs_selection.cpp b/src/base/rs_selection.cpp index 14e8153..d2ab97d 100644 --- a/src/base/rs_selection.cpp +++ b/src/base/rs_selection.cpp @@ -1,19 +1,35 @@ +// rs_selection.cpp +// +// Part of the Architektonas Project +// Originally part of QCad Community Edition by Andrew Mustun +// Extensively rewritten and refactored by James L. Hammons +// Portions copyright (C) 2001-2003 RibbonSoft +// Copyright (C) 2010 Underground Software +// See the README and GPLv2 files for licensing and warranty information +// +// JLH = James L. Hammons +// +// Who When What +// --- ---------- ----------------------------------------------------------- +// JLH 06/02/2010 Added this text. :-) +// #include "rs_selection.h" +#include "drawing.h" +#include "rs_entity.h" +#include "graphicview.h" #include "rs_information.h" #include "rs_polyline.h" -#include "rs_entity.h" -#include "rs_graphic.h" /** * Default constructor. * * @param container The container to which we will add - * entities. Usually that's an RS_Graphic entity but + * entities. Usually that's an Drawing entity but * it can also be a polyline, text, ... */ -RS_Selection::RS_Selection(RS_EntityContainer & container, RS_GraphicView * graphicView) +RS_Selection::RS_Selection(RS_EntityContainer & container, GraphicView * graphicView) { this->container = &container; this->graphicView = graphicView; @@ -25,7 +41,7 @@ RS_Selection::RS_Selection(RS_EntityContainer & container, RS_GraphicView * grap */ void RS_Selection::selectSingle(RS_Entity * e) { - if (e != NULL && (e->getLayer() == NULL || e->getLayer()->isLocked() == false)) + if (e && (e->getLayer() == NULL || e->getLayer()->isLocked() == false)) { // Same problem as below... //[WAS]#warning "!!! This is causing a segfault in the draw code !!!" @@ -67,6 +83,11 @@ void RS_Selection::selectAll(bool select) graphicView->redraw(); } +void RS_Selection::deselectAll() +{ + selectAll(false); +} + /** * Selects all entities on visible layers. */ @@ -111,6 +132,11 @@ void RS_Selection::selectWindow(const Vector & v1, const Vector & v2, bool selec graphicView->redraw(); } +void RS_Selection::deselectWindow(const Vector & v1, const Vector & v2) +{ + selectWindow(v1, v2, false); +} + /** * Selects all entities that are intersected by the given line. * @@ -128,49 +154,57 @@ void RS_Selection::selectIntersected(const Vector & v1, const Vector & v2, bool //for (uint i=0; icount(); ++i) { //RS_Entity* e = container->entityAt(i); - if (e!=NULL && e->isVisible()) { - + if (e!=NULL && e->isVisible()) + { inters = false; // select containers / groups: - if (e->isContainer()) { - RS_EntityContainer* ec = (RS_EntityContainer*)e; - - for (RS_Entity* e2=ec->firstEntity(RS2::ResolveAll); e2!=NULL; - e2=ec->nextEntity(RS2::ResolveAll)) { + if (e->isContainer()) + { + RS_EntityContainer * ec = (RS_EntityContainer *)e; - VectorSolutions sol = - RS_Information::getIntersection(&line, e2, true); + for(RS_Entity * e2=ec->firstEntity(RS2::ResolveAll); e2!=NULL; + e2=ec->nextEntity(RS2::ResolveAll)) + { + VectorSolutions sol = RS_Information::getIntersection(&line, e2, true); - if (sol.hasValid()) { + if (sol.hasValid()) inters = true; - } } - } else { - - VectorSolutions sol = - RS_Information::getIntersection(&line, e, true); + } + else + { + VectorSolutions sol = RS_Information::getIntersection(&line, e, true); - if (sol.hasValid()) { + if (sol.hasValid()) inters = true; - } } - if (inters) { - if (graphicView!=NULL) { + if (inters) + { +#warning "!!! Old rendering path needs upgrading !!!" +#if 0 + if (graphicView) graphicView->deleteEntity(e); - } +#endif e->setSelected(select); - if (graphicView!=NULL) { +#warning "!!! Old rendering path needs upgrading !!!" +#if 0 + if (graphicView) graphicView->drawEntity(e); - } +#endif } } } } +void RS_Selection::deselectIntersected(const Vector & v1, const Vector & v2) +{ + selectIntersected(v1, v2, false); +} + /** * Selects all entities that are connected to the given entity. * @@ -178,37 +212,45 @@ void RS_Selection::selectIntersected(const Vector & v1, const Vector & v2, bool */ void RS_Selection::selectContour(RS_Entity * e) { - if (e == NULL || !e->isAtomic()) + if (!e || !e->isAtomic()) return; bool select = !e->isSelected(); - RS_AtomicEntity* ae = (RS_AtomicEntity*)e; + RS_AtomicEntity * ae = (RS_AtomicEntity *)e; Vector p1 = ae->getStartpoint(); Vector p2 = ae->getEndpoint(); bool found = false; +#warning "!!! Old rendering path needs upgrading !!!" +#if 0 // (de)select 1st entity: - if (graphicView!=NULL) { + if (graphicView) graphicView->deleteEntity(e); - } +#endif + e->setSelected(select); - if (graphicView!=NULL) { + +#warning "!!! Old rendering path needs upgrading !!!" +#if 0 + if (graphicView) graphicView->drawEntity(e); - } +#endif - do { + do + { found = false; - for (RS_Entity* en=container->firstEntity(); en!=NULL; - en=container->nextEntity()) { + for(RS_Entity * en=container->firstEntity(); en!=NULL; + en=container->nextEntity()) + { //for (uint i=0; icount(); ++i) { //RS_Entity* en = container->entityAt(i); if (en!=NULL && en->isVisible() && en->isAtomic() && en->isSelected()!=select && - (en->getLayer()==NULL || en->getLayer()->isLocked()==false)) { - - ae = (RS_AtomicEntity*)en; + (en->getLayer()==NULL || en->getLayer()->isLocked()==false)) + { + ae = (RS_AtomicEntity *)en; bool doit = false; // startpoint connects to 1st point @@ -235,14 +277,22 @@ void RS_Selection::selectContour(RS_Entity * e) p2 = ae->getStartpoint(); } - if (doit) { - if (graphicView!=NULL) { + if (doit) + { +#warning "!!! Old rendering path needs upgrading !!!" +#if 0 + if (graphicView) graphicView->deleteEntity(ae); - } +#endif + ae->setSelected(select); - if (graphicView!=NULL) { + +#warning "!!! Old rendering path needs upgrading !!!" +#if 0 + if (graphicView) graphicView->drawEntity(ae); - } +#endif + found = true; } } @@ -283,14 +333,25 @@ void RS_Selection::selectLayer(const QString & layerName, bool select) if (l != NULL && l->getName() == layerName) { - if (graphicView != NULL) +#warning "!!! Old rendering path needs upgrading !!!" +#if 0 + if (graphicView) graphicView->deleteEntity(en); +#endif en->setSelected(select); - if (graphicView != NULL) +#warning "!!! Old rendering path needs upgrading !!!" +#if 0 + if (graphicView) graphicView->drawEntity(en); +#endif } } } } + +void RS_Selection::deselectLayer(QString & layerName) +{ + selectLayer(layerName, false); +}