insilmaril@0: #include "selection.h" insilmaril@0: insilmaril@440: #include "mainwindow.h" insilmaril@440: #include "mapeditor.h" insilmaril@440: insilmaril@440: insilmaril@440: insilmaril@440: extern Main *mainWindow; insilmaril@0: insilmaril@0: Selection::Selection() insilmaril@0: { insilmaril@440: color= QColor(255,255,0); insilmaril@0: } insilmaril@0: insilmaril@0: Selection::~Selection() insilmaril@0: { insilmaril@0: } insilmaril@0: insilmaril@440: void Selection::setMapEditor (MapEditor *me) insilmaril@0: { insilmaril@440: mapEditor=me; insilmaril@440: mapCenter=me->getMapCenter(); insilmaril@440: scene=mapCenter->getScene(); insilmaril@0: } insilmaril@0: insilmaril@0: void Selection::copy(const Selection &other) insilmaril@0: { insilmaril@16: mapCenter=other.mapCenter; insilmaril@16: selectList=other.selectList; insilmaril@421: lastSelectList=other.lastSelectList; insilmaril@0: } insilmaril@0: insilmaril@0: void Selection::clear() insilmaril@0: { insilmaril@424: unselect(); insilmaril@421: lastSelectList.clear(); insilmaril@0: } insilmaril@0: insilmaril@440: void Selection::update() insilmaril@440: { insilmaril@440: QRectF bbox; insilmaril@440: int w=0; insilmaril@440: for (int i=0; i< selectList.count(); ++i) insilmaril@440: { insilmaril@440: bbox=selectList.at(i)->getBBox(); insilmaril@440: selboxList.at(i)->setRect ( insilmaril@440: bbox.x()-w,bbox.y()-w, insilmaril@440: bbox.width()+2*w, bbox.height()+2*w); insilmaril@440: selboxList.at(i)->setPen (color); insilmaril@440: selboxList.at(i)->setBrush (color); insilmaril@440: } insilmaril@440: } insilmaril@440: insilmaril@440: void Selection::setColor (QColor col) insilmaril@440: { insilmaril@440: color=col; insilmaril@440: update(); insilmaril@440: } insilmaril@440: insilmaril@440: QColor Selection::getColor () insilmaril@440: { insilmaril@440: return color; insilmaril@440: } insilmaril@440: insilmaril@421: bool Selection::select(LinkableMapObj *lmo) // TODO no multiselections yet insilmaril@0: { insilmaril@424: if (!selectList.isEmpty()) unselect(); insilmaril@16: selectList.append (lmo); insilmaril@440: QGraphicsRectItem *sb = scene->addRect( insilmaril@440: QRectF(0,0,0,0), insilmaril@440: QPen(color), insilmaril@440: color); insilmaril@440: sb->setZValue(Z_SELBOX); insilmaril@460: sb->show(); insilmaril@440: selboxList.append (sb); insilmaril@424: lmo->select(); insilmaril@460: update(); insilmaril@440: mainWindow->updateSatellites (mapEditor); // update branchPropWindow... insilmaril@424: return true; insilmaril@0: } insilmaril@0: insilmaril@421: bool Selection::select (const QString &s) // TODO no multiselections yet insilmaril@0: { insilmaril@16: LinkableMapObj *lmo=mapCenter->findObjBySelect(s); insilmaril@16: insilmaril@16: // Finally select the found object insilmaril@16: if (lmo) insilmaril@16: { insilmaril@424: unselect(); insilmaril@16: select (lmo); insilmaril@16: return true; insilmaril@16: } insilmaril@16: return false; insilmaril@16: insilmaril@16: } insilmaril@16: insilmaril@421: bool Selection::reselect () // TODO no multiselections yet insilmaril@421: { insilmaril@421: if (!lastSelectList.isEmpty()) insilmaril@421: { insilmaril@421: select (lastSelectList.first()); insilmaril@421: return true; insilmaril@421: } insilmaril@421: return false; insilmaril@421: insilmaril@421: } insilmaril@421: insilmaril@16: void Selection::unselect() insilmaril@16: { insilmaril@424: if (!selectList.isEmpty() ) insilmaril@424: { insilmaril@424: for (int i=0; i< selectList.count(); ++i) insilmaril@424: selectList.at(i)->unselect(); insilmaril@424: lastSelectList=selectList; insilmaril@424: selectList.clear(); insilmaril@440: while (!selboxList.isEmpty() ) insilmaril@440: delete selboxList.takeFirst(); insilmaril@440: insilmaril@424: } insilmaril@0: } insilmaril@0: insilmaril@0: bool Selection::isEmpty() insilmaril@0: { insilmaril@0: return selectList.isEmpty(); insilmaril@0: } insilmaril@0: insilmaril@0: uint Selection::count() insilmaril@0: { insilmaril@0: return selectList.count(); insilmaril@0: } insilmaril@16: insilmaril@421: SelectionType Selection::type() // TODO no multiselections yet insilmaril@16: { insilmaril@421: if (!selectList.isEmpty()) insilmaril@421: { insilmaril@421: LinkableMapObj *sel=selectList.first(); insilmaril@421: if (typeid (*sel)==typeid (BranchObj)) return Branch; insilmaril@421: if (typeid (*sel)==typeid (MapCenterObj)) return MapCenter; insilmaril@421: if (typeid (*sel)==typeid (FloatImageObj)) return FloatImage; insilmaril@421: } insilmaril@421: return Undefined; insilmaril@421: } insilmaril@421: insilmaril@424: LinkableMapObj* Selection::first() insilmaril@424: { insilmaril@424: if (!selectList.isEmpty()) insilmaril@424: return selectList.first(); insilmaril@424: else insilmaril@424: return NULL; insilmaril@424: } insilmaril@424: insilmaril@424: LinkableMapObj* Selection::single() insilmaril@424: { insilmaril@424: if (selectList.count() == 1) insilmaril@424: return selectList.first(); insilmaril@424: else insilmaril@424: return NULL; insilmaril@424: } insilmaril@424: insilmaril@424: BranchObj* Selection::getBranch() insilmaril@424: { insilmaril@424: if (!selectList.isEmpty()) insilmaril@424: { insilmaril@424: LinkableMapObj *sel=selectList.first(); insilmaril@424: if (typeid (*sel)==typeid (BranchObj) || insilmaril@424: typeid (*sel)==typeid (MapCenterObj)) insilmaril@424: return (BranchObj*)sel; insilmaril@424: } insilmaril@424: return NULL; insilmaril@424: } insilmaril@424: insilmaril@424: FloatImageObj* Selection::getFloatImage() insilmaril@424: { insilmaril@424: if (!selectList.isEmpty()) insilmaril@424: { insilmaril@424: LinkableMapObj *sel=selectList.first(); insilmaril@424: if (typeid (*sel)==typeid (FloatImageObj)) insilmaril@424: return (FloatImageObj*)sel; insilmaril@424: } insilmaril@424: return NULL; insilmaril@424: } insilmaril@424: insilmaril@421: QString Selection::getSelectString()// TODO no multiselections yet insilmaril@421: { insilmaril@16: if (selectList.count()==1) insilmaril@16: return selectList.first()->getSelectString(); insilmaril@16: else insilmaril@16: return""; insilmaril@16: } insilmaril@16: insilmaril@16: