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