treeitem.cpp
author insilmaril
Fri, 06 Mar 2009 15:02:58 +0000
changeset 741 1b4d1ea6ea8c
parent 740 6dc0a20031f7
child 745 2d4cc445a86a
permissions -rw-r--r--
Iteration over map works now (again)
insilmaril@725
     1
#include <QStringList>
insilmaril@725
     2
insilmaril@741
     3
#include "branchobj.h"
insilmaril@725
     4
#include "treeitem.h"
insilmaril@725
     5
insilmaril@725
     6
TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
insilmaril@725
     7
{
insilmaril@725
     8
    parentItem = parent;
insilmaril@725
     9
    itemData = data;
insilmaril@726
    10
	lmo=NULL;
insilmaril@738
    11
insilmaril@738
    12
	branchOffset=0;
insilmaril@741
    13
	branchCounter=0;
insilmaril@738
    14
	lastSelectedBranchNum=-1;
insilmaril@725
    15
}
insilmaril@725
    16
insilmaril@725
    17
TreeItem::~TreeItem()
insilmaril@725
    18
{
insilmaril@725
    19
    qDeleteAll(childItems);
insilmaril@725
    20
}
insilmaril@725
    21
insilmaril@741
    22
insilmaril@725
    23
void TreeItem::appendChild(TreeItem *item)
insilmaril@725
    24
{
insilmaril@725
    25
    childItems.append(item);
insilmaril@741
    26
	
insilmaril@741
    27
insilmaril@741
    28
	if (item->type == Branch || item->type ==MapCenter)
insilmaril@738
    29
	{
insilmaril@741
    30
		if (branchCounter==0)
insilmaril@738
    31
			branchOffset=childItems.count()-1;
insilmaril@741
    32
		branchCounter++;
insilmaril@738
    33
	}
insilmaril@725
    34
}
insilmaril@725
    35
insilmaril@727
    36
void TreeItem::removeChild(int row)
insilmaril@727
    37
{
insilmaril@727
    38
    if (row>=0)
insilmaril@727
    39
	{
insilmaril@727
    40
		delete (childItems.at(row) );
insilmaril@727
    41
		childItems.removeAt (row);
insilmaril@727
    42
	} else
insilmaril@727
    43
		qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
insilmaril@727
    44
}
insilmaril@727
    45
insilmaril@725
    46
TreeItem *TreeItem::child(int row)
insilmaril@725
    47
{
insilmaril@725
    48
    return childItems.value(row);
insilmaril@725
    49
}
insilmaril@725
    50
insilmaril@725
    51
int TreeItem::childCount() const
insilmaril@725
    52
{
insilmaril@725
    53
    return childItems.count();
insilmaril@725
    54
}
insilmaril@725
    55
insilmaril@725
    56
int TreeItem::columnCount() const
insilmaril@725
    57
{
insilmaril@725
    58
    return itemData.count();
insilmaril@725
    59
}
insilmaril@741
    60
insilmaril@741
    61
int TreeItem::branchCount() const
insilmaril@741
    62
{
insilmaril@741
    63
    return branchCounter;
insilmaril@741
    64
}
insilmaril@727
    65
int TreeItem::row() const
insilmaril@727
    66
{
insilmaril@727
    67
    if (parentItem)
insilmaril@727
    68
        return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
insilmaril@727
    69
insilmaril@727
    70
    return 0;
insilmaril@727
    71
}
insilmaril@727
    72
insilmaril@727
    73
int TreeItem::column() const
insilmaril@727
    74
{
insilmaril@727
    75
    return 0;
insilmaril@727
    76
}
insilmaril@727
    77
insilmaril@740
    78
int TreeItem::depth() 
insilmaril@740
    79
{
insilmaril@740
    80
	int d=-1;
insilmaril@740
    81
	TreeItem *ti=this;
insilmaril@740
    82
	while (ti!=NULL)
insilmaril@740
    83
	{
insilmaril@740
    84
		ti=ti->parent();
insilmaril@740
    85
		d++;
insilmaril@740
    86
	}
insilmaril@740
    87
	return d;
insilmaril@740
    88
}
insilmaril@740
    89
insilmaril@727
    90
TreeItem *TreeItem::parent()
insilmaril@727
    91
{
insilmaril@727
    92
    return parentItem;
insilmaril@727
    93
}
insilmaril@727
    94
insilmaril@741
    95
int TreeItem::num()
insilmaril@741
    96
{
insilmaril@741
    97
	switch (type)
insilmaril@741
    98
	{
insilmaril@741
    99
		case Undefined: return -1;
insilmaril@741
   100
		case MapCenter: return parentItem->childItems.indexOf (this) - branchOffset;
insilmaril@741
   101
		case Branch: return parentItem->childItems.indexOf (this) - branchOffset;
insilmaril@741
   102
		case Image: return -1; // FIXME
insilmaril@741
   103
		default: return -1;
insilmaril@741
   104
	}
insilmaril@741
   105
	
insilmaril@741
   106
}
insilmaril@725
   107
insilmaril@725
   108
QVariant TreeItem::data(int column) const
insilmaril@725
   109
{
insilmaril@725
   110
    return itemData.value(column);
insilmaril@725
   111
}
insilmaril@725
   112
insilmaril@726
   113
void TreeItem::setHeading (const QString s)
insilmaril@725
   114
{
insilmaril@726
   115
	itemData[0]=s;
insilmaril@726
   116
}
insilmaril@726
   117
insilmaril@726
   118
QString TreeItem::getHeading ()
insilmaril@726
   119
{
insilmaril@726
   120
	return itemData[0].toString();
insilmaril@726
   121
}
insilmaril@726
   122
insilmaril@741
   123
void TreeItem::setNote(const QString s)
insilmaril@741
   124
{
insilmaril@741
   125
	switch (type)
insilmaril@741
   126
	{
insilmaril@741
   127
		case MapCenter: 
insilmaril@741
   128
			((BranchObj*)lmo)->setNote(s);
insilmaril@741
   129
			break;
insilmaril@741
   130
		case Branch: 
insilmaril@741
   131
			((BranchObj*)lmo)->setNote(s);
insilmaril@741
   132
			break;
insilmaril@741
   133
		default: ;
insilmaril@741
   134
	}
insilmaril@741
   135
}
insilmaril@741
   136
insilmaril@741
   137
QString TreeItem::getNote()
insilmaril@741
   138
{
insilmaril@741
   139
	switch (type)
insilmaril@741
   140
	{
insilmaril@741
   141
		case MapCenter: return ((BranchObj*)lmo)->getNote();
insilmaril@741
   142
		case Branch: return ((BranchObj*)lmo)->getNote();
insilmaril@741
   143
		default: return QString ();
insilmaril@741
   144
	}
insilmaril@741
   145
}
insilmaril@741
   146
insilmaril@726
   147
void TreeItem::setType(const Type t)
insilmaril@726
   148
{
insilmaril@726
   149
	type=t;
insilmaril@726
   150
	itemData[1]=getTypeName();
insilmaril@726
   151
}
insilmaril@726
   152
insilmaril@726
   153
TreeItem::Type TreeItem::getType()
insilmaril@726
   154
{
insilmaril@726
   155
	return type;
insilmaril@726
   156
}
insilmaril@726
   157
insilmaril@726
   158
QString TreeItem::getTypeName()
insilmaril@726
   159
{
insilmaril@726
   160
	switch (type)
insilmaril@726
   161
	{
insilmaril@726
   162
		case Undefined: return QString ("Undefined");
insilmaril@726
   163
		case MapCenter: return QString ("MapCenter");
insilmaril@726
   164
		case Branch: return QString ("Branch");
insilmaril@739
   165
		case Image: return QString ("Image");
insilmaril@726
   166
		default: return QString ("TreeItem::getTypeName no typename defined?!");
insilmaril@726
   167
	}
insilmaril@725
   168
}
insilmaril@725
   169
insilmaril@738
   170
TreeItem* TreeItem::getChildNum(const int &n)
insilmaril@738
   171
{
insilmaril@738
   172
	if (n>=0 && n<childItems.count() )
insilmaril@738
   173
		return childItems.at(n);
insilmaril@738
   174
	else
insilmaril@738
   175
		return NULL;
insilmaril@738
   176
}
insilmaril@738
   177
insilmaril@738
   178
TreeItem* TreeItem::getFirstBranch()
insilmaril@738
   179
{
insilmaril@741
   180
	if (branchCounter>0)
insilmaril@738
   181
		return getBranchNum (branchOffset);
insilmaril@738
   182
	else
insilmaril@738
   183
		return NULL;
insilmaril@738
   184
}
insilmaril@738
   185
insilmaril@738
   186
TreeItem* TreeItem::getLastBranch()
insilmaril@738
   187
{
insilmaril@741
   188
	if (branchCounter>0)
insilmaril@741
   189
		return getBranchNum (branchOffset + branchCounter-1);
insilmaril@738
   190
	else
insilmaril@738
   191
		return NULL;
insilmaril@738
   192
}
insilmaril@738
   193
insilmaril@738
   194
insilmaril@738
   195
TreeItem* TreeItem::getBranchNum(const int &n)
insilmaril@738
   196
{
insilmaril@741
   197
	if (branchCounter>0)
insilmaril@738
   198
		return getChildNum (branchOffset + n);
insilmaril@738
   199
	else
insilmaril@738
   200
		return NULL;
insilmaril@738
   201
}
insilmaril@738
   202
insilmaril@738
   203
void TreeItem::setLastSelectedBranch()
insilmaril@738
   204
{
insilmaril@738
   205
	if (parentItem)
insilmaril@738
   206
		parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
insilmaril@738
   207
}
insilmaril@738
   208
insilmaril@738
   209
TreeItem* TreeItem::getLastSelectedBranch()
insilmaril@738
   210
{
insilmaril@738
   211
	return getBranchNum (lastSelectedBranchNum);
insilmaril@738
   212
}
insilmaril@738
   213
insilmaril@727
   214
LinkableMapObj* TreeItem::getLMO()	// FIXME VM should be unnecessary in the end
insilmaril@726
   215
{
insilmaril@726
   216
	return lmo;
insilmaril@726
   217
}
insilmaril@726
   218
insilmaril@726
   219
void TreeItem::setLMO(LinkableMapObj *l)
insilmaril@726
   220
{
insilmaril@726
   221
	lmo=l;
insilmaril@726
   222
}
insilmaril@726
   223