insilmaril@725: #include insilmaril@725: insilmaril@741: #include "branchobj.h" insilmaril@725: #include "treeitem.h" insilmaril@725: insilmaril@725: TreeItem::TreeItem(const QList &data, TreeItem *parent) insilmaril@725: { insilmaril@725: parentItem = parent; insilmaril@725: itemData = data; insilmaril@726: lmo=NULL; insilmaril@738: insilmaril@738: branchOffset=0; insilmaril@741: branchCounter=0; insilmaril@738: lastSelectedBranchNum=-1; insilmaril@725: } insilmaril@725: insilmaril@725: TreeItem::~TreeItem() insilmaril@725: { insilmaril@725: qDeleteAll(childItems); insilmaril@725: } insilmaril@725: insilmaril@741: insilmaril@725: void TreeItem::appendChild(TreeItem *item) insilmaril@725: { insilmaril@725: childItems.append(item); insilmaril@741: insilmaril@741: insilmaril@741: if (item->type == Branch || item->type ==MapCenter) insilmaril@738: { insilmaril@741: if (branchCounter==0) insilmaril@738: branchOffset=childItems.count()-1; insilmaril@741: branchCounter++; insilmaril@738: } insilmaril@725: } insilmaril@725: insilmaril@727: void TreeItem::removeChild(int row) insilmaril@727: { insilmaril@727: if (row>=0) insilmaril@727: { insilmaril@727: delete (childItems.at(row) ); insilmaril@727: childItems.removeAt (row); insilmaril@727: } else insilmaril@727: qWarning ("TreeItem::removeChild tried to remove non existing item?!\n"); insilmaril@727: } insilmaril@727: insilmaril@725: TreeItem *TreeItem::child(int row) insilmaril@725: { insilmaril@725: return childItems.value(row); insilmaril@725: } insilmaril@725: insilmaril@725: int TreeItem::childCount() const insilmaril@725: { insilmaril@725: return childItems.count(); insilmaril@725: } insilmaril@725: insilmaril@725: int TreeItem::columnCount() const insilmaril@725: { insilmaril@725: return itemData.count(); insilmaril@725: } insilmaril@741: insilmaril@741: int TreeItem::branchCount() const insilmaril@741: { insilmaril@741: return branchCounter; insilmaril@741: } insilmaril@727: int TreeItem::row() const insilmaril@727: { insilmaril@727: if (parentItem) insilmaril@727: return parentItem->childItems.indexOf(const_cast(this)); insilmaril@727: insilmaril@727: return 0; insilmaril@727: } insilmaril@727: insilmaril@727: int TreeItem::column() const insilmaril@727: { insilmaril@727: return 0; insilmaril@727: } insilmaril@727: insilmaril@740: int TreeItem::depth() insilmaril@740: { insilmaril@740: int d=-1; insilmaril@740: TreeItem *ti=this; insilmaril@740: while (ti!=NULL) insilmaril@740: { insilmaril@740: ti=ti->parent(); insilmaril@740: d++; insilmaril@740: } insilmaril@740: return d; insilmaril@740: } insilmaril@740: insilmaril@727: TreeItem *TreeItem::parent() insilmaril@727: { insilmaril@727: return parentItem; insilmaril@727: } insilmaril@727: insilmaril@741: int TreeItem::num() insilmaril@741: { insilmaril@741: switch (type) insilmaril@741: { insilmaril@741: case Undefined: return -1; insilmaril@741: case MapCenter: return parentItem->childItems.indexOf (this) - branchOffset; insilmaril@741: case Branch: return parentItem->childItems.indexOf (this) - branchOffset; insilmaril@741: case Image: return -1; // FIXME insilmaril@741: default: return -1; insilmaril@741: } insilmaril@741: insilmaril@741: } insilmaril@725: insilmaril@725: QVariant TreeItem::data(int column) const insilmaril@725: { insilmaril@725: return itemData.value(column); insilmaril@725: } insilmaril@725: insilmaril@726: void TreeItem::setHeading (const QString s) insilmaril@725: { insilmaril@726: itemData[0]=s; insilmaril@726: } insilmaril@726: insilmaril@726: QString TreeItem::getHeading () insilmaril@726: { insilmaril@726: return itemData[0].toString(); insilmaril@726: } insilmaril@726: insilmaril@741: void TreeItem::setNote(const QString s) insilmaril@741: { insilmaril@741: switch (type) insilmaril@741: { insilmaril@741: case MapCenter: insilmaril@741: ((BranchObj*)lmo)->setNote(s); insilmaril@741: break; insilmaril@741: case Branch: insilmaril@741: ((BranchObj*)lmo)->setNote(s); insilmaril@741: break; insilmaril@741: default: ; insilmaril@741: } insilmaril@741: } insilmaril@741: insilmaril@741: QString TreeItem::getNote() insilmaril@741: { insilmaril@741: switch (type) insilmaril@741: { insilmaril@741: case MapCenter: return ((BranchObj*)lmo)->getNote(); insilmaril@741: case Branch: return ((BranchObj*)lmo)->getNote(); insilmaril@741: default: return QString (); insilmaril@741: } insilmaril@741: } insilmaril@741: insilmaril@726: void TreeItem::setType(const Type t) insilmaril@726: { insilmaril@726: type=t; insilmaril@726: itemData[1]=getTypeName(); insilmaril@726: } insilmaril@726: insilmaril@726: TreeItem::Type TreeItem::getType() insilmaril@726: { insilmaril@726: return type; insilmaril@726: } insilmaril@726: insilmaril@726: QString TreeItem::getTypeName() insilmaril@726: { insilmaril@726: switch (type) insilmaril@726: { insilmaril@726: case Undefined: return QString ("Undefined"); insilmaril@726: case MapCenter: return QString ("MapCenter"); insilmaril@726: case Branch: return QString ("Branch"); insilmaril@739: case Image: return QString ("Image"); insilmaril@726: default: return QString ("TreeItem::getTypeName no typename defined?!"); insilmaril@726: } insilmaril@725: } insilmaril@725: insilmaril@738: TreeItem* TreeItem::getChildNum(const int &n) insilmaril@738: { insilmaril@738: if (n>=0 && n0) insilmaril@738: return getBranchNum (branchOffset); insilmaril@738: else insilmaril@738: return NULL; insilmaril@738: } insilmaril@738: insilmaril@738: TreeItem* TreeItem::getLastBranch() insilmaril@738: { insilmaril@741: if (branchCounter>0) insilmaril@741: return getBranchNum (branchOffset + branchCounter-1); insilmaril@738: else insilmaril@738: return NULL; insilmaril@738: } insilmaril@738: insilmaril@738: insilmaril@738: TreeItem* TreeItem::getBranchNum(const int &n) insilmaril@738: { insilmaril@741: if (branchCounter>0) insilmaril@738: return getChildNum (branchOffset + n); insilmaril@738: else insilmaril@738: return NULL; insilmaril@738: } insilmaril@738: insilmaril@738: void TreeItem::setLastSelectedBranch() insilmaril@738: { insilmaril@738: if (parentItem) insilmaril@738: parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this); insilmaril@738: } insilmaril@738: insilmaril@738: TreeItem* TreeItem::getLastSelectedBranch() insilmaril@738: { insilmaril@738: return getBranchNum (lastSelectedBranchNum); insilmaril@738: } insilmaril@738: insilmaril@727: LinkableMapObj* TreeItem::getLMO() // FIXME VM should be unnecessary in the end insilmaril@726: { insilmaril@726: return lmo; insilmaril@726: } insilmaril@726: insilmaril@726: void TreeItem::setLMO(LinkableMapObj *l) insilmaril@726: { insilmaril@726: lmo=l; insilmaril@726: } insilmaril@726: