ornamentedobj.cpp
author insilmaril
Fri, 11 Sep 2009 12:56:15 +0000
changeset 794 d922fb6ea482
parent 790 133e2ed6b9c5
child 798 d251c7b2de54
permissions -rw-r--r--
more fixes for collisions
     1 #include "ornamentedobj.h"
     2 #include "linkablemapobj.h"
     3 #include "vymmodel.h"
     4 
     5 /////////////////////////////////////////////////////////////////
     6 // OrnamentedObj
     7 /////////////////////////////////////////////////////////////////
     8 
     9 
    10 OrnamentedObj::OrnamentedObj(QGraphicsScene* s,TreeItem *ti) :LinkableMapObj(s,ti)
    11 {
    12 //    cout << "Const OrnamentedObj (s)\n";
    13     init ();
    14 }
    15 
    16 OrnamentedObj::OrnamentedObj (OrnamentedObj* lmo) : LinkableMapObj (lmo->scene)
    17 {
    18     copy (lmo);
    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(scene);
    33 	heading->move (absPos.x(), absPos.y());
    34 
    35 	systemFlags=new FlagRowObj(scene);
    36 	standardFlags=new FlagRowObj(scene);
    37 
    38 	frame = new FrameObj (scene);
    39 }
    40 
    41 void OrnamentedObj::copy (OrnamentedObj* other)
    42 {
    43     LinkableMapObj::copy(other);
    44 	heading->copy(other->heading);
    45     setColor   (other->heading->getColor());	
    46 
    47 	systemFlags->copy (other->systemFlags);
    48 	standardFlags->copy (other->standardFlags);
    49 
    50 	ornamentsBBox=other->ornamentsBBox;
    51 }
    52 
    53 void OrnamentedObj::setLinkColor()
    54 {
    55 	VymModel *model=treeItem->getModel();
    56 	if (!model) return;
    57 	if (model->getMapLinkColorHint()==HeadingColor)
    58 		LinkableMapObj::setLinkColor (heading->getColor());
    59 	else	
    60 		LinkableMapObj::setLinkColor (model->getMapDefLinkColor());
    61 }
    62 
    63 void OrnamentedObj::setColor (QColor col)
    64 {
    65     heading->setColor(col);
    66 	setLinkColor();
    67 }
    68 
    69 QColor OrnamentedObj::getColor ()
    70 {
    71     return heading->getColor();
    72 }
    73 
    74 FrameObj* OrnamentedObj::getFrame()
    75 {
    76 	return frame;
    77 }
    78 
    79 FrameObj::FrameType OrnamentedObj::getFrameType()
    80 {
    81 	return frame->getFrameType();
    82 }
    83 
    84 QString OrnamentedObj::getFrameTypeName()
    85 {
    86 	return frame->getFrameTypeName();
    87 }
    88 
    89 void OrnamentedObj::setFrameType(const FrameObj::FrameType &t)
    90 {
    91 	frame->setFrameType(t);
    92 	if (t == FrameObj::NoFrame)
    93 		linkpos=LinkableMapObj::Bottom;
    94 	else	
    95 		linkpos=LinkableMapObj::Middle;
    96 
    97 	calcBBoxSize();
    98 	positionBBox();
    99 	requestReposition();
   100 }
   101 
   102 void OrnamentedObj::setFrameType(const QString &t)
   103 {
   104 	frame->setFrameType(t);
   105 	if (frame->getFrameType() == FrameObj::NoFrame)
   106 		linkpos=LinkableMapObj::Bottom;
   107 	else	
   108 		linkpos=LinkableMapObj::Middle;
   109 
   110 	calcBBoxSize();
   111 	positionBBox();
   112 	requestReposition();
   113 }
   114 
   115 void OrnamentedObj::setFramePadding (const int &i)
   116 {
   117 	frame->setPadding (i);
   118 	calcBBoxSize();
   119 	positionBBox();
   120 	requestReposition();
   121 }
   122 
   123 int OrnamentedObj::getFramePadding ()
   124 {
   125 	return frame->getPadding();
   126 }
   127 
   128 void OrnamentedObj::setFrameBorderWidth (const int &i)
   129 {
   130 	frame->setBorderWidth(i);
   131 	calcBBoxSize();
   132 	positionBBox();
   133 	requestReposition();
   134 }
   135 
   136 int OrnamentedObj::getFrameBorderWidth()
   137 {
   138 	return frame->getBorderWidth();
   139 }
   140 
   141 void OrnamentedObj::setFramePenColor(QColor col)
   142 {
   143 	frame->setPenColor (col);
   144 }
   145 
   146 QColor OrnamentedObj::getFramePenColor()
   147 {
   148 	return frame->getPenColor ();
   149 }
   150 
   151 void OrnamentedObj::setFrameBrushColor(QColor col)
   152 {
   153 	frame->setBrushColor (col);
   154 }
   155 
   156 QColor OrnamentedObj::getFrameBrushColor()
   157 {
   158 	return frame->getBrushColor ();
   159 }
   160 
   161 //#include <iostream>  
   162 //using namespace std;
   163 void OrnamentedObj::positionContents()	//FIXME-4 called multiple times for each object after moving an image with mouse
   164 {
   165 //cout << "OO::positionContents topPad="<<topPad<<"  botPad="<<botPad<<"  "<<treeItem->getHeadingStd()<<endl;
   166 	double d=frame->getPadding()/2;
   167 	double x=absPos.x();
   168 	double y=absPos.y();
   169 
   170 	double ox,oy;	// Offset due to padding
   171 
   172 	ox=leftPad + d;
   173 	oy=topPad + d;
   174 	
   175 	systemFlags-> move (ox +x , oy + y );
   176 
   177 	// vertical align heading to bottom
   178     heading->move (ox + x + systemFlags->getBBox().width(),
   179 				   oy + y + ornamentsBBox.height() - heading->getHeight() 
   180 					);
   181 	standardFlags->move (ox +x + heading->getWidth() + systemFlags->getBBox().width() , oy + y );
   182 
   183 	ornamentsBBox.moveTopLeft ( QPointF (ox+x,oy+y));
   184 	clickBox.moveTopLeft (QPointF (ox + x, oy + y));
   185 }
   186 
   187 void OrnamentedObj::move (double x, double y)
   188 {
   189 	MapObj::move (x,y);
   190 	positionContents();
   191 	updateLinkGeometry();
   192 	requestReposition();
   193 }
   194 
   195 void OrnamentedObj::move (QPointF p)
   196 {
   197 	move (p.x(), p.y());
   198 }	
   199 
   200 void OrnamentedObj::moveBy (double x, double y)
   201 {
   202 
   203 	MapObj::moveBy (x,y);
   204     frame->moveBy (x,y);
   205     systemFlags->moveBy (x,y);
   206     standardFlags->moveBy (x,y);
   207     heading->moveBy (x,y);
   208 	updateLinkGeometry();
   209 	requestReposition();
   210 }
   211 
   212 void OrnamentedObj::moveBy (QPointF p)
   213 {
   214 	moveBy (p.x(), p.y());
   215 }	
   216 
   217 void OrnamentedObj::move2RelPos(double x, double y)
   218 {
   219 	setRelPos (QPointF(x,y));
   220 	if (parObj)
   221 	{
   222 		QPointF p=parObj->getChildPos();
   223 		move (p.x()+x, p.y() +y);
   224 	}
   225 }
   226 
   227 void OrnamentedObj::move2RelPos(QPointF p)
   228 {
   229 	move2RelPos (p.x(),p.y());
   230 }
   231 
   232 void OrnamentedObj::activateStandardFlag(Flag *flag)
   233 {
   234 	standardFlags->activate(flag);
   235 	calcBBoxSize();
   236 	positionBBox();
   237 	move (absPos.x(), absPos.y() );
   238 	forceReposition();
   239 }
   240 
   241 void OrnamentedObj::deactivateStandardFlag(const QString &name)
   242 {
   243 	standardFlags->deactivate(name);
   244 	calcBBoxSize();
   245 	positionBBox();
   246 	move (absPos.x(), absPos.y() );
   247 	forceReposition();
   248 }
   249 
   250 
   251 QString OrnamentedObj::getSystemFlagName(const QPointF &p) //FIXME-3
   252 {
   253 	return systemFlags->getFlagName(p);	
   254 }
   255