vymmodel.cpp
author insilmaril
Tue, 15 Jan 2008 10:54:41 +0000
changeset 650 65c5a0c28d20
child 652 700553af9ca5
permissions -rw-r--r--
added some missing files
insilmaril@650
     1
#include <QApplication>
insilmaril@650
     2
insilmaril@650
     3
#include "geometry.h"		// for addBBox
insilmaril@650
     4
#include "vymmodel.h"
insilmaril@650
     5
insilmaril@650
     6
VymModel::VymModel() 
insilmaril@650
     7
{
insilmaril@650
     8
//    cout << "Const VymModel\n";
insilmaril@650
     9
}
insilmaril@650
    10
insilmaril@650
    11
insilmaril@650
    12
VymModel::~VymModel() 
insilmaril@650
    13
{
insilmaril@650
    14
//    cout << "Destr VymModel\n";
insilmaril@650
    15
}	
insilmaril@650
    16
insilmaril@650
    17
void VymModel::clear() 
insilmaril@650
    18
{
insilmaril@650
    19
	for (int i=0; i<mapCenters.count(); i++)
insilmaril@650
    20
		mapCenters.at(i)->clear();
insilmaril@650
    21
	mapCenters.clear();	
insilmaril@650
    22
}
insilmaril@650
    23
insilmaril@650
    24
void VymModel::init () 
insilmaril@650
    25
{
insilmaril@650
    26
}
insilmaril@650
    27
insilmaril@650
    28
void VymModel::setMapEditor(MapEditor *me)
insilmaril@650
    29
{
insilmaril@650
    30
	mapEditor=me;
insilmaril@650
    31
	for (int i=0; i<mapCenters.count(); i++)
insilmaril@650
    32
		mapCenters.at(i)->setMapEditor(mapEditor);
insilmaril@650
    33
}
insilmaril@650
    34
insilmaril@650
    35
MapEditor* VymModel::getMapEditor()
insilmaril@650
    36
{
insilmaril@650
    37
	return mapEditor;
insilmaril@650
    38
}
insilmaril@650
    39
insilmaril@650
    40
void VymModel::setVersion (const QString &s)
insilmaril@650
    41
{
insilmaril@650
    42
	version=s;
insilmaril@650
    43
}
insilmaril@650
    44
insilmaril@650
    45
void VymModel::setAuthor (const QString &s)
insilmaril@650
    46
{
insilmaril@650
    47
	author=s;
insilmaril@650
    48
}
insilmaril@650
    49
insilmaril@650
    50
QString VymModel::getAuthor()
insilmaril@650
    51
{
insilmaril@650
    52
	return author;
insilmaril@650
    53
}
insilmaril@650
    54
insilmaril@650
    55
void VymModel::setComment (const QString &s)
insilmaril@650
    56
{
insilmaril@650
    57
	comment=s;
insilmaril@650
    58
}
insilmaril@650
    59
insilmaril@650
    60
QString VymModel::getComment ()
insilmaril@650
    61
{
insilmaril@650
    62
	return comment;
insilmaril@650
    63
}
insilmaril@650
    64
insilmaril@650
    65
QString VymModel::getDate ()
insilmaril@650
    66
{
insilmaril@650
    67
	return QDate::currentDate().toString ("yyyy-MM-dd");
insilmaril@650
    68
}
insilmaril@650
    69
insilmaril@650
    70
void VymModel::setScene (QGraphicsScene *s)
insilmaril@650
    71
{
insilmaril@650
    72
	mapScene=s;
insilmaril@650
    73
    init();	// Here we have a mapScene set, 
insilmaril@650
    74
			// which is (still) needed to create MapCenters
insilmaril@650
    75
}
insilmaril@650
    76
insilmaril@650
    77
QGraphicsScene* VymModel::getScene ()
insilmaril@650
    78
{
insilmaril@650
    79
	return mapScene;
insilmaril@650
    80
}
insilmaril@650
    81
insilmaril@650
    82
MapCenterObj* VymModel::addMapCenter()
insilmaril@650
    83
{
insilmaril@650
    84
	MapCenterObj *mapCenter = new MapCenterObj(mapScene);
insilmaril@650
    85
    mapCenter->setVisibility (true);
insilmaril@650
    86
	mapCenter->setHeading (QApplication::translate("Heading of mapcenter in new map", "New map"));
insilmaril@650
    87
	mapCenter->setMapEditor(mapEditor);		//FIXME needed to get defLinkStyle, mapLinkColorHint ... for later added objects
insilmaril@650
    88
	mapCenters.append(mapCenter);
insilmaril@650
    89
	return mapCenter;
insilmaril@650
    90
}
insilmaril@650
    91
insilmaril@650
    92
MapCenterObj *VymModel::removeMapCenter(MapCenterObj* mco)
insilmaril@650
    93
{
insilmaril@650
    94
	int i=mapCenters.indexOf (mco);
insilmaril@650
    95
	if (i>=0)
insilmaril@650
    96
	{
insilmaril@650
    97
		mapCenters.removeAt (i);
insilmaril@650
    98
		delete (mco);
insilmaril@650
    99
		if (i>0) return mapCenters.at(i-1);	// Return previous MCO
insilmaril@650
   100
	}
insilmaril@650
   101
	return NULL;
insilmaril@650
   102
}
insilmaril@650
   103
insilmaril@650
   104
// Only as long as we dont have Model/View yet
insilmaril@650
   105
LinkableMapObj* VymModel::getSelection()
insilmaril@650
   106
{
insilmaril@650
   107
	return mapEditor->getSelection();
insilmaril@650
   108
}
insilmaril@650
   109
BranchObj* VymModel::getSelectedBranch()
insilmaril@650
   110
{
insilmaril@650
   111
	return mapEditor->getSelectedBranch();
insilmaril@650
   112
}
insilmaril@650
   113
insilmaril@650
   114
bool VymModel::select (const QString &s)
insilmaril@650
   115
{
insilmaril@650
   116
	LinkableMapObj *lmo=model->findObjBySelect(s);
insilmaril@650
   117
insilmaril@650
   118
/*
insilmaril@650
   119
	// Finally select the found object
insilmaril@650
   120
	if (lmo)
insilmaril@650
   121
	{
insilmaril@650
   122
		xelection.unselect();
insilmaril@650
   123
		xelection.select(lmo);
insilmaril@650
   124
		xelection.update();
insilmaril@650
   125
		ensureSelectionVisible();
insilmaril@650
   126
		sendSelection ();
insilmaril@650
   127
		return true;
insilmaril@650
   128
	} 
insilmaril@650
   129
	return false;
insilmaril@650
   130
*/
insilmaril@650
   131
}
insilmaril@650
   132
insilmaril@650
   133
QString VymModel::getSelectString (LinkableMapObj *lmo)
insilmaril@650
   134
{
insilmaril@650
   135
	QString s;
insilmaril@650
   136
	if (!lmo) return s;
insilmaril@650
   137
	if (typeid(*lmo)==typeid(BranchObj) ||
insilmaril@650
   138
		typeid(*lmo)==typeid(MapCenterObj) )
insilmaril@650
   139
	{	
insilmaril@650
   140
		LinkableMapObj *par=lmo->getParObj();
insilmaril@650
   141
		if (par)
insilmaril@650
   142
		{
insilmaril@650
   143
			if (lmo->getDepth() ==1)
insilmaril@650
   144
				// Mainbranch, return 
insilmaril@650
   145
				s= "bo:" + QString("%1").arg(((BranchObj*)lmo)->getNum());
insilmaril@650
   146
			else	
insilmaril@650
   147
				// Branch, call myself recursively
insilmaril@650
   148
				s= getSelectString(par) + ",bo:" + QString("%1").arg(((BranchObj*)lmo)->getNum());
insilmaril@650
   149
		} else
insilmaril@650
   150
		{
insilmaril@650
   151
			// MapCenter
insilmaril@650
   152
			int i=mapCenters.indexOf ((MapCenterObj*)lmo);
insilmaril@650
   153
			if (i>=0) s=QString("mc:%1").arg(i);
insilmaril@650
   154
		}	
insilmaril@650
   155
	}	
insilmaril@650
   156
	return s;
insilmaril@650
   157
insilmaril@650
   158
}
insilmaril@650
   159
insilmaril@650
   160
/* FIXME copied from MCO, still needed?
insilmaril@650
   161
void VymModel::move (double x, double y)
insilmaril@650
   162
{
insilmaril@650
   163
	BranchObj::move(x,y);
insilmaril@650
   164
}
insilmaril@650
   165
insilmaril@650
   166
void VymModel::moveBy (double x, double y)
insilmaril@650
   167
{
insilmaril@650
   168
	BranchObj::moveBy(x,y);
insilmaril@650
   169
}
insilmaril@650
   170
insilmaril@650
   171
void VymModel::moveAll (double x, double y)
insilmaril@650
   172
{
insilmaril@650
   173
	// Get rel. position
insilmaril@650
   174
	double dx=x-absPos.x();
insilmaril@650
   175
	double dy=y-absPos.y();
insilmaril@650
   176
insilmaril@650
   177
	// Move myself and branches
insilmaril@650
   178
	moveAllBy (dx,dy);
insilmaril@650
   179
}
insilmaril@650
   180
insilmaril@650
   181
void VymModel::moveAllBy (double dx, double dy)
insilmaril@650
   182
{
insilmaril@650
   183
	// Move myself and childs
insilmaril@650
   184
	BranchObj::moveBy(dx,dy);
insilmaril@650
   185
}
insilmaril@650
   186
*/
insilmaril@650
   187
BranchObj* VymModel::first()
insilmaril@650
   188
{
insilmaril@650
   189
	if (mapCenters.count()>0) 
insilmaril@650
   190
		return mapCenters.first();
insilmaril@650
   191
	else	
insilmaril@650
   192
		return NULL;
insilmaril@650
   193
}
insilmaril@650
   194
	
insilmaril@650
   195
BranchObj* VymModel::next(BranchObj *bo_start)
insilmaril@650
   196
{
insilmaril@650
   197
	BranchObj *rbo;
insilmaril@650
   198
	BranchObj *bo=bo_start;
insilmaril@650
   199
	if (bo)
insilmaril@650
   200
	{
insilmaril@650
   201
		rbo=bo->next();
insilmaril@650
   202
		if (rbo) return rbo;
insilmaril@650
   203
insilmaril@650
   204
		// Try to find MapCenter of bo
insilmaril@650
   205
		while (bo->getDepth()>0) bo=(BranchObj*)bo->getParObj();
insilmaril@650
   206
insilmaril@650
   207
insilmaril@650
   208
		// Try to find next MapCenter
insilmaril@650
   209
		int i=mapCenters.indexOf ((MapCenterObj*)bo);
insilmaril@650
   210
		if (i+1 > mapCenters.count() || i<0) return NULL;
insilmaril@650
   211
		if (mapCenters.at(i)!=bo_start)
insilmaril@650
   212
			return mapCenters.at(i);
insilmaril@650
   213
	} 
insilmaril@650
   214
	return NULL;
insilmaril@650
   215
insilmaril@650
   216
}
insilmaril@650
   217
	
insilmaril@650
   218
	/* FIXME copied from MCO, still needed?
insilmaril@650
   219
void VymModel::updateLink()
insilmaril@650
   220
{
insilmaril@650
   221
	// set childPos to middle of MapCenterObj
insilmaril@650
   222
	childPos.setX( clickBox.topLeft().x() + (int)(clickBox.width())/2 );
insilmaril@650
   223
	childPos.setY( clickBox.topLeft().y() + (int)(clickBox.height())/2 );
insilmaril@650
   224
	parPos=childPos;		
insilmaril@650
   225
	for (int i=0; i<branch.size(); ++i)
insilmaril@650
   226
		branch.at(i)->updateLink();
insilmaril@650
   227
}
insilmaril@650
   228
insilmaril@650
   229
*/
insilmaril@650
   230
void VymModel::updateRelPositions()
insilmaril@650
   231
{
insilmaril@650
   232
	for (int i=0; i<mapCenters.count(); i++)
insilmaril@650
   233
		mapCenters.at(i)->updateRelPositions();
insilmaril@650
   234
}
insilmaril@650
   235
insilmaril@650
   236
void VymModel::reposition()
insilmaril@650
   237
{
insilmaril@650
   238
	for (int i=0;i<mapCenters.count(); i++)
insilmaril@650
   239
		mapCenters.at(i)->reposition();	//	for positioning heading
insilmaril@650
   240
}
insilmaril@650
   241
insilmaril@650
   242
void VymModel::setHideTmp (HideTmpMode mode)
insilmaril@650
   243
{
insilmaril@650
   244
	for (int i=0;i<mapCenters.count(); i++)
insilmaril@650
   245
		mapCenters.at(i)->setHideTmp (mode);	
insilmaril@650
   246
}
insilmaril@650
   247
insilmaril@650
   248
QRectF VymModel::getTotalBBox()
insilmaril@650
   249
{
insilmaril@650
   250
	QRectF r;
insilmaril@650
   251
	for (int i=0;i<mapCenters.count(); i++)
insilmaril@650
   252
		r=addBBox (mapCenters.at(i)->getTotalBBox(), r);
insilmaril@650
   253
	return r;	
insilmaril@650
   254
}
insilmaril@650
   255
insilmaril@650
   256
LinkableMapObj* VymModel::findMapObj(QPointF p, LinkableMapObj *excludeLMO)
insilmaril@650
   257
{
insilmaril@650
   258
	LinkableMapObj *lmo;
insilmaril@650
   259
insilmaril@650
   260
	for (int i=0;i<mapCenters.count(); i++)
insilmaril@650
   261
	{
insilmaril@650
   262
		lmo=mapCenters.at(i)->findMapObj (p,excludeLMO);
insilmaril@650
   263
		if (lmo) return lmo;
insilmaril@650
   264
	}
insilmaril@650
   265
	return NULL;
insilmaril@650
   266
}
insilmaril@650
   267
insilmaril@650
   268
LinkableMapObj* VymModel::findObjBySelect(const QString &s)
insilmaril@650
   269
{
insilmaril@650
   270
	LinkableMapObj *lmo;
insilmaril@650
   271
	if (!s.isEmpty() )
insilmaril@650
   272
	{
insilmaril@650
   273
		QString part;
insilmaril@650
   274
		QString typ;
insilmaril@650
   275
		QString num;
insilmaril@650
   276
		part=s.section(",",0,0);
insilmaril@650
   277
		typ=part.left (3);
insilmaril@650
   278
		num=part.right(part.length() - 3);
insilmaril@650
   279
		if (typ=="mc" && num.toInt()>=0 && num.toInt() <mapCenters.count() )
insilmaril@650
   280
			return mapCenters.at(num.toInt() );
insilmaril@650
   281
	}		
insilmaril@650
   282
insilmaril@650
   283
	for (int i=0; i<mapCenters.count(); i++)
insilmaril@650
   284
	{
insilmaril@650
   285
		lmo=mapCenters.at(i)->findObjBySelect(s);
insilmaril@650
   286
		if (lmo) return lmo;
insilmaril@650
   287
	}	
insilmaril@650
   288
	return NULL;
insilmaril@650
   289
}
insilmaril@650
   290
insilmaril@650
   291
LinkableMapObj* VymModel::findID (const QString &s)
insilmaril@650
   292
{
insilmaril@650
   293
	LinkableMapObj *lmo;
insilmaril@650
   294
	for (int i=0; i<mapCenters.count(); i++)
insilmaril@650
   295
	{
insilmaril@650
   296
		lmo=mapCenters.at(i)->findID (s);
insilmaril@650
   297
		if (lmo) return lmo;
insilmaril@650
   298
	}	
insilmaril@650
   299
	return NULL;
insilmaril@650
   300
}
insilmaril@650
   301
insilmaril@650
   302
QString VymModel::saveToDir (const QString &tmpdir,const QString &prefix, int verbose, const QPointF &offset)
insilmaril@650
   303
{
insilmaril@650
   304
    QString s;
insilmaril@650
   305
insilmaril@650
   306
	for (int i=0; i<mapCenters.count(); i++)
insilmaril@650
   307
		s+=mapCenters.at(i)->saveToDir (tmpdir,prefix,verbose,offset);
insilmaril@650
   308
    return s;
insilmaril@650
   309
}
insilmaril@650
   310
insilmaril@650
   311