selection.cpp
author insilmaril
Mon, 05 Jan 2009 16:31:38 +0000
changeset 732 b77b56f707f1
parent 729 7ddbe3fa34a1
child 735 84ae10f6e3a3
permissions -rw-r--r--
deleting works - partially.
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@0
    24
}
insilmaril@0
    25
insilmaril@0
    26
void Selection::copy(const Selection &other)
insilmaril@0
    27
{
insilmaril@16
    28
	selectList=other.selectList;
insilmaril@421
    29
	lastSelectList=other.lastSelectList;
insilmaril@0
    30
}
insilmaril@0
    31
insilmaril@0
    32
void Selection::clear()
insilmaril@0
    33
{
insilmaril@424
    34
	unselect();
insilmaril@421
    35
	lastSelectList.clear();
insilmaril@0
    36
}
insilmaril@0
    37
insilmaril@729
    38
insilmaril@729
    39
void Selection::update() // FIXME VM emit signal in VM instead
insilmaril@440
    40
{
insilmaril@729
    41
/*
insilmaril@440
    42
	QRectF bbox;
insilmaril@728
    43
	//int w=0;
insilmaril@440
    44
	for (int i=0; i< selectList.count(); ++i) 
insilmaril@440
    45
	{
insilmaril@440
    46
		bbox=selectList.at(i)->getBBox();
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@440
    52
	}	
insilmaril@729
    53
*/
insilmaril@440
    54
}
insilmaril@421
    55
bool Selection::select(LinkableMapObj *lmo)	// TODO no multiselections yet
insilmaril@0
    56
{
insilmaril@424
    57
	if (!selectList.isEmpty()) unselect();
insilmaril@16
    58
	selectList.append (lmo);
insilmaril@728
    59
	/* FIXME VM move to ME
insilmaril@440
    60
	QGraphicsRectItem *sb = scene->addRect(
insilmaril@440
    61
		QRectF(0,0,0,0), 
insilmaril@440
    62
		QPen(color),
insilmaril@440
    63
		color);
insilmaril@440
    64
	sb->setZValue(Z_SELBOX);
insilmaril@460
    65
	sb->show();
insilmaril@440
    66
	selboxList.append (sb);
insilmaril@728
    67
	*/
insilmaril@424
    68
	lmo->select();
insilmaril@460
    69
	update();
insilmaril@723
    70
	mainWindow->updateSatellites (model);	
insilmaril@424
    71
	return true;
insilmaril@0
    72
}
insilmaril@0
    73
insilmaril@421
    74
bool Selection::select (const QString &s)	// TODO no multiselections yet
insilmaril@0
    75
{
insilmaril@641
    76
	LinkableMapObj *lmo=model->findObjBySelect(s);
insilmaril@16
    77
insilmaril@16
    78
	// Finally select the found object
insilmaril@16
    79
	if (lmo)
insilmaril@16
    80
	{
insilmaril@424
    81
		unselect();
insilmaril@16
    82
		select (lmo);
insilmaril@16
    83
		return true;
insilmaril@16
    84
	} 
insilmaril@16
    85
	return false;
insilmaril@16
    86
insilmaril@16
    87
}
insilmaril@16
    88
insilmaril@421
    89
bool Selection::reselect ()	// TODO no multiselections yet
insilmaril@421
    90
{
insilmaril@421
    91
	if (!lastSelectList.isEmpty())
insilmaril@421
    92
	{
insilmaril@421
    93
		select (lastSelectList.first());
insilmaril@421
    94
		return true;
insilmaril@421
    95
	}
insilmaril@421
    96
	return false;
insilmaril@421
    97
insilmaril@421
    98
}
insilmaril@421
    99
insilmaril@16
   100
void Selection::unselect()
insilmaril@16
   101
{
insilmaril@424
   102
	if (!selectList.isEmpty() )
insilmaril@424
   103
	{
insilmaril@424
   104
		for (int i=0; i< selectList.count(); ++i) 
insilmaril@424
   105
			selectList.at(i)->unselect();
insilmaril@424
   106
		lastSelectList=selectList;
insilmaril@424
   107
		selectList.clear();
insilmaril@728
   108
		/* FIXME VM move to ME
insilmaril@728
   109
		while (!selboxList.isEmpty() )	
insilmaril@440
   110
			delete selboxList.takeFirst();
insilmaril@728
   111
		*/	
insilmaril@440
   112
insilmaril@424
   113
	}	
insilmaril@0
   114
}
insilmaril@0
   115
insilmaril@721
   116
bool Selection::isBlocked()
insilmaril@721
   117
{
insilmaril@721
   118
	return blocked;
insilmaril@721
   119
}
insilmaril@721
   120
insilmaril@721
   121
void Selection::block()
insilmaril@721
   122
{
insilmaril@721
   123
	blocked=true;
insilmaril@721
   124
}
insilmaril@721
   125
insilmaril@721
   126
void Selection::unblock()
insilmaril@721
   127
{
insilmaril@721
   128
	blocked=false;
insilmaril@721
   129
}
insilmaril@721
   130
insilmaril@0
   131
bool Selection::isEmpty()
insilmaril@0
   132
{
insilmaril@0
   133
	return selectList.isEmpty();
insilmaril@0
   134
}
insilmaril@0
   135
insilmaril@0
   136
uint Selection::count()
insilmaril@0
   137
{
insilmaril@0
   138
	return selectList.count();
insilmaril@0
   139
}
insilmaril@16
   140
insilmaril@492
   141
Selection::Type Selection::type() // TODO no multiselections yet
insilmaril@16
   142
{
insilmaril@421
   143
	if (!selectList.isEmpty())
insilmaril@421
   144
	{
insilmaril@421
   145
		LinkableMapObj *sel=selectList.first();
insilmaril@421
   146
		if (typeid (*sel)==typeid (BranchObj)) return Branch;
insilmaril@421
   147
		if (typeid (*sel)==typeid (MapCenterObj)) return MapCenter;
insilmaril@421
   148
		if (typeid (*sel)==typeid (FloatImageObj)) return FloatImage;
insilmaril@421
   149
	}
insilmaril@421
   150
	return Undefined;
insilmaril@421
   151
}
insilmaril@421
   152
insilmaril@424
   153
LinkableMapObj* Selection::first()
insilmaril@424
   154
{
insilmaril@424
   155
	if (!selectList.isEmpty())
insilmaril@424
   156
		return selectList.first();
insilmaril@424
   157
	else	
insilmaril@424
   158
		return NULL;
insilmaril@424
   159
}
insilmaril@424
   160
insilmaril@424
   161
LinkableMapObj* Selection::single()
insilmaril@424
   162
{
insilmaril@424
   163
	if (selectList.count() == 1)
insilmaril@424
   164
		return selectList.first();
insilmaril@424
   165
	else	
insilmaril@424
   166
		return NULL;
insilmaril@424
   167
}
insilmaril@424
   168
insilmaril@424
   169
BranchObj* Selection::getBranch()
insilmaril@424
   170
{
insilmaril@424
   171
	if (!selectList.isEmpty())
insilmaril@424
   172
	{
insilmaril@424
   173
		LinkableMapObj *sel=selectList.first();
insilmaril@424
   174
		if (typeid (*sel)==typeid (BranchObj) ||
insilmaril@424
   175
		    typeid (*sel)==typeid (MapCenterObj)) 
insilmaril@424
   176
			return (BranchObj*)sel;
insilmaril@424
   177
	}
insilmaril@424
   178
		return NULL;
insilmaril@424
   179
}
insilmaril@424
   180
insilmaril@726
   181
TreeItem* Selection::getBranchItem()
insilmaril@726
   182
{
insilmaril@726
   183
	BranchObj* bo=getBranch();
insilmaril@728
   184
	if (bo) return bo->getTreeItem(); // FIXME VM get directly from treemodl
insilmaril@726
   185
	return NULL;
insilmaril@726
   186
}
insilmaril@726
   187
insilmaril@728
   188
QModelIndex Selection::getBranchIndex()
insilmaril@728
   189
{
insilmaril@732
   190
	return model->getSelectionModel()->selectedIndexes().first();	// TODO no multiselections yet
insilmaril@728
   191
insilmaril@728
   192
}
insilmaril@728
   193
insilmaril@424
   194
FloatImageObj* Selection::getFloatImage()
insilmaril@424
   195
{
insilmaril@424
   196
	if (!selectList.isEmpty())
insilmaril@424
   197
	{
insilmaril@424
   198
		LinkableMapObj *sel=selectList.first();
insilmaril@424
   199
		if (typeid (*sel)==typeid (FloatImageObj)) 
insilmaril@424
   200
			return (FloatImageObj*)sel;
insilmaril@424
   201
	}
insilmaril@424
   202
		return NULL;
insilmaril@424
   203
}
insilmaril@424
   204
insilmaril@729
   205
QString Selection::getSelectString() // FIXME VM this is also in VM ?! clean up here...
insilmaril@729
   206
// 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