]> git.sven.stormbind.net Git - sven/vym.git/blob - src/ornamentedobj.cpp
New upstream version 2.9.22
[sven/vym.git] / src / ornamentedobj.cpp
1 #include <QDebug>
2
3 #include "branchitem.h"
4 #include "linkablemapobj.h"
5 #include "ornamentedobj.h"
6 #include "vymmodel.h"
7
8 extern bool debug;
9
10 /////////////////////////////////////////////////////////////////
11 // OrnamentedObj
12 /////////////////////////////////////////////////////////////////
13
14 OrnamentedObj::OrnamentedObj(QGraphicsItem *parent, TreeItem *ti)
15     : LinkableMapObj(parent, ti)
16 {
17     // qDebug()<< "Const OrnamentedObj (s,ti) ti="<<ti;
18     treeItem = ti;
19     init();
20 }
21
22 OrnamentedObj::~OrnamentedObj()
23 {
24     delete heading;
25     delete systemFlagRowObj;
26     delete standardFlagRowObj;
27     delete frame;
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     systemFlagRowObj = new FlagRowObj(this);
37     standardFlagRowObj = 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     systemFlagRowObj->copy(other->systemFlagRowObj);
52     standardFlagRowObj->copy(other->standardFlagRowObj);
53
54     ornamentsBBox = other->ornamentsBBox;
55 }
56
57 void OrnamentedObj::setColor(QColor col)
58 {
59     heading->setColor(col);
60     setLinkColor();
61 }
62
63 QColor OrnamentedObj::getColor() { return heading->getColor(); }
64
65 QRectF OrnamentedObj::getBBoxHeading() { return heading->getBBox(); }
66
67 void OrnamentedObj::setRotation(const qreal &a)
68 {
69     MapObj::setRotation(a);
70     heading->setRotation(a); // FIXME-4 duplicated code...
71 }
72
73 FrameObj *OrnamentedObj::getFrame() { return frame; }
74
75 FrameObj::FrameType OrnamentedObj::getFrameType()
76 {
77     return frame->getFrameType();
78 }
79
80 QString OrnamentedObj::getFrameTypeName() { return frame->getFrameTypeName(); }
81
82 void OrnamentedObj::setFrameType(const FrameObj::FrameType &t)
83 {
84     frame->setFrameType(t);
85     if (t == FrameObj::NoFrame) {
86         linkpos = LinkableMapObj::Bottom;
87         useBottomline = true;
88     }
89     else {
90         linkpos = LinkableMapObj::Middle;
91         useBottomline = false;
92     }
93     updateVisibility(); // Update bottomline
94     calcBBoxSize();
95     positionBBox();
96     requestReposition();
97 }
98
99 void OrnamentedObj::setFrameType(const QString &s)
100 {
101     setFrameType(frame->getFrameType(s));
102 }
103
104 void OrnamentedObj::setFramePadding(const int &i)
105 {
106     frame->setPadding(i);
107     calcBBoxSize();
108     positionBBox();
109     requestReposition();
110 }
111
112 int OrnamentedObj::getFramePadding() { return frame->getPadding(); }
113
114 void OrnamentedObj::setFrameBorderWidth(const int &i)
115 {
116     frame->setBorderWidth(i);
117     calcBBoxSize();
118     positionBBox();
119     requestReposition();
120 }
121
122 int OrnamentedObj::getFrameBorderWidth() { return frame->getBorderWidth(); }
123
124 void OrnamentedObj::setFramePenColor(QColor col) { frame->setPenColor(col); }
125
126 QColor OrnamentedObj::getFramePenColor() { return frame->getPenColor(); }
127
128 void OrnamentedObj::setFrameBrushColor(QColor col)
129 {
130     frame->setBrushColor(col);
131 }
132
133 QColor OrnamentedObj::getFrameBrushColor() { return frame->getBrushColor(); }
134
135 void OrnamentedObj::setFrameIncludeChildren(bool b)
136 {
137     calcBBoxSizeWithChildren();
138     frame->setFrameIncludeChildren(b);
139     requestReposition();
140 }
141
142 bool OrnamentedObj::getFrameIncludeChildren()
143 {
144     return frame->getFrameIncludeChildren();
145 }
146
147 QRectF OrnamentedObj::getOrnamentsBBox() { return ornamentsBBox; }
148
149 void OrnamentedObj::positionContents()
150 {
151     double x = absPos.x();
152     double y = absPos.y();
153     double dp = frame->getTotalPadding();
154     double dp2 = dp / 2;
155     double ox = leftPad + dp;
156     double oy = topPad + dp;
157
158     // vertical align heading to bottom
159     heading->setZValue(dZ_TEXT);
160     heading->setTransformOriginPoint(
161         QPointF(ox + systemFlagRowObj->getBBox().width(),
162                 oy + ornamentsBBox.height() - heading->getHeight()));
163     heading->move(ox + x + systemFlagRowObj->getBBox().width(),
164                   oy + y + ornamentsBBox.height() - heading->getHeight());
165     // Flags
166     systemFlagRowObj->move(ox + x, oy + y);
167     systemFlagRowObj->setZValue(dZ_ICON);
168     standardFlagRowObj->move(ox + x + heading->getWidth() +
169                                  systemFlagRowObj->getBBox().width(),
170                              oy + y);
171     standardFlagRowObj->setZValue(dZ_ICON);
172
173     ornamentsBBox.moveTopLeft(QPointF(ox + x, oy + y));
174     clickPoly = QPolygonF(ornamentsBBox);
175
176     // Update bboxTotal coordinate (size set already)
177     if (orientation == LinkableMapObj::LeftOfCenter)
178         bboxTotal.setRect(bbox.x() + (bbox.width() - bboxTotal.width()),
179                           bbox.y() + bbox.height() / 2 - bboxTotal.height() / 2,
180                           bboxTotal.width(), bboxTotal.height());
181     else
182         bboxTotal.setRect(bbox.x(),
183                           bbox.y() + bbox.height() / 2 - bboxTotal.height() / 2,
184                           bboxTotal.width(), bboxTotal.height());
185
186     // Update frame
187     dp = frame->getXPadding();
188     dp2 = dp / 2;
189     frame->setZValue(dZ_FRAME_LOW);
190     if (treeItem && treeItem->isBranchLikeType() &&
191         ((BranchItem *)treeItem)->getFrameIncludeChildren())
192         frame->setRect(QRectF(bboxTotal.x() + dp2, bboxTotal.y() + dp2,
193                               bboxTotal.width() - dp, bboxTotal.height() - dp));
194     else
195         frame->setRect(QRectF(bbox.x() + dp, bbox.y() + dp,
196                               bbox.width() - 2 * dp, bbox.height() - 2 * dp));
197 }
198
199 void OrnamentedObj::move(double x, double y)
200 {
201     MapObj::move(x, y);
202     positionBBox();
203 }
204
205 void OrnamentedObj::move(QPointF p) { move(p.x(), p.y()); }
206
207 void OrnamentedObj::moveBy(double x, double y)
208 {
209     MapObj::moveBy(x, y);
210     frame->moveBy(x, y);
211     systemFlagRowObj->moveBy(x, y);
212     standardFlagRowObj->moveBy(x, y);
213     heading->moveBy(x, y);
214     updateLinkGeometry();
215     requestReposition();
216 }
217
218 void OrnamentedObj::moveBy(QPointF p) { moveBy(p.x(), p.y()); }
219
220 void OrnamentedObj::move2RelPos(double x, double y)
221 {
222     setRelPos(QPointF(x, y));
223     if (parObj) {
224         QPointF p = parObj->getChildRefPos();
225         move(p.x() + x, p.y() + y);
226     }
227 }
228
229 void OrnamentedObj::move2RelPos(QPointF p) { move2RelPos(p.x(), p.y()); }
230
231 QUuid OrnamentedObj::findSystemFlagUidByPos(const QPointF &p)
232 {
233     return systemFlagRowObj->findFlagUidByPos(p);
234 }
235
236 QRectF OrnamentedObj::getBBoxSystemFlagByUid(const QUuid &u)
237 {
238     FlagObj *fo = systemFlagRowObj->findFlagObjByUid(u);
239     if (fo)
240         return fo->getBBox();
241
242     return QRectF();
243 }