7 #include "branchitem.h"
12 extern FlagRow* standardFlagsMaster;
16 //cout << "Constr. TI\n";
23 TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
25 //cout << "Constructor TreeItem this="<<this<<" parent="<<parent<<endl;
32 rootItem=parentItem->rootItem;
37 //cout << "Destructor TreeItem "<<getHeadingStd()<<endl;
39 while (!childItems.isEmpty())
41 ti=childItems.takeFirst();
42 switch (ti->getType() )
44 case TreeItem::MapCenter:
45 delete (BranchItem*)ti;
47 case TreeItem::Branch:
48 delete (BranchItem*)ti;
64 QList<QVariant> cData;
65 itemData<< "VM:addMapCenter" << "undef"<<"undef";
70 lastSelectedBranchNum=-1;
79 // note.setFontHint (textEditor->getFontHintDefault() ); //FIXME-3
80 // isNoteInEditor=false;
88 standardFlags.setMasterRow (standardFlagsMaster);
93 void TreeItem::copy (OrnamentedObj* other) //FIXME-3 probably need deep copy of branches and data!
96 note.copy (other->note);
103 void TreeItem::setModel (VymModel *m)
108 VymModel* TreeItem::getModel ()
113 int TreeItem::getRowNumAppend (TreeItem *item)
117 case Attribute: return attributeOffset + attributeCounter;
118 case Image: return imageOffset + imageCounter;
119 case MapCenter: return branchOffset + branchCounter;
120 case Branch: return branchOffset + branchCounter;
125 void TreeItem::appendChild(TreeItem *item)
127 item->parentItem=this;
128 item->rootItem=rootItem;
129 item->setModel (model);
131 if (item->type == Attribute)
133 // attribute are on top of list
134 childItems.insert (attributeCounter,item);
140 if (item->type == Image)
142 childItems.insert (imageCounter+imageOffset,item);
147 if (item->isBranchLikeType())
149 // branches are on bottom of list
150 childItems.append(item);
155 void TreeItem::removeChild(int row)
157 if (row<0 || row > childItems.size()-1)
158 qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
161 if (childItems.at(row)->type==Attribute)
167 if (childItems.at(row)->type==Image)
172 if (childItems.at(row)->isBranchLikeType())
175 childItems.removeAt (row);
179 void TreeItem::removeChildBranches()
181 while ( childItems.size()>0)
184 childItems.removeAt (0);
188 TreeItem *TreeItem::child(int row)
190 return childItems.value(row);
193 int TreeItem::childCount() const
195 return childItems.count();
198 int TreeItem::childNumber() const
201 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
206 int TreeItem::columnCount() const
208 return itemData.count();
211 int TreeItem::branchCount() const
213 return branchCounter;
216 int TreeItem::imageCount() const
221 int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
224 return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
227 int TreeItem::attributeCount() const
229 return attributeCounter;
232 int TreeItem::row() const
235 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
240 int TreeItem::column() const
245 int TreeItem::depth()
257 TreeItem *TreeItem::parent()
262 int TreeItem::childNum()
264 return parentItem->childItems.indexOf (this);
271 case MapCenter: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
272 case Branch: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
273 case Image: return parentItem->childItems.indexOf (this) - parentItem->imageOffset;
278 int TreeItem::num (TreeItem *item)
280 if (!item) return -1;
281 if (!childItems.contains(item)) return -1;
282 switch (item->getType())
284 case MapCenter: return childItems.indexOf (item) - branchOffset;
285 case Branch: return childItems.indexOf (item) - branchOffset;
286 case Image: return parentItem->childItems.indexOf (item) - imageOffset;
290 void TreeItem::setType(const Type t)
293 itemData[1]=getTypeName();
296 TreeItem::Type TreeItem::getType()
301 bool TreeItem::isBranchLikeType() const
303 if (type==Branch ||type==MapCenter) return true;
307 QString TreeItem::getTypeName()
311 case Undefined: return QString ("Undefined");
312 case MapCenter: return QString ("MapCenter");
313 case Branch: return QString ("Branch");
314 case Image: return QString ("Image");
315 default: return QString ("TreeItem::getTypeName no typename defined?!");
320 QVariant TreeItem::data(int column) const
322 return itemData.value(column);
325 void TreeItem::setHeading (const QString s)
330 QString TreeItem::getHeading () const
332 return itemData[0].toString();
335 std::string TreeItem::getHeadingStd () const
337 return itemData[0].toString().toStdString();
340 void TreeItem::setHeadingColor (QColor color)
345 QColor TreeItem::getHeadingColor ()
350 void TreeItem::setURL (const QString &u)
354 systemFlags.activate ("system-url");
356 systemFlags.deactivate ("system-url");
359 QString TreeItem::getURL ()
364 void TreeItem::setVymLink (const QString &vl)
368 // We need the relative (from loading)
369 // or absolute path (from User event)
370 // and build the absolute path.
371 // Note: If we have relative, use path of
372 // current map to build absolute path
374 if (!d.path().startsWith ("/"))
376 QString p=model->getDestPath();
377 int i=p.findRev("/",-1);
378 d.setPath(p.left(i)+"/"+vl);
382 systemFlags.activate("system-vymLink");
386 systemFlags.deactivate("system-vymLink");
391 QString TreeItem::getVymLink ()
396 void TreeItem::setNote(const QString &s)
400 setNoteObj (n,false);
403 void TreeItem::clearNote()
406 systemFlags.deactivate ("system-note");
409 void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor){
411 if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
412 systemFlags.activate ("system-note");
413 if (note.isEmpty() && systemFlags.isActive ("system-note"))
414 systemFlags.deactivate ("system-note");
417 QString TreeItem::getNote()
419 return note.getNote();
422 bool TreeItem::hasEmptyNote()
424 return note.isEmpty();
427 NoteObj TreeItem::getNoteObj()
432 QString TreeItem::getNoteASCII(const QString &indent, const int &width)
434 return note.getNoteASCII(indent,width);
437 QString TreeItem::getNoteASCII()
439 return note.getNoteASCII();
442 QString TreeItem::getNoteOpenDoc()
444 return note.getNoteOpenDoc();
447 void TreeItem::activateStandardFlag (const QString &name)
449 standardFlags.activate (name);
450 model->emitDataHasChanged(this);
453 void TreeItem::deactivateStandardFlag (const QString &name)
455 standardFlags.deactivate (name);
456 model->emitDataHasChanged(this);
459 void TreeItem::deactivateAllStandardFlags ()
461 standardFlags.deactivateAll ();
462 model->emitDataHasChanged(this);
465 void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
467 standardFlags.toggle (name,master);
468 model->emitDataHasChanged(this);
471 bool TreeItem::isActiveStandardFlag (const QString &name)
473 return standardFlags.isActive (name);
476 QStringList TreeItem::activeStandardFlagNames ()
478 return standardFlags.activeFlagNames();
481 FlagRow* TreeItem::getStandardFlagRow()
483 return &standardFlags;
486 /* FIXME-3 void TreeItem::updateToolBar()
488 standardFlags.updateToolBar();
491 QStringList TreeItem::activeSystemFlagNames ()
493 return systemFlags.activeFlagNames();
496 bool TreeItem::canMoveDown()
500 case Undefined: return false;
503 if (!parentItem) return false;
504 if (parentItem->num (this) < parentItem->branchCount()-1)
509 case Image: return false;
510 default: return false;
514 bool TreeItem::canMoveUp()
518 case Undefined: return false;
521 if (!parentItem) return false;
522 if (parentItem->num (this) > 0)
527 case Image: return false;
528 default: return false;
532 void TreeItem::setID (const QString &s)
537 QString TreeItem::getID()
543 TreeItem* TreeItem::getChildNum(const int &n)
545 if (n>=0 && n<childItems.count() )
546 return childItems.at(n);
551 BranchItem* TreeItem::getFirstBranch()
554 return getBranchNum (branchOffset);
559 BranchItem* TreeItem::getLastBranch()
562 return getBranchNum (branchOffset + branchCounter-1);
567 BranchItem* TreeItem::getNextBranch(BranchItem *currentBranch)
569 if (!currentBranch) return NULL;
570 int n=num (currentBranch)+1;
572 return getBranchNum (branchOffset + n);
578 BranchItem* TreeItem::getBranchNum(const int &n)
580 if (n>=0 && n<branchCounter)
581 return (BranchItem*)getChildNum (branchOffset + n);
586 BranchObj* TreeItem::getBranchObjNum(const int &n)
588 if (n>=0 && n<branchCounter)
590 return (BranchObj*)(getBranchNum(n)->getLMO());
595 void TreeItem::setLastSelectedBranch()
598 parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
601 void TreeItem::setLastSelectedBranch(int i)
603 lastSelectedBranchNum=i;
606 TreeItem* TreeItem::getLastSelectedBranch()
608 return getBranchNum (lastSelectedBranchNum);
611 ImageItem* TreeItem::getImageNum (const int &n)
613 if (n>=0 && n<imageCounter)
614 return (ImageItem*)getChildNum (imageOffset + n);
619 FloatImageObj* TreeItem::getImageObjNum (const int &n) // FIXME-5 what about SVGs later?
622 return (FloatImageObj*)(getImageNum(n)->getLMO());
628 void TreeItem::setHideTmp (HideTmpMode mode) //FIXME-2
630 if (isBranchLikeType() )
631 ((BranchItem*)this)->updateVisibility();
634 //updateVisibility();
639 if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
641 // Hide stuff according to hideExport flag and parents
642 //setVisibility (false);
644 //FIXME-2 hidden=true;
647 // Do not hide, but still take care of scrolled status
650 XXXXXXXX treeItem should be THIS
652 move visible to TreeItem???
654 BranchObj now has updateContents
656 maybe also start "bool TreeItem::branchlikeType"
660 if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
661 setVisibility (false);
663 setVisibility (true);
664 //FIXME-2 hidden=false;
668 // And take care of my children
669 for (int i=0; i<branchCount(); ++i)
670 getBranchNum(i)->setHideTmp (mode);
673 bool TreeItem::hasHiddenExportParent()
675 // Calls parents recursivly to
676 // find out, if we or parents are temp. hidden
678 if (hidden || hideExport) return true;
681 return parentItem->hasHiddenExportParent();
687 void TreeItem::setHideInExport(bool b)
689 if (type==Branch || type==Image)
693 systemFlags.activate("system-hideInExport");
695 systemFlags.deactivate("system-hideInExport");
699 bool TreeItem::hideInExport()
704 bool TreeItem::isHidden()
709 QString TreeItem::getGeneralAttr()
713 s+=attribut("hideInExport","true");
715 s+=attribut ("url",url);
716 if (!vymLink.isEmpty())
717 s+=attribut ("vymLink",vymLink);