insilmaril@746: #include insilmaril@746: using namespace std; insilmaril@746: insilmaril@725: #include insilmaril@725: insilmaril@750: #include "treeitem.h" insilmaril@750: insilmaril@741: #include "branchobj.h" insilmaril@750: #include "branchitem.h" insilmaril@746: #include "vymmodel.h" insilmaril@725: insilmaril@725: TreeItem::TreeItem(const QList &data, TreeItem *parent) insilmaril@725: { insilmaril@746: model=NULL; insilmaril@746: 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@746: insilmaril@746: note.setNote(""); insilmaril@746: // note.setFontHint (textEditor->getFontHintDefault() ); //FIXME-2 insilmaril@746: // isNoteInEditor=false; insilmaril@753: insilmaril@753: hidden=false; insilmaril@754: insilmaril@754: // Reset ID insilmaril@754: objID=""; insilmaril@754: insilmaril@754: insilmaril@725: } insilmaril@725: insilmaril@725: TreeItem::~TreeItem() insilmaril@725: { insilmaril@725: qDeleteAll(childItems); insilmaril@725: } insilmaril@725: insilmaril@746: QString TreeItem::saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset) insilmaril@746: { insilmaril@746: qWarning ("TreeItem::saveToDir called directly"); insilmaril@746: return QString(); insilmaril@746: } insilmaril@746: insilmaril@746: insilmaril@746: /* insilmaril@753: void TreeItem::copy (OrnamentedObj* other) //FIXME-2 probably need deep copy of branches and data! insilmaril@746: insilmaril@746: { insilmaril@746: note.copy (other->note); insilmaril@746: model=other->model; insilmaril@754: hideExport=officially insilmaril@754: other->hideExport; insilmaril@746: } insilmaril@746: */ insilmaril@746: insilmaril@746: void TreeItem::setModel (VymModel *m) insilmaril@746: { insilmaril@746: model=m; insilmaril@746: } insilmaril@746: insilmaril@746: VymModel* TreeItem::getModel () insilmaril@746: { insilmaril@746: return model; insilmaril@746: } insilmaril@741: insilmaril@725: void TreeItem::appendChild(TreeItem *item) insilmaril@725: { insilmaril@725: childItems.append(item); insilmaril@746: item->setModel (model); 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@745: if (row<0 || row > childItems.size()-1) insilmaril@745: qWarning ("TreeItem::removeChild tried to remove non existing item?!\n"); insilmaril@745: else insilmaril@727: { insilmaril@745: cout << "TI::removeChild this="<=0 && n0) insilmaril@738: return getBranchNum (branchOffset); insilmaril@738: else insilmaril@738: return NULL; insilmaril@738: } insilmaril@738: insilmaril@750: BranchItem* 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@750: BranchItem* TreeItem::getBranchNum(const int &n) insilmaril@738: { insilmaril@741: if (branchCounter>0) insilmaril@750: return (BranchItem*)getChildNum (branchOffset + n); insilmaril@738: else insilmaril@738: return NULL; insilmaril@738: } insilmaril@738: insilmaril@750: BranchObj* TreeItem::getBranchObjNum(const int &n) insilmaril@750: { insilmaril@750: if (branchCounter>0) insilmaril@750: { insilmaril@750: return (BranchObj*)(getChildNum (branchOffset+n)->lmo); insilmaril@750: } else insilmaril@750: return NULL; insilmaril@750: } insilmaril@750: insilmaril@738: void TreeItem::setLastSelectedBranch() insilmaril@738: { insilmaril@738: if (parentItem) insilmaril@738: parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this); insilmaril@738: } insilmaril@738: insilmaril@754: TreeItem* TreeItem::findBySelectString (const QString &s) //FIXME-1 insilmaril@754: { insilmaril@754: /* insilmaril@754: LinkableMapObj *lmo=this; insilmaril@754: QString part; insilmaril@754: QString typ; insilmaril@754: QString num; insilmaril@754: while (!s.isEmpty() ) insilmaril@754: { insilmaril@754: part=s.section(",",0,0); insilmaril@754: typ=part.left (3); insilmaril@754: num=part.right(part.length() - 3); insilmaril@754: if (typ=="mc:") insilmaril@754: { insilmaril@754: if (depth>0) insilmaril@754: return false; // in a subtree there is no center insilmaril@754: else insilmaril@754: break; insilmaril@754: } else insilmaril@754: if (typ=="bo:") insilmaril@754: lmo=lmo->getTreeItem()->getBranchObjNum (num.toInt()); insilmaril@754: else insilmaril@754: if (typ=="fi:") insilmaril@754: lmo=((BranchObj*)lmo)->getFloatImageNum (num.toUInt()); insilmaril@754: if (!lmo) break; insilmaril@754: insilmaril@754: if (s.contains(",")) insilmaril@754: s=s.right(s.length() - part.length() -1 ); insilmaril@754: else insilmaril@754: break; insilmaril@754: } insilmaril@754: */ insilmaril@754: return NULL; insilmaril@754: } insilmaril@754: insilmaril@754: void TreeItem::setLastSelectedBranch(int i) insilmaril@754: { insilmaril@754: lastSelectedBranchNum=i; insilmaril@754: } insilmaril@754: insilmaril@738: TreeItem* TreeItem::getLastSelectedBranch() insilmaril@738: { insilmaril@738: return getBranchNum (lastSelectedBranchNum); insilmaril@738: } insilmaril@738: insilmaril@753: insilmaril@753: void TreeItem::setHideTmp (HideTmpMode mode) insilmaril@753: { insilmaril@753: if (isBranchLikeType() ) insilmaril@753: ((BranchItem*)this)->updateVisibility(); insilmaril@753: /* insilmaril@753: if (type==Image) insilmaril@753: //updateVisibility(); insilmaril@753: */ insilmaril@753: insilmaril@753: /* insilmaril@753: insilmaril@753: if (mode==HideExport && (hideExport || hasHiddenExportParent() ) ) insilmaril@753: { insilmaril@753: // Hide stuff according to hideExport flag and parents insilmaril@753: //setVisibility (false); insilmaril@753: updateVisibility(); insilmaril@753: //FIXME-2 hidden=true; insilmaril@753: }else insilmaril@753: { insilmaril@753: // Do not hide, but still take care of scrolled status insilmaril@753: insilmaril@753: insilmaril@753: XXXXXXXX treeItem should be THIS insilmaril@753: insilmaril@753: move visible to TreeItem??? insilmaril@753: insilmaril@753: BranchObj now has updateContents insilmaril@753: insilmaril@753: maybe also start "bool TreeItem::branchlikeType" insilmaril@753: insilmaril@753: insilmaril@753: insilmaril@753: if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem)) insilmaril@753: setVisibility (false); insilmaril@753: else insilmaril@753: setVisibility (true); insilmaril@753: //FIXME-2 hidden=false; insilmaril@753: } insilmaril@753: insilmaril@753: */ insilmaril@753: // And take care of my children insilmaril@753: for (int i=0; isetHideTmp (mode); insilmaril@753: } insilmaril@753: insilmaril@753: bool TreeItem::hasHiddenExportParent() insilmaril@753: { insilmaril@753: // Calls parents recursivly to insilmaril@753: // find out, if we or parents are temp. hidden insilmaril@753: insilmaril@753: if (hidden || hideExport) return true; insilmaril@753: insilmaril@753: if (parentItem) insilmaril@753: return parentItem->hasHiddenExportParent(); insilmaril@753: else insilmaril@753: return false; insilmaril@753: } insilmaril@753: insilmaril@753: insilmaril@753: void TreeItem::setHideInExport(bool b) insilmaril@753: { insilmaril@753: if (isBranchLikeType() ) insilmaril@753: { insilmaril@753: hideExport=b; insilmaril@753: /* FIXME-1 call setVis and updateContentsSize... insilmaril@753: if (b) insilmaril@753: systemFlags->activate("hideInExport"); insilmaril@753: else insilmaril@753: systemFlags->deactivate("hideInExport"); insilmaril@753: calcBBoxSize(); insilmaril@753: positionBBox(); insilmaril@753: requestReposition(); insilmaril@753: */ insilmaril@753: } insilmaril@753: } insilmaril@753: insilmaril@753: bool TreeItem::hideInExport() insilmaril@753: { insilmaril@753: return hideExport; insilmaril@753: } insilmaril@753: insilmaril@753: bool TreeItem::isHidden() insilmaril@753: { insilmaril@753: return hidden; insilmaril@753: } insilmaril@753: insilmaril@753: insilmaril@746: LinkableMapObj* TreeItem::getLMO() // FIXME-3 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: