7 #include "branchitem.h"
12 extern FlagRow* standardFlagsMaster;
16 //cout << "Constr. TI this="<<this<<endl;
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;
51 delete (ImageItem*)ti;
53 case TreeItem::Attribute:
54 delete (AttributeItem*)ti;
78 // note.setFontHint (textEditor->getFontHintDefault() ); //FIXME-3
79 // isNoteInEditor=false;
87 standardFlags.setMasterRow (standardFlagsMaster);
92 void TreeItem::copy (OrnamentedObj* other) //FIXME-3 probably need deep copy of branches and data!
95 note.copy (other->note);
102 void TreeItem::setModel (VymModel *m)
107 VymModel* TreeItem::getModel ()
112 int TreeItem::getRowNumAppend (TreeItem *item)
116 case Attribute: return attributeOffset + attributeCounter;
117 case Image: return imageOffset + imageCounter;
118 case MapCenter: return branchOffset + branchCounter;
119 case Branch: return branchOffset + branchCounter;
124 void TreeItem::appendChild(TreeItem *item)
126 item->parentItem=this;
127 item->rootItem=rootItem;
128 item->setModel (model);
130 if (item->type == Attribute)
132 // attribute are on top of list
133 childItems.insert (attributeCounter,item);
139 if (item->type == Image)
141 childItems.insert (imageCounter+imageOffset,item);
146 if (item->isBranchLikeType())
148 // branches are on bottom of list
149 childItems.append(item);
152 // Set correct type //FIXME-3 DUP in constr branchitem
154 item->setType(MapCenter);
156 item->setType (Branch);
160 void TreeItem::removeChild(int row)
162 if (row<0 || row > childItems.size()-1)
163 qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
166 if (childItems.at(row)->type==Attribute)
172 if (childItems.at(row)->type==Image)
177 if (childItems.at(row)->isBranchLikeType())
180 childItems.removeAt (row);
185 void TreeItem::clear() // FIXME-2 used in vymmodel addMapInsert, but needs to be used via model and emit layout changes...
187 cout << "TI::clear\n";
188 while ( childItems.size()>0)
191 childItems.removeAt (0);
196 TreeItem *TreeItem::child(int row)
198 return childItems.value(row);
201 int TreeItem::childCount() const
203 return childItems.count();
206 int TreeItem::childNumber() const
209 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
214 int TreeItem::columnCount() const
216 return itemData.count();
219 int TreeItem::branchCount() const
221 return branchCounter;
224 int TreeItem::imageCount() const
229 int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
232 return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
235 int TreeItem::attributeCount() const
237 return attributeCounter;
240 int TreeItem::row() const
243 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
245 cout << "TI::row() pI=NULL this="<<this<<" ***************\n";
249 int TreeItem::column() const
254 int TreeItem::depth()
268 TreeItem *TreeItem::parent()
273 int TreeItem::childNum()
275 return parentItem->childItems.indexOf (this);
282 case MapCenter: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
283 case Branch: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
284 case Image: return parentItem->childItems.indexOf (this) - parentItem->imageOffset;
285 case Attribute: return parentItem->childItems.indexOf (this) - parentItem->attributeOffset;
290 int TreeItem::num (TreeItem *item)
292 if (!item) return -1;
293 if (!childItems.contains(item)) return -1;
294 switch (item->getType())
296 case MapCenter: return childItems.indexOf (item) - branchOffset;
297 case Branch: return childItems.indexOf (item) - branchOffset;
298 case Image: return parentItem->childItems.indexOf (item) - imageOffset;
299 case Attribute: return parentItem->childItems.indexOf (item) - attributeOffset;
303 void TreeItem::setType(const Type t)
306 itemData[1]=getTypeName();
309 TreeItem::Type TreeItem::getType()
311 if (type==Branch && depth()==0) return MapCenter; //FIXME-2 should not be necesssary
315 bool TreeItem::isBranchLikeType() const
317 if (type==Branch ||type==MapCenter) return true;
321 QString TreeItem::getTypeName()
325 case Undefined: return QString ("Undefined");
326 case MapCenter: return QString ("MapCenter");
327 case Branch: return QString ("Branch");
328 case Image: return QString ("Image");
329 case Attribute: return QString ("Attribute");
330 default: return QString ("TreeItem::getTypeName no typename defined?!");
335 QVariant TreeItem::data(int column) const
337 return itemData.value(column);
340 void TreeItem::setHeading (const QString s)
345 QString TreeItem::getHeading () const
347 return itemData[0].toString();
350 std::string TreeItem::getHeadingStd () const
352 return itemData[0].toString().toStdString();
355 void TreeItem::setHeadingColor (QColor color)
360 QColor TreeItem::getHeadingColor ()
365 void TreeItem::setURL (const QString &u)
369 systemFlags.activate ("system-url");
371 systemFlags.deactivate ("system-url");
374 QString TreeItem::getURL ()
379 void TreeItem::setVymLink (const QString &vl)
383 // We need the relative (from loading)
384 // or absolute path (from User event)
385 // and build the absolute path.
386 // Note: If we have relative, use path of
387 // current map to build absolute path
389 if (!d.path().startsWith ("/"))
391 QString p=model->getDestPath();
392 int i=p.findRev("/",-1);
393 d.setPath(p.left(i)+"/"+vl);
397 systemFlags.activate("system-vymLink");
401 systemFlags.deactivate("system-vymLink");
406 QString TreeItem::getVymLink ()
411 void TreeItem::setNote(const QString &s)
415 setNoteObj (n,false);
418 void TreeItem::clearNote()
421 systemFlags.deactivate ("system-note");
424 void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor){
426 if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
427 systemFlags.activate ("system-note");
428 if (note.isEmpty() && systemFlags.isActive ("system-note"))
429 systemFlags.deactivate ("system-note");
432 QString TreeItem::getNote()
434 return note.getNote();
437 bool TreeItem::hasEmptyNote()
439 return note.isEmpty();
442 NoteObj TreeItem::getNoteObj()
447 QString TreeItem::getNoteASCII(const QString &indent, const int &width)
449 return note.getNoteASCII(indent,width);
452 QString TreeItem::getNoteASCII()
454 return note.getNoteASCII();
457 QString TreeItem::getNoteOpenDoc()
459 return note.getNoteOpenDoc();
462 void TreeItem::activateStandardFlag (const QString &name)
464 standardFlags.activate (name);
465 model->emitDataHasChanged(this);
468 void TreeItem::deactivateStandardFlag (const QString &name)
470 standardFlags.deactivate (name);
471 model->emitDataHasChanged(this);
474 void TreeItem::deactivateAllStandardFlags ()
476 standardFlags.deactivateAll ();
477 model->emitDataHasChanged(this);
480 void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
482 standardFlags.toggle (name,master);
483 model->emitDataHasChanged(this);
486 bool TreeItem::isActiveStandardFlag (const QString &name)
488 return standardFlags.isActive (name);
491 QStringList TreeItem::activeStandardFlagNames ()
493 return standardFlags.activeFlagNames();
496 FlagRow* TreeItem::getStandardFlagRow()
498 return &standardFlags;
501 /* FIXME-3 void TreeItem::updateToolBar()
503 standardFlags.updateToolBar();
506 QStringList TreeItem::activeSystemFlagNames ()
508 return systemFlags.activeFlagNames();
511 bool TreeItem::canMoveDown()
515 case Undefined: return false;
518 if (!parentItem) return false;
519 if (parentItem->num (this) < parentItem->branchCount()-1)
524 case Image: return false;
525 default: return false;
529 bool TreeItem::canMoveUp()
533 case Undefined: return false;
536 if (!parentItem) return false;
537 if (parentItem->num (this) > 0)
542 case Image: return false;
543 default: return false;
547 void TreeItem::setID (const QString &s)
552 QString TreeItem::getID()
558 TreeItem* TreeItem::getChildNum(const int &n)
560 if (n>=0 && n<childItems.count() )
561 return childItems.at(n);
566 BranchItem* TreeItem::getFirstBranch()
569 return getBranchNum (branchOffset);
574 BranchItem* TreeItem::getLastBranch()
577 return getBranchNum (branchOffset + branchCounter-1);
582 BranchItem* TreeItem::getNextBranch(BranchItem *currentBranch)
584 if (!currentBranch) return NULL;
585 int n=num (currentBranch)+1;
587 return getBranchNum (branchOffset + n);
593 BranchItem* TreeItem::getBranchNum(const int &n)
595 if (n>=0 && n<branchCounter)
596 return (BranchItem*)getChildNum (branchOffset + n);
601 BranchObj* TreeItem::getBranchObjNum(const int &n)
603 if (n>=0 && n<branchCounter)
605 return (BranchObj*)(getBranchNum(n)->getLMO());
610 ImageItem* TreeItem::getImageNum (const int &n)
612 if (n>=0 && n<imageCounter)
613 return (ImageItem*)getChildNum (imageOffset + n);
618 FloatImageObj* TreeItem::getImageObjNum (const int &n) // FIXME-5 what about SVGs later?
621 return (FloatImageObj*)(getImageNum(n)->getLMO());
627 void TreeItem::setHideTmp (HideTmpMode mode) //FIXME-2
629 if (isBranchLikeType() )
630 ((BranchItem*)this)->updateVisibility();
633 //updateVisibility();
638 if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
640 // Hide stuff according to hideExport flag and parents
641 //setVisibility (false);
643 //FIXME-2 hidden=true;
646 // Do not hide, but still take care of scrolled status
649 XXXXXXXX treeItem should be THIS
651 move visible to TreeItem???
653 BranchObj now has updateContents
655 maybe also start "bool TreeItem::branchlikeType"
659 if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
660 setVisibility (false);
662 setVisibility (true);
663 //FIXME-2 hidden=false;
667 // And take care of my children
668 for (int i=0; i<branchCount(); ++i)
669 getBranchNum(i)->setHideTmp (mode);
672 bool TreeItem::hasHiddenExportParent()
674 // Calls parents recursivly to
675 // find out, if we or parents are temp. hidden
677 if (hidden || hideExport) return true;
680 return parentItem->hasHiddenExportParent();
686 void TreeItem::setHideInExport(bool b)
688 if (type==Branch || type==Image)
692 systemFlags.activate("system-hideInExport");
694 systemFlags.deactivate("system-hideInExport");
698 bool TreeItem::hideInExport()
703 bool TreeItem::isHidden()
708 QString TreeItem::getGeneralAttr()
712 s+=attribut("hideInExport","true");
714 s+=attribut ("url",url);
715 if (!vymLink.isEmpty())
716 s+=attribut ("vymLink",vymLink);