7 #include "branchitem.h"
8 #include "mapcenteritem.h"
14 TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent):MapItem()
23 //cout << "Destructor TreeItem "<<getHeadingStd()<<endl;
25 while (!childItems.isEmpty())
27 ti=childItems.takeFirst();
28 switch (ti->getType() )
30 case TreeItem::MapCenter:
31 delete (MapCenterItem*)ti;
33 case TreeItem::Branch:
34 delete (BranchItem*)ti;
53 lastSelectedBranchNum=-1;
59 // note.setFontHint (textEditor->getFontHintDefault() ); //FIXME-2
60 // isNoteInEditor=false;
68 QString TreeItem::saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset)
70 cout << "TreeItem::saveToDir called directly for ("<<getHeadingStd()<<"), instead of inherited type...\n"; //FIXME-1 triggered on save
76 void TreeItem::copy (OrnamentedObj* other) //FIXME-2 probably need deep copy of branches and data!
79 note.copy (other->note);
86 void TreeItem::setModel (VymModel *m)
91 VymModel* TreeItem::getModel ()
96 void TreeItem::appendChild(TreeItem *item)
98 childItems.append(item);
99 item->parentItem=this;
100 item->setModel (model);
102 if (item->type == Branch || item->type ==MapCenter)
104 if (branchCounter==0)
105 branchOffset=childItems.count()-1;
110 void TreeItem::removeChild(int row)
112 if (row<0 || row > childItems.size()-1)
113 qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
116 if (childItems.at(row)->isBranchLikeType())
118 childItems.removeAt (row);
122 TreeItem *TreeItem::child(int row)
124 return childItems.value(row);
127 int TreeItem::childCount() const
129 return childItems.count();
132 int TreeItem::childNumber() const
135 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
140 int TreeItem::columnCount() const
142 return itemData.count();
145 int TreeItem::branchCount() const
147 return branchCounter;
150 int TreeItem::imageCount() const
153 return imageCounter; // FIXME-1 imageCounter needs to be calculated...
156 int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
159 return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
162 int TreeItem::row() const
165 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
170 int TreeItem::column() const
175 int TreeItem::depth()
187 TreeItem *TreeItem::parent()
192 int TreeItem::childNum()
194 return parentItem->childItems.indexOf (this);
201 case Undefined: return -1;
202 case MapCenter: return parentItem->childItems.indexOf (this) - branchOffset;
203 case Branch: return parentItem->childItems.indexOf (this) - branchOffset;
204 case Image: return parentItem->childItems.indexOf (this) - imageOffset;
209 int TreeItem::num (TreeItem *item)
211 if (!item) return -1;
212 switch (item->getType())
214 case Undefined: return -1;
215 case MapCenter: return childItems.indexOf (item) - branchOffset;
216 case Branch: return childItems.indexOf (item) - branchOffset;
217 case Image: return parentItem->childItems.indexOf (item) - imageOffset;
221 void TreeItem::setType(const Type t)
224 itemData[1]=getTypeName();
227 TreeItem::Type TreeItem::getType()
232 bool TreeItem::isBranchLikeType() const
234 if (type==Branch ||type==MapCenter) return true;
238 QString TreeItem::getTypeName()
242 case Undefined: return QString ("Undefined");
243 case MapCenter: return QString ("MapCenter");
244 case Branch: return QString ("Branch");
245 case Image: return QString ("Image");
246 default: return QString ("TreeItem::getTypeName no typename defined?!");
251 QVariant TreeItem::data(int column) const
253 return itemData.value(column);
256 void TreeItem::setHeading (const QString s)
261 QString TreeItem::getHeading () const
263 return itemData[0].toString();
266 std::string TreeItem::getHeadingStd () const
268 return itemData[0].toString().toStdString();
271 void TreeItem::setHeadingColor (QColor color)
276 QColor TreeItem::getHeadingColor ()
281 void TreeItem::setURL (const QString &u)
285 systemFlags.activate ("system-url");
287 systemFlags.deactivate ("system-url");
290 QString TreeItem::getURL ()
295 void TreeItem::setVymLink (const QString &vl)
299 // We need the relative (from loading)
300 // or absolute path (from User event)
301 // and build the absolute path.
302 // Note: If we have relative, use path of
303 // current map to build absolute path
305 if (!d.path().startsWith ("/"))
307 QString p=model->getDestPath();
308 int i=p.findRev("/",-1);
309 d.setPath(p.left(i)+"/"+vl);
313 systemFlags.activate("system-vymLink");
317 systemFlags.deactivate("system-vymLink");
322 QString TreeItem::getVymLink ()
327 void TreeItem::setNote(const QString &s)
331 setNoteObj (n,false);
334 void TreeItem::clearNote()
337 systemFlags.deactivate ("system-note");
340 void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor) //FIXME-1 setNoteObj is called for every select or so???
343 cout << "TI::setNoteObj of "<<getHeadingStd()<<endl;
344 if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
345 systemFlags.activate ("system-note");
346 if (note.isEmpty() && systemFlags.isActive ("system-note"))
347 systemFlags.deactivate ("system-note");
350 QString TreeItem::getNote()
352 return note.getNote();
355 bool TreeItem::hasEmptyNote()
357 return note.isEmpty();
360 NoteObj TreeItem::getNoteObj()
365 QString TreeItem::getNoteASCII(const QString &indent, const int &width)
367 return note.getNoteASCII(indent,width);
370 QString TreeItem::getNoteASCII()
372 return note.getNoteASCII();
375 QString TreeItem::getNoteOpenDoc()
377 return note.getNoteOpenDoc();
380 void TreeItem::activateStandardFlag (const QString &name)
382 standardFlags.activate (name);
383 model->emitDataHasChanged(this);
386 void TreeItem::deactivateStandardFlag (const QString &name)
388 standardFlags.deactivate (name);
389 model->emitDataHasChanged(this);
392 void TreeItem::deactivateAllStandardFlags ()
394 standardFlags.deactivateAll ();
395 model->emitDataHasChanged(this);
398 void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
400 standardFlags.toggle (name,master);
401 model->emitDataHasChanged(this);
404 bool TreeItem::isActiveStandardFlag (const QString &name)
406 return standardFlags.isActive (name);
409 QStringList TreeItem::activeStandardFlagNames ()
411 return standardFlags.activeFlagNames();
414 QStringList TreeItem::activeSystemFlagNames () //FIXME-1 missing: scrolled-tmp,hideInExport
416 return systemFlags.activeFlagNames();
419 bool TreeItem::canMoveDown()
423 case Undefined: return false;
426 if (!parentItem) return false;
427 if (parentItem->num (this) < parentItem->branchCount()-1)
432 case Image: return false;
433 default: return false;
437 bool TreeItem::canMoveUp()
441 case Undefined: return false;
444 if (!parentItem) return false;
445 if (parentItem->num (this) > 0)
450 case Image: return false;
451 default: return false;
455 void TreeItem::setID (const QString &s)
460 QString TreeItem::getID()
466 TreeItem* TreeItem::getChildNum(const int &n)
468 if (n>=0 && n<childItems.count() )
469 return childItems.at(n);
474 BranchItem* TreeItem::getFirstBranch()
477 return getBranchNum (branchOffset);
482 BranchItem* TreeItem::getLastBranch()
485 return getBranchNum (branchOffset + branchCounter-1);
490 BranchItem* TreeItem::getNextBranch(BranchItem *currentBranch)
492 if (!currentBranch) return NULL;
493 int n=num (currentBranch)+1;
495 return getBranchNum (branchOffset + n);
501 BranchItem* TreeItem::getBranchNum(const int &n)
504 return (BranchItem*)getChildNum (branchOffset + n);
509 BranchObj* TreeItem::getBranchObjNum(const int &n)
513 return (BranchObj*)(getChildNum (branchOffset+n)->lmo);
518 void TreeItem::setLastSelectedBranch()
521 parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
524 void TreeItem::setLastSelectedBranch(int i)
526 lastSelectedBranchNum=i;
529 TreeItem* TreeItem::getLastSelectedBranch()
531 return getBranchNum (lastSelectedBranchNum);
535 void TreeItem::setHideTmp (HideTmpMode mode)
537 if (isBranchLikeType() )
538 ((BranchItem*)this)->updateVisibility();
541 //updateVisibility();
546 if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
548 // Hide stuff according to hideExport flag and parents
549 //setVisibility (false);
551 //FIXME-2 hidden=true;
554 // Do not hide, but still take care of scrolled status
557 XXXXXXXX treeItem should be THIS
559 move visible to TreeItem???
561 BranchObj now has updateContents
563 maybe also start "bool TreeItem::branchlikeType"
567 if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
568 setVisibility (false);
570 setVisibility (true);
571 //FIXME-2 hidden=false;
575 // And take care of my children
576 for (int i=0; i<branchCount(); ++i)
577 getBranchNum(i)->setHideTmp (mode);
580 bool TreeItem::hasHiddenExportParent()
582 // Calls parents recursivly to
583 // find out, if we or parents are temp. hidden
585 if (hidden || hideExport) return true;
588 return parentItem->hasHiddenExportParent();
594 void TreeItem::setHideInExport(bool b)
596 if (isBranchLikeType() )
599 /* FIXME-1 call setVis and updateContentsSize...
601 systemFlags->activate("hideInExport");
603 systemFlags->deactivate("hideInExport");
611 bool TreeItem::hideInExport()
616 bool TreeItem::isHidden()