]> git.sven.stormbind.net Git - sven/vym.git/blob - src/imageitem.cpp
Replace Pierre as the maintainer
[sven/vym.git] / src / imageitem.cpp
1 #include "imageitem.h"
2
3 #include "branchitem.h"
4 #include "mapobj.h" // z-values
5
6 #include <QDebug>
7 #include <QString>
8 #include <iostream>
9
10 bool isImage(const QString &fname)
11 {
12     QRegExp rx("(jpg|jpeg|png|xmp|gif|svg)$");
13     rx.setCaseSensitivity(Qt::CaseInsensitive);
14     return fname.contains(rx);
15 }
16
17 ImageItem::ImageItem():MapItem(nullptr)
18 {
19     //qDebug() << "Constr ImageItem";
20     init();
21 }
22
23
24 ImageItem::~ImageItem()
25 {
26     // qDebug()<<"Destr ImageItem";
27     if (mo)
28         delete mo;
29 }
30
31 void ImageItem::init()
32 {
33     setType(Image);
34     hideLinkUnselected = true;
35     originalFilename = "no original name available";
36     zValue = dZ_FLOATIMG;
37     posMode = Relative;
38 }
39
40 void ImageItem::clear()
41 {
42     // pure virtual in parent treeitem
43     // not used here currently
44 }
45
46 bool ImageItem::load(const QString &fname)
47 {
48     FloatImageObj *fio = (FloatImageObj *)mo;
49     if (!fio->load(fname))
50         return false;
51
52     setOriginalFilename(fname);
53     setHeadingPlainText(originalFilename);
54
55     return true;
56 }
57
58 FloatImageObj *ImageItem::createMapObj()
59 {
60     FloatImageObj *fio =
61         new FloatImageObj(((MapItem *)parentItem)->getMO(), this);
62     mo = fio;
63     if (((BranchItem *)parentItem)->isScrolled() ||
64         !((MapItem *)parentItem)->getMO()->isVisibleObj())
65         fio->setVisibility(false);
66     initLMO(); // set rel/abs position in mapitem
67     fio->setZValue(zValue);
68     fio->setRelPos(pos);
69     fio->updateVisibility();
70     fio->setLinkColor();
71     return fio;
72 }
73
74 void ImageItem::setScaleFactor(qreal f)
75 {
76     if (mo)
77         ((FloatImageObj *)mo)->setScaleFactor(f);
78 }
79
80 qreal ImageItem::getScaleFactor()
81 {
82     if (mo)
83         return ((FloatImageObj *)mo)->getScaleFactor();
84     return 1;
85 }
86
87 qreal ImageItem::width()
88 {
89     if (mo)
90         return mo->width();
91     else
92         return -1;
93 }
94
95 qreal ImageItem::height()
96 {
97     if (mo)
98         return mo->height();
99     else
100         return -1;
101 }
102
103 void ImageItem::setZValue(int z)
104 {
105     zValue = z;
106     if (mo)
107         ((FloatImageObj *)mo)->setZValue(z);
108 }
109
110 void ImageItem::setOriginalFilename(const QString &fn)
111 {
112     originalFilename = fn;
113
114     // Set short name. Search from behind:
115     int i = originalFilename.lastIndexOf("/");
116     if (i >= 0)
117         originalFilename = originalFilename.remove(0, i + 1);
118     setHeadingPlainText(originalFilename);
119 }
120
121 QString ImageItem::getOriginalFilename() { return originalFilename; }
122
123 QString ImageItem::getUniqueFilename()
124 {
125     FloatImageObj *fio = (FloatImageObj *)mo;
126     return "image-" + getUuid().toString() + fio->getExtension();
127 }
128
129 bool ImageItem::saveImage(const QString &fn)
130 {
131     // This is used when exporting maps or saving selection
132     FloatImageObj *fio = (FloatImageObj *)mo;
133     return fio->save(fn);
134 }
135
136 QString ImageItem::saveToDir(const QString &tmpdir, const QString &prefix)
137 {
138     if (hidden)
139         return "";
140
141     // Save uuid
142     QString idAttr = attribut("uuid", uuid.toString());
143
144     QString zAttr = attribut("zValue", QString().setNum(zValue));
145     QString url;
146
147     FloatImageObj *fio = (FloatImageObj *)mo;
148
149     url = "images/" + prefix + "image-" + QString().number(itemID) +
150           fio->getExtension();
151
152     // And really save the image  (svgs will be copied from cache!)
153     fio->save(tmpdir + "/" + url);
154
155     QString nameAttr = attribut("originalName", originalFilename);
156
157     QString scaleAttr =
158         attribut("scaleFactor", QString().setNum(fio->getScaleFactor()));
159
160     return singleElement("floatimage",
161                          getMapAttr() + getGeneralAttr() + zAttr +
162                              attribut("href", QString("file:") + url) +
163                              nameAttr + scaleAttr + idAttr);
164 }