treeitem.cpp
author insilmaril
Mon, 29 Jun 2009 10:27:42 +0000
changeset 777 8acac4fade1b
parent 776 25e634a7e1dc
child 779 1fb50e79661c
permissions -rw-r--r--
more fixes
insilmaril@746
     1
#include <iostream>
insilmaril@725
     2
#include <QStringList>
insilmaril@725
     3
insilmaril@750
     4
#include "treeitem.h"
insilmaril@750
     5
insilmaril@741
     6
#include "branchobj.h"
insilmaril@750
     7
#include "branchitem.h"
insilmaril@746
     8
#include "vymmodel.h"
insilmaril@725
     9
insilmaril@758
    10
using namespace std;
insilmaril@758
    11
insilmaril@772
    12
extern FlagRow* standardFlagsMaster;
insilmaril@758
    13
insilmaril@776
    14
TreeItem::TreeItem()
insilmaril@776
    15
{
insilmaril@777
    16
	//cout << "Constr. TI\n";
insilmaril@776
    17
	init();
insilmaril@776
    18
	itemData.clear();
insilmaril@776
    19
	rootItem=this;
insilmaril@776
    20
	parentItem=NULL;
insilmaril@776
    21
}
insilmaril@776
    22
insilmaril@776
    23
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
insilmaril@725
    24
{
insilmaril@773
    25
	//cout << "Constructor TreeItem this="<<this<<"  parent="<<parent<<endl;
insilmaril@756
    26
	init();
insilmaril@756
    27
    parentItem = parent;
insilmaril@756
    28
    itemData = data;
insilmaril@773
    29
	
insilmaril@773
    30
	rootItem=this;
insilmaril@773
    31
	if (parentItem )
insilmaril@773
    32
		rootItem=parentItem->rootItem;
insilmaril@756
    33
}
insilmaril@756
    34
insilmaril@756
    35
TreeItem::~TreeItem()
insilmaril@756
    36
{
insilmaril@756
    37
	//cout << "Destructor TreeItem "<<getHeadingStd()<<endl;
insilmaril@756
    38
	TreeItem *ti;
insilmaril@756
    39
	while (!childItems.isEmpty())
insilmaril@756
    40
	{
insilmaril@756
    41
		ti=childItems.takeFirst();
insilmaril@756
    42
		switch (ti->getType() )
insilmaril@756
    43
		{
insilmaril@756
    44
			case TreeItem::MapCenter:
insilmaril@773
    45
				delete (BranchItem*)ti;
insilmaril@756
    46
				break;
insilmaril@756
    47
			case TreeItem::Branch:
insilmaril@756
    48
				delete (BranchItem*)ti;
insilmaril@756
    49
				break;
insilmaril@756
    50
			default:
insilmaril@756
    51
				delete ti;
insilmaril@756
    52
				break;
insilmaril@756
    53
		}
insilmaril@756
    54
	}	
insilmaril@756
    55
}
insilmaril@756
    56
insilmaril@756
    57
insilmaril@756
    58
void TreeItem::init()
insilmaril@756
    59
{
insilmaril@746
    60
	model=NULL;
insilmaril@746
    61
insilmaril@756
    62
    parentItem = NULL;
insilmaril@756
    63
    itemData.clear();
insilmaril@777
    64
	QList<QVariant> cData;
insilmaril@777
    65
	itemData<< "VM:addMapCenter" << "undef"<<"undef";
insilmaril@777
    66
insilmaril@738
    67
insilmaril@738
    68
	branchOffset=0;
insilmaril@741
    69
	branchCounter=0;
insilmaril@738
    70
	lastSelectedBranchNum=-1;
insilmaril@746
    71
insilmaril@763
    72
	imageOffset=0;
insilmaril@763
    73
	imageCounter=0;
insilmaril@763
    74
insilmaril@746
    75
	note.setNote(""); 
insilmaril@746
    76
	// note.setFontHint (textEditor->getFontHintDefault() );	//FIXME-2
insilmaril@746
    77
	// isNoteInEditor=false;
insilmaril@753
    78
insilmaril@753
    79
	hidden=false;
insilmaril@776
    80
	hideExport=false;
insilmaril@754
    81
insilmaril@754
    82
	// Reset ID
insilmaril@754
    83
	objID="";
insilmaril@772
    84
insilmaril@772
    85
	standardFlags.setMasterRow (standardFlagsMaster);
insilmaril@725
    86
}
insilmaril@725
    87
insilmaril@746
    88
insilmaril@746
    89
/*
insilmaril@753
    90
void TreeItem::copy (OrnamentedObj* other)	//FIXME-2	probably need deep copy of branches and data!
insilmaril@746
    91
insilmaril@746
    92
{
insilmaril@746
    93
	note.copy (other->note);
insilmaril@746
    94
	model=other->model;
insilmaril@754
    95
	hideExport=officially 
insilmaril@754
    96
	other->hideExport;
insilmaril@746
    97
}
insilmaril@746
    98
*/
insilmaril@746
    99
insilmaril@746
   100
void TreeItem::setModel (VymModel *m)
insilmaril@746
   101
{
insilmaril@746
   102
	model=m;
insilmaril@746
   103
}
insilmaril@746
   104
insilmaril@746
   105
VymModel* TreeItem::getModel ()
insilmaril@746
   106
{
insilmaril@746
   107
	return model;
insilmaril@746
   108
}
insilmaril@741
   109
insilmaril@776
   110
int TreeItem::getRowNumAppend (TreeItem *item)
insilmaril@776
   111
{	
insilmaril@776
   112
	switch (item->type)
insilmaril@776
   113
	{
insilmaril@776
   114
		case MapCenter: return branchOffset + branchCounter;
insilmaril@776
   115
		case Branch: return branchOffset + branchCounter;
insilmaril@776
   116
		case Image: return imageOffset + imageCounter;
insilmaril@776
   117
		default: return -1;
insilmaril@776
   118
	}
insilmaril@776
   119
}
insilmaril@776
   120
insilmaril@725
   121
void TreeItem::appendChild(TreeItem *item)
insilmaril@725
   122
{
insilmaril@756
   123
	item->parentItem=this;
insilmaril@773
   124
	item->rootItem=rootItem;
insilmaril@746
   125
	item->setModel (model);
insilmaril@741
   126
insilmaril@777
   127
	// If lmo exists, also set parObj there
insilmaril@777
   128
	if (lmo && item->lmo)
insilmaril@777
   129
		item->lmo->setParObj (lmo);
insilmaril@777
   130
insilmaril@776
   131
	if (item->type == Image)
insilmaril@738
   132
	{
insilmaril@776
   133
		childItems.insert (imageCounter,item);
insilmaril@776
   134
		// images are on top of list
insilmaril@776
   135
		if (imageCounter==0)
insilmaril@776
   136
			imageOffset=0;
insilmaril@776
   137
		imageCounter++;
insilmaril@776
   138
		branchOffset++;
insilmaril@776
   139
	}
insilmaril@776
   140
insilmaril@776
   141
	if (item->isBranchLikeType())
insilmaril@776
   142
	{
insilmaril@776
   143
		// branches are on bottom of list
insilmaril@776
   144
		childItems.append(item);
insilmaril@741
   145
		if (branchCounter==0)
insilmaril@738
   146
			branchOffset=childItems.count()-1;
insilmaril@741
   147
		branchCounter++;
insilmaril@738
   148
	}
insilmaril@725
   149
}
insilmaril@725
   150
insilmaril@727
   151
void TreeItem::removeChild(int row)
insilmaril@727
   152
{
insilmaril@745
   153
    if (row<0 || row > childItems.size()-1)
insilmaril@745
   154
		qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
insilmaril@745
   155
	else
insilmaril@727
   156
	{
insilmaril@755
   157
		if (childItems.at(row)->isBranchLikeType())
insilmaril@755
   158
			branchCounter--;
insilmaril@776
   159
		if (childItems.at(row)->type==Image)
insilmaril@776
   160
		{
insilmaril@776
   161
			imageCounter--;
insilmaril@776
   162
			if (branchOffset>0) 
insilmaril@776
   163
				branchOffset--;
insilmaril@776
   164
		}	
insilmaril@755
   165
		childItems.removeAt (row);
insilmaril@745
   166
	}
insilmaril@727
   167
}
insilmaril@727
   168
insilmaril@772
   169
void TreeItem::removeChildBranches()
insilmaril@772
   170
{
insilmaril@772
   171
	while ( childItems.size()>0)
insilmaril@772
   172
	{
insilmaril@772
   173
		branchCounter--;
insilmaril@772
   174
		childItems.removeAt (0);
insilmaril@772
   175
	}
insilmaril@772
   176
}
insilmaril@772
   177
insilmaril@725
   178
TreeItem *TreeItem::child(int row)
insilmaril@725
   179
{
insilmaril@725
   180
    return childItems.value(row);
insilmaril@725
   181
}
insilmaril@725
   182
insilmaril@725
   183
int TreeItem::childCount() const
insilmaril@725
   184
{
insilmaril@725
   185
    return childItems.count();
insilmaril@725
   186
}
insilmaril@725
   187
insilmaril@745
   188
int TreeItem::childNumber() const
insilmaril@745
   189
{
insilmaril@745
   190
    if (parentItem)
insilmaril@745
   191
        return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
insilmaril@745
   192
insilmaril@745
   193
    return 0;
insilmaril@745
   194
}
insilmaril@745
   195
insilmaril@725
   196
int TreeItem::columnCount() const
insilmaril@725
   197
{
insilmaril@725
   198
    return itemData.count();
insilmaril@725
   199
}
insilmaril@741
   200
insilmaril@741
   201
int TreeItem::branchCount() const
insilmaril@741
   202
{
insilmaril@741
   203
    return branchCounter;
insilmaril@741
   204
}
insilmaril@749
   205
insilmaril@749
   206
int TreeItem::imageCount() const
insilmaril@749
   207
{
insilmaril@776
   208
    return imageCounter; 
insilmaril@749
   209
}
insilmaril@749
   210
insilmaril@749
   211
int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
insilmaril@749
   212
{
insilmaril@749
   213
	int xlinkCounter=0;
insilmaril@749
   214
    return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
insilmaril@749
   215
}
insilmaril@749
   216
insilmaril@727
   217
int TreeItem::row() const
insilmaril@727
   218
{
insilmaril@727
   219
    if (parentItem)
insilmaril@727
   220
        return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
insilmaril@727
   221
insilmaril@727
   222
    return 0;
insilmaril@727
   223
}
insilmaril@727
   224
insilmaril@727
   225
int TreeItem::column() const
insilmaril@727
   226
{
insilmaril@727
   227
    return 0;
insilmaril@727
   228
}
insilmaril@727
   229
insilmaril@740
   230
int TreeItem::depth() 
insilmaril@740
   231
{
insilmaril@755
   232
	int d=-2;
insilmaril@740
   233
	TreeItem *ti=this;
insilmaril@740
   234
	while (ti!=NULL)
insilmaril@740
   235
	{
insilmaril@740
   236
		ti=ti->parent();
insilmaril@740
   237
		d++;
insilmaril@740
   238
	}
insilmaril@740
   239
	return d;
insilmaril@740
   240
}
insilmaril@740
   241
insilmaril@727
   242
TreeItem *TreeItem::parent()
insilmaril@727
   243
{
insilmaril@727
   244
    return parentItem;
insilmaril@727
   245
}
insilmaril@727
   246
insilmaril@755
   247
int TreeItem::childNum()
insilmaril@755
   248
{
insilmaril@755
   249
	return parentItem->childItems.indexOf (this);
insilmaril@755
   250
}
insilmaril@755
   251
insilmaril@741
   252
int TreeItem::num()
insilmaril@741
   253
{
insilmaril@741
   254
	switch (type)
insilmaril@741
   255
	{
insilmaril@776
   256
		case MapCenter: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
insilmaril@776
   257
		case Branch: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
insilmaril@776
   258
		case Image: return parentItem->childItems.indexOf (this) - parentItem->imageOffset;
insilmaril@741
   259
		default: return -1;
insilmaril@741
   260
	}
insilmaril@749
   261
}
insilmaril@749
   262
insilmaril@749
   263
int TreeItem::num (TreeItem *item)
insilmaril@749
   264
{
insilmaril@749
   265
	if (!item) return -1;
insilmaril@776
   266
	if (!childItems.contains(item)) return -1;
insilmaril@749
   267
	switch (item->getType())
insilmaril@749
   268
	{
insilmaril@763
   269
		case MapCenter: return childItems.indexOf (item) - branchOffset;
insilmaril@763
   270
		case Branch: return childItems.indexOf (item) - branchOffset;
insilmaril@763
   271
		case Image: return parentItem->childItems.indexOf (item) - imageOffset;
insilmaril@749
   272
		default: return -1;
insilmaril@749
   273
	}
insilmaril@741
   274
}
insilmaril@766
   275
void TreeItem::setType(const Type t)
insilmaril@766
   276
{
insilmaril@766
   277
	type=t;
insilmaril@766
   278
	itemData[1]=getTypeName();
insilmaril@766
   279
}
insilmaril@766
   280
insilmaril@766
   281
TreeItem::Type TreeItem::getType()
insilmaril@766
   282
{
insilmaril@766
   283
	return type;
insilmaril@766
   284
}
insilmaril@766
   285
insilmaril@766
   286
bool TreeItem::isBranchLikeType() const
insilmaril@766
   287
{
insilmaril@766
   288
	if (type==Branch ||type==MapCenter) return true;
insilmaril@766
   289
	return false;
insilmaril@766
   290
}
insilmaril@766
   291
insilmaril@766
   292
QString TreeItem::getTypeName()
insilmaril@766
   293
{
insilmaril@766
   294
	switch (type)
insilmaril@766
   295
	{
insilmaril@766
   296
		case Undefined: return QString ("Undefined");
insilmaril@766
   297
		case MapCenter: return QString ("MapCenter");
insilmaril@766
   298
		case Branch: return QString ("Branch");
insilmaril@766
   299
		case Image: return QString ("Image");
insilmaril@766
   300
		default: return QString ("TreeItem::getTypeName no typename defined?!");
insilmaril@766
   301
	}
insilmaril@766
   302
}
insilmaril@766
   303
insilmaril@725
   304
insilmaril@725
   305
QVariant TreeItem::data(int column) const
insilmaril@725
   306
{
insilmaril@725
   307
    return itemData.value(column);
insilmaril@725
   308
}
insilmaril@725
   309
insilmaril@726
   310
void TreeItem::setHeading (const QString s)
insilmaril@725
   311
{
insilmaril@726
   312
	itemData[0]=s;
insilmaril@726
   313
}
insilmaril@726
   314
insilmaril@753
   315
QString TreeItem::getHeading () const
insilmaril@726
   316
{
insilmaril@726
   317
	return itemData[0].toString();
insilmaril@726
   318
}
insilmaril@726
   319
insilmaril@755
   320
std::string TreeItem::getHeadingStd () const
insilmaril@753
   321
{
insilmaril@753
   322
	return itemData[0].toString().toStdString();
insilmaril@753
   323
}
insilmaril@753
   324
insilmaril@758
   325
void TreeItem::setHeadingColor (QColor color)
insilmaril@758
   326
{
insilmaril@758
   327
	headingColor=color;
insilmaril@758
   328
}
insilmaril@758
   329
insilmaril@758
   330
QColor TreeItem::getHeadingColor ()
insilmaril@758
   331
{
insilmaril@758
   332
	return headingColor;
insilmaril@758
   333
}
insilmaril@758
   334
insilmaril@767
   335
void TreeItem::setURL (const QString &u)
insilmaril@741
   336
{
insilmaril@767
   337
	url=u;
insilmaril@767
   338
	if (!url.isEmpty())
insilmaril@767
   339
		systemFlags.activate ("system-url");
insilmaril@767
   340
	else
insilmaril@767
   341
		systemFlags.deactivate ("system-url");
insilmaril@767
   342
}
insilmaril@767
   343
insilmaril@767
   344
QString TreeItem::getURL ()
insilmaril@767
   345
{
insilmaril@767
   346
	return url;
insilmaril@767
   347
}
insilmaril@767
   348
insilmaril@767
   349
void TreeItem::setVymLink (const QString &vl)
insilmaril@767
   350
{
insilmaril@767
   351
	if (!vl.isEmpty())
insilmaril@767
   352
	{
insilmaril@767
   353
		// We need the relative (from loading) 
insilmaril@767
   354
		// or absolute path (from User event)
insilmaril@767
   355
		// and build the absolute path.
insilmaril@767
   356
		// Note: If we have relative, use path of
insilmaril@767
   357
		// current map to build absolute path
insilmaril@767
   358
		QDir d(vl);
insilmaril@767
   359
		if (!d.path().startsWith ("/"))
insilmaril@767
   360
		{
insilmaril@767
   361
			QString p=model->getDestPath();
insilmaril@767
   362
			int i=p.findRev("/",-1);
insilmaril@767
   363
			d.setPath(p.left(i)+"/"+vl);
insilmaril@767
   364
			d.convertToAbs();
insilmaril@767
   365
		}
insilmaril@767
   366
		vymLink=d.path();
insilmaril@767
   367
		systemFlags.activate("system-vymLink");
insilmaril@767
   368
	}	
insilmaril@767
   369
	else	
insilmaril@767
   370
	{
insilmaril@767
   371
		systemFlags.deactivate("system-vymLink");
insilmaril@767
   372
		vymLink.clear();
insilmaril@767
   373
	}	
insilmaril@767
   374
}
insilmaril@767
   375
insilmaril@767
   376
QString TreeItem::getVymLink ()
insilmaril@767
   377
{
insilmaril@767
   378
	return vymLink;
insilmaril@767
   379
}
insilmaril@767
   380
insilmaril@767
   381
void TreeItem::setNote(const QString &s)
insilmaril@767
   382
{
insilmaril@767
   383
	NoteObj n;
insilmaril@767
   384
	n.setNote(s);
insilmaril@767
   385
	setNoteObj (n,false);
insilmaril@767
   386
}
insilmaril@767
   387
insilmaril@767
   388
void TreeItem::clearNote()
insilmaril@767
   389
{
insilmaril@767
   390
	note.clear();
insilmaril@767
   391
	systemFlags.deactivate ("system-note");
insilmaril@746
   392
}
insilmaril@746
   393
insilmaril@776
   394
void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor){
insilmaril@746
   395
	note=n;
insilmaril@767
   396
	if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
insilmaril@767
   397
		systemFlags.activate ("system-note");
insilmaril@767
   398
	if (note.isEmpty() && systemFlags.isActive ("system-note"))
insilmaril@767
   399
		systemFlags.deactivate ("system-note");
insilmaril@741
   400
}
insilmaril@741
   401
insilmaril@741
   402
QString TreeItem::getNote()
insilmaril@741
   403
{
insilmaril@746
   404
	return note.getNote();
insilmaril@746
   405
}
insilmaril@746
   406
insilmaril@768
   407
bool TreeItem::hasEmptyNote()
insilmaril@768
   408
{
insilmaril@768
   409
	return note.isEmpty();
insilmaril@768
   410
}
insilmaril@768
   411
insilmaril@746
   412
NoteObj TreeItem::getNoteObj()
insilmaril@746
   413
{
insilmaril@746
   414
	return note;
insilmaril@746
   415
}
insilmaril@746
   416
insilmaril@746
   417
QString TreeItem::getNoteASCII(const QString &indent, const int &width)
insilmaril@746
   418
{
insilmaril@746
   419
    return note.getNoteASCII(indent,width);
insilmaril@746
   420
}
insilmaril@746
   421
insilmaril@746
   422
QString TreeItem::getNoteASCII()
insilmaril@746
   423
{
insilmaril@746
   424
    return note.getNoteASCII();
insilmaril@746
   425
}
insilmaril@746
   426
insilmaril@746
   427
QString TreeItem::getNoteOpenDoc()
insilmaril@746
   428
{
insilmaril@746
   429
    return note.getNoteOpenDoc();
insilmaril@741
   430
}
insilmaril@741
   431
insilmaril@766
   432
void TreeItem::activateStandardFlag (const QString &name)
insilmaril@726
   433
{
insilmaril@766
   434
	standardFlags.activate (name);
insilmaril@767
   435
	model->emitDataHasChanged(this);
insilmaril@726
   436
}
insilmaril@726
   437
insilmaril@766
   438
void TreeItem::deactivateStandardFlag (const QString &name)
insilmaril@726
   439
{
insilmaril@766
   440
	standardFlags.deactivate (name);
insilmaril@767
   441
	model->emitDataHasChanged(this);
insilmaril@726
   442
}
insilmaril@726
   443
insilmaril@767
   444
void TreeItem::deactivateAllStandardFlags ()
insilmaril@753
   445
{
insilmaril@767
   446
	standardFlags.deactivateAll ();
insilmaril@767
   447
	model->emitDataHasChanged(this);
insilmaril@767
   448
}
insilmaril@767
   449
insilmaril@767
   450
void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
insilmaril@767
   451
{
insilmaril@767
   452
	standardFlags.toggle (name,master);
insilmaril@767
   453
	model->emitDataHasChanged(this);
insilmaril@753
   454
}
insilmaril@753
   455
insilmaril@766
   456
bool TreeItem::isActiveStandardFlag (const QString &name)
insilmaril@726
   457
{
insilmaril@766
   458
	return standardFlags.isActive (name);
insilmaril@725
   459
}
insilmaril@725
   460
insilmaril@767
   461
QStringList TreeItem::activeStandardFlagNames ()
insilmaril@767
   462
{
insilmaril@767
   463
	return standardFlags.activeFlagNames();
insilmaril@767
   464
}
insilmaril@767
   465
insilmaril@770
   466
FlagRow* TreeItem::getStandardFlagRow()
insilmaril@770
   467
{
insilmaril@770
   468
	return &standardFlags;
insilmaril@770
   469
}
insilmaril@770
   470
insilmaril@776
   471
/* FIXME-3 void TreeItem::updateToolBar()
insilmaril@770
   472
{
insilmaril@770
   473
	standardFlags.updateToolBar();
insilmaril@770
   474
}
insilmaril@770
   475
*/
insilmaril@776
   476
QStringList TreeItem::activeSystemFlagNames ()
insilmaril@767
   477
{
insilmaril@767
   478
	return systemFlags.activeFlagNames();
insilmaril@767
   479
}
insilmaril@767
   480
insilmaril@767
   481
bool TreeItem::canMoveDown()
insilmaril@767
   482
{
insilmaril@767
   483
	switch (type)
insilmaril@767
   484
	{
insilmaril@767
   485
		case Undefined: return false;
insilmaril@767
   486
		case MapCenter: 
insilmaril@767
   487
		case Branch: 
insilmaril@767
   488
			if (!parentItem) return false;
insilmaril@767
   489
			if (parentItem->num (this) < parentItem->branchCount()-1)
insilmaril@767
   490
				return true;
insilmaril@767
   491
			else
insilmaril@767
   492
				return false;
insilmaril@767
   493
			break;	
insilmaril@767
   494
		case Image: return false;
insilmaril@767
   495
		default: return false;
insilmaril@767
   496
	}
insilmaril@767
   497
}
insilmaril@767
   498
insilmaril@767
   499
bool TreeItem::canMoveUp()
insilmaril@767
   500
{
insilmaril@767
   501
	switch (type)
insilmaril@767
   502
	{
insilmaril@767
   503
		case Undefined: return false;
insilmaril@767
   504
		case MapCenter: 
insilmaril@767
   505
		case Branch: 
insilmaril@767
   506
			if (!parentItem) return false;
insilmaril@767
   507
			if (parentItem->num (this) > 0)
insilmaril@767
   508
				return true;
insilmaril@767
   509
			else
insilmaril@767
   510
				return false;
insilmaril@767
   511
			break;	
insilmaril@767
   512
		case Image: return false;
insilmaril@767
   513
		default: return false;
insilmaril@767
   514
	}
insilmaril@767
   515
}
insilmaril@767
   516
insilmaril@754
   517
void TreeItem::setID (const QString &s)
insilmaril@754
   518
{
insilmaril@754
   519
	objID=s;
insilmaril@754
   520
}
insilmaril@754
   521
insilmaril@754
   522
QString TreeItem::getID()
insilmaril@754
   523
{
insilmaril@754
   524
	return objID;
insilmaril@754
   525
}
insilmaril@754
   526
insilmaril@754
   527
insilmaril@738
   528
TreeItem* TreeItem::getChildNum(const int &n)
insilmaril@738
   529
{
insilmaril@738
   530
	if (n>=0 && n<childItems.count() )
insilmaril@738
   531
		return childItems.at(n);
insilmaril@738
   532
	else
insilmaril@738
   533
		return NULL;
insilmaril@738
   534
}
insilmaril@738
   535
insilmaril@750
   536
BranchItem* TreeItem::getFirstBranch()
insilmaril@738
   537
{
insilmaril@741
   538
	if (branchCounter>0)
insilmaril@738
   539
		return getBranchNum (branchOffset);
insilmaril@738
   540
	else
insilmaril@738
   541
		return NULL;
insilmaril@738
   542
}
insilmaril@738
   543
insilmaril@750
   544
BranchItem* TreeItem::getLastBranch()
insilmaril@738
   545
{
insilmaril@741
   546
	if (branchCounter>0)
insilmaril@741
   547
		return getBranchNum (branchOffset + branchCounter-1);
insilmaril@738
   548
	else
insilmaril@738
   549
		return NULL;
insilmaril@738
   550
}
insilmaril@738
   551
insilmaril@763
   552
BranchItem* TreeItem::getNextBranch(BranchItem *currentBranch)
insilmaril@763
   553
{
insilmaril@763
   554
	if (!currentBranch) return NULL;
insilmaril@763
   555
	int n=num (currentBranch)+1;
insilmaril@763
   556
	if (n<branchCounter)
insilmaril@763
   557
		return getBranchNum (branchOffset + n);
insilmaril@763
   558
	else
insilmaril@763
   559
		return NULL;
insilmaril@763
   560
}
insilmaril@763
   561
insilmaril@738
   562
insilmaril@750
   563
BranchItem* TreeItem::getBranchNum(const int &n)
insilmaril@738
   564
{
insilmaril@776
   565
	if (n>=0 && n<branchCounter)
insilmaril@750
   566
		return (BranchItem*)getChildNum (branchOffset + n);
insilmaril@738
   567
	else
insilmaril@738
   568
		return NULL;
insilmaril@738
   569
}
insilmaril@738
   570
insilmaril@750
   571
BranchObj* TreeItem::getBranchObjNum(const int &n)
insilmaril@750
   572
{
insilmaril@776
   573
	if (n>=0 && n<branchCounter)
insilmaril@750
   574
	{
insilmaril@776
   575
		return (BranchObj*)(getBranchNum(n)->getLMO());
insilmaril@750
   576
	} else
insilmaril@750
   577
		return NULL;
insilmaril@750
   578
}
insilmaril@750
   579
insilmaril@738
   580
void TreeItem::setLastSelectedBranch()
insilmaril@738
   581
{
insilmaril@738
   582
	if (parentItem)
insilmaril@738
   583
		parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
insilmaril@738
   584
}
insilmaril@738
   585
insilmaril@754
   586
void TreeItem::setLastSelectedBranch(int i)
insilmaril@754
   587
{
insilmaril@754
   588
		lastSelectedBranchNum=i;
insilmaril@754
   589
}
insilmaril@754
   590
insilmaril@738
   591
TreeItem* TreeItem::getLastSelectedBranch()
insilmaril@738
   592
{
insilmaril@738
   593
	return getBranchNum (lastSelectedBranchNum);
insilmaril@738
   594
}
insilmaril@738
   595
insilmaril@776
   596
ImageItem* TreeItem::getImageNum (const int &n)
insilmaril@776
   597
{
insilmaril@776
   598
	if (n>=0 && n<imageCounter)
insilmaril@776
   599
		return (ImageItem*)getChildNum (imageOffset + n);
insilmaril@776
   600
	else
insilmaril@776
   601
		return NULL;
insilmaril@776
   602
}
insilmaril@776
   603
insilmaril@776
   604
FloatImageObj* TreeItem::getImageObjNum (const int &n)	// FIXME-5 what about SVGs later?
insilmaril@776
   605
{
insilmaril@776
   606
	if (imageCounter>0 )
insilmaril@776
   607
		return (FloatImageObj*)(getImageNum(n)->getLMO());
insilmaril@776
   608
	else
insilmaril@776
   609
		return NULL;
insilmaril@776
   610
}
insilmaril@753
   611
insilmaril@753
   612
void TreeItem::setHideTmp (HideTmpMode mode)
insilmaril@753
   613
{
insilmaril@753
   614
	if (isBranchLikeType() )
insilmaril@753
   615
		((BranchItem*)this)->updateVisibility();
insilmaril@753
   616
		/*
insilmaril@753
   617
	if (type==Image)
insilmaril@753
   618
		//updateVisibility();
insilmaril@753
   619
	*/
insilmaril@753
   620
insilmaril@753
   621
/*
insilmaril@753
   622
insilmaril@753
   623
		if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
insilmaril@753
   624
		{
insilmaril@753
   625
			// Hide stuff according to hideExport flag and parents
insilmaril@753
   626
			//setVisibility (false);
insilmaril@753
   627
			updateVisibility();
insilmaril@753
   628
			//FIXME-2 hidden=true;
insilmaril@753
   629
		}else
insilmaril@753
   630
		{
insilmaril@753
   631
			// Do not hide, but still take care of scrolled status
insilmaril@753
   632
			
insilmaril@753
   633
insilmaril@753
   634
			XXXXXXXX treeItem should be THIS
insilmaril@753
   635
insilmaril@753
   636
			move visible to TreeItem???
insilmaril@753
   637
insilmaril@753
   638
			BranchObj now has updateContents
insilmaril@753
   639
insilmaril@753
   640
			maybe also start "bool TreeItem::branchlikeType"
insilmaril@753
   641
insilmaril@753
   642
insilmaril@753
   643
insilmaril@753
   644
			if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
insilmaril@753
   645
				setVisibility (false);
insilmaril@753
   646
			else
insilmaril@753
   647
				setVisibility (true);
insilmaril@753
   648
			//FIXME-2 hidden=false;
insilmaril@753
   649
		}	
insilmaril@753
   650
insilmaril@753
   651
*/
insilmaril@753
   652
		// And take care of my children
insilmaril@753
   653
		for (int i=0; i<branchCount(); ++i)
insilmaril@753
   654
			getBranchNum(i)->setHideTmp (mode);
insilmaril@753
   655
}
insilmaril@753
   656
insilmaril@753
   657
bool TreeItem::hasHiddenExportParent()
insilmaril@753
   658
{
insilmaril@753
   659
	// Calls parents recursivly to
insilmaril@753
   660
	// find out, if we or parents are temp. hidden
insilmaril@753
   661
insilmaril@753
   662
	if (hidden || hideExport) return true;
insilmaril@753
   663
insilmaril@753
   664
	if (parentItem) 
insilmaril@753
   665
		return parentItem->hasHiddenExportParent();
insilmaril@753
   666
	else
insilmaril@753
   667
		return false;
insilmaril@753
   668
}
insilmaril@753
   669
insilmaril@753
   670
insilmaril@753
   671
void TreeItem::setHideInExport(bool b) 
insilmaril@753
   672
{
insilmaril@776
   673
	if (type==Branch || type==Image)
insilmaril@753
   674
	{
insilmaril@753
   675
		hideExport=b;
insilmaril@753
   676
		if (b)
insilmaril@777
   677
			systemFlags.activate("system-hideInExport");
insilmaril@753
   678
		else	
insilmaril@777
   679
			systemFlags.deactivate("system-hideInExport");
insilmaril@753
   680
	}
insilmaril@753
   681
}	
insilmaril@753
   682
insilmaril@753
   683
bool TreeItem::hideInExport()
insilmaril@753
   684
{
insilmaril@753
   685
	return hideExport;
insilmaril@753
   686
}	
insilmaril@753
   687
insilmaril@753
   688
bool TreeItem::isHidden()
insilmaril@753
   689
{
insilmaril@753
   690
	return hidden;
insilmaril@753
   691
}	
insilmaril@753
   692
insilmaril@777
   693
QString TreeItem::getAttr()
insilmaril@777
   694
{
insilmaril@777
   695
	QString s;
insilmaril@777
   696
	if (parentItem==rootItem)
insilmaril@777
   697
		posMode=Absolute;
insilmaril@777
   698
	else
insilmaril@777
   699
	{
insilmaril@777
   700
		if (type==TreeItem::Image ||depth()==1)
insilmaril@777
   701
			posMode=Relative;
insilmaril@777
   702
		else
insilmaril@777
   703
			posMode=Unused;
insilmaril@777
   704
	}
insilmaril@777
   705
	switch (posMode)
insilmaril@777
   706
	{
insilmaril@777
   707
		case Relative:	
insilmaril@777
   708
			if (lmo) pos=lmo->getRelPos();
insilmaril@777
   709
			s= attribut("relPosX",QString().setNum(pos.x())) +
insilmaril@777
   710
			   attribut("relPosY",QString().setNum(pos.y())); 
insilmaril@777
   711
			break;
insilmaril@777
   712
		case Absolute:	
insilmaril@777
   713
			if (lmo) pos=lmo->getAbsPos();
insilmaril@777
   714
			s=attribut("absPosX",QString().setNum(pos.x())) +
insilmaril@777
   715
			  attribut("absPosY",QString().setNum(pos.y())); 
insilmaril@777
   716
			break;
insilmaril@777
   717
		default: break;
insilmaril@777
   718
	}
insilmaril@777
   719
	if (hideExport)
insilmaril@777
   720
		return s+attribut("hideInExport","true");
insilmaril@777
   721
	else	
insilmaril@777
   722
		return s;
insilmaril@777
   723
}
insilmaril@753
   724
insilmaril@726
   725
insilmaril@777
   726