]> git.sven.stormbind.net Git - sven/vym.git/blob - flagrowobj.cpp
a5463125b8836717c113ef309acc3128e86b9b8d
[sven/vym.git] / flagrowobj.cpp
1 #include <QDebug>
2 #include <QToolBar>
3
4 #include "flag.h"
5 #include "flagrowobj.h"
6
7 #include "geometry.h"
8
9 /////////////////////////////////////////////////////////////////
10 // FlagRowObj
11 /////////////////////////////////////////////////////////////////
12 FlagRowObj::FlagRowObj()
13 {
14 //    qDebug() << "Const FlagRowObj ()";
15     init ();
16 }
17
18 FlagRowObj::FlagRowObj(QGraphicsItem *parent):MapObj(parent) 
19 {
20 //    qDebug() << "Const FlagRowObj (p)";
21     init ();
22 }
23
24 FlagRowObj::~FlagRowObj()
25 {
26     //qDebug() << "Destr FlagRowObj";
27     while (!flag.isEmpty())
28         delete (flag.takeFirst() );
29 }
30
31 void FlagRowObj::init ()
32 {
33     showFlags=true;
34 }
35
36 void FlagRowObj::copy (FlagRowObj* other)
37 {
38     MapObj::copy(other);
39     flag.clear();
40     for (int i=0; i<flag.size(); ++i)
41         addFlag (flag.at(i));
42 }
43
44 void FlagRowObj::move(double x, double y)
45 {
46     MapObj::move(x,y);
47     qreal dx=0;
48     for (int i=0; i<flag.size(); ++i)
49     {
50         flag.at(i)->move(x+dx,y);
51         dx+=QSizeF(flag.at(i)->getSize() ).width();
52     }
53 }
54
55 void FlagRowObj::moveBy(double x, double y)
56 {
57     move (x+absPos.x(),y+absPos.y() );
58 }
59
60 void FlagRowObj::setZValue (double z)
61 {
62     for (int i=0; i<flag.size(); ++i)
63         flag.at(i)->setZValue (z);
64 }
65
66 void FlagRowObj::setVisibility (bool v)
67 {
68     MapObj::setVisibility(v);
69     for (int i=0; i<flag.size(); ++i)
70         flag.at(i)->setVisibility (v);
71 }
72
73 FlagObj* FlagRowObj::addFlag (FlagObj *fo)
74 {
75     FlagObj *newfo=new FlagObj (parentItem() );
76     newfo->copy (fo);   // create a deep copy of fo
77     newfo->move (absPos.x() + bbox.width(), absPos.y() );
78     flag.append(newfo);
79     calcBBoxSize();
80     positionBBox();
81     return newfo;
82 }
83
84 QStringList FlagRowObj::activeFlagNames()
85 {
86     QStringList list;
87     for (int i=0; i<flag.size(); ++i)
88         list.append (flag.at(i)->getName());
89     return list;
90 }
91
92 void FlagRowObj::positionBBox()
93 {
94     bbox.moveTopLeft(absPos );
95     clickPoly=QPolygonF (bbox);
96 }
97
98 void FlagRowObj::calcBBoxSize()
99 {
100     QSizeF size(0,0);
101     QSizeF boxsize(0,0);
102     for (int i=0; i<flag.size(); ++i)
103     {
104         size=flag.at(i)->getSize();
105         // add widths
106         boxsize.setWidth(boxsize.width() + size.width() );
107         // maximize height
108         if (size.height() > boxsize.height() ) 
109             boxsize.setHeight(size.height() );
110     }
111     bbox.setSize (boxsize);
112     clickPoly=QPolygonF (bbox);
113 }
114
115 QString FlagRowObj::getFlagName (const QPointF &p)
116 {
117     if (!isInBox (p,clickPoly.boundingRect() )) return "";
118     for (int i=0; i<flag.size(); ++i)
119         if (isInBox (p,flag.at(i)->getClickPoly().boundingRect() )) return flag.at(i)->getName();
120     return "";  
121 }
122
123 bool FlagRowObj::isActive (const QString &foname)
124 {
125     FlagObj *fo=findFlag (foname);
126     if (fo) 
127         return true;
128     else
129         return false;
130 }
131
132 void FlagRowObj::activate (Flag *flag)  
133 {
134     if (flag) 
135     {
136         FlagObj *fo=addFlag (new FlagObj (this));
137         fo->load (flag->getPixmap() );
138         fo->setName (flag->getName() );
139         fo->activate();
140         if (showFlags)  // necessary? only called from FIO::init
141             fo->setVisibility (visible);
142         else
143             fo->setVisibility (false);
144         calcBBoxSize();
145     }
146 }
147
148 void FlagRowObj::deactivate (const QString &foname)
149 {
150     FlagObj *fo=findFlag (foname);
151     if (fo) 
152     {
153         flag.removeAll(fo);
154         delete (fo);
155     }   
156     calcBBoxSize();
157     positionBBox();
158 }
159
160 void FlagRowObj::setShowFlags (bool b)
161 {
162     showFlags=b;
163 }
164
165 FlagObj* FlagRowObj::findFlag (const QString &name)
166 {
167     for (int i=0; i<flag.size(); ++i)
168         if (flag.at(i)->getName()==name) return flag.at(i);
169     return NULL;
170 }
171