]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/mapitem.cpp
New upstream version 2.9.22
[sven/vym.git] / src / mapitem.cpp
diff --git a/src/mapitem.cpp b/src/mapitem.cpp
new file mode 100644 (file)
index 0000000..66dc81e
--- /dev/null
@@ -0,0 +1,170 @@
+#include "mapitem.h"
+
+#include "linkablemapobj.h"
+#include "ornamentedobj.h"
+
+#include <QDebug>
+
+extern FlagRowMaster *systemFlagsMaster;
+
+MapItem::MapItem(TreeItem *parent)
+    : TreeItem(parent)
+{
+    // qDebug() << "Constr. MapItem(" << parent << ")";
+    init();
+}
+
+void MapItem::init()
+{
+    mo = NULL;
+    posMode = Unused;
+    hideLinkUnselected = false;
+}
+
+void MapItem::appendChild(TreeItem *item)
+{
+    TreeItem::appendChild(item);
+
+    // FIXME-4 maybe access parent in MapObjs directly via treeItem
+    // and remove this here...
+
+    // If lmo exists, also set parObj there
+    LinkableMapObj *lmo = getLMO();
+    if (lmo) {
+        LinkableMapObj *itemLMO = ((MapItem *)item)->getLMO();
+        if (itemLMO)
+            itemLMO->setParObj(lmo);
+    }
+}
+
+void MapItem::setRelPos(const QPointF &p)
+{
+    posMode = Relative;
+    pos = p;
+    LinkableMapObj *lmo = getLMO();
+    if (lmo) {
+        ((OrnamentedObj *)lmo)->setUseRelPos(true);
+        ((OrnamentedObj *)lmo)->move2RelPos(p);
+    }
+}
+
+void MapItem::setAbsPos(const QPointF &p)
+{
+    posMode = Absolute;
+    pos = p;
+    if (mo)
+        mo->move(p);
+}
+
+void MapItem::setPositionMode(PositionMode mode) { posMode = mode; }
+
+MapItem::PositionMode MapItem::getPositionMode() { return posMode; }
+
+void MapItem::setHideLinkUnselected(bool b)
+{
+    hideLinkUnselected = b;
+    LinkableMapObj *lmo = getLMO();
+    if (lmo) {
+        // lmo->setHideLinkUnselected();
+        lmo->setVisibility(lmo->isVisibleObj());
+        lmo->updateLinkGeometry();
+    }
+}
+
+bool MapItem::getHideLinkUnselected() { return hideLinkUnselected; }
+
+QString MapItem::getMapAttr()
+{
+    QString s;
+    LinkableMapObj *lmo = getLMO();
+
+    if (parentItem == rootItem)
+        posMode = Absolute;
+    else {
+        if (type == TreeItem::Image || depth() == 1 || lmo->getUseRelPos())
+            posMode = Relative; // FiXME-2 shouldn't this be replaced by relPos?
+        else
+            posMode = Unused;
+    }
+    switch (posMode) {
+    case Relative:
+        if (lmo)
+            pos = lmo->getRelPos();
+        s = attribut("relPosX", QString().setNum(pos.x())) +
+            attribut("relPosY", QString().setNum(pos.y()));
+        break;
+    case Absolute:
+        if (mo)
+            pos = mo->getAbsPos();
+        s = attribut("absPosX", QString().setNum(pos.x())) +
+            attribut("absPosY", QString().setNum(pos.y()));
+        break;
+    default:
+        break;
+    }
+    if (hideLinkUnselected)
+        s += attribut("hideLink", "true");
+
+    // Rotation angle
+    MapObj *mo = getMO();
+    if (mo)
+        angle = mo->getRotation();
+    if (angle != 0)
+        s += attribut("rotation", QString().setNum(angle));
+
+    return s;
+}
+
+QRectF MapItem::getBBoxURLFlag()
+{
+    QString s = "system-url";
+    QStringList list = systemFlags.activeFlagNames().filter(s);
+    if (list.count() > 1) {
+        qWarning() << "MapItem::getBBoxURLFlag found more than one system-url*";
+        return QRectF();
+    }
+
+    Flag *f = systemFlagsMaster->findFlagByName(s);
+    if (f) {
+        QUuid u = f->getUuid();
+        LinkableMapObj *lmo = getLMO();
+        if (lmo)
+            return ((OrnamentedObj *)lmo)->getBBoxSystemFlagByUid(u);
+    }
+    return QRectF();
+}
+
+void MapItem::setRotation(const qreal &a)
+{
+    angle = a;
+    MapObj *mo = getMO();
+    if (mo)
+        mo->setRotation(a);
+}
+
+MapObj *MapItem::getMO() { return mo; }
+
+LinkableMapObj *MapItem::getLMO()
+{
+    if (isBranchLikeType() || type == Image)
+        return (LinkableMapObj *)mo;
+    else
+        return NULL;
+}
+
+void MapItem::initLMO()
+{
+    LinkableMapObj *lmo = getLMO();
+    if (!lmo)
+        return;
+    switch (posMode) {
+    case Relative:
+        lmo->setRelPos(pos);
+        break;
+    case Absolute:
+        lmo->move(pos);
+        break;
+    default:
+        break;
+    }
+}