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