4 #include "attributeitem.h"
6 #include "branchitem.h"
14 extern FlagRow* standardFlagsMaster;
18 //cout << "Constr. TI this="<<this<<endl;
25 TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
27 //cout << "Constructor TreeItem this="<<this<<" parent="<<parent<<endl;
34 rootItem=parentItem->rootItem;
39 //cout << "Destructor TreeItem "<<getHeadingStd()<<endl;
41 while (!childItems.isEmpty())
43 ti=childItems.takeFirst();
44 switch (ti->getType() )
46 case TreeItem::MapCenter:
47 delete (BranchItem*)ti;
49 case TreeItem::Branch:
50 delete (BranchItem*)ti;
53 delete (ImageItem*)ti;
55 case TreeItem::Attribute:
56 delete (AttributeItem*)ti;
59 delete (XLinkItem*)ti;
86 // note.setFontHint (textEditor->getFontHintDefault() ); //FIXME-3
87 // isNoteInEditor=false;
95 standardFlags.setMasterRow (standardFlagsMaster);
100 void TreeItem::copy (OrnamentedObj* other) //FIXME-3 probably need deep copy of branches and data!
103 note.copy (other->note);
105 hideExport=officially
110 void TreeItem::setModel (VymModel *m)
115 VymModel* TreeItem::getModel ()
120 int TreeItem::getRowNumAppend (TreeItem *item)
124 case Attribute: return attributeOffset + attributeCounter;
125 case XLink: return xlinkOffset + xlinkCounter;
126 case Image: return imageOffset + imageCounter;
127 case MapCenter: return branchOffset + branchCounter;
128 case Branch: return branchOffset + branchCounter;
133 void TreeItem::appendChild(TreeItem *item)
135 item->parentItem=this;
136 item->rootItem=rootItem;
137 item->setModel (model);
139 if (item->type == Attribute)
141 // attribute are on top of list
142 childItems.insert (attributeCounter,item);
149 if (item->type == XLink)
151 childItems.insert (xlinkCounter+xlinkOffset,item);
157 if (item->type == Image)
159 childItems.insert (imageCounter+imageOffset,item);
164 if (item->isBranchLikeType())
166 // branches are on bottom of list
167 childItems.append(item);
170 // Set correct type //FIXME-3 DUP in constr branchitem
172 item->setType(MapCenter);
174 item->setType (Branch);
178 void TreeItem::removeChild(int row)
180 if (row<0 || row > childItems.size()-1)
181 qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
184 if (childItems.at(row)->type==Attribute)
191 if (childItems.at(row)->type==XLink)
197 if (childItems.at(row)->type==Image)
202 if (childItems.at(row)->isBranchLikeType())
205 childItems.removeAt (row);
210 void TreeItem::clear() // FIXME-2 used in vymmodel addMapInsert, but needs to be used via model and emit layout changes...
212 cout << "TI::clear\n";
213 while ( childItems.size()>0)
216 childItems.removeAt (0);
221 TreeItem *TreeItem::child(int row)
223 return childItems.value(row);
226 int TreeItem::childCount() const
228 return childItems.count();
231 int TreeItem::childNumber() const
234 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
239 int TreeItem::columnCount() const
241 return itemData.count();
244 int TreeItem::branchCount() const
246 return branchCounter;
249 int TreeItem::imageCount() const
254 int TreeItem::xlinkCount() const
259 int TreeItem::attributeCount() const
261 return attributeCounter;
264 int TreeItem::row() const
267 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
269 cout << "TI::row() pI=NULL this="<<this<<" ***************\n";
273 int TreeItem::column() const
278 int TreeItem::depth()
292 TreeItem *TreeItem::parent()
297 int TreeItem::childNum()
299 return parentItem->childItems.indexOf (this);
306 case MapCenter: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
307 case Branch: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
308 case Image: return parentItem->childItems.indexOf (this) - parentItem->imageOffset;
309 case Attribute: return parentItem->childItems.indexOf (this) - parentItem->attributeOffset;
310 case XLink: return parentItem->childItems.indexOf (this) - parentItem->xlinkOffset;
315 int TreeItem::num (TreeItem *item)
317 if (!item) return -1;
318 if (!childItems.contains(item)) return -1;
319 switch (item->getType())
321 case MapCenter: return childItems.indexOf (item) - branchOffset;
322 case Branch: return childItems.indexOf (item) - branchOffset;
323 case Image: return parentItem->childItems.indexOf (item) - imageOffset;
324 case Attribute: return parentItem->childItems.indexOf (item) - attributeOffset;
325 case XLink: return parentItem->childItems.indexOf (item) - xlinkOffset;
329 void TreeItem::setType(const Type t)
332 itemData[1]=getTypeName();
335 TreeItem::Type TreeItem::getType()
337 if (type==Branch && depth()==0) return MapCenter; //FIXME-2 should not be necesssary
341 bool TreeItem::isBranchLikeType() const
343 if (type==Branch ||type==MapCenter) return true;
347 QString TreeItem::getTypeName()
351 case Undefined: return QString ("Undefined");
352 case MapCenter: return QString ("MapCenter");
353 case Branch: return QString ("Branch");
354 case Image: return QString ("Image");
355 case Attribute: return QString ("Attribute");
356 case XLink: return QString ("XLink");
357 default: return QString ("TreeItem::getTypeName no typename defined?!");
362 QVariant TreeItem::data(int column) const
364 return itemData.value(column);
367 void TreeItem::setHeading (const QString s)
372 QString TreeItem::getHeading () const
374 return itemData[0].toString();
377 std::string TreeItem::getHeadingStd () const
379 return itemData[0].toString().toStdString();
382 void TreeItem::setHeadingColor (QColor color)
387 QColor TreeItem::getHeadingColor ()
392 void TreeItem::setURL (const QString &u)
396 systemFlags.activate ("system-url");
398 systemFlags.deactivate ("system-url");
401 QString TreeItem::getURL ()
406 void TreeItem::setVymLink (const QString &vl)
410 // We need the relative (from loading)
411 // or absolute path (from User event)
412 // and build the absolute path.
413 // Note: If we have relative, use path of
414 // current map to build absolute path
416 if (!d.path().startsWith ("/"))
418 QString p=model->getDestPath();
419 int i=p.findRev("/",-1);
420 d.setPath(p.left(i)+"/"+vl);
424 systemFlags.activate("system-vymLink");
428 systemFlags.deactivate("system-vymLink");
433 QString TreeItem::getVymLink ()
438 void TreeItem::setNote(const QString &s)
442 setNoteObj (n,false);
445 void TreeItem::clearNote()
448 systemFlags.deactivate ("system-note");
451 void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor){
453 if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
454 systemFlags.activate ("system-note");
455 if (note.isEmpty() && systemFlags.isActive ("system-note"))
456 systemFlags.deactivate ("system-note");
459 QString TreeItem::getNote()
461 return note.getNote();
464 bool TreeItem::hasEmptyNote()
466 return note.isEmpty();
469 NoteObj TreeItem::getNoteObj()
474 QString TreeItem::getNoteASCII(const QString &indent, const int &width)
476 return note.getNoteASCII(indent,width);
479 QString TreeItem::getNoteASCII()
481 return note.getNoteASCII();
484 QString TreeItem::getNoteOpenDoc()
486 return note.getNoteOpenDoc();
489 void TreeItem::activateStandardFlag (const QString &name)
491 standardFlags.activate (name);
492 model->emitDataHasChanged(this);
495 void TreeItem::deactivateStandardFlag (const QString &name)
497 standardFlags.deactivate (name);
498 model->emitDataHasChanged(this);
501 void TreeItem::deactivateAllStandardFlags ()
503 standardFlags.deactivateAll ();
504 model->emitDataHasChanged(this);
507 void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
509 standardFlags.toggle (name,master);
510 model->emitDataHasChanged(this);
513 bool TreeItem::isActiveStandardFlag (const QString &name)
515 return standardFlags.isActive (name);
518 QStringList TreeItem::activeStandardFlagNames ()
520 return standardFlags.activeFlagNames();
523 FlagRow* TreeItem::getStandardFlagRow()
525 return &standardFlags;
528 /* FIXME-3 void TreeItem::updateToolBar()
530 standardFlags.updateToolBar();
533 QStringList TreeItem::activeSystemFlagNames ()
535 return systemFlags.activeFlagNames();
538 bool TreeItem::canMoveDown()
542 case Undefined: return false;
545 if (!parentItem) return false;
546 if (parentItem->num (this) < parentItem->branchCount()-1)
551 case Image: return false;
552 default: return false;
556 bool TreeItem::canMoveUp()
562 if (!parentItem) return false;
563 if (parentItem->num (this) > 0)
568 default: return false;
572 void TreeItem::setID (const QString &s)
577 QString TreeItem::getID()
583 TreeItem* TreeItem::getChildNum(const int &n)
585 if (n>=0 && n<childItems.count() )
586 return childItems.at(n);
591 BranchItem* TreeItem::getFirstBranch()
594 return getBranchNum (branchOffset);
599 BranchItem* TreeItem::getLastBranch()
602 return getBranchNum (branchOffset + branchCounter-1);
607 BranchItem* TreeItem::getNextBranch(BranchItem *currentBranch)
609 if (!currentBranch) return NULL;
610 int n=num (currentBranch)+1;
612 return getBranchNum (branchOffset + n);
618 BranchItem* TreeItem::getBranchNum(const int &n)
620 if (n>=0 && n<branchCounter)
621 return (BranchItem*)getChildNum (branchOffset + n);
626 BranchObj* TreeItem::getBranchObjNum(const int &n)
628 if (n>=0 && n<branchCounter)
630 return (BranchObj*)(getBranchNum(n)->getLMO());
635 ImageItem* TreeItem::getImageNum (const int &n)
637 if (n>=0 && n<imageCounter)
638 return (ImageItem*)getChildNum (imageOffset + n);
643 FloatImageObj* TreeItem::getImageObjNum (const int &n) // FIXME-5 what about SVGs later?
646 return (FloatImageObj*)(getImageNum(n)->getLMO());
651 XLinkItem* TreeItem::getXLinkNum (const int &n)
653 if (n>=0 && n<xlinkCounter )
654 return (XLinkItem*)getChildNum (xlinkOffset +n);
660 XLinkObj* TreeItem::getXLinkObjNum (const int &n)
664 XLinkItem *xli=getXLinkNum (n);
665 if (!xli) return NULL;
667 return (XLinkObj*)(xli->getLMO());
670 xli=xli->getPartnerXLink();
671 if (!xli) return NULL;
672 return (XLinkObj*)(xli->getLMO());
679 void TreeItem::setHideTmp (HideTmpMode mode) //FIXME-2
681 if (isBranchLikeType() )
682 ((BranchItem*)this)->updateVisibility();
685 //updateVisibility();
690 if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
692 // Hide stuff according to hideExport flag and parents
693 //setVisibility (false);
695 //FIXME-2 hidden=true;
698 // Do not hide, but still take care of scrolled status
701 XXXXXXXX treeItem should be THIS
703 move visible to TreeItem???
705 BranchObj now has updateContents
707 maybe also start "bool TreeItem::branchlikeType"
711 if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
712 setVisibility (false);
714 setVisibility (true);
715 //FIXME-2 hidden=false;
719 // And take care of my children
720 for (int i=0; i<branchCount(); ++i)
721 getBranchNum(i)->setHideTmp (mode);
724 bool TreeItem::hasHiddenExportParent()
726 // Calls parents recursivly to
727 // find out, if we or parents are temp. hidden
729 if (hidden || hideExport) return true;
732 return parentItem->hasHiddenExportParent();
738 void TreeItem::setHideInExport(bool b)
740 if (type==Branch || type==Image)
744 systemFlags.activate("system-hideInExport");
746 systemFlags.deactivate("system-hideInExport");
750 bool TreeItem::hideInExport()
755 bool TreeItem::isHidden()
760 QString TreeItem::getGeneralAttr()
764 s+=attribut("hideInExport","true");
766 s+=attribut ("url",url);
767 if (!vymLink.isEmpty())
768 s+=attribut ("vymLink",vymLink);