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