selection.cpp
author insilmaril
Tue, 04 Nov 2008 12:09:10 +0000
changeset 728 a8a98a94899a
parent 726 7f43b93242aa
child 729 7ddbe3fa34a1
permissions -rw-r--r--
Selections work (a little bit)
insilmaril@611
     1
#include <typeinfo>
insilmaril@611
     2
insilmaril@0
     3
#include "selection.h"
insilmaril@0
     4
insilmaril@440
     5
#include "mainwindow.h"
insilmaril@641
     6
#include "vymmodel.h"
insilmaril@440
     7
insilmaril@440
     8
insilmaril@440
     9
insilmaril@440
    10
extern Main *mainWindow;
insilmaril@0
    11
insilmaril@0
    12
Selection::Selection()
insilmaril@0
    13
{
insilmaril@721
    14
	blocked=false;
insilmaril@0
    15
}
insilmaril@0
    16
insilmaril@0
    17
Selection::~Selection()
insilmaril@0
    18
{
insilmaril@0
    19
}
insilmaril@0
    20
insilmaril@641
    21
void Selection::setModel (VymModel *m)
insilmaril@0
    22
{
insilmaril@641
    23
	model=m;
insilmaril@728
    24
	selModel=model->getSelectionModel();
insilmaril@0
    25
}
insilmaril@0
    26
insilmaril@0
    27
void Selection::copy(const Selection &other)
insilmaril@0
    28
{
insilmaril@16
    29
	selectList=other.selectList;
insilmaril@421
    30
	lastSelectList=other.lastSelectList;
insilmaril@0
    31
}
insilmaril@0
    32
insilmaril@0
    33
void Selection::clear()
insilmaril@0
    34
{
insilmaril@424
    35
	unselect();
insilmaril@421
    36
	lastSelectList.clear();
insilmaril@0
    37
}
insilmaril@0
    38
insilmaril@728
    39
void Selection::update() // TODO this needs to be adapted to several views
insilmaril@440
    40
{
insilmaril@440
    41
	QRectF bbox;
insilmaril@728
    42
	//int w=0;
insilmaril@440
    43
	for (int i=0; i< selectList.count(); ++i) 
insilmaril@440
    44
	{
insilmaril@440
    45
		bbox=selectList.at(i)->getBBox();
insilmaril@728
    46
		/* FIXME VM move to MapEditor
insilmaril@440
    47
		selboxList.at(i)->setRect (
insilmaril@440
    48
			bbox.x()-w,bbox.y()-w, 
insilmaril@440
    49
			bbox.width()+2*w, bbox.height()+2*w);
insilmaril@440
    50
		selboxList.at(i)->setPen (color);	
insilmaril@440
    51
		selboxList.at(i)->setBrush (color);	
insilmaril@728
    52
		*/
insilmaril@440
    53
	}	
insilmaril@440
    54
}
insilmaril@440
    55
insilmaril@421
    56
bool Selection::select(LinkableMapObj *lmo)	// TODO no multiselections yet
insilmaril@0
    57
{
insilmaril@424
    58
	if (!selectList.isEmpty()) unselect();
insilmaril@16
    59
	selectList.append (lmo);
insilmaril@728
    60
	/* FIXME VM move to ME
insilmaril@440
    61
	QGraphicsRectItem *sb = scene->addRect(
insilmaril@440
    62
		QRectF(0,0,0,0), 
insilmaril@440
    63
		QPen(color),
insilmaril@440
    64
		color);
insilmaril@440
    65
	sb->setZValue(Z_SELBOX);
insilmaril@460
    66
	sb->show();
insilmaril@440
    67
	selboxList.append (sb);
insilmaril@728
    68
	*/
insilmaril@424
    69
	lmo->select();
insilmaril@460
    70
	update();
insilmaril@723
    71
	mainWindow->updateSatellites (model);	
insilmaril@424
    72
	return true;
insilmaril@0
    73
}
insilmaril@0
    74
insilmaril@421
    75
bool Selection::select (const QString &s)	// TODO no multiselections yet
insilmaril@0
    76
{
insilmaril@641
    77
	LinkableMapObj *lmo=model->findObjBySelect(s);
insilmaril@16
    78
insilmaril@16
    79
	// Finally select the found object
insilmaril@16
    80
	if (lmo)
insilmaril@16
    81
	{
insilmaril@424
    82
		unselect();
insilmaril@16
    83
		select (lmo);
insilmaril@16
    84
		return true;
insilmaril@16
    85
	} 
insilmaril@16
    86
	return false;
insilmaril@16
    87
insilmaril@16
    88
}
insilmaril@16
    89
insilmaril@421
    90
bool Selection::reselect ()	// TODO no multiselections yet
insilmaril@421
    91
{
insilmaril@421
    92
	if (!lastSelectList.isEmpty())
insilmaril@421
    93
	{
insilmaril@421
    94
		select (lastSelectList.first());
insilmaril@421
    95
		return true;
insilmaril@421
    96
	}
insilmaril@421
    97
	return false;
insilmaril@421
    98
insilmaril@421
    99
}
insilmaril@421
   100
insilmaril@16
   101
void Selection::unselect()
insilmaril@16
   102
{
insilmaril@424
   103
	if (!selectList.isEmpty() )
insilmaril@424
   104
	{
insilmaril@424
   105
		for (int i=0; i< selectList.count(); ++i) 
insilmaril@424
   106
			selectList.at(i)->unselect();
insilmaril@424
   107
		lastSelectList=selectList;
insilmaril@424
   108
		selectList.clear();
insilmaril@728
   109
		/* FIXME VM move to ME
insilmaril@728
   110
		while (!selboxList.isEmpty() )	
insilmaril@440
   111
			delete selboxList.takeFirst();
insilmaril@728
   112
		*/	
insilmaril@440
   113
insilmaril@424
   114
	}	
insilmaril@0
   115
}
insilmaril@0
   116
insilmaril@721
   117
bool Selection::isBlocked()
insilmaril@721
   118
{
insilmaril@721
   119
	return blocked;
insilmaril@721
   120
}
insilmaril@721
   121
insilmaril@721
   122
void Selection::block()
insilmaril@721
   123
{
insilmaril@721
   124
	blocked=true;
insilmaril@721
   125
}
insilmaril@721
   126
insilmaril@721
   127
void Selection::unblock()
insilmaril@721
   128
{
insilmaril@721
   129
	blocked=false;
insilmaril@721
   130
}
insilmaril@721
   131
insilmaril@0
   132
bool Selection::isEmpty()
insilmaril@0
   133
{
insilmaril@0
   134
	return selectList.isEmpty();
insilmaril@0
   135
}
insilmaril@0
   136
insilmaril@0
   137
uint Selection::count()
insilmaril@0
   138
{
insilmaril@0
   139
	return selectList.count();
insilmaril@0
   140
}
insilmaril@16
   141
insilmaril@492
   142
Selection::Type Selection::type() // TODO no multiselections yet
insilmaril@16
   143
{
insilmaril@421
   144
	if (!selectList.isEmpty())
insilmaril@421
   145
	{
insilmaril@421
   146
		LinkableMapObj *sel=selectList.first();
insilmaril@421
   147
		if (typeid (*sel)==typeid (BranchObj)) return Branch;
insilmaril@421
   148
		if (typeid (*sel)==typeid (MapCenterObj)) return MapCenter;
insilmaril@421
   149
		if (typeid (*sel)==typeid (FloatImageObj)) return FloatImage;
insilmaril@421
   150
	}
insilmaril@421
   151
	return Undefined;
insilmaril@421
   152
}
insilmaril@421
   153
insilmaril@424
   154
LinkableMapObj* Selection::first()
insilmaril@424
   155
{
insilmaril@424
   156
	if (!selectList.isEmpty())
insilmaril@424
   157
		return selectList.first();
insilmaril@424
   158
	else	
insilmaril@424
   159
		return NULL;
insilmaril@424
   160
}
insilmaril@424
   161
insilmaril@424
   162
LinkableMapObj* Selection::single()
insilmaril@424
   163
{
insilmaril@424
   164
	if (selectList.count() == 1)
insilmaril@424
   165
		return selectList.first();
insilmaril@424
   166
	else	
insilmaril@424
   167
		return NULL;
insilmaril@424
   168
}
insilmaril@424
   169
insilmaril@424
   170
BranchObj* Selection::getBranch()
insilmaril@424
   171
{
insilmaril@424
   172
	if (!selectList.isEmpty())
insilmaril@424
   173
	{
insilmaril@424
   174
		LinkableMapObj *sel=selectList.first();
insilmaril@424
   175
		if (typeid (*sel)==typeid (BranchObj) ||
insilmaril@424
   176
		    typeid (*sel)==typeid (MapCenterObj)) 
insilmaril@424
   177
			return (BranchObj*)sel;
insilmaril@424
   178
	}
insilmaril@424
   179
		return NULL;
insilmaril@424
   180
}
insilmaril@424
   181
insilmaril@726
   182
TreeItem* Selection::getBranchItem()
insilmaril@726
   183
{
insilmaril@726
   184
	BranchObj* bo=getBranch();
insilmaril@728
   185
	if (bo) return bo->getTreeItem(); // FIXME VM get directly from treemodl
insilmaril@726
   186
	return NULL;
insilmaril@726
   187
}
insilmaril@726
   188
insilmaril@728
   189
QModelIndex Selection::getBranchIndex()
insilmaril@728
   190
{
insilmaril@728
   191
	return selModel->selectedIndexes().first();	// TODO no multiselections yet
insilmaril@728
   192
insilmaril@728
   193
}
insilmaril@728
   194
insilmaril@424
   195
FloatImageObj* Selection::getFloatImage()
insilmaril@424
   196
{
insilmaril@424
   197
	if (!selectList.isEmpty())
insilmaril@424
   198
	{
insilmaril@424
   199
		LinkableMapObj *sel=selectList.first();
insilmaril@424
   200
		if (typeid (*sel)==typeid (FloatImageObj)) 
insilmaril@424
   201
			return (FloatImageObj*)sel;
insilmaril@424
   202
	}
insilmaril@424
   203
		return NULL;
insilmaril@424
   204
}
insilmaril@424
   205
insilmaril@421
   206
QString Selection::getSelectString()// TODO no multiselections yet
insilmaril@421
   207
{
insilmaril@16
   208
	if (selectList.count()==1)
insilmaril@650
   209
	{
insilmaril@650
   210
		return model->getSelectString (selectList.first() );
insilmaril@650
   211
	}
insilmaril@16
   212
	else
insilmaril@16
   213
		return"";
insilmaril@16
   214
}
insilmaril@16
   215
insilmaril@16
   216