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