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