treeitem.cpp
author insilmaril
Tue, 07 Apr 2009 16:15:53 +0000
changeset 753 25a77484ec72
parent 750 ff3b01ce0960
child 754 db0ec4bcf416
permissions -rw-r--r--
more work on screwing up the data structures
insilmaril@746
     1
#include <iostream>
insilmaril@746
     2
using namespace std;
insilmaril@746
     3
insilmaril@725
     4
#include <QStringList>
insilmaril@725
     5
insilmaril@750
     6
#include "treeitem.h"
insilmaril@750
     7
insilmaril@741
     8
#include "branchobj.h"
insilmaril@750
     9
#include "branchitem.h"
insilmaril@746
    10
#include "vymmodel.h"
insilmaril@725
    11
insilmaril@725
    12
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
insilmaril@725
    13
{
insilmaril@746
    14
	model=NULL;
insilmaril@746
    15
insilmaril@725
    16
    parentItem = parent;
insilmaril@725
    17
    itemData = data;
insilmaril@726
    18
	lmo=NULL;
insilmaril@738
    19
insilmaril@738
    20
	branchOffset=0;
insilmaril@741
    21
	branchCounter=0;
insilmaril@738
    22
	lastSelectedBranchNum=-1;
insilmaril@746
    23
insilmaril@746
    24
	note.setNote(""); 
insilmaril@746
    25
	// note.setFontHint (textEditor->getFontHintDefault() );	//FIXME-2
insilmaril@746
    26
	// isNoteInEditor=false;
insilmaril@753
    27
insilmaril@753
    28
	hidden=false;
insilmaril@725
    29
}
insilmaril@725
    30
insilmaril@725
    31
TreeItem::~TreeItem()
insilmaril@725
    32
{
insilmaril@725
    33
    qDeleteAll(childItems);
insilmaril@725
    34
}
insilmaril@725
    35
insilmaril@746
    36
QString TreeItem::saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset)
insilmaril@746
    37
{
insilmaril@746
    38
	qWarning ("TreeItem::saveToDir called directly");
insilmaril@746
    39
	return QString();
insilmaril@746
    40
}
insilmaril@746
    41
insilmaril@746
    42
insilmaril@746
    43
/*
insilmaril@753
    44
void TreeItem::copy (OrnamentedObj* other)	//FIXME-2	probably need deep copy of branches and data!
insilmaril@746
    45
insilmaril@746
    46
{
insilmaril@746
    47
	note.copy (other->note);
insilmaril@746
    48
	model=other->model;
insilmaril@753
    49
	hideExport=other->hideExport;
insilmaril@746
    50
}
insilmaril@746
    51
*/
insilmaril@746
    52
insilmaril@746
    53
void TreeItem::setModel (VymModel *m)
insilmaril@746
    54
{
insilmaril@746
    55
	model=m;
insilmaril@746
    56
}
insilmaril@746
    57
insilmaril@746
    58
VymModel* TreeItem::getModel ()
insilmaril@746
    59
{
insilmaril@746
    60
	return model;
insilmaril@746
    61
}
insilmaril@741
    62
insilmaril@725
    63
void TreeItem::appendChild(TreeItem *item)
insilmaril@725
    64
{
insilmaril@725
    65
    childItems.append(item);
insilmaril@746
    66
	item->setModel (model);
insilmaril@741
    67
insilmaril@741
    68
	if (item->type == Branch || item->type ==MapCenter)
insilmaril@738
    69
	{
insilmaril@741
    70
		if (branchCounter==0)
insilmaril@738
    71
			branchOffset=childItems.count()-1;
insilmaril@741
    72
		branchCounter++;
insilmaril@738
    73
	}
insilmaril@725
    74
}
insilmaril@725
    75
insilmaril@727
    76
void TreeItem::removeChild(int row)
insilmaril@727
    77
{
insilmaril@745
    78
    if (row<0 || row > childItems.size()-1)
insilmaril@745
    79
		qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
insilmaril@745
    80
	else
insilmaril@727
    81
	{
insilmaril@745
    82
		cout << "TI::removeChild this="<<this<<"  row="<<row<<endl;
insilmaril@745
    83
		delete childItems.takeAt (row);
insilmaril@745
    84
	}
insilmaril@727
    85
}
insilmaril@727
    86
insilmaril@725
    87
TreeItem *TreeItem::child(int row)
insilmaril@725
    88
{
insilmaril@725
    89
    return childItems.value(row);
insilmaril@725
    90
}
insilmaril@725
    91
insilmaril@725
    92
int TreeItem::childCount() const
insilmaril@725
    93
{
insilmaril@725
    94
    return childItems.count();
insilmaril@725
    95
}
insilmaril@725
    96
insilmaril@745
    97
int TreeItem::childNumber() const
insilmaril@745
    98
{
insilmaril@745
    99
    if (parentItem)
insilmaril@745
   100
        return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
insilmaril@745
   101
insilmaril@745
   102
    return 0;
insilmaril@745
   103
}
insilmaril@745
   104
insilmaril@725
   105
int TreeItem::columnCount() const
insilmaril@725
   106
{
insilmaril@725
   107
    return itemData.count();
insilmaril@725
   108
}
insilmaril@741
   109
insilmaril@741
   110
int TreeItem::branchCount() const
insilmaril@741
   111
{
insilmaril@741
   112
    return branchCounter;
insilmaril@741
   113
}
insilmaril@749
   114
insilmaril@749
   115
int TreeItem::imageCount() const
insilmaril@749
   116
{
insilmaril@749
   117
	int imageCounter=0;
insilmaril@749
   118
    return imageCounter; // FIXME-1 imageCounter needs to be calculated...
insilmaril@749
   119
}
insilmaril@749
   120
insilmaril@749
   121
int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
insilmaril@749
   122
{
insilmaril@749
   123
	int xlinkCounter=0;
insilmaril@749
   124
    return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
insilmaril@749
   125
}
insilmaril@749
   126
insilmaril@727
   127
int TreeItem::row() const
insilmaril@727
   128
{
insilmaril@727
   129
    if (parentItem)
insilmaril@727
   130
        return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
insilmaril@727
   131
insilmaril@727
   132
    return 0;
insilmaril@727
   133
}
insilmaril@727
   134
insilmaril@727
   135
int TreeItem::column() const
insilmaril@727
   136
{
insilmaril@727
   137
    return 0;
insilmaril@727
   138
}
insilmaril@727
   139
insilmaril@740
   140
int TreeItem::depth() 
insilmaril@740
   141
{
insilmaril@740
   142
	int d=-1;
insilmaril@740
   143
	TreeItem *ti=this;
insilmaril@740
   144
	while (ti!=NULL)
insilmaril@740
   145
	{
insilmaril@740
   146
		ti=ti->parent();
insilmaril@740
   147
		d++;
insilmaril@740
   148
	}
insilmaril@740
   149
	return d;
insilmaril@740
   150
}
insilmaril@740
   151
insilmaril@727
   152
TreeItem *TreeItem::parent()
insilmaril@727
   153
{
insilmaril@727
   154
    return parentItem;
insilmaril@727
   155
}
insilmaril@727
   156
insilmaril@741
   157
int TreeItem::num()
insilmaril@741
   158
{
insilmaril@741
   159
	switch (type)
insilmaril@741
   160
	{
insilmaril@741
   161
		case Undefined: return -1;
insilmaril@741
   162
		case MapCenter: return parentItem->childItems.indexOf (this) - branchOffset;
insilmaril@741
   163
		case Branch: return parentItem->childItems.indexOf (this) - branchOffset;
insilmaril@746
   164
		case Image: return -1; // FIXME-2
insilmaril@741
   165
		default: return -1;
insilmaril@741
   166
	}
insilmaril@749
   167
}
insilmaril@749
   168
insilmaril@749
   169
int TreeItem::num (TreeItem *item)
insilmaril@749
   170
{
insilmaril@749
   171
	if (!item) return -1;
insilmaril@749
   172
	switch (item->getType())
insilmaril@749
   173
	{
insilmaril@749
   174
		case Undefined: return -1;
insilmaril@749
   175
		case MapCenter: return childItems.indexOf (this) - branchOffset;
insilmaril@749
   176
		case Branch: return childItems.indexOf (this) - branchOffset;
insilmaril@749
   177
		case Image: return -1; // FIXME-2
insilmaril@749
   178
		default: return -1;
insilmaril@749
   179
	}
insilmaril@741
   180
}
insilmaril@725
   181
insilmaril@725
   182
QVariant TreeItem::data(int column) const
insilmaril@725
   183
{
insilmaril@725
   184
    return itemData.value(column);
insilmaril@725
   185
}
insilmaril@725
   186
insilmaril@726
   187
void TreeItem::setHeading (const QString s)
insilmaril@725
   188
{
insilmaril@726
   189
	itemData[0]=s;
insilmaril@726
   190
}
insilmaril@726
   191
insilmaril@753
   192
QString TreeItem::getHeading () const
insilmaril@726
   193
{
insilmaril@726
   194
	return itemData[0].toString();
insilmaril@726
   195
}
insilmaril@726
   196
insilmaril@753
   197
std::string TreeItem::headingStd () const
insilmaril@753
   198
{
insilmaril@753
   199
	return itemData[0].toString().toStdString();
insilmaril@753
   200
}
insilmaril@753
   201
insilmaril@741
   202
void TreeItem::setNote(const QString s)
insilmaril@741
   203
{
insilmaril@746
   204
	note.setNote(s);
insilmaril@746
   205
	// updateNoteFlag();  FIXME-2 needed?
insilmaril@746
   206
	if (model) 
insilmaril@753
   207
		model->emitNoteHasChanged (this);
insilmaril@746
   208
}
insilmaril@746
   209
insilmaril@746
   210
void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor)
insilmaril@746
   211
{
insilmaril@746
   212
	note=n;
insilmaril@746
   213
	// updateNoteFlag();  FIXME-2 needed?
insilmaril@746
   214
	if (model && updateNoteEditor)	
insilmaril@753
   215
		model->emitNoteHasChanged (this);
insilmaril@741
   216
}
insilmaril@741
   217
insilmaril@741
   218
QString TreeItem::getNote()
insilmaril@741
   219
{
insilmaril@746
   220
	return note.getNote();
insilmaril@746
   221
}
insilmaril@746
   222
insilmaril@746
   223
NoteObj TreeItem::getNoteObj()
insilmaril@746
   224
{
insilmaril@746
   225
	return note;
insilmaril@746
   226
}
insilmaril@746
   227
insilmaril@746
   228
QString TreeItem::getNoteASCII(const QString &indent, const int &width)
insilmaril@746
   229
{
insilmaril@746
   230
    return note.getNoteASCII(indent,width);
insilmaril@746
   231
}
insilmaril@746
   232
insilmaril@746
   233
QString TreeItem::getNoteASCII()
insilmaril@746
   234
{
insilmaril@746
   235
    return note.getNoteASCII();
insilmaril@746
   236
}
insilmaril@746
   237
insilmaril@746
   238
QString TreeItem::getNoteOpenDoc()
insilmaril@746
   239
{
insilmaril@746
   240
    return note.getNoteOpenDoc();
insilmaril@741
   241
}
insilmaril@741
   242
insilmaril@726
   243
void TreeItem::setType(const Type t)
insilmaril@726
   244
{
insilmaril@726
   245
	type=t;
insilmaril@726
   246
	itemData[1]=getTypeName();
insilmaril@726
   247
}
insilmaril@726
   248
insilmaril@726
   249
TreeItem::Type TreeItem::getType()
insilmaril@726
   250
{
insilmaril@726
   251
	return type;
insilmaril@726
   252
}
insilmaril@726
   253
insilmaril@753
   254
bool TreeItem::isBranchLikeType() const
insilmaril@753
   255
{
insilmaril@753
   256
	if (type==Branch ||type==MapCenter) return true;
insilmaril@753
   257
	return false;
insilmaril@753
   258
}
insilmaril@753
   259
insilmaril@726
   260
QString TreeItem::getTypeName()
insilmaril@726
   261
{
insilmaril@726
   262
	switch (type)
insilmaril@726
   263
	{
insilmaril@726
   264
		case Undefined: return QString ("Undefined");
insilmaril@726
   265
		case MapCenter: return QString ("MapCenter");
insilmaril@726
   266
		case Branch: return QString ("Branch");
insilmaril@739
   267
		case Image: return QString ("Image");
insilmaril@726
   268
		default: return QString ("TreeItem::getTypeName no typename defined?!");
insilmaril@726
   269
	}
insilmaril@725
   270
}
insilmaril@725
   271
insilmaril@738
   272
TreeItem* TreeItem::getChildNum(const int &n)
insilmaril@738
   273
{
insilmaril@738
   274
	if (n>=0 && n<childItems.count() )
insilmaril@738
   275
		return childItems.at(n);
insilmaril@738
   276
	else
insilmaril@738
   277
		return NULL;
insilmaril@738
   278
}
insilmaril@738
   279
insilmaril@750
   280
BranchItem* TreeItem::getFirstBranch()
insilmaril@738
   281
{
insilmaril@741
   282
	if (branchCounter>0)
insilmaril@738
   283
		return getBranchNum (branchOffset);
insilmaril@738
   284
	else
insilmaril@738
   285
		return NULL;
insilmaril@738
   286
}
insilmaril@738
   287
insilmaril@750
   288
BranchItem* TreeItem::getLastBranch()
insilmaril@738
   289
{
insilmaril@741
   290
	if (branchCounter>0)
insilmaril@741
   291
		return getBranchNum (branchOffset + branchCounter-1);
insilmaril@738
   292
	else
insilmaril@738
   293
		return NULL;
insilmaril@738
   294
}
insilmaril@738
   295
insilmaril@738
   296
insilmaril@750
   297
BranchItem* TreeItem::getBranchNum(const int &n)
insilmaril@738
   298
{
insilmaril@741
   299
	if (branchCounter>0)
insilmaril@750
   300
		return (BranchItem*)getChildNum (branchOffset + n);
insilmaril@738
   301
	else
insilmaril@738
   302
		return NULL;
insilmaril@738
   303
}
insilmaril@738
   304
insilmaril@750
   305
BranchObj* TreeItem::getBranchObjNum(const int &n)
insilmaril@750
   306
{
insilmaril@750
   307
	if (branchCounter>0)
insilmaril@750
   308
	{
insilmaril@750
   309
		return (BranchObj*)(getChildNum (branchOffset+n)->lmo);
insilmaril@750
   310
	} else
insilmaril@750
   311
		return NULL;
insilmaril@750
   312
}
insilmaril@750
   313
insilmaril@738
   314
void TreeItem::setLastSelectedBranch()
insilmaril@738
   315
{
insilmaril@738
   316
	if (parentItem)
insilmaril@738
   317
		parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
insilmaril@738
   318
}
insilmaril@738
   319
insilmaril@738
   320
TreeItem* TreeItem::getLastSelectedBranch()
insilmaril@738
   321
{
insilmaril@738
   322
	return getBranchNum (lastSelectedBranchNum);
insilmaril@738
   323
}
insilmaril@738
   324
insilmaril@753
   325
insilmaril@753
   326
void TreeItem::setHideTmp (HideTmpMode mode)
insilmaril@753
   327
{
insilmaril@753
   328
	if (isBranchLikeType() )
insilmaril@753
   329
		((BranchItem*)this)->updateVisibility();
insilmaril@753
   330
		/*
insilmaril@753
   331
	if (type==Image)
insilmaril@753
   332
		//updateVisibility();
insilmaril@753
   333
	*/
insilmaril@753
   334
insilmaril@753
   335
/*
insilmaril@753
   336
insilmaril@753
   337
		if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
insilmaril@753
   338
		{
insilmaril@753
   339
			// Hide stuff according to hideExport flag and parents
insilmaril@753
   340
			//setVisibility (false);
insilmaril@753
   341
			updateVisibility();
insilmaril@753
   342
			//FIXME-2 hidden=true;
insilmaril@753
   343
		}else
insilmaril@753
   344
		{
insilmaril@753
   345
			// Do not hide, but still take care of scrolled status
insilmaril@753
   346
			
insilmaril@753
   347
insilmaril@753
   348
			XXXXXXXX treeItem should be THIS
insilmaril@753
   349
insilmaril@753
   350
			move visible to TreeItem???
insilmaril@753
   351
insilmaril@753
   352
			BranchObj now has updateContents
insilmaril@753
   353
insilmaril@753
   354
			maybe also start "bool TreeItem::branchlikeType"
insilmaril@753
   355
insilmaril@753
   356
insilmaril@753
   357
insilmaril@753
   358
			if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
insilmaril@753
   359
				setVisibility (false);
insilmaril@753
   360
			else
insilmaril@753
   361
				setVisibility (true);
insilmaril@753
   362
			//FIXME-2 hidden=false;
insilmaril@753
   363
		}	
insilmaril@753
   364
insilmaril@753
   365
*/
insilmaril@753
   366
		// And take care of my children
insilmaril@753
   367
		for (int i=0; i<branchCount(); ++i)
insilmaril@753
   368
			getBranchNum(i)->setHideTmp (mode);
insilmaril@753
   369
}
insilmaril@753
   370
insilmaril@753
   371
bool TreeItem::hasHiddenExportParent()
insilmaril@753
   372
{
insilmaril@753
   373
	// Calls parents recursivly to
insilmaril@753
   374
	// find out, if we or parents are temp. hidden
insilmaril@753
   375
insilmaril@753
   376
	if (hidden || hideExport) return true;
insilmaril@753
   377
insilmaril@753
   378
	if (parentItem) 
insilmaril@753
   379
		return parentItem->hasHiddenExportParent();
insilmaril@753
   380
	else
insilmaril@753
   381
		return false;
insilmaril@753
   382
}
insilmaril@753
   383
insilmaril@753
   384
insilmaril@753
   385
void TreeItem::setHideInExport(bool b) 
insilmaril@753
   386
{
insilmaril@753
   387
	if (isBranchLikeType() )
insilmaril@753
   388
	{
insilmaril@753
   389
		hideExport=b;
insilmaril@753
   390
		/* FIXME-1 call setVis and updateContentsSize...
insilmaril@753
   391
		if (b)
insilmaril@753
   392
			systemFlags->activate("hideInExport");
insilmaril@753
   393
		else	
insilmaril@753
   394
			systemFlags->deactivate("hideInExport");
insilmaril@753
   395
		calcBBoxSize();
insilmaril@753
   396
		positionBBox();
insilmaril@753
   397
		requestReposition();	
insilmaril@753
   398
		*/
insilmaril@753
   399
	}
insilmaril@753
   400
}	
insilmaril@753
   401
insilmaril@753
   402
bool TreeItem::hideInExport()
insilmaril@753
   403
{
insilmaril@753
   404
	return hideExport;
insilmaril@753
   405
}	
insilmaril@753
   406
insilmaril@753
   407
bool TreeItem::isHidden()
insilmaril@753
   408
{
insilmaril@753
   409
	return hidden;
insilmaril@753
   410
}	
insilmaril@753
   411
insilmaril@753
   412
insilmaril@746
   413
LinkableMapObj* TreeItem::getLMO()	// FIXME-3  VM should be unnecessary in the end
insilmaril@726
   414
{
insilmaril@726
   415
	return lmo;
insilmaril@726
   416
}
insilmaril@726
   417
insilmaril@726
   418
void TreeItem::setLMO(LinkableMapObj *l)
insilmaril@726
   419
{
insilmaril@726
   420
	lmo=l;
insilmaril@726
   421
}
insilmaril@726
   422