7 #include "branchitem.h"
12 extern FlagRow* standardFlagsMaster;
22 TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
24 //cout << "Constructor TreeItem this="<<this<<" parent="<<parent<<endl;
31 rootItem=parentItem->rootItem;
36 //cout << "Destructor TreeItem "<<getHeadingStd()<<endl;
38 while (!childItems.isEmpty())
40 ti=childItems.takeFirst();
41 switch (ti->getType() )
43 case TreeItem::MapCenter:
44 delete (BranchItem*)ti;
46 case TreeItem::Branch:
47 delete (BranchItem*)ti;
66 lastSelectedBranchNum=-1;
72 // note.setFontHint (textEditor->getFontHintDefault() ); //FIXME-2
73 // isNoteInEditor=false;
81 standardFlags.setMasterRow (standardFlagsMaster);
86 void TreeItem::copy (OrnamentedObj* other) //FIXME-2 probably need deep copy of branches and data!
89 note.copy (other->note);
96 void TreeItem::setModel (VymModel *m)
101 VymModel* TreeItem::getModel ()
106 int TreeItem::getRowNumAppend (TreeItem *item)
110 case MapCenter: return branchOffset + branchCounter;
111 case Branch: return branchOffset + branchCounter;
112 case Image: return imageOffset + imageCounter;
117 void TreeItem::appendChild(TreeItem *item)
119 item->parentItem=this;
120 item->rootItem=rootItem;
121 item->setModel (model);
123 if (item->type == Image)
125 childItems.insert (imageCounter,item);
126 // images are on top of list
133 if (item->isBranchLikeType())
135 // branches are on bottom of list
136 childItems.append(item);
137 if (branchCounter==0)
138 branchOffset=childItems.count()-1;
143 void TreeItem::removeChild(int row)
145 if (row<0 || row > childItems.size()-1)
146 qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
149 if (childItems.at(row)->isBranchLikeType())
151 if (childItems.at(row)->type==Image)
157 childItems.removeAt (row);
161 void TreeItem::removeChildBranches()
163 while ( childItems.size()>0)
166 childItems.removeAt (0);
170 TreeItem *TreeItem::child(int row)
172 return childItems.value(row);
175 int TreeItem::childCount() const
177 return childItems.count();
180 int TreeItem::childNumber() const
183 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
188 int TreeItem::columnCount() const
190 return itemData.count();
193 int TreeItem::branchCount() const
195 return branchCounter;
198 int TreeItem::imageCount() const
203 int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
206 return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
209 int TreeItem::row() const
212 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
217 int TreeItem::column() const
222 int TreeItem::depth()
234 TreeItem *TreeItem::parent()
239 int TreeItem::childNum()
241 return parentItem->childItems.indexOf (this);
248 case MapCenter: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
249 case Branch: return parentItem->childItems.indexOf (this) - parentItem->branchOffset;
250 case Image: return parentItem->childItems.indexOf (this) - parentItem->imageOffset;
255 int TreeItem::num (TreeItem *item)
257 if (!item) return -1;
258 if (!childItems.contains(item)) return -1;
259 switch (item->getType())
261 case MapCenter: return childItems.indexOf (item) - branchOffset;
262 case Branch: return childItems.indexOf (item) - branchOffset;
263 case Image: return parentItem->childItems.indexOf (item) - imageOffset;
267 void TreeItem::setType(const Type t)
270 itemData[1]=getTypeName();
273 TreeItem::Type TreeItem::getType()
278 bool TreeItem::isBranchLikeType() const
280 if (type==Branch ||type==MapCenter) return true;
284 QString TreeItem::getTypeName()
288 case Undefined: return QString ("Undefined");
289 case MapCenter: return QString ("MapCenter");
290 case Branch: return QString ("Branch");
291 case Image: return QString ("Image");
292 default: return QString ("TreeItem::getTypeName no typename defined?!");
297 QVariant TreeItem::data(int column) const
299 return itemData.value(column);
302 void TreeItem::setHeading (const QString s)
307 QString TreeItem::getHeading () const
309 return itemData[0].toString();
312 std::string TreeItem::getHeadingStd () const
314 return itemData[0].toString().toStdString();
317 void TreeItem::setHeadingColor (QColor color)
322 QColor TreeItem::getHeadingColor ()
327 void TreeItem::setURL (const QString &u)
331 systemFlags.activate ("system-url");
333 systemFlags.deactivate ("system-url");
336 QString TreeItem::getURL ()
341 void TreeItem::setVymLink (const QString &vl)
345 // We need the relative (from loading)
346 // or absolute path (from User event)
347 // and build the absolute path.
348 // Note: If we have relative, use path of
349 // current map to build absolute path
351 if (!d.path().startsWith ("/"))
353 QString p=model->getDestPath();
354 int i=p.findRev("/",-1);
355 d.setPath(p.left(i)+"/"+vl);
359 systemFlags.activate("system-vymLink");
363 systemFlags.deactivate("system-vymLink");
368 QString TreeItem::getVymLink ()
373 void TreeItem::setNote(const QString &s)
377 setNoteObj (n,false);
380 void TreeItem::clearNote()
383 systemFlags.deactivate ("system-note");
386 void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor){
388 if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
389 systemFlags.activate ("system-note");
390 if (note.isEmpty() && systemFlags.isActive ("system-note"))
391 systemFlags.deactivate ("system-note");
394 QString TreeItem::getNote()
396 return note.getNote();
399 bool TreeItem::hasEmptyNote()
401 return note.isEmpty();
404 NoteObj TreeItem::getNoteObj()
409 QString TreeItem::getNoteASCII(const QString &indent, const int &width)
411 return note.getNoteASCII(indent,width);
414 QString TreeItem::getNoteASCII()
416 return note.getNoteASCII();
419 QString TreeItem::getNoteOpenDoc()
421 return note.getNoteOpenDoc();
424 void TreeItem::activateStandardFlag (const QString &name)
426 standardFlags.activate (name);
427 model->emitDataHasChanged(this);
430 void TreeItem::deactivateStandardFlag (const QString &name)
432 standardFlags.deactivate (name);
433 model->emitDataHasChanged(this);
436 void TreeItem::deactivateAllStandardFlags ()
438 standardFlags.deactivateAll ();
439 model->emitDataHasChanged(this);
442 void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
444 standardFlags.toggle (name,master);
445 model->emitDataHasChanged(this);
448 bool TreeItem::isActiveStandardFlag (const QString &name)
450 return standardFlags.isActive (name);
453 QStringList TreeItem::activeStandardFlagNames ()
455 return standardFlags.activeFlagNames();
458 FlagRow* TreeItem::getStandardFlagRow()
460 return &standardFlags;
463 /* FIXME-3 void TreeItem::updateToolBar()
465 standardFlags.updateToolBar();
468 QStringList TreeItem::activeSystemFlagNames ()
470 return systemFlags.activeFlagNames();
473 bool TreeItem::canMoveDown()
477 case Undefined: return false;
480 if (!parentItem) return false;
481 if (parentItem->num (this) < parentItem->branchCount()-1)
486 case Image: return false;
487 default: return false;
491 bool TreeItem::canMoveUp()
495 case Undefined: return false;
498 if (!parentItem) return false;
499 if (parentItem->num (this) > 0)
504 case Image: return false;
505 default: return false;
509 void TreeItem::setID (const QString &s)
514 QString TreeItem::getID()
520 TreeItem* TreeItem::getChildNum(const int &n)
522 if (n>=0 && n<childItems.count() )
523 return childItems.at(n);
528 BranchItem* TreeItem::getFirstBranch()
531 return getBranchNum (branchOffset);
536 BranchItem* TreeItem::getLastBranch()
539 return getBranchNum (branchOffset + branchCounter-1);
544 BranchItem* TreeItem::getNextBranch(BranchItem *currentBranch)
546 if (!currentBranch) return NULL;
547 int n=num (currentBranch)+1;
549 return getBranchNum (branchOffset + n);
555 BranchItem* TreeItem::getBranchNum(const int &n)
557 if (n>=0 && n<branchCounter)
558 return (BranchItem*)getChildNum (branchOffset + n);
563 BranchObj* TreeItem::getBranchObjNum(const int &n)
565 if (n>=0 && n<branchCounter)
567 return (BranchObj*)(getBranchNum(n)->getLMO());
572 void TreeItem::setLastSelectedBranch()
575 parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
578 void TreeItem::setLastSelectedBranch(int i)
580 lastSelectedBranchNum=i;
583 TreeItem* TreeItem::getLastSelectedBranch()
585 return getBranchNum (lastSelectedBranchNum);
588 ImageItem* TreeItem::getImageNum (const int &n)
590 if (n>=0 && n<imageCounter)
591 return (ImageItem*)getChildNum (imageOffset + n);
596 FloatImageObj* TreeItem::getImageObjNum (const int &n) // FIXME-5 what about SVGs later?
599 return (FloatImageObj*)(getImageNum(n)->getLMO());
604 void TreeItem::setHideTmp (HideTmpMode mode)
606 if (isBranchLikeType() )
607 ((BranchItem*)this)->updateVisibility();
610 //updateVisibility();
615 if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
617 // Hide stuff according to hideExport flag and parents
618 //setVisibility (false);
620 //FIXME-2 hidden=true;
623 // Do not hide, but still take care of scrolled status
626 XXXXXXXX treeItem should be THIS
628 move visible to TreeItem???
630 BranchObj now has updateContents
632 maybe also start "bool TreeItem::branchlikeType"
636 if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
637 setVisibility (false);
639 setVisibility (true);
640 //FIXME-2 hidden=false;
644 // And take care of my children
645 for (int i=0; i<branchCount(); ++i)
646 getBranchNum(i)->setHideTmp (mode);
649 bool TreeItem::hasHiddenExportParent()
651 // Calls parents recursivly to
652 // find out, if we or parents are temp. hidden
654 if (hidden || hideExport) return true;
657 return parentItem->hasHiddenExportParent();
663 void TreeItem::setHideInExport(bool b)
665 if (type==Branch || type==Image)
668 // FIXME-1 call setVis and updateContentsSize...
670 systemFlags.activate("hideInExport");
672 systemFlags.deactivate("hideInExport");
676 bool TreeItem::hideInExport()
681 bool TreeItem::isHidden()