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