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