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