]> git.sven.stormbind.net Git - sven/vym.git/blob - ornamentedobj.cpp
bf4ae2e17b1e14453f46b2750218c80afc49718a
[sven/vym.git] / ornamentedobj.cpp
1 #include <QDebug>
2
3 #include "branchitem.h"
4 #include "ornamentedobj.h"
5 #include "linkablemapobj.h"
6 #include "vymmodel.h"
7
8 extern bool debug;
9
10 /////////////////////////////////////////////////////////////////
11 // OrnamentedObj
12 /////////////////////////////////////////////////////////////////
13
14 OrnamentedObj::OrnamentedObj(QGraphicsItem *parent,TreeItem *ti) :LinkableMapObj(parent,ti)
15 {
16     //qDebug()<< "Const OrnamentedObj (s,ti) ti="<<ti;
17     treeItem=ti;
18     init ();
19 }
20
21 OrnamentedObj::~OrnamentedObj()
22 {
23     delete heading;
24     delete systemFlags;
25     delete standardFlags;
26     delete frame;
27 }
28
29
30 void OrnamentedObj::init ()
31 {
32     heading = new HeadingObj(this);
33     heading->setTreeItem (treeItem);
34     heading->move (absPos.x(), absPos.y());
35
36     systemFlags=new FlagRowObj(this);
37     standardFlags=new FlagRowObj(this);
38
39     frame = new FrameObj (this);
40     frame->setTreeItem (treeItem);
41
42     angle=0;
43 }
44
45 void OrnamentedObj::copy (OrnamentedObj* other)
46 {
47     LinkableMapObj::copy(other);
48     heading->copy(other->heading);
49     setColor   (other->heading->getColor());    
50
51     systemFlags->copy (other->systemFlags);
52     standardFlags->copy (other->standardFlags);
53
54     ornamentsBBox=other->ornamentsBBox;
55 }
56
57 void OrnamentedObj::setLinkColor()
58 {
59     VymModel *model=treeItem->getModel();
60     if (!model) return;
61     if (model->getMapLinkColorHint()==HeadingColor)
62         LinkableMapObj::setLinkColor (heading->getColor());
63     else    
64         LinkableMapObj::setLinkColor (model->getMapDefLinkColor());
65 }
66
67 void OrnamentedObj::setColor (QColor col)
68 {
69     heading->setColor(col);
70     setLinkColor();
71 }
72
73 QColor OrnamentedObj::getColor ()
74 {
75     return heading->getColor();
76 }
77
78 QRectF OrnamentedObj::getBBoxHeading()
79 {
80     return heading->getBBox();
81 }
82
83 void OrnamentedObj::setRotation (const qreal &a)
84 {
85     MapObj::setRotation (a);
86     heading->setRotation(a); // FIXME-4 duplicated code...
87 }
88
89 FrameObj* OrnamentedObj::getFrame()
90 {
91     return frame;
92 }
93
94 FrameObj::FrameType OrnamentedObj::getFrameType()
95 {
96     return frame->getFrameType();
97 }
98
99 QString OrnamentedObj::getFrameTypeName()
100 {
101     return frame->getFrameTypeName();
102 }
103
104 void OrnamentedObj::setFrameType(const FrameObj::FrameType &t)
105 {
106     frame->setFrameType(t);
107     if (t == FrameObj::NoFrame)
108     {
109         linkpos=LinkableMapObj::Bottom;
110         useBottomline=true;
111     } else  
112     {
113         linkpos=LinkableMapObj::Middle;
114         useBottomline=false;
115     }
116     updateVisibility(); // Update bottomline
117     calcBBoxSize();
118     positionBBox();
119     requestReposition();
120 }
121
122 void OrnamentedObj::setFrameType(const QString &s)
123 {
124     setFrameType(frame->getFrameType (s));
125 }
126
127 void OrnamentedObj::setFramePadding (const int &i)
128 {
129     frame->setPadding (i);
130     calcBBoxSize();
131     positionBBox();
132     requestReposition();
133 }
134
135 int OrnamentedObj::getFramePadding ()
136 {
137     return frame->getPadding();
138 }
139
140 void OrnamentedObj::setFrameBorderWidth (const int &i)
141 {
142     frame->setBorderWidth(i);
143     calcBBoxSize();
144     positionBBox();
145     requestReposition();
146 }
147
148 int OrnamentedObj::getFrameBorderWidth()
149 {
150     return frame->getBorderWidth();
151 }
152
153 void OrnamentedObj::setFramePenColor(QColor col)
154 {
155     frame->setPenColor (col);
156 }
157
158 QColor OrnamentedObj::getFramePenColor()
159 {
160     return frame->getPenColor ();
161 }
162
163 void OrnamentedObj::setFrameBrushColor(QColor col)
164 {
165     frame->setBrushColor (col);
166 }
167
168 QColor OrnamentedObj::getFrameBrushColor()
169 {
170     return frame->getBrushColor ();
171 }
172
173 void OrnamentedObj::setFrameIncludeChildren(bool b)
174 {
175     calcBBoxSizeWithChildren();
176     frame->setFrameIncludeChildren (b);
177     requestReposition();
178 }
179
180 bool OrnamentedObj::getFrameIncludeChildren()
181 {
182     return frame->getFrameIncludeChildren ();
183 }
184
185 QRectF OrnamentedObj::getOrnamentsBBox()
186 {
187     return ornamentsBBox;
188 }
189
190 void OrnamentedObj::positionContents()
191 {
192     double x=absPos.x();
193     double y=absPos.y();
194     double dp=frame->getTotalPadding();
195     double dp2=dp/2;
196     double ox=leftPad + dp;
197     double oy=topPad  + dp;
198     
199     // vertical align heading to bottom
200     heading->setZValue (dZ_TEXT);
201     heading->setTransformOriginPoint (
202         QPointF ( ox + systemFlags->getBBox().width(),
203                   oy + ornamentsBBox.height() - heading->getHeight() 
204                 ) );
205     heading->move (ox + x + systemFlags->getBBox().width(),
206                    oy + y + ornamentsBBox.height() - heading->getHeight() 
207                     );
208     // Flags
209     systemFlags-> move (ox +x , oy + y );
210     systemFlags->setZValue (dZ_ICON);
211     standardFlags->move (ox +x + heading->getWidth() + systemFlags->getBBox().width() , oy + y );
212     standardFlags->setZValue (dZ_ICON);
213
214     ornamentsBBox.moveTopLeft ( QPointF (ox+x,oy+y));
215     clickPoly=QPolygonF (ornamentsBBox);
216
217     // Update bboxTotal coordinate (size set already)
218     if (orientation==LinkableMapObj::LeftOfCenter )
219         bboxTotal.setRect (
220             bbox.x()+(bbox.width() - bboxTotal.width()) , 
221             bbox.y()+bbox.height()/2 - bboxTotal.height()/2,
222             bboxTotal.width(),
223             bboxTotal.height());
224     else
225         bboxTotal.setRect (
226             bbox.x(), 
227             bbox.y()+bbox.height()/2 - bboxTotal.height()/2,
228             bboxTotal.width(),
229             bboxTotal.height());
230
231     // Update frame
232     dp=frame->getXPadding();
233     dp2=dp / 2;
234     frame->setZValue (dZ_FRAME_LOW);
235     if (treeItem && 
236         treeItem->isBranchLikeType() && 
237         ((BranchItem*)treeItem)->getFrameIncludeChildren() 
238         )
239         frame->setRect( QRectF(
240             bboxTotal.x()+dp2,
241             bboxTotal.y()+dp2,
242             bboxTotal.width()-dp,
243             bboxTotal.height()-dp));
244      else
245         frame->setRect( QRectF(
246             bbox.x() + dp,
247             bbox.y() + dp,
248             bbox.width() - 2 * dp,
249             bbox.height() - 2 * dp));
250 }
251
252 void OrnamentedObj::move (double x, double y)
253 {
254     MapObj::move (x,y);
255     positionBBox();
256 }
257
258 void OrnamentedObj::move (QPointF p)
259 {
260     move (p.x(), p.y());
261 }   
262
263 void OrnamentedObj::moveBy (double x, double y)
264 {
265     MapObj::moveBy (x,y);
266     frame->moveBy (x,y);
267     systemFlags->moveBy (x,y);
268     standardFlags->moveBy (x,y);
269     heading->moveBy (x,y);
270     updateLinkGeometry();
271     requestReposition();
272 }
273
274 void OrnamentedObj::moveBy (QPointF p)
275 {
276     moveBy (p.x(), p.y());
277 }   
278
279 void OrnamentedObj::move2RelPos(double x, double y)
280 {
281     setRelPos (QPointF(x,y));
282     if (parObj)
283     {
284         QPointF p=parObj->getChildRefPos();
285         move (p.x() + x, p.y() + y);
286     }
287 }
288
289 void OrnamentedObj::move2RelPos(QPointF p)
290 {
291     move2RelPos (p.x(), p.y());
292 }
293
294 void OrnamentedObj::activateStandardFlag(Flag *flag)
295 {
296     standardFlags->activate(flag);
297     calcBBoxSize();
298     positionBBox();
299     move (absPos.x(), absPos.y() );
300     forceReposition();
301 }
302
303 void OrnamentedObj::deactivateStandardFlag(const QString &name)
304 {
305     standardFlags->deactivate(name);
306     calcBBoxSize();
307     positionBBox();
308     move (absPos.x(),absPos.y() );
309     forceReposition();
310 }
311
312
313 QString OrnamentedObj::getSystemFlagName(const QPointF &p) 
314 {
315     return systemFlags->getFlagName(p); 
316 }
317
318 QRectF OrnamentedObj::getBBoxFlag (const QString &s)
319 {
320     FlagObj *fo=systemFlags->findFlag (s);
321     if (fo) return fo->getBBox();
322     fo=standardFlags->findFlag (s);
323     if (fo) return fo->getBBox();
324     return QRectF();
325 }
326