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