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