]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/imageitem.cpp
New upstream version 2.9.22
[sven/vym.git] / src / imageitem.cpp
diff --git a/src/imageitem.cpp b/src/imageitem.cpp
new file mode 100644 (file)
index 0000000..5ee8898
--- /dev/null
@@ -0,0 +1,164 @@
+#include "imageitem.h"
+
+#include "branchitem.h"
+#include "mapobj.h" // z-values
+
+#include <QDebug>
+#include <QString>
+#include <iostream>
+
+bool isImage(const QString &fname)
+{
+    QRegExp rx("(jpg|jpeg|png|xmp|gif|svg)$");
+    rx.setCaseSensitivity(Qt::CaseInsensitive);
+    return fname.contains(rx);
+}
+
+ImageItem::ImageItem():MapItem(nullptr)
+{
+    //qDebug() << "Constr ImageItem";
+    init();
+}
+
+
+ImageItem::~ImageItem()
+{
+    // qDebug()<<"Destr ImageItem";
+    if (mo)
+        delete mo;
+}
+
+void ImageItem::init()
+{
+    setType(Image);
+    hideLinkUnselected = true;
+    originalFilename = "no original name available";
+    zValue = dZ_FLOATIMG;
+    posMode = Relative;
+}
+
+void ImageItem::clear()
+{
+    // pure virtual in parent treeitem
+    // not used here currently
+}
+
+bool ImageItem::load(const QString &fname)
+{
+    FloatImageObj *fio = (FloatImageObj *)mo;
+    if (!fio->load(fname))
+        return false;
+
+    setOriginalFilename(fname);
+    setHeadingPlainText(originalFilename);
+
+    return true;
+}
+
+FloatImageObj *ImageItem::createMapObj()
+{
+    FloatImageObj *fio =
+        new FloatImageObj(((MapItem *)parentItem)->getMO(), this);
+    mo = fio;
+    if (((BranchItem *)parentItem)->isScrolled() ||
+        !((MapItem *)parentItem)->getMO()->isVisibleObj())
+        fio->setVisibility(false);
+    initLMO(); // set rel/abs position in mapitem
+    fio->setZValue(zValue);
+    fio->setRelPos(pos);
+    fio->updateVisibility();
+    fio->setLinkColor();
+    return fio;
+}
+
+void ImageItem::setScaleFactor(qreal f)
+{
+    if (mo)
+        ((FloatImageObj *)mo)->setScaleFactor(f);
+}
+
+qreal ImageItem::getScaleFactor()
+{
+    if (mo)
+        return ((FloatImageObj *)mo)->getScaleFactor();
+    return 1;
+}
+
+qreal ImageItem::width()
+{
+    if (mo)
+        return mo->width();
+    else
+        return -1;
+}
+
+qreal ImageItem::height()
+{
+    if (mo)
+        return mo->height();
+    else
+        return -1;
+}
+
+void ImageItem::setZValue(int z)
+{
+    zValue = z;
+    if (mo)
+        ((FloatImageObj *)mo)->setZValue(z);
+}
+
+void ImageItem::setOriginalFilename(const QString &fn)
+{
+    originalFilename = fn;
+
+    // Set short name. Search from behind:
+    int i = originalFilename.lastIndexOf("/");
+    if (i >= 0)
+        originalFilename = originalFilename.remove(0, i + 1);
+    setHeadingPlainText(originalFilename);
+}
+
+QString ImageItem::getOriginalFilename() { return originalFilename; }
+
+QString ImageItem::getUniqueFilename()
+{
+    FloatImageObj *fio = (FloatImageObj *)mo;
+    return "image-" + getUuid().toString() + fio->getExtension();
+}
+
+bool ImageItem::saveImage(const QString &fn)
+{
+    // This is used when exporting maps or saving selection
+    FloatImageObj *fio = (FloatImageObj *)mo;
+    return fio->save(fn);
+}
+
+QString ImageItem::saveToDir(const QString &tmpdir, const QString &prefix)
+{
+    if (hidden)
+        return "";
+
+    // Save uuid
+    QString idAttr = attribut("uuid", uuid.toString());
+
+    QString zAttr = attribut("zValue", QString().setNum(zValue));
+    QString url;
+
+    FloatImageObj *fio = (FloatImageObj *)mo;
+
+    url = "images/" + prefix + "image-" + QString().number(itemID) +
+          fio->getExtension();
+
+    // And really save the image  (svgs will be copied from cache!)
+    fio->save(tmpdir + "/" + url);
+
+    QString nameAttr = attribut("originalName", originalFilename);
+
+    QString scaleAttr =
+        attribut("scaleFactor", QString().setNum(fio->getScaleFactor()));
+
+    return singleElement("floatimage",
+                         getMapAttr() + getGeneralAttr() + zAttr +
+                             attribut("href", QString("file:") + url) +
+                             nameAttr + scaleAttr + idAttr);
+}