]> git.sven.stormbind.net Git - sven/vym.git/blob - mapitem.cpp
3dd4b2ff6a5d99d64ba05ac4fb9d012f202f01da
[sven/vym.git] / mapitem.cpp
1 #include "mapitem.h"
2
3 #include "linkablemapobj.h"
4 #include "ornamentedobj.h"
5
6 #include <QDebug>
7
8 MapItem::MapItem()
9 {
10     init();
11 }
12
13 MapItem::MapItem(const QList<QVariant> &data, TreeItem *parent):TreeItem (data,parent)
14 {
15     init();
16 }
17
18 void MapItem::init()
19 {
20     mo=NULL;
21     posMode=Unused;
22     hideLinkUnselected=false;
23 }
24
25 void MapItem::appendChild (TreeItem *item)
26 {
27     TreeItem::appendChild (item);
28
29     // FIXME-4 maybe access parent in MapObjs directly via treeItem
30     // and remove this here...
31
32     // If lmo exists, also set parObj there
33     LinkableMapObj *lmo=getLMO();
34     if (lmo)
35     {
36         LinkableMapObj *itemLMO=((MapItem*)item)->getLMO();
37         if (itemLMO)
38             itemLMO->setParObj (lmo);
39     }
40 }
41
42 void MapItem::setRelPos (const QPointF &p)
43 {
44     posMode=Relative;
45     pos=p;
46     LinkableMapObj *lmo=getLMO();
47     if (lmo)
48     {
49         ((OrnamentedObj*)lmo)->setUseRelPos (true);
50         ((OrnamentedObj*)lmo)->move2RelPos(p);
51     }
52 }
53
54 void MapItem::setAbsPos (const QPointF &p)
55 {
56     posMode=Absolute;
57     pos=p;
58     if (mo) mo->move (p);
59 }
60
61 void MapItem::setPositionMode (PositionMode mode)
62 {
63     posMode=mode;
64 }
65
66 MapItem::PositionMode MapItem::getPositionMode ()
67 {
68     return posMode;
69 }
70
71 void MapItem::setHideLinkUnselected (bool b)
72 {
73     hideLinkUnselected=b;
74     LinkableMapObj *lmo=getLMO();
75     if (lmo) 
76     {
77         //lmo->setHideLinkUnselected();
78         lmo->setVisibility (lmo->isVisibleObj());
79         lmo->updateLinkGeometry();
80     }   
81 }
82
83 bool MapItem::getHideLinkUnselected()
84 {
85     return hideLinkUnselected;
86 }   
87
88 QString MapItem::getMapAttr ()  
89 {
90     QString s;
91     LinkableMapObj *lmo=getLMO();
92
93     if (parentItem==rootItem)
94         posMode=Absolute;
95     else
96     {
97         if (type==TreeItem::Image ||depth()==1 || lmo->getUseRelPos() )
98             posMode=Relative;   //FiXME-2 shouldn't this be replaced by relPos?
99         else
100             posMode=Unused;
101     }
102     switch (posMode)
103     {
104         case Relative:  
105             if (lmo) pos=lmo->getRelPos();
106             s= attribut("relPosX",QString().setNum(pos.x())) +
107                attribut("relPosY",QString().setNum(pos.y())); 
108             break;
109         case Absolute:  
110             if (mo) pos=mo->getAbsPos();
111             s=attribut("absPosX",QString().setNum(pos.x())) +
112               attribut("absPosY",QString().setNum(pos.y())); 
113             break;
114         default: break;
115     }
116     if (hideLinkUnselected)
117         s+=attribut ("hideLink","true");
118     else
119         s+=attribut ("hideLink","false");
120
121     // Rotation angle
122     MapObj *mo=getMO();
123     if (mo)
124         angle=mo->getRotation();
125     if (angle!=0)       
126         s+=attribut("rotation",QString().setNum(angle) );
127         
128     return s;
129 }
130
131 QRectF MapItem::getBBoxURLFlag ()
132 {
133     QStringList list=systemFlags.activeFlagNames().filter ("system-url");
134     if (list.count()>1)
135     {
136         qWarning()<<"MapItem::getBBoxURLFlag found more than one system-url*";
137         return QRectF ();
138     }   
139     return getBBoxFlag (list.first());
140 }
141
142 QRectF MapItem::getBBoxFlag (const QString &fname)
143 {
144     LinkableMapObj *lmo=getLMO();
145     if (lmo)
146         return ((OrnamentedObj*)lmo)->getBBoxFlag (fname);
147     else    
148         return QRectF ();
149 }
150
151 void MapItem::setRotation(const qreal &a)
152 {
153     angle=a;
154     MapObj *mo=getMO();
155     if (mo) mo->setRotation (a);
156 }
157
158 MapObj* MapItem::getMO()
159 {
160     return mo;
161 }
162
163 LinkableMapObj* MapItem::getLMO()
164 {
165     if (isBranchLikeType() || type==Image)
166         return (LinkableMapObj*)mo;
167     else
168         return NULL;
169 }
170
171 void MapItem::initLMO()
172 {
173     LinkableMapObj *lmo=getLMO();
174     if (!lmo) return;
175     switch (posMode)
176     {
177         case Relative:  
178             lmo->setRelPos (pos);
179             break;
180         case Absolute:  
181             lmo->move (pos);
182             break;
183         default:
184             break;
185     }
186 }
187