]> git.sven.stormbind.net Git - sven/vym.git/blob - imageitem.cpp
Import Upstream version 2.6.11
[sven/vym.git] / 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()
18 {
19     //qDebug()<<"Constr ImageItem";
20     init();
21 }
22
23 ImageItem::ImageItem (const QList<QVariant> &data, TreeItem *parent):MapItem (data,parent)
24 {
25     init();
26 }
27
28 ImageItem::~ImageItem()
29 {
30     //qDebug()<<"Destr ImageItem";
31     if (mo) delete mo;
32 }
33
34 void ImageItem::init()
35 {
36     setType (Image);
37     imageType=Undefined;
38     hideLinkUnselected=true;
39     originalFilename="no original name available";
40     zValue=dZ_FLOATIMG;
41     scaleX=1;
42     scaleY=1;
43     posMode=Relative;
44 }
45
46 void ImageItem::clear()
47 {
48 }
49
50 ImageItem::ImageType ImageItem::getImageType()
51 {
52     return imageType;
53 }
54
55 void ImageItem::load(const QImage &img)
56 {
57     originalImage=img;
58     if (mo) ((FloatImageObj*)mo)->load (originalImage);
59 }
60
61 bool ImageItem::load(const QString &fname)
62 {
63     bool ok = originalImage.load (fname);   
64     if (mo && ok)
65     {
66         setOriginalFilename (fname);
67         setHeadingPlainText (originalFilename);
68         ((FloatImageObj*)mo)->load (originalImage);
69     }   else
70         qWarning() << "ImageItem::load failed for " << fname;
71     return ok;  
72 }
73
74 FloatImageObj* ImageItem::createMapObj()
75 {
76     FloatImageObj *fio=new FloatImageObj ( ((MapItem*)parentItem)->getMO(),this);
77     mo=fio;
78     if (((BranchItem*)parentItem)->isScrolled() || !((MapItem*)parentItem)->getMO()->isVisibleObj() )
79             fio->setVisibility (false);
80     initLMO();  // set rel/abs position in mapitem
81     fio->setZValue(zValue);
82     fio->setRelPos (pos);
83     fio->updateVisibility();
84     return fio;
85 }
86
87 void ImageItem::setScale (qreal sx, qreal sy)
88 {
89     scaleX=sx;
90     scaleY=sy;
91     int w=originalImage.width()*scaleX;
92     int h=originalImage.height()*scaleY;
93     if (mo) ((FloatImageObj*)mo)->load (originalImage.scaled (w,h));
94 }
95
96 qreal ImageItem::getScaleX ()
97 {
98     return scaleX;
99 }
100
101 qreal ImageItem::getScaleY ()
102 {
103     return scaleY;
104 }
105
106 void ImageItem::setZValue(int z)
107 {
108     zValue=z;
109     if (mo) ((FloatImageObj*)mo)->setZValue(z);
110 }
111
112 void ImageItem::setOriginalFilename(const QString & fn)
113 {
114     originalFilename=fn;
115
116     // Set short name. Search from behind:
117     int i=originalFilename.lastIndexOf("/");
118     if (i>=0) originalFilename=originalFilename.remove (0,i+1);
119     setHeadingPlainText (originalFilename);
120 }
121
122 QString ImageItem::getOriginalFilename()
123 {
124     return originalFilename;
125 }
126
127 bool ImageItem::save(const QString &fn, const QString &format)
128 {
129     return originalImage.save (fn,qPrintable (format)); 
130 }
131
132 QString ImageItem::saveToDir (const QString &tmpdir,const QString &prefix) 
133 {
134     if (hidden) return "";
135
136     // Save uuid 
137     QString idAttr=attribut("uuid",uuid.toString());
138
139     QString zAttr=attribut ("zValue",QString().setNum(zValue));
140     QString url;
141
142     ulong n=reinterpret_cast <ulong> (this);
143
144     url="images/"+prefix+"image-" + QString().number(n,10) + ".png" ;
145
146     // And really save the image
147     originalImage.save (tmpdir +"/"+ url, "PNG");
148  
149     QString nameAttr=attribut ("originalName",originalFilename);
150
151     QString scaleAttr=
152         attribut ("scaleX",QString().setNum(scaleX))+
153         attribut ("scaleY",QString().setNum(scaleY));
154
155     return singleElement ("floatimage",  
156         getMapAttr() 
157         +getGeneralAttr()
158         +zAttr  
159         +attribut ("href",QString ("file:")+url)
160         +nameAttr
161         +scaleAttr
162         +idAttr
163     );  
164 }
165