selection.cpp
author insilmaril
Thu, 30 Jul 2009 07:40:05 +0000
branchrelease-1-12-maintained
changeset 74 98449ef9eccd
parent 0 7a96bd401351
child 78 1a72c8f24c6e
permissions -rw-r--r--
Bugfix: no undo for deleted mapcenters
insilmaril@74
     1
#include <typeinfo>
insilmaril@74
     2
insilmaril@0
     3
#include "selection.h"
insilmaril@0
     4
insilmaril@74
     5
#include "mainwindow.h"
insilmaril@74
     6
#include "mapeditor.h"
insilmaril@74
     7
#include "vymmodel.h"
insilmaril@74
     8
insilmaril@74
     9
insilmaril@74
    10
insilmaril@74
    11
extern Main *mainWindow;
insilmaril@0
    12
insilmaril@0
    13
Selection::Selection()
insilmaril@0
    14
{
insilmaril@74
    15
	color= QColor(255,255,0);
insilmaril@0
    16
}
insilmaril@0
    17
insilmaril@0
    18
Selection::~Selection()
insilmaril@0
    19
{
insilmaril@0
    20
}
insilmaril@0
    21
insilmaril@74
    22
void Selection::setModel (VymModel *m)
insilmaril@0
    23
{
insilmaril@74
    24
	model=m;
insilmaril@74
    25
	scene=model->getScene();
insilmaril@0
    26
}
insilmaril@0
    27
insilmaril@0
    28
void Selection::copy(const Selection &other)
insilmaril@0
    29
{
insilmaril@74
    30
	selectList=other.selectList;
insilmaril@74
    31
	lastSelectList=other.lastSelectList;
insilmaril@0
    32
}
insilmaril@0
    33
insilmaril@0
    34
void Selection::clear()
insilmaril@0
    35
{
insilmaril@74
    36
	unselect();
insilmaril@74
    37
	lastSelectList.clear();
insilmaril@0
    38
}
insilmaril@0
    39
insilmaril@74
    40
void Selection::update()
insilmaril@0
    41
{
insilmaril@74
    42
	QRectF bbox;
insilmaril@74
    43
	int w=0;
insilmaril@74
    44
	for (int i=0; i< selectList.count(); ++i) 
insilmaril@74
    45
	{
insilmaril@74
    46
		bbox=selectList.at(i)->getBBox();
insilmaril@74
    47
		selboxList.at(i)->setRect (
insilmaril@74
    48
			bbox.x()-w,bbox.y()-w, 
insilmaril@74
    49
			bbox.width()+2*w, bbox.height()+2*w);
insilmaril@74
    50
		selboxList.at(i)->setPen (color);	
insilmaril@74
    51
		selboxList.at(i)->setBrush (color);	
insilmaril@74
    52
	}	
insilmaril@0
    53
}
insilmaril@0
    54
insilmaril@74
    55
void Selection::setColor (QColor col)
insilmaril@0
    56
{
insilmaril@74
    57
	color=col;
insilmaril@74
    58
	update();
insilmaril@74
    59
}
insilmaril@74
    60
insilmaril@74
    61
QColor Selection::getColor ()
insilmaril@74
    62
{
insilmaril@74
    63
	return color;
insilmaril@74
    64
}
insilmaril@74
    65
insilmaril@74
    66
bool Selection::select(LinkableMapObj *lmo)	// TODO no multiselections yet
insilmaril@74
    67
{
insilmaril@74
    68
	if (!selectList.isEmpty()) unselect();
insilmaril@74
    69
	selectList.append (lmo);
insilmaril@74
    70
	QGraphicsRectItem *sb = scene->addRect(
insilmaril@74
    71
		QRectF(0,0,0,0), 
insilmaril@74
    72
		QPen(color),
insilmaril@74
    73
		color);
insilmaril@74
    74
	sb->setZValue(Z_SELBOX);
insilmaril@74
    75
	sb->show();
insilmaril@74
    76
	selboxList.append (sb);
insilmaril@74
    77
	lmo->select();
insilmaril@74
    78
	update();
insilmaril@74
    79
	mainWindow->updateSatellites (model->getMapEditor() );	
insilmaril@74
    80
	return true;
insilmaril@74
    81
}
insilmaril@74
    82
insilmaril@74
    83
bool Selection::select (const QString &s)	// TODO no multiselections yet
insilmaril@74
    84
{
insilmaril@74
    85
	if (s.isEmpty())
insilmaril@74
    86
	{
insilmaril@74
    87
		unselect();
insilmaril@74
    88
		return true;
insilmaril@74
    89
	}
insilmaril@74
    90
insilmaril@74
    91
	LinkableMapObj *lmo=model->findObjBySelect(s);
insilmaril@74
    92
insilmaril@74
    93
	// Finally select the found object
insilmaril@74
    94
	if (lmo)
insilmaril@74
    95
	{
insilmaril@74
    96
		unselect();
insilmaril@74
    97
		select (lmo);
insilmaril@74
    98
		return true;
insilmaril@74
    99
	} 
insilmaril@74
   100
	return false;
insilmaril@74
   101
insilmaril@74
   102
}
insilmaril@74
   103
insilmaril@74
   104
bool Selection::reselect ()	// TODO no multiselections yet
insilmaril@74
   105
{
insilmaril@74
   106
	if (!lastSelectList.isEmpty())
insilmaril@74
   107
	{
insilmaril@74
   108
		select (lastSelectList.first());
insilmaril@74
   109
		return true;
insilmaril@74
   110
	}
insilmaril@74
   111
	return false;
insilmaril@74
   112
insilmaril@74
   113
}
insilmaril@74
   114
insilmaril@74
   115
void Selection::unselect()
insilmaril@74
   116
{
insilmaril@74
   117
	if (!selectList.isEmpty() )
insilmaril@74
   118
	{
insilmaril@74
   119
		for (int i=0; i< selectList.count(); ++i) 
insilmaril@74
   120
			selectList.at(i)->unselect();
insilmaril@74
   121
		lastSelectList=selectList;
insilmaril@74
   122
		selectList.clear();
insilmaril@74
   123
		while (!selboxList.isEmpty() )
insilmaril@74
   124
			delete selboxList.takeFirst();
insilmaril@74
   125
insilmaril@74
   126
	}	
insilmaril@0
   127
}
insilmaril@0
   128
insilmaril@0
   129
bool Selection::isEmpty()
insilmaril@0
   130
{
insilmaril@0
   131
	return selectList.isEmpty();
insilmaril@0
   132
}
insilmaril@0
   133
insilmaril@0
   134
uint Selection::count()
insilmaril@0
   135
{
insilmaril@0
   136
	return selectList.count();
insilmaril@0
   137
}
insilmaril@74
   138
insilmaril@74
   139
Selection::Type Selection::type() // TODO no multiselections yet
insilmaril@74
   140
{
insilmaril@74
   141
	if (!selectList.isEmpty())
insilmaril@74
   142
	{
insilmaril@74
   143
		LinkableMapObj *sel=selectList.first();
insilmaril@74
   144
		if (typeid (*sel)==typeid (BranchObj)) return Branch;
insilmaril@74
   145
		if (typeid (*sel)==typeid (MapCenterObj)) return MapCenter;
insilmaril@74
   146
		if (typeid (*sel)==typeid (FloatImageObj)) return FloatImage;
insilmaril@74
   147
	}
insilmaril@74
   148
	return Undefined;
insilmaril@74
   149
}
insilmaril@74
   150
insilmaril@74
   151
LinkableMapObj* Selection::first()
insilmaril@74
   152
{
insilmaril@74
   153
	if (!selectList.isEmpty())
insilmaril@74
   154
		return selectList.first();
insilmaril@74
   155
	else	
insilmaril@74
   156
		return NULL;
insilmaril@74
   157
}
insilmaril@74
   158
insilmaril@74
   159
LinkableMapObj* Selection::single()
insilmaril@74
   160
{
insilmaril@74
   161
	if (selectList.count() == 1)
insilmaril@74
   162
		return selectList.first();
insilmaril@74
   163
	else	
insilmaril@74
   164
		return NULL;
insilmaril@74
   165
}
insilmaril@74
   166
insilmaril@74
   167
BranchObj* Selection::getBranch()
insilmaril@74
   168
{
insilmaril@74
   169
	if (!selectList.isEmpty())
insilmaril@74
   170
	{
insilmaril@74
   171
		LinkableMapObj *sel=selectList.first();
insilmaril@74
   172
		if (typeid (*sel)==typeid (BranchObj) ||
insilmaril@74
   173
		    typeid (*sel)==typeid (MapCenterObj)) 
insilmaril@74
   174
			return (BranchObj*)sel;
insilmaril@74
   175
	}
insilmaril@74
   176
		return NULL;
insilmaril@74
   177
}
insilmaril@74
   178
insilmaril@74
   179
FloatImageObj* Selection::getFloatImage()
insilmaril@74
   180
{
insilmaril@74
   181
	if (!selectList.isEmpty())
insilmaril@74
   182
	{
insilmaril@74
   183
		LinkableMapObj *sel=selectList.first();
insilmaril@74
   184
		if (typeid (*sel)==typeid (FloatImageObj)) 
insilmaril@74
   185
			return (FloatImageObj*)sel;
insilmaril@74
   186
	}
insilmaril@74
   187
		return NULL;
insilmaril@74
   188
}
insilmaril@74
   189
insilmaril@74
   190
QString Selection::getSelectString()// TODO no multiselections yet
insilmaril@74
   191
{
insilmaril@74
   192
	if (selectList.count()==1)
insilmaril@74
   193
	{
insilmaril@74
   194
		return model->getSelectString (selectList.first() );
insilmaril@74
   195
	}
insilmaril@74
   196
	else
insilmaril@74
   197
		return"";
insilmaril@74
   198
}
insilmaril@74
   199
insilmaril@74
   200