7 #include "branchitem.h"
12 extern FlagRow* standardFlagsMaster;
14 TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent):MapItem()
16 //cout << "Constructor TreeItem this="<<this<<" parent="<<parent<<endl;
23 rootItem=parentItem->rootItem;
28 //cout << "Destructor TreeItem "<<getHeadingStd()<<endl;
30 while (!childItems.isEmpty())
32 ti=childItems.takeFirst();
33 switch (ti->getType() )
35 case TreeItem::MapCenter:
36 delete (BranchItem*)ti;
38 case TreeItem::Branch:
39 delete (BranchItem*)ti;
58 lastSelectedBranchNum=-1;
64 // note.setFontHint (textEditor->getFontHintDefault() ); //FIXME-2
65 // isNoteInEditor=false;
72 standardFlags.setMasterRow (standardFlagsMaster);
77 void TreeItem::copy (OrnamentedObj* other) //FIXME-2 probably need deep copy of branches and data!
80 note.copy (other->note);
87 void TreeItem::setModel (VymModel *m)
92 VymModel* TreeItem::getModel ()
97 void TreeItem::appendChild(TreeItem *item)
99 childItems.append(item);
100 item->parentItem=this;
101 item->rootItem=rootItem;
102 item->setModel (model);
104 if (item->type == Branch || item->type ==MapCenter)
106 if (branchCounter==0)
107 branchOffset=childItems.count()-1;
112 void TreeItem::removeChild(int row)
114 if (row<0 || row > childItems.size()-1)
115 qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
118 if (childItems.at(row)->isBranchLikeType())
120 childItems.removeAt (row);
124 void TreeItem::removeChildBranches()
126 while ( childItems.size()>0)
129 childItems.removeAt (0);
133 TreeItem *TreeItem::child(int row)
135 return childItems.value(row);
138 int TreeItem::childCount() const
140 return childItems.count();
143 int TreeItem::childNumber() const
146 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
151 int TreeItem::columnCount() const
153 return itemData.count();
156 int TreeItem::branchCount() const
158 return branchCounter;
161 int TreeItem::imageCount() const
164 return imageCounter; // FIXME-1 imageCounter needs to be calculated...
167 int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
170 return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
173 int TreeItem::row() const
176 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
181 int TreeItem::column() const
186 int TreeItem::depth()
198 TreeItem *TreeItem::parent()
203 int TreeItem::childNum()
205 return parentItem->childItems.indexOf (this);
212 case Undefined: return -1;
213 case MapCenter: return parentItem->childItems.indexOf (this) - branchOffset;
214 case Branch: return parentItem->childItems.indexOf (this) - branchOffset;
215 case Image: return parentItem->childItems.indexOf (this) - imageOffset;
220 int TreeItem::num (TreeItem *item)
222 if (!item) return -1;
223 switch (item->getType())
225 case Undefined: return -1;
226 case MapCenter: return childItems.indexOf (item) - branchOffset;
227 case Branch: return childItems.indexOf (item) - branchOffset;
228 case Image: return parentItem->childItems.indexOf (item) - imageOffset;
232 void TreeItem::setType(const Type t)
235 itemData[1]=getTypeName();
238 TreeItem::Type TreeItem::getType()
243 bool TreeItem::isBranchLikeType() const
245 if (type==Branch ||type==MapCenter) return true;
249 QString TreeItem::getTypeName()
253 case Undefined: return QString ("Undefined");
254 case MapCenter: return QString ("MapCenter");
255 case Branch: return QString ("Branch");
256 case Image: return QString ("Image");
257 default: return QString ("TreeItem::getTypeName no typename defined?!");
262 QVariant TreeItem::data(int column) const
264 return itemData.value(column);
267 void TreeItem::setHeading (const QString s)
272 QString TreeItem::getHeading () const
274 return itemData[0].toString();
277 std::string TreeItem::getHeadingStd () const
279 return itemData[0].toString().toStdString();
282 void TreeItem::setHeadingColor (QColor color)
287 QColor TreeItem::getHeadingColor ()
292 void TreeItem::setURL (const QString &u)
296 systemFlags.activate ("system-url");
298 systemFlags.deactivate ("system-url");
301 QString TreeItem::getURL ()
306 void TreeItem::setVymLink (const QString &vl)
310 // We need the relative (from loading)
311 // or absolute path (from User event)
312 // and build the absolute path.
313 // Note: If we have relative, use path of
314 // current map to build absolute path
316 if (!d.path().startsWith ("/"))
318 QString p=model->getDestPath();
319 int i=p.findRev("/",-1);
320 d.setPath(p.left(i)+"/"+vl);
324 systemFlags.activate("system-vymLink");
328 systemFlags.deactivate("system-vymLink");
333 QString TreeItem::getVymLink ()
338 void TreeItem::setNote(const QString &s)
342 setNoteObj (n,false);
345 void TreeItem::clearNote()
348 systemFlags.deactivate ("system-note");
351 void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor) //FIXME-1 setNoteObj is called for every select or so???
354 if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
355 systemFlags.activate ("system-note");
356 if (note.isEmpty() && systemFlags.isActive ("system-note"))
357 systemFlags.deactivate ("system-note");
360 QString TreeItem::getNote()
362 return note.getNote();
365 bool TreeItem::hasEmptyNote()
367 return note.isEmpty();
370 NoteObj TreeItem::getNoteObj()
375 QString TreeItem::getNoteASCII(const QString &indent, const int &width)
377 return note.getNoteASCII(indent,width);
380 QString TreeItem::getNoteASCII()
382 return note.getNoteASCII();
385 QString TreeItem::getNoteOpenDoc()
387 return note.getNoteOpenDoc();
390 void TreeItem::activateStandardFlag (const QString &name)
392 standardFlags.activate (name);
393 model->emitDataHasChanged(this);
396 void TreeItem::deactivateStandardFlag (const QString &name)
398 standardFlags.deactivate (name);
399 model->emitDataHasChanged(this);
402 void TreeItem::deactivateAllStandardFlags ()
404 standardFlags.deactivateAll ();
405 model->emitDataHasChanged(this);
408 void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
410 standardFlags.toggle (name,master);
411 model->emitDataHasChanged(this);
414 bool TreeItem::isActiveStandardFlag (const QString &name)
416 return standardFlags.isActive (name);
419 QStringList TreeItem::activeStandardFlagNames ()
421 return standardFlags.activeFlagNames();
424 FlagRow* TreeItem::getStandardFlagRow()
426 return &standardFlags;
430 void TreeItem::updateToolBar()
432 standardFlags.updateToolBar();
435 QStringList TreeItem::activeSystemFlagNames () //FIXME-1 missing: scrolled-tmp,hideInExport
437 return systemFlags.activeFlagNames();
440 bool TreeItem::canMoveDown()
444 case Undefined: return false;
447 if (!parentItem) return false;
448 if (parentItem->num (this) < parentItem->branchCount()-1)
453 case Image: return false;
454 default: return false;
458 bool TreeItem::canMoveUp()
462 case Undefined: return false;
465 if (!parentItem) return false;
466 if (parentItem->num (this) > 0)
471 case Image: return false;
472 default: return false;
476 void TreeItem::setID (const QString &s)
481 QString TreeItem::getID()
487 TreeItem* TreeItem::getChildNum(const int &n)
489 if (n>=0 && n<childItems.count() )
490 return childItems.at(n);
495 BranchItem* TreeItem::getFirstBranch()
498 return getBranchNum (branchOffset);
503 BranchItem* TreeItem::getLastBranch()
506 return getBranchNum (branchOffset + branchCounter-1);
511 BranchItem* TreeItem::getNextBranch(BranchItem *currentBranch)
513 if (!currentBranch) return NULL;
514 int n=num (currentBranch)+1;
516 return getBranchNum (branchOffset + n);
522 BranchItem* TreeItem::getBranchNum(const int &n)
525 return (BranchItem*)getChildNum (branchOffset + n);
530 BranchObj* TreeItem::getBranchObjNum(const int &n)
534 return (BranchObj*)(getChildNum (branchOffset+n)->lmo);
539 void TreeItem::setLastSelectedBranch()
542 parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
545 void TreeItem::setLastSelectedBranch(int i)
547 lastSelectedBranchNum=i;
550 TreeItem* TreeItem::getLastSelectedBranch()
552 return getBranchNum (lastSelectedBranchNum);
556 void TreeItem::setHideTmp (HideTmpMode mode)
558 if (isBranchLikeType() )
559 ((BranchItem*)this)->updateVisibility();
562 //updateVisibility();
567 if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
569 // Hide stuff according to hideExport flag and parents
570 //setVisibility (false);
572 //FIXME-2 hidden=true;
575 // Do not hide, but still take care of scrolled status
578 XXXXXXXX treeItem should be THIS
580 move visible to TreeItem???
582 BranchObj now has updateContents
584 maybe also start "bool TreeItem::branchlikeType"
588 if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
589 setVisibility (false);
591 setVisibility (true);
592 //FIXME-2 hidden=false;
596 // And take care of my children
597 for (int i=0; i<branchCount(); ++i)
598 getBranchNum(i)->setHideTmp (mode);
601 bool TreeItem::hasHiddenExportParent()
603 // Calls parents recursivly to
604 // find out, if we or parents are temp. hidden
606 if (hidden || hideExport) return true;
609 return parentItem->hasHiddenExportParent();
615 void TreeItem::setHideInExport(bool b)
617 if (isBranchLikeType() )
620 /* FIXME-1 call setVis and updateContentsSize...
622 systemFlags->activate("hideInExport");
624 systemFlags->deactivate("hideInExport");
632 bool TreeItem::hideInExport()
637 bool TreeItem::isHidden()