7 #include "branchitem.h"
8 #include "mapcenteritem.h"
13 extern FlagRow* standardFlagsMaster;
15 TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent):MapItem()
17 //cout << "Constructor TreeItem "<<endl;
25 //cout << "Destructor TreeItem "<<getHeadingStd()<<endl;
27 while (!childItems.isEmpty())
29 ti=childItems.takeFirst();
30 switch (ti->getType() )
32 case TreeItem::MapCenter:
33 delete (MapCenterItem*)ti;
35 case TreeItem::Branch:
36 delete (BranchItem*)ti;
55 lastSelectedBranchNum=-1;
61 // note.setFontHint (textEditor->getFontHintDefault() ); //FIXME-2
62 // isNoteInEditor=false;
69 standardFlags.setMasterRow (standardFlagsMaster);
72 QString TreeItem::saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset)
74 cout<< "TreeItem::saveToDir called directly for ("<<getHeadingStd()<<"), instead of inherited type...\n";
80 void TreeItem::copy (OrnamentedObj* other) //FIXME-2 probably need deep copy of branches and data!
83 note.copy (other->note);
90 void TreeItem::setModel (VymModel *m)
95 VymModel* TreeItem::getModel ()
100 void TreeItem::appendChild(TreeItem *item)
102 childItems.append(item);
103 item->parentItem=this;
104 item->setModel (model);
106 if (item->type == Branch || item->type ==MapCenter)
108 if (branchCounter==0)
109 branchOffset=childItems.count()-1;
114 void TreeItem::removeChild(int row)
116 if (row<0 || row > childItems.size()-1)
117 qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
120 if (childItems.at(row)->isBranchLikeType())
122 childItems.removeAt (row);
126 void TreeItem::removeChildBranches()
128 while ( childItems.size()>0)
131 childItems.removeAt (0);
135 TreeItem *TreeItem::child(int row)
137 return childItems.value(row);
140 int TreeItem::childCount() const
142 return childItems.count();
145 int TreeItem::childNumber() const
148 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
153 int TreeItem::columnCount() const
155 return itemData.count();
158 int TreeItem::branchCount() const
160 return branchCounter;
163 int TreeItem::imageCount() const
166 return imageCounter; // FIXME-1 imageCounter needs to be calculated...
169 int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
172 return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
175 int TreeItem::row() const
178 return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
183 int TreeItem::column() const
188 int TreeItem::depth()
200 TreeItem *TreeItem::parent()
205 int TreeItem::childNum()
207 return parentItem->childItems.indexOf (this);
214 case Undefined: return -1;
215 case MapCenter: return parentItem->childItems.indexOf (this) - branchOffset;
216 case Branch: return parentItem->childItems.indexOf (this) - branchOffset;
217 case Image: return parentItem->childItems.indexOf (this) - imageOffset;
222 int TreeItem::num (TreeItem *item)
224 if (!item) return -1;
225 switch (item->getType())
227 case Undefined: return -1;
228 case MapCenter: return childItems.indexOf (item) - branchOffset;
229 case Branch: return childItems.indexOf (item) - branchOffset;
230 case Image: return parentItem->childItems.indexOf (item) - imageOffset;
234 void TreeItem::setType(const Type t)
237 itemData[1]=getTypeName();
240 TreeItem::Type TreeItem::getType()
245 bool TreeItem::isBranchLikeType() const
247 if (type==Branch ||type==MapCenter) return true;
251 QString TreeItem::getTypeName()
255 case Undefined: return QString ("Undefined");
256 case MapCenter: return QString ("MapCenter");
257 case Branch: return QString ("Branch");
258 case Image: return QString ("Image");
259 default: return QString ("TreeItem::getTypeName no typename defined?!");
264 QVariant TreeItem::data(int column) const
266 return itemData.value(column);
269 void TreeItem::setHeading (const QString s)
274 QString TreeItem::getHeading () const
276 return itemData[0].toString();
279 std::string TreeItem::getHeadingStd () const
281 return itemData[0].toString().toStdString();
284 void TreeItem::setHeadingColor (QColor color)
289 QColor TreeItem::getHeadingColor ()
294 void TreeItem::setURL (const QString &u)
298 systemFlags.activate ("system-url");
300 systemFlags.deactivate ("system-url");
303 QString TreeItem::getURL ()
308 void TreeItem::setVymLink (const QString &vl)
312 // We need the relative (from loading)
313 // or absolute path (from User event)
314 // and build the absolute path.
315 // Note: If we have relative, use path of
316 // current map to build absolute path
318 if (!d.path().startsWith ("/"))
320 QString p=model->getDestPath();
321 int i=p.findRev("/",-1);
322 d.setPath(p.left(i)+"/"+vl);
326 systemFlags.activate("system-vymLink");
330 systemFlags.deactivate("system-vymLink");
335 QString TreeItem::getVymLink ()
340 void TreeItem::setNote(const QString &s)
344 setNoteObj (n,false);
347 void TreeItem::clearNote()
350 systemFlags.deactivate ("system-note");
353 void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor) //FIXME-1 setNoteObj is called for every select or so???
356 if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
357 systemFlags.activate ("system-note");
358 if (note.isEmpty() && systemFlags.isActive ("system-note"))
359 systemFlags.deactivate ("system-note");
362 QString TreeItem::getNote()
364 return note.getNote();
367 bool TreeItem::hasEmptyNote()
369 return note.isEmpty();
372 NoteObj TreeItem::getNoteObj()
377 QString TreeItem::getNoteASCII(const QString &indent, const int &width)
379 return note.getNoteASCII(indent,width);
382 QString TreeItem::getNoteASCII()
384 return note.getNoteASCII();
387 QString TreeItem::getNoteOpenDoc()
389 return note.getNoteOpenDoc();
392 void TreeItem::activateStandardFlag (const QString &name)
394 standardFlags.activate (name);
395 model->emitDataHasChanged(this);
398 void TreeItem::deactivateStandardFlag (const QString &name)
400 standardFlags.deactivate (name);
401 model->emitDataHasChanged(this);
404 void TreeItem::deactivateAllStandardFlags ()
406 standardFlags.deactivateAll ();
407 model->emitDataHasChanged(this);
410 void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
412 standardFlags.toggle (name,master);
413 model->emitDataHasChanged(this);
416 bool TreeItem::isActiveStandardFlag (const QString &name)
418 return standardFlags.isActive (name);
421 QStringList TreeItem::activeStandardFlagNames ()
423 return standardFlags.activeFlagNames();
426 FlagRow* TreeItem::getStandardFlagRow()
428 return &standardFlags;
432 void TreeItem::updateToolBar()
434 standardFlags.updateToolBar();
437 QStringList TreeItem::activeSystemFlagNames () //FIXME-1 missing: scrolled-tmp,hideInExport
439 return systemFlags.activeFlagNames();
442 bool TreeItem::canMoveDown()
446 case Undefined: return false;
449 if (!parentItem) return false;
450 if (parentItem->num (this) < parentItem->branchCount()-1)
455 case Image: return false;
456 default: return false;
460 bool TreeItem::canMoveUp()
464 case Undefined: return false;
467 if (!parentItem) return false;
468 if (parentItem->num (this) > 0)
473 case Image: return false;
474 default: return false;
478 void TreeItem::setID (const QString &s)
483 QString TreeItem::getID()
489 TreeItem* TreeItem::getChildNum(const int &n)
491 if (n>=0 && n<childItems.count() )
492 return childItems.at(n);
497 BranchItem* TreeItem::getFirstBranch()
500 return getBranchNum (branchOffset);
505 BranchItem* TreeItem::getLastBranch()
508 return getBranchNum (branchOffset + branchCounter-1);
513 BranchItem* TreeItem::getNextBranch(BranchItem *currentBranch)
515 if (!currentBranch) return NULL;
516 int n=num (currentBranch)+1;
518 return getBranchNum (branchOffset + n);
524 BranchItem* TreeItem::getBranchNum(const int &n)
527 return (BranchItem*)getChildNum (branchOffset + n);
532 BranchObj* TreeItem::getBranchObjNum(const int &n)
536 return (BranchObj*)(getChildNum (branchOffset+n)->lmo);
541 void TreeItem::setLastSelectedBranch()
544 parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
547 void TreeItem::setLastSelectedBranch(int i)
549 lastSelectedBranchNum=i;
552 TreeItem* TreeItem::getLastSelectedBranch()
554 return getBranchNum (lastSelectedBranchNum);
558 void TreeItem::setHideTmp (HideTmpMode mode)
560 if (isBranchLikeType() )
561 ((BranchItem*)this)->updateVisibility();
564 //updateVisibility();
569 if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
571 // Hide stuff according to hideExport flag and parents
572 //setVisibility (false);
574 //FIXME-2 hidden=true;
577 // Do not hide, but still take care of scrolled status
580 XXXXXXXX treeItem should be THIS
582 move visible to TreeItem???
584 BranchObj now has updateContents
586 maybe also start "bool TreeItem::branchlikeType"
590 if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
591 setVisibility (false);
593 setVisibility (true);
594 //FIXME-2 hidden=false;
598 // And take care of my children
599 for (int i=0; i<branchCount(); ++i)
600 getBranchNum(i)->setHideTmp (mode);
603 bool TreeItem::hasHiddenExportParent()
605 // Calls parents recursivly to
606 // find out, if we or parents are temp. hidden
608 if (hidden || hideExport) return true;
611 return parentItem->hasHiddenExportParent();
617 void TreeItem::setHideInExport(bool b)
619 if (isBranchLikeType() )
622 /* FIXME-1 call setVis and updateContentsSize...
624 systemFlags->activate("hideInExport");
626 systemFlags->deactivate("hideInExport");
634 bool TreeItem::hideInExport()
639 bool TreeItem::isHidden()