insilmaril@611: #include insilmaril@611: insilmaril@0: #include "selection.h" insilmaril@0: insilmaril@440: #include "mainwindow.h" insilmaril@440: #include "mapeditor.h" insilmaril@641: #include "vymmodel.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@721: blocked=false; insilmaril@0: } insilmaril@0: insilmaril@0: Selection::~Selection() insilmaril@0: { insilmaril@0: } insilmaril@0: insilmaril@641: void Selection::setModel (VymModel *m) insilmaril@0: { insilmaril@641: model=m; insilmaril@641: scene=model->getScene(); insilmaril@0: } insilmaril@0: insilmaril@0: void Selection::copy(const Selection &other) insilmaril@0: { 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@721: void Selection::update() // FIXME this needs to be adapted to several views 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@651: mainWindow->updateSatellites (model->getMapEditor() ); insilmaril@424: return true; insilmaril@0: } insilmaril@0: insilmaril@421: bool Selection::select (const QString &s) // TODO no multiselections yet insilmaril@0: { insilmaril@641: LinkableMapObj *lmo=model->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@721: bool Selection::isBlocked() insilmaril@721: { insilmaril@721: return blocked; insilmaril@721: } insilmaril@721: insilmaril@721: void Selection::block() insilmaril@721: { insilmaril@721: blocked=true; insilmaril@721: } insilmaril@721: insilmaril@721: void Selection::unblock() insilmaril@721: { insilmaril@721: blocked=false; insilmaril@721: } insilmaril@721: 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@492: Selection::Type 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@650: { insilmaril@650: return model->getSelectString (selectList.first() ); insilmaril@650: } insilmaril@16: else insilmaril@16: return""; insilmaril@16: } insilmaril@16: insilmaril@16: