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