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