treeitem.cpp
author insilmaril
Mon, 20 Apr 2009 10:42:05 +0000
changeset 754 db0ec4bcf416
parent 753 25a77484ec72
child 755 ed5b407975b3
permissions -rw-r--r--
minor fixes
insilmaril@746
     1
#include <iostream>
insilmaril@746
     2
using namespace std;
insilmaril@746
     3
insilmaril@725
     4
#include <QStringList>
insilmaril@725
     5
insilmaril@750
     6
#include "treeitem.h"
insilmaril@750
     7
insilmaril@741
     8
#include "branchobj.h"
insilmaril@750
     9
#include "branchitem.h"
insilmaril@746
    10
#include "vymmodel.h"
insilmaril@725
    11
insilmaril@725
    12
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
insilmaril@725
    13
{
insilmaril@746
    14
	model=NULL;
insilmaril@746
    15
insilmaril@725
    16
    parentItem = parent;
insilmaril@725
    17
    itemData = data;
insilmaril@726
    18
	lmo=NULL;
insilmaril@738
    19
insilmaril@738
    20
	branchOffset=0;
insilmaril@741
    21
	branchCounter=0;
insilmaril@738
    22
	lastSelectedBranchNum=-1;
insilmaril@746
    23
insilmaril@746
    24
	note.setNote(""); 
insilmaril@746
    25
	// note.setFontHint (textEditor->getFontHintDefault() );	//FIXME-2
insilmaril@746
    26
	// isNoteInEditor=false;
insilmaril@753
    27
insilmaril@753
    28
	hidden=false;
insilmaril@754
    29
insilmaril@754
    30
	// Reset ID
insilmaril@754
    31
	objID="";
insilmaril@754
    32
insilmaril@754
    33
insilmaril@725
    34
}
insilmaril@725
    35
insilmaril@725
    36
TreeItem::~TreeItem()
insilmaril@725
    37
{
insilmaril@725
    38
    qDeleteAll(childItems);
insilmaril@725
    39
}
insilmaril@725
    40
insilmaril@746
    41
QString TreeItem::saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset)
insilmaril@746
    42
{
insilmaril@746
    43
	qWarning ("TreeItem::saveToDir called directly");
insilmaril@746
    44
	return QString();
insilmaril@746
    45
}
insilmaril@746
    46
insilmaril@746
    47
insilmaril@746
    48
/*
insilmaril@753
    49
void TreeItem::copy (OrnamentedObj* other)	//FIXME-2	probably need deep copy of branches and data!
insilmaril@746
    50
insilmaril@746
    51
{
insilmaril@746
    52
	note.copy (other->note);
insilmaril@746
    53
	model=other->model;
insilmaril@754
    54
	hideExport=officially 
insilmaril@754
    55
	other->hideExport;
insilmaril@746
    56
}
insilmaril@746
    57
*/
insilmaril@746
    58
insilmaril@746
    59
void TreeItem::setModel (VymModel *m)
insilmaril@746
    60
{
insilmaril@746
    61
	model=m;
insilmaril@746
    62
}
insilmaril@746
    63
insilmaril@746
    64
VymModel* TreeItem::getModel ()
insilmaril@746
    65
{
insilmaril@746
    66
	return model;
insilmaril@746
    67
}
insilmaril@741
    68
insilmaril@725
    69
void TreeItem::appendChild(TreeItem *item)
insilmaril@725
    70
{
insilmaril@725
    71
    childItems.append(item);
insilmaril@746
    72
	item->setModel (model);
insilmaril@741
    73
insilmaril@741
    74
	if (item->type == Branch || item->type ==MapCenter)
insilmaril@738
    75
	{
insilmaril@741
    76
		if (branchCounter==0)
insilmaril@738
    77
			branchOffset=childItems.count()-1;
insilmaril@741
    78
		branchCounter++;
insilmaril@738
    79
	}
insilmaril@725
    80
}
insilmaril@725
    81
insilmaril@727
    82
void TreeItem::removeChild(int row)
insilmaril@727
    83
{
insilmaril@745
    84
    if (row<0 || row > childItems.size()-1)
insilmaril@745
    85
		qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
insilmaril@745
    86
	else
insilmaril@727
    87
	{
insilmaril@745
    88
		cout << "TI::removeChild this="<<this<<"  row="<<row<<endl;
insilmaril@745
    89
		delete childItems.takeAt (row);
insilmaril@745
    90
	}
insilmaril@727
    91
}
insilmaril@727
    92
insilmaril@725
    93
TreeItem *TreeItem::child(int row)
insilmaril@725
    94
{
insilmaril@725
    95
    return childItems.value(row);
insilmaril@725
    96
}
insilmaril@725
    97
insilmaril@725
    98
int TreeItem::childCount() const
insilmaril@725
    99
{
insilmaril@725
   100
    return childItems.count();
insilmaril@725
   101
}
insilmaril@725
   102
insilmaril@745
   103
int TreeItem::childNumber() const
insilmaril@745
   104
{
insilmaril@745
   105
    if (parentItem)
insilmaril@745
   106
        return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
insilmaril@745
   107
insilmaril@745
   108
    return 0;
insilmaril@745
   109
}
insilmaril@745
   110
insilmaril@725
   111
int TreeItem::columnCount() const
insilmaril@725
   112
{
insilmaril@725
   113
    return itemData.count();
insilmaril@725
   114
}
insilmaril@741
   115
insilmaril@741
   116
int TreeItem::branchCount() const
insilmaril@741
   117
{
insilmaril@741
   118
    return branchCounter;
insilmaril@741
   119
}
insilmaril@749
   120
insilmaril@749
   121
int TreeItem::imageCount() const
insilmaril@749
   122
{
insilmaril@749
   123
	int imageCounter=0;
insilmaril@749
   124
    return imageCounter; // FIXME-1 imageCounter needs to be calculated...
insilmaril@749
   125
}
insilmaril@749
   126
insilmaril@749
   127
int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
insilmaril@749
   128
{
insilmaril@749
   129
	int xlinkCounter=0;
insilmaril@749
   130
    return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
insilmaril@749
   131
}
insilmaril@749
   132
insilmaril@727
   133
int TreeItem::row() const
insilmaril@727
   134
{
insilmaril@727
   135
    if (parentItem)
insilmaril@727
   136
        return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
insilmaril@727
   137
insilmaril@727
   138
    return 0;
insilmaril@727
   139
}
insilmaril@727
   140
insilmaril@727
   141
int TreeItem::column() const
insilmaril@727
   142
{
insilmaril@727
   143
    return 0;
insilmaril@727
   144
}
insilmaril@727
   145
insilmaril@740
   146
int TreeItem::depth() 
insilmaril@740
   147
{
insilmaril@740
   148
	int d=-1;
insilmaril@740
   149
	TreeItem *ti=this;
insilmaril@740
   150
	while (ti!=NULL)
insilmaril@740
   151
	{
insilmaril@740
   152
		ti=ti->parent();
insilmaril@740
   153
		d++;
insilmaril@740
   154
	}
insilmaril@740
   155
	return d;
insilmaril@740
   156
}
insilmaril@740
   157
insilmaril@727
   158
TreeItem *TreeItem::parent()
insilmaril@727
   159
{
insilmaril@727
   160
    return parentItem;
insilmaril@727
   161
}
insilmaril@727
   162
insilmaril@741
   163
int TreeItem::num()
insilmaril@741
   164
{
insilmaril@741
   165
	switch (type)
insilmaril@741
   166
	{
insilmaril@741
   167
		case Undefined: return -1;
insilmaril@741
   168
		case MapCenter: return parentItem->childItems.indexOf (this) - branchOffset;
insilmaril@741
   169
		case Branch: return parentItem->childItems.indexOf (this) - branchOffset;
insilmaril@746
   170
		case Image: return -1; // FIXME-2
insilmaril@741
   171
		default: return -1;
insilmaril@741
   172
	}
insilmaril@749
   173
}
insilmaril@749
   174
insilmaril@749
   175
int TreeItem::num (TreeItem *item)
insilmaril@749
   176
{
insilmaril@749
   177
	if (!item) return -1;
insilmaril@749
   178
	switch (item->getType())
insilmaril@749
   179
	{
insilmaril@749
   180
		case Undefined: return -1;
insilmaril@749
   181
		case MapCenter: return childItems.indexOf (this) - branchOffset;
insilmaril@749
   182
		case Branch: return childItems.indexOf (this) - branchOffset;
insilmaril@749
   183
		case Image: return -1; // FIXME-2
insilmaril@749
   184
		default: return -1;
insilmaril@749
   185
	}
insilmaril@741
   186
}
insilmaril@725
   187
insilmaril@725
   188
QVariant TreeItem::data(int column) const
insilmaril@725
   189
{
insilmaril@725
   190
    return itemData.value(column);
insilmaril@725
   191
}
insilmaril@725
   192
insilmaril@726
   193
void TreeItem::setHeading (const QString s)
insilmaril@725
   194
{
insilmaril@726
   195
	itemData[0]=s;
insilmaril@726
   196
}
insilmaril@726
   197
insilmaril@753
   198
QString TreeItem::getHeading () const
insilmaril@726
   199
{
insilmaril@726
   200
	return itemData[0].toString();
insilmaril@726
   201
}
insilmaril@726
   202
insilmaril@753
   203
std::string TreeItem::headingStd () const
insilmaril@753
   204
{
insilmaril@753
   205
	return itemData[0].toString().toStdString();
insilmaril@753
   206
}
insilmaril@753
   207
insilmaril@741
   208
void TreeItem::setNote(const QString s)
insilmaril@741
   209
{
insilmaril@746
   210
	note.setNote(s);
insilmaril@746
   211
	// updateNoteFlag();  FIXME-2 needed?
insilmaril@746
   212
	if (model) 
insilmaril@753
   213
		model->emitNoteHasChanged (this);
insilmaril@746
   214
}
insilmaril@746
   215
insilmaril@746
   216
void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor)
insilmaril@746
   217
{
insilmaril@746
   218
	note=n;
insilmaril@746
   219
	// updateNoteFlag();  FIXME-2 needed?
insilmaril@746
   220
	if (model && updateNoteEditor)	
insilmaril@753
   221
		model->emitNoteHasChanged (this);
insilmaril@741
   222
}
insilmaril@741
   223
insilmaril@741
   224
QString TreeItem::getNote()
insilmaril@741
   225
{
insilmaril@746
   226
	return note.getNote();
insilmaril@746
   227
}
insilmaril@746
   228
insilmaril@746
   229
NoteObj TreeItem::getNoteObj()
insilmaril@746
   230
{
insilmaril@746
   231
	return note;
insilmaril@746
   232
}
insilmaril@746
   233
insilmaril@746
   234
QString TreeItem::getNoteASCII(const QString &indent, const int &width)
insilmaril@746
   235
{
insilmaril@746
   236
    return note.getNoteASCII(indent,width);
insilmaril@746
   237
}
insilmaril@746
   238
insilmaril@746
   239
QString TreeItem::getNoteASCII()
insilmaril@746
   240
{
insilmaril@746
   241
    return note.getNoteASCII();
insilmaril@746
   242
}
insilmaril@746
   243
insilmaril@746
   244
QString TreeItem::getNoteOpenDoc()
insilmaril@746
   245
{
insilmaril@746
   246
    return note.getNoteOpenDoc();
insilmaril@741
   247
}
insilmaril@741
   248
insilmaril@726
   249
void TreeItem::setType(const Type t)
insilmaril@726
   250
{
insilmaril@726
   251
	type=t;
insilmaril@726
   252
	itemData[1]=getTypeName();
insilmaril@726
   253
}
insilmaril@726
   254
insilmaril@726
   255
TreeItem::Type TreeItem::getType()
insilmaril@726
   256
{
insilmaril@726
   257
	return type;
insilmaril@726
   258
}
insilmaril@726
   259
insilmaril@753
   260
bool TreeItem::isBranchLikeType() const
insilmaril@753
   261
{
insilmaril@753
   262
	if (type==Branch ||type==MapCenter) return true;
insilmaril@753
   263
	return false;
insilmaril@753
   264
}
insilmaril@753
   265
insilmaril@726
   266
QString TreeItem::getTypeName()
insilmaril@726
   267
{
insilmaril@726
   268
	switch (type)
insilmaril@726
   269
	{
insilmaril@726
   270
		case Undefined: return QString ("Undefined");
insilmaril@726
   271
		case MapCenter: return QString ("MapCenter");
insilmaril@726
   272
		case Branch: return QString ("Branch");
insilmaril@739
   273
		case Image: return QString ("Image");
insilmaril@726
   274
		default: return QString ("TreeItem::getTypeName no typename defined?!");
insilmaril@726
   275
	}
insilmaril@725
   276
}
insilmaril@725
   277
insilmaril@754
   278
void TreeItem::setID (const QString &s)
insilmaril@754
   279
{
insilmaril@754
   280
	objID=s;
insilmaril@754
   281
}
insilmaril@754
   282
insilmaril@754
   283
QString TreeItem::getID()
insilmaril@754
   284
{
insilmaril@754
   285
	return objID;
insilmaril@754
   286
}
insilmaril@754
   287
insilmaril@754
   288
insilmaril@738
   289
TreeItem* TreeItem::getChildNum(const int &n)
insilmaril@738
   290
{
insilmaril@738
   291
	if (n>=0 && n<childItems.count() )
insilmaril@738
   292
		return childItems.at(n);
insilmaril@738
   293
	else
insilmaril@738
   294
		return NULL;
insilmaril@738
   295
}
insilmaril@738
   296
insilmaril@750
   297
BranchItem* TreeItem::getFirstBranch()
insilmaril@738
   298
{
insilmaril@741
   299
	if (branchCounter>0)
insilmaril@738
   300
		return getBranchNum (branchOffset);
insilmaril@738
   301
	else
insilmaril@738
   302
		return NULL;
insilmaril@738
   303
}
insilmaril@738
   304
insilmaril@750
   305
BranchItem* TreeItem::getLastBranch()
insilmaril@738
   306
{
insilmaril@741
   307
	if (branchCounter>0)
insilmaril@741
   308
		return getBranchNum (branchOffset + branchCounter-1);
insilmaril@738
   309
	else
insilmaril@738
   310
		return NULL;
insilmaril@738
   311
}
insilmaril@738
   312
insilmaril@738
   313
insilmaril@750
   314
BranchItem* TreeItem::getBranchNum(const int &n)
insilmaril@738
   315
{
insilmaril@741
   316
	if (branchCounter>0)
insilmaril@750
   317
		return (BranchItem*)getChildNum (branchOffset + n);
insilmaril@738
   318
	else
insilmaril@738
   319
		return NULL;
insilmaril@738
   320
}
insilmaril@738
   321
insilmaril@750
   322
BranchObj* TreeItem::getBranchObjNum(const int &n)
insilmaril@750
   323
{
insilmaril@750
   324
	if (branchCounter>0)
insilmaril@750
   325
	{
insilmaril@750
   326
		return (BranchObj*)(getChildNum (branchOffset+n)->lmo);
insilmaril@750
   327
	} else
insilmaril@750
   328
		return NULL;
insilmaril@750
   329
}
insilmaril@750
   330
insilmaril@738
   331
void TreeItem::setLastSelectedBranch()
insilmaril@738
   332
{
insilmaril@738
   333
	if (parentItem)
insilmaril@738
   334
		parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
insilmaril@738
   335
}
insilmaril@738
   336
insilmaril@754
   337
TreeItem* TreeItem::findBySelectString (const QString &s)  //FIXME-1
insilmaril@754
   338
{
insilmaril@754
   339
/*
insilmaril@754
   340
	LinkableMapObj *lmo=this;
insilmaril@754
   341
	QString part;
insilmaril@754
   342
	QString typ;
insilmaril@754
   343
	QString num;
insilmaril@754
   344
	while (!s.isEmpty() )
insilmaril@754
   345
	{
insilmaril@754
   346
		part=s.section(",",0,0);
insilmaril@754
   347
		typ=part.left (3);
insilmaril@754
   348
		num=part.right(part.length() - 3);
insilmaril@754
   349
		if (typ=="mc:")
insilmaril@754
   350
		{
insilmaril@754
   351
			if (depth>0)
insilmaril@754
   352
				return false;	// in a subtree there is no center
insilmaril@754
   353
			else
insilmaril@754
   354
				break;
insilmaril@754
   355
		} else
insilmaril@754
   356
			if (typ=="bo:")
insilmaril@754
   357
				lmo=lmo->getTreeItem()->getBranchObjNum (num.toInt());
insilmaril@754
   358
			else
insilmaril@754
   359
				if (typ=="fi:")
insilmaril@754
   360
					lmo=((BranchObj*)lmo)->getFloatImageNum (num.toUInt());
insilmaril@754
   361
		if (!lmo) break;
insilmaril@754
   362
		
insilmaril@754
   363
		if (s.contains(","))
insilmaril@754
   364
			s=s.right(s.length() - part.length() -1 );
insilmaril@754
   365
		else	
insilmaril@754
   366
			break;
insilmaril@754
   367
	}
insilmaril@754
   368
	*/
insilmaril@754
   369
	return NULL;
insilmaril@754
   370
}
insilmaril@754
   371
insilmaril@754
   372
void TreeItem::setLastSelectedBranch(int i)
insilmaril@754
   373
{
insilmaril@754
   374
		lastSelectedBranchNum=i;
insilmaril@754
   375
}
insilmaril@754
   376
insilmaril@738
   377
TreeItem* TreeItem::getLastSelectedBranch()
insilmaril@738
   378
{
insilmaril@738
   379
	return getBranchNum (lastSelectedBranchNum);
insilmaril@738
   380
}
insilmaril@738
   381
insilmaril@753
   382
insilmaril@753
   383
void TreeItem::setHideTmp (HideTmpMode mode)
insilmaril@753
   384
{
insilmaril@753
   385
	if (isBranchLikeType() )
insilmaril@753
   386
		((BranchItem*)this)->updateVisibility();
insilmaril@753
   387
		/*
insilmaril@753
   388
	if (type==Image)
insilmaril@753
   389
		//updateVisibility();
insilmaril@753
   390
	*/
insilmaril@753
   391
insilmaril@753
   392
/*
insilmaril@753
   393
insilmaril@753
   394
		if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
insilmaril@753
   395
		{
insilmaril@753
   396
			// Hide stuff according to hideExport flag and parents
insilmaril@753
   397
			//setVisibility (false);
insilmaril@753
   398
			updateVisibility();
insilmaril@753
   399
			//FIXME-2 hidden=true;
insilmaril@753
   400
		}else
insilmaril@753
   401
		{
insilmaril@753
   402
			// Do not hide, but still take care of scrolled status
insilmaril@753
   403
			
insilmaril@753
   404
insilmaril@753
   405
			XXXXXXXX treeItem should be THIS
insilmaril@753
   406
insilmaril@753
   407
			move visible to TreeItem???
insilmaril@753
   408
insilmaril@753
   409
			BranchObj now has updateContents
insilmaril@753
   410
insilmaril@753
   411
			maybe also start "bool TreeItem::branchlikeType"
insilmaril@753
   412
insilmaril@753
   413
insilmaril@753
   414
insilmaril@753
   415
			if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
insilmaril@753
   416
				setVisibility (false);
insilmaril@753
   417
			else
insilmaril@753
   418
				setVisibility (true);
insilmaril@753
   419
			//FIXME-2 hidden=false;
insilmaril@753
   420
		}	
insilmaril@753
   421
insilmaril@753
   422
*/
insilmaril@753
   423
		// And take care of my children
insilmaril@753
   424
		for (int i=0; i<branchCount(); ++i)
insilmaril@753
   425
			getBranchNum(i)->setHideTmp (mode);
insilmaril@753
   426
}
insilmaril@753
   427
insilmaril@753
   428
bool TreeItem::hasHiddenExportParent()
insilmaril@753
   429
{
insilmaril@753
   430
	// Calls parents recursivly to
insilmaril@753
   431
	// find out, if we or parents are temp. hidden
insilmaril@753
   432
insilmaril@753
   433
	if (hidden || hideExport) return true;
insilmaril@753
   434
insilmaril@753
   435
	if (parentItem) 
insilmaril@753
   436
		return parentItem->hasHiddenExportParent();
insilmaril@753
   437
	else
insilmaril@753
   438
		return false;
insilmaril@753
   439
}
insilmaril@753
   440
insilmaril@753
   441
insilmaril@753
   442
void TreeItem::setHideInExport(bool b) 
insilmaril@753
   443
{
insilmaril@753
   444
	if (isBranchLikeType() )
insilmaril@753
   445
	{
insilmaril@753
   446
		hideExport=b;
insilmaril@753
   447
		/* FIXME-1 call setVis and updateContentsSize...
insilmaril@753
   448
		if (b)
insilmaril@753
   449
			systemFlags->activate("hideInExport");
insilmaril@753
   450
		else	
insilmaril@753
   451
			systemFlags->deactivate("hideInExport");
insilmaril@753
   452
		calcBBoxSize();
insilmaril@753
   453
		positionBBox();
insilmaril@753
   454
		requestReposition();	
insilmaril@753
   455
		*/
insilmaril@753
   456
	}
insilmaril@753
   457
}	
insilmaril@753
   458
insilmaril@753
   459
bool TreeItem::hideInExport()
insilmaril@753
   460
{
insilmaril@753
   461
	return hideExport;
insilmaril@753
   462
}	
insilmaril@753
   463
insilmaril@753
   464
bool TreeItem::isHidden()
insilmaril@753
   465
{
insilmaril@753
   466
	return hidden;
insilmaril@753
   467
}	
insilmaril@753
   468
insilmaril@753
   469
insilmaril@746
   470
LinkableMapObj* TreeItem::getLMO()	// FIXME-3  VM should be unnecessary in the end
insilmaril@726
   471
{
insilmaril@726
   472
	return lmo;
insilmaril@726
   473
}
insilmaril@726
   474
insilmaril@726
   475
void TreeItem::setLMO(LinkableMapObj *l)
insilmaril@726
   476
{
insilmaril@726
   477
	lmo=l;
insilmaril@726
   478
}
insilmaril@726
   479