treeitem.cpp
author insilmaril
Mon, 20 Apr 2009 10:42:05 +0000
changeset 754 db0ec4bcf416
parent 753 25a77484ec72
child 755 ed5b407975b3
permissions -rw-r--r--
minor fixes
     1 #include <iostream>
     2 using namespace std;
     3 
     4 #include <QStringList>
     5 
     6 #include "treeitem.h"
     7 
     8 #include "branchobj.h"
     9 #include "branchitem.h"
    10 #include "vymmodel.h"
    11 
    12 TreeItem::TreeItem(const QList<QVariant> &data, TreeItem *parent)
    13 {
    14 	model=NULL;
    15 
    16     parentItem = parent;
    17     itemData = data;
    18 	lmo=NULL;
    19 
    20 	branchOffset=0;
    21 	branchCounter=0;
    22 	lastSelectedBranchNum=-1;
    23 
    24 	note.setNote(""); 
    25 	// note.setFontHint (textEditor->getFontHintDefault() );	//FIXME-2
    26 	// isNoteInEditor=false;
    27 
    28 	hidden=false;
    29 
    30 	// Reset ID
    31 	objID="";
    32 
    33 
    34 }
    35 
    36 TreeItem::~TreeItem()
    37 {
    38     qDeleteAll(childItems);
    39 }
    40 
    41 QString TreeItem::saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset)
    42 {
    43 	qWarning ("TreeItem::saveToDir called directly");
    44 	return QString();
    45 }
    46 
    47 
    48 /*
    49 void TreeItem::copy (OrnamentedObj* other)	//FIXME-2	probably need deep copy of branches and data!
    50 
    51 {
    52 	note.copy (other->note);
    53 	model=other->model;
    54 	hideExport=officially 
    55 	other->hideExport;
    56 }
    57 */
    58 
    59 void TreeItem::setModel (VymModel *m)
    60 {
    61 	model=m;
    62 }
    63 
    64 VymModel* TreeItem::getModel ()
    65 {
    66 	return model;
    67 }
    68 
    69 void TreeItem::appendChild(TreeItem *item)
    70 {
    71     childItems.append(item);
    72 	item->setModel (model);
    73 
    74 	if (item->type == Branch || item->type ==MapCenter)
    75 	{
    76 		if (branchCounter==0)
    77 			branchOffset=childItems.count()-1;
    78 		branchCounter++;
    79 	}
    80 }
    81 
    82 void TreeItem::removeChild(int row)
    83 {
    84     if (row<0 || row > childItems.size()-1)
    85 		qWarning ("TreeItem::removeChild tried to remove non existing item?!\n");
    86 	else
    87 	{
    88 		cout << "TI::removeChild this="<<this<<"  row="<<row<<endl;
    89 		delete childItems.takeAt (row);
    90 	}
    91 }
    92 
    93 TreeItem *TreeItem::child(int row)
    94 {
    95     return childItems.value(row);
    96 }
    97 
    98 int TreeItem::childCount() const
    99 {
   100     return childItems.count();
   101 }
   102 
   103 int TreeItem::childNumber() const
   104 {
   105     if (parentItem)
   106         return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
   107 
   108     return 0;
   109 }
   110 
   111 int TreeItem::columnCount() const
   112 {
   113     return itemData.count();
   114 }
   115 
   116 int TreeItem::branchCount() const
   117 {
   118     return branchCounter;
   119 }
   120 
   121 int TreeItem::imageCount() const
   122 {
   123 	int imageCounter=0;
   124     return imageCounter; // FIXME-1 imageCounter needs to be calculated...
   125 }
   126 
   127 int TreeItem::xlinkCount() const // FIXME-2 check if xlinks are stored in a different way (global to model?)
   128 {
   129 	int xlinkCounter=0;
   130     return xlinkCounter; // FIXME-1 xlinkCounter needs to be calculated...
   131 }
   132 
   133 int TreeItem::row() const
   134 {
   135     if (parentItem)
   136         return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));
   137 
   138     return 0;
   139 }
   140 
   141 int TreeItem::column() const
   142 {
   143     return 0;
   144 }
   145 
   146 int TreeItem::depth() 
   147 {
   148 	int d=-1;
   149 	TreeItem *ti=this;
   150 	while (ti!=NULL)
   151 	{
   152 		ti=ti->parent();
   153 		d++;
   154 	}
   155 	return d;
   156 }
   157 
   158 TreeItem *TreeItem::parent()
   159 {
   160     return parentItem;
   161 }
   162 
   163 int TreeItem::num()
   164 {
   165 	switch (type)
   166 	{
   167 		case Undefined: return -1;
   168 		case MapCenter: return parentItem->childItems.indexOf (this) - branchOffset;
   169 		case Branch: return parentItem->childItems.indexOf (this) - branchOffset;
   170 		case Image: return -1; // FIXME-2
   171 		default: return -1;
   172 	}
   173 }
   174 
   175 int TreeItem::num (TreeItem *item)
   176 {
   177 	if (!item) return -1;
   178 	switch (item->getType())
   179 	{
   180 		case Undefined: return -1;
   181 		case MapCenter: return childItems.indexOf (this) - branchOffset;
   182 		case Branch: return childItems.indexOf (this) - branchOffset;
   183 		case Image: return -1; // FIXME-2
   184 		default: return -1;
   185 	}
   186 }
   187 
   188 QVariant TreeItem::data(int column) const
   189 {
   190     return itemData.value(column);
   191 }
   192 
   193 void TreeItem::setHeading (const QString s)
   194 {
   195 	itemData[0]=s;
   196 }
   197 
   198 QString TreeItem::getHeading () const
   199 {
   200 	return itemData[0].toString();
   201 }
   202 
   203 std::string TreeItem::headingStd () const
   204 {
   205 	return itemData[0].toString().toStdString();
   206 }
   207 
   208 void TreeItem::setNote(const QString s)
   209 {
   210 	note.setNote(s);
   211 	// updateNoteFlag();  FIXME-2 needed?
   212 	if (model) 
   213 		model->emitNoteHasChanged (this);
   214 }
   215 
   216 void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor)
   217 {
   218 	note=n;
   219 	// updateNoteFlag();  FIXME-2 needed?
   220 	if (model && updateNoteEditor)	
   221 		model->emitNoteHasChanged (this);
   222 }
   223 
   224 QString TreeItem::getNote()
   225 {
   226 	return note.getNote();
   227 }
   228 
   229 NoteObj TreeItem::getNoteObj()
   230 {
   231 	return note;
   232 }
   233 
   234 QString TreeItem::getNoteASCII(const QString &indent, const int &width)
   235 {
   236     return note.getNoteASCII(indent,width);
   237 }
   238 
   239 QString TreeItem::getNoteASCII()
   240 {
   241     return note.getNoteASCII();
   242 }
   243 
   244 QString TreeItem::getNoteOpenDoc()
   245 {
   246     return note.getNoteOpenDoc();
   247 }
   248 
   249 void TreeItem::setType(const Type t)
   250 {
   251 	type=t;
   252 	itemData[1]=getTypeName();
   253 }
   254 
   255 TreeItem::Type TreeItem::getType()
   256 {
   257 	return type;
   258 }
   259 
   260 bool TreeItem::isBranchLikeType() const
   261 {
   262 	if (type==Branch ||type==MapCenter) return true;
   263 	return false;
   264 }
   265 
   266 QString TreeItem::getTypeName()
   267 {
   268 	switch (type)
   269 	{
   270 		case Undefined: return QString ("Undefined");
   271 		case MapCenter: return QString ("MapCenter");
   272 		case Branch: return QString ("Branch");
   273 		case Image: return QString ("Image");
   274 		default: return QString ("TreeItem::getTypeName no typename defined?!");
   275 	}
   276 }
   277 
   278 void TreeItem::setID (const QString &s)
   279 {
   280 	objID=s;
   281 }
   282 
   283 QString TreeItem::getID()
   284 {
   285 	return objID;
   286 }
   287 
   288 
   289 TreeItem* TreeItem::getChildNum(const int &n)
   290 {
   291 	if (n>=0 && n<childItems.count() )
   292 		return childItems.at(n);
   293 	else
   294 		return NULL;
   295 }
   296 
   297 BranchItem* TreeItem::getFirstBranch()
   298 {
   299 	if (branchCounter>0)
   300 		return getBranchNum (branchOffset);
   301 	else
   302 		return NULL;
   303 }
   304 
   305 BranchItem* TreeItem::getLastBranch()
   306 {
   307 	if (branchCounter>0)
   308 		return getBranchNum (branchOffset + branchCounter-1);
   309 	else
   310 		return NULL;
   311 }
   312 
   313 
   314 BranchItem* TreeItem::getBranchNum(const int &n)
   315 {
   316 	if (branchCounter>0)
   317 		return (BranchItem*)getChildNum (branchOffset + n);
   318 	else
   319 		return NULL;
   320 }
   321 
   322 BranchObj* TreeItem::getBranchObjNum(const int &n)
   323 {
   324 	if (branchCounter>0)
   325 	{
   326 		return (BranchObj*)(getChildNum (branchOffset+n)->lmo);
   327 	} else
   328 		return NULL;
   329 }
   330 
   331 void TreeItem::setLastSelectedBranch()
   332 {
   333 	if (parentItem)
   334 		parentItem->lastSelectedBranchNum=parentItem->childItems.indexOf(this);
   335 }
   336 
   337 TreeItem* TreeItem::findBySelectString (const QString &s)  //FIXME-1
   338 {
   339 /*
   340 	LinkableMapObj *lmo=this;
   341 	QString part;
   342 	QString typ;
   343 	QString num;
   344 	while (!s.isEmpty() )
   345 	{
   346 		part=s.section(",",0,0);
   347 		typ=part.left (3);
   348 		num=part.right(part.length() - 3);
   349 		if (typ=="mc:")
   350 		{
   351 			if (depth>0)
   352 				return false;	// in a subtree there is no center
   353 			else
   354 				break;
   355 		} else
   356 			if (typ=="bo:")
   357 				lmo=lmo->getTreeItem()->getBranchObjNum (num.toInt());
   358 			else
   359 				if (typ=="fi:")
   360 					lmo=((BranchObj*)lmo)->getFloatImageNum (num.toUInt());
   361 		if (!lmo) break;
   362 		
   363 		if (s.contains(","))
   364 			s=s.right(s.length() - part.length() -1 );
   365 		else	
   366 			break;
   367 	}
   368 	*/
   369 	return NULL;
   370 }
   371 
   372 void TreeItem::setLastSelectedBranch(int i)
   373 {
   374 		lastSelectedBranchNum=i;
   375 }
   376 
   377 TreeItem* TreeItem::getLastSelectedBranch()
   378 {
   379 	return getBranchNum (lastSelectedBranchNum);
   380 }
   381 
   382 
   383 void TreeItem::setHideTmp (HideTmpMode mode)
   384 {
   385 	if (isBranchLikeType() )
   386 		((BranchItem*)this)->updateVisibility();
   387 		/*
   388 	if (type==Image)
   389 		//updateVisibility();
   390 	*/
   391 
   392 /*
   393 
   394 		if (mode==HideExport && (hideExport || hasHiddenExportParent() ) )
   395 		{
   396 			// Hide stuff according to hideExport flag and parents
   397 			//setVisibility (false);
   398 			updateVisibility();
   399 			//FIXME-2 hidden=true;
   400 		}else
   401 		{
   402 			// Do not hide, but still take care of scrolled status
   403 			
   404 
   405 			XXXXXXXX treeItem should be THIS
   406 
   407 			move visible to TreeItem???
   408 
   409 			BranchObj now has updateContents
   410 
   411 			maybe also start "bool TreeItem::branchlikeType"
   412 
   413 
   414 
   415 			if ( ((BranchItem*)treeItem)->hasScrolledParent((BranchItem*)treeItem))
   416 				setVisibility (false);
   417 			else
   418 				setVisibility (true);
   419 			//FIXME-2 hidden=false;
   420 		}	
   421 
   422 */
   423 		// And take care of my children
   424 		for (int i=0; i<branchCount(); ++i)
   425 			getBranchNum(i)->setHideTmp (mode);
   426 }
   427 
   428 bool TreeItem::hasHiddenExportParent()
   429 {
   430 	// Calls parents recursivly to
   431 	// find out, if we or parents are temp. hidden
   432 
   433 	if (hidden || hideExport) return true;
   434 
   435 	if (parentItem) 
   436 		return parentItem->hasHiddenExportParent();
   437 	else
   438 		return false;
   439 }
   440 
   441 
   442 void TreeItem::setHideInExport(bool b) 
   443 {
   444 	if (isBranchLikeType() )
   445 	{
   446 		hideExport=b;
   447 		/* FIXME-1 call setVis and updateContentsSize...
   448 		if (b)
   449 			systemFlags->activate("hideInExport");
   450 		else	
   451 			systemFlags->deactivate("hideInExport");
   452 		calcBBoxSize();
   453 		positionBBox();
   454 		requestReposition();	
   455 		*/
   456 	}
   457 }	
   458 
   459 bool TreeItem::hideInExport()
   460 {
   461 	return hideExport;
   462 }	
   463 
   464 bool TreeItem::isHidden()
   465 {
   466 	return hidden;
   467 }	
   468 
   469 
   470 LinkableMapObj* TreeItem::getLMO()	// FIXME-3  VM should be unnecessary in the end
   471 {
   472 	return lmo;
   473 }
   474 
   475 void TreeItem::setLMO(LinkableMapObj *l)
   476 {
   477 	lmo=l;
   478 }
   479