insilmaril@766: #include insilmaril@766: insilmaril@766: #include insilmaril@766: using namespace std; insilmaril@766: insilmaril@767: #include "flag.h" insilmaril@0: #include "flagrowobj.h" insilmaril@766: insilmaril@644: #include "geometry.h" insilmaril@0: insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: // FlagRowObj insilmaril@0: ///////////////////////////////////////////////////////////////// insilmaril@0: FlagRowObj::FlagRowObj() insilmaril@0: { insilmaril@166: // cout << "Const FlagRowObj ()\n"; insilmaril@0: init (); insilmaril@0: } insilmaril@0: insilmaril@408: FlagRowObj::FlagRowObj(QGraphicsScene* s):MapObj(s) insilmaril@0: { insilmaril@408: // cout << "Const FlagRowObj (s)\n"; insilmaril@0: init (); insilmaril@0: } insilmaril@0: insilmaril@0: FlagRowObj::~FlagRowObj() insilmaril@0: { insilmaril@425: //cout << "Destr FlagRowObj\n"; insilmaril@406: while (!flag.isEmpty()) insilmaril@425: delete (flag.takeFirst() ); insilmaril@0: } insilmaril@0: insilmaril@0: void FlagRowObj::init () insilmaril@0: { insilmaril@256: showFlags=true; insilmaril@0: } insilmaril@0: insilmaril@0: void FlagRowObj::copy (FlagRowObj* other) insilmaril@0: { insilmaril@0: MapObj::copy(other); insilmaril@0: flag.clear(); insilmaril@406: for (int i=0; imove(x+dx,y); insilmaril@408: dx+=QSizeF(flag.at(i)->getSize() ).width(); insilmaril@0: } insilmaril@0: } insilmaril@0: insilmaril@0: void FlagRowObj::moveBy(double x, double y) insilmaril@0: { insilmaril@0: move (x+absPos.x(),y+absPos.y() ); insilmaril@0: } insilmaril@0: insilmaril@0: void FlagRowObj::setVisibility (bool v) insilmaril@0: { insilmaril@0: MapObj::setVisibility(v); insilmaril@406: for (int i=0; isetVisibility (v); insilmaril@0: } insilmaril@0: insilmaril@0: FlagObj* FlagRowObj::addFlag (FlagObj *fo) insilmaril@0: { insilmaril@408: FlagObj *newfo=new FlagObj (scene); insilmaril@408: newfo->copy (fo); // create a deep copy of fo insilmaril@0: newfo->move (absPos.x() + bbox.width(), absPos.y() ); insilmaril@0: flag.append(newfo); insilmaril@0: calcBBoxSize(); insilmaril@0: positionBBox(); insilmaril@0: return newfo; insilmaril@0: } insilmaril@0: insilmaril@767: QStringList FlagRowObj::activeFlagNames() insilmaril@767: { insilmaril@767: QStringList list; insilmaril@767: for (int i=0; igetName()); insilmaril@767: return list; insilmaril@767: } insilmaril@767: insilmaril@0: void FlagRowObj::positionBBox() insilmaril@0: { insilmaril@173: bbox.moveTopLeft(absPos ); insilmaril@173: clickBox.moveTopLeft(absPos ); insilmaril@0: } insilmaril@0: insilmaril@0: void FlagRowObj::calcBBoxSize() insilmaril@0: { insilmaril@408: QSizeF size(0,0); insilmaril@408: QSizeF boxsize(0,0); insilmaril@406: for (int i=0; igetSize(); insilmaril@0: // add widths insilmaril@0: boxsize.setWidth(boxsize.width() + size.width() ); insilmaril@0: // maximize height insilmaril@0: if (size.height() > boxsize.height() ) insilmaril@0: boxsize.setHeight(size.height() ); insilmaril@0: } insilmaril@173: bbox.setSize (boxsize); insilmaril@173: clickBox.setSize (boxsize); insilmaril@0: } insilmaril@0: insilmaril@408: QString FlagRowObj::getFlagName (const QPointF &p) insilmaril@0: { insilmaril@754: if (!isInBox (p,clickBox)) return ""; insilmaril@406: for (int i=0; igetClickBox ())) return flag.at(i)->getName(); insilmaril@0: return ""; insilmaril@0: insilmaril@0: insilmaril@0: } insilmaril@0: insilmaril@0: bool FlagRowObj::isActive (const QString &foname) insilmaril@0: { insilmaril@767: insilmaril@0: FlagObj *fo=findFlag (foname); insilmaril@767: if (fo) insilmaril@767: return true; insilmaril@236: else insilmaril@767: return false; insilmaril@0: } insilmaril@0: insilmaril@767: void FlagRowObj::activate (Flag *flag) insilmaril@0: { insilmaril@767: if (flag) insilmaril@0: { insilmaril@767: FlagObj *fo=addFlag (new FlagObj (flag)); insilmaril@767: fo->activate(); insilmaril@767: if (showFlags) // FIXME-3 necessary? only called from FIO::init insilmaril@767: fo->setVisibility (visible); insilmaril@0: else insilmaril@767: fo->setVisibility (false); insilmaril@767: calcBBoxSize(); insilmaril@0: } insilmaril@0: } insilmaril@0: insilmaril@0: void FlagRowObj::deactivate (const QString &foname) insilmaril@0: { insilmaril@0: FlagObj *fo=findFlag (foname); insilmaril@408: if (fo) insilmaril@408: { insilmaril@408: flag.remove(fo); insilmaril@408: delete (fo); insilmaril@408: } insilmaril@0: calcBBoxSize(); insilmaril@0: positionBBox(); insilmaril@0: } insilmaril@0: insilmaril@256: void FlagRowObj::setShowFlags (bool b) insilmaril@256: { insilmaril@256: showFlags=b; insilmaril@256: } insilmaril@256: insilmaril@0: FlagObj* FlagRowObj::findFlag (const QString &name) insilmaril@0: { insilmaril@406: for (int i=0; igetName()==name) return flag.at(i); insilmaril@0: return NULL; insilmaril@0: } insilmaril@0: