branchitem.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
insilmaril@747
     1
#include "branchitem.h"
insilmaril@747
     2
#include "branchobj.h"
insilmaril@753
     3
#include "vymmodel.h"
insilmaril@747
     4
insilmaril@747
     5
#include <iostream>
insilmaril@753
     6
#include <QDir>
insilmaril@753
     7
insilmaril@747
     8
using namespace std;
insilmaril@747
     9
insilmaril@747
    10
BranchItem::BranchItem(const QList<QVariant> &data, TreeItem *parent):TreeItem (data,parent)
insilmaril@747
    11
{
insilmaril@749
    12
	//cout << "Constr. BranchItem\n";
insilmaril@749
    13
insilmaril@749
    14
	scrolled=false;
insilmaril@749
    15
	tmpUnscrolled=false;
insilmaril@747
    16
}
insilmaril@747
    17
insilmaril@747
    18
BranchItem::~BranchItem()
insilmaril@747
    19
{
insilmaril@747
    20
	cout << "Destr. BranchItem\n";
insilmaril@747
    21
    qDeleteAll(childItems);
insilmaril@747
    22
}
insilmaril@747
    23
insilmaril@749
    24
void BranchItem::copy (BranchItem *other)
insilmaril@749
    25
{
insilmaril@749
    26
	scrolled=other->scrolled;
insilmaril@749
    27
	tmpUnscrolled=other->tmpUnscrolled;
insilmaril@749
    28
}
insilmaril@749
    29
insilmaril@747
    30
QString BranchItem::saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset)
insilmaril@747
    31
{
insilmaril@747
    32
	// Cloudy stuff can be hidden during exports
insilmaril@748
    33
	if (hidden) return QString();
insilmaril@747
    34
insilmaril@747
    35
    QString s,a;
insilmaril@747
    36
	BranchObj *bo=(BranchObj*)lmo;
insilmaril@747
    37
insilmaril@747
    38
	/* FIXME-1
insilmaril@747
    39
	// Update of note is usually done while unselecting a branch
insilmaril@747
    40
	if (isNoteInEditor) getNoteFromTextEditor();
insilmaril@747
    41
	
insilmaril@747
    42
	QString scrolledAttr;
insilmaril@747
    43
	if (scrolled) 
insilmaril@747
    44
		scrolledAttr=attribut ("scrolled","yes");
insilmaril@747
    45
	else
insilmaril@747
    46
		scrolledAttr="";
insilmaril@747
    47
insilmaril@747
    48
	// save area, if not scrolled
insilmaril@747
    49
	QString areaAttr;
insilmaril@747
    50
	if (!((BranchObj*)(parObj))->isScrolled() )
insilmaril@747
    51
	{
insilmaril@747
    52
		areaAttr=
insilmaril@747
    53
			attribut("x1",QString().setNum(absPos.x()-offset.x())) +
insilmaril@747
    54
			attribut("y1",QString().setNum(absPos.y()-offset.y())) +
insilmaril@747
    55
			attribut("x2",QString().setNum(absPos.x()+width()-offset.x())) +
insilmaril@747
    56
			attribut("y2",QString().setNum(absPos.y()+height()-offset.y()));
insilmaril@747
    57
insilmaril@747
    58
	} else
insilmaril@747
    59
		areaAttr="";
insilmaril@747
    60
	
insilmaril@747
    61
	// Providing an ID for a branch makes export to XHTML easier
insilmaril@747
    62
	QString idAttr;
insilmaril@747
    63
	if (countXLinks()>0)
insilmaril@747
    64
		idAttr=attribut ("id",model->getSelectString(this)); //TODO directly access model
insilmaril@747
    65
	else
insilmaril@747
    66
		idAttr="";
insilmaril@747
    67
insilmaril@747
    68
	*/
insilmaril@747
    69
    s=beginElement ("branch" 
insilmaril@747
    70
	//	+getOrnXMLAttr() 
insilmaril@747
    71
	//	+scrolledAttr 
insilmaril@747
    72
	//	+areaAttr 
insilmaril@747
    73
	//	+idAttr 
insilmaril@747
    74
	//	+getIncludeImageAttr() 
insilmaril@747
    75
		);
insilmaril@747
    76
    incIndent();
insilmaril@747
    77
insilmaril@747
    78
	// save heading
insilmaril@747
    79
    s+=valueElement("heading", getHeading(),
insilmaril@747
    80
		attribut ("textColor",QColor( bo->getColor()).name()));
insilmaril@747
    81
insilmaril@747
    82
/*
insilmaril@747
    83
	// Save frame
insilmaril@747
    84
	if (frame->getFrameType()!=FrameObj::NoFrame) 
insilmaril@747
    85
		s+=frame->saveToDir ();
insilmaril@747
    86
insilmaril@747
    87
	// save names of flags set
insilmaril@747
    88
	s+=standardFlags->saveToDir(tmpdir,prefix,0);
insilmaril@747
    89
	
insilmaril@747
    90
	// Save FloatImages
insilmaril@747
    91
	for (int i=0; i<floatimage.size(); ++i)
insilmaril@747
    92
		s+=floatimage.at(i)->saveToDir (tmpdir,prefix);
insilmaril@747
    93
*/
insilmaril@747
    94
insilmaril@747
    95
	// save note
insilmaril@747
    96
	if (!note.isEmpty() )
insilmaril@747
    97
		s+=note.saveToDir();
insilmaril@747
    98
	
insilmaril@747
    99
	// Save branches
insilmaril@747
   100
	TreeItem *ti=getFirstBranch();
insilmaril@747
   101
	TreeItem *last=getLastBranch();
insilmaril@747
   102
	while (ti && ti!=last) 
insilmaril@747
   103
		s+=ti->saveToDir(tmpdir,prefix,offset);
insilmaril@747
   104
insilmaril@747
   105
	/*
insilmaril@747
   106
	// Save XLinks
insilmaril@747
   107
	QString ol;	// old link
insilmaril@747
   108
	QString cl;	// current link
insilmaril@747
   109
	for (int i=0; i<xlink.size(); ++i)
insilmaril@747
   110
	{
insilmaril@747
   111
		cl=xlink.at(i)->saveToDir();
insilmaril@747
   112
		if (cl!=ol)
insilmaril@747
   113
		{
insilmaril@747
   114
			s+=cl;
insilmaril@747
   115
			ol=cl;
insilmaril@747
   116
		} else
insilmaril@747
   117
		{
insilmaril@747
   118
			qWarning (QString("Ignoring of duplicate xLink in %1").arg(getHeading()));
insilmaril@747
   119
		}
insilmaril@747
   120
	}	
insilmaril@747
   121
	*/
insilmaril@747
   122
insilmaril@747
   123
    decIndent();
insilmaril@747
   124
    s+=endElement   ("branch");
insilmaril@747
   125
    return s;
insilmaril@747
   126
}
insilmaril@747
   127
insilmaril@753
   128
void BranchItem::updateVisibility()	// FIXME-1
insilmaril@753
   129
{
insilmaril@753
   130
}
insilmaril@753
   131
insilmaril@753
   132
void BranchItem::setVymLink(QString s)
insilmaril@753
   133
{
insilmaril@753
   134
	if (!s.isEmpty())
insilmaril@753
   135
	{
insilmaril@753
   136
		// We need the relative (from loading) 
insilmaril@753
   137
		// or absolute path (from User event)
insilmaril@753
   138
		// and build the absolute path.
insilmaril@753
   139
		// Note: If we have relative, use path of
insilmaril@753
   140
		// current map to build absolute path
insilmaril@753
   141
		QDir d(s);
insilmaril@753
   142
		if (!d.path().startsWith ("/"))
insilmaril@753
   143
		{
insilmaril@753
   144
			QString p=model->getDestPath();
insilmaril@753
   145
			int i=p.findRev("/",-1);
insilmaril@753
   146
			d.setPath(p.left(i)+"/"+s);
insilmaril@753
   147
			d.convertToAbs();
insilmaril@753
   148
		}
insilmaril@753
   149
		vymLink=d.path();
insilmaril@753
   150
		//FIXME-2 systemFlags->activate("vymLink");
insilmaril@753
   151
	}	
insilmaril@753
   152
	else	
insilmaril@753
   153
	{
insilmaril@753
   154
		//FIXME-2 systemFlags->deactivate("vymLink");
insilmaril@753
   155
		vymLink="";
insilmaril@753
   156
	}	
insilmaril@753
   157
	/* FIXME-2
insilmaril@753
   158
	calcBBoxSize();			// recalculate bbox
insilmaril@753
   159
    positionBBox();			// rearrange contents
insilmaril@753
   160
	forceReposition();
insilmaril@753
   161
	*/
insilmaril@753
   162
}
insilmaril@753
   163
insilmaril@753
   164
QString BranchItem::getVymLink()
insilmaril@753
   165
{
insilmaril@753
   166
	return vymLink;
insilmaril@753
   167
}
insilmaril@753
   168
insilmaril@749
   169
void BranchItem::unScroll()
insilmaril@749
   170
{
insilmaril@749
   171
	if (tmpUnscrolled) resetTmpUnscroll();
insilmaril@749
   172
	if (scrolled) toggleScroll();
insilmaril@749
   173
}
insilmaril@747
   174
insilmaril@749
   175
void BranchItem::toggleScroll()
insilmaril@749
   176
{
insilmaril@749
   177
	if (scrolled)
insilmaril@749
   178
	{
insilmaril@749
   179
		scrolled=false;
insilmaril@749
   180
		//FIXME-1 systemFlags->deactivate("scrolledright");
insilmaril@749
   181
		/*
insilmaril@749
   182
		for (int i=0; i<branch.size(); ++i)
insilmaril@749
   183
			branch.at(i)->setVisibility(true);
insilmaril@749
   184
		*/	
insilmaril@749
   185
	} else
insilmaril@749
   186
	{
insilmaril@749
   187
		scrolled=true;
insilmaril@749
   188
		/*
insilmaril@749
   189
		//FIXME-1 systemFlags->activate("scrolledright");
insilmaril@749
   190
		for (int i=0; i<branch.size(); ++i)
insilmaril@749
   191
			branch.at(i)->setVisibility(false);
insilmaril@749
   192
		*/	
insilmaril@749
   193
	}
insilmaril@753
   194
	/*	
insilmaril@749
   195
	calcBBoxSize();
insilmaril@749
   196
	positionBBox();	
insilmaril@749
   197
	move (absPos.x(), absPos.y() );
insilmaril@749
   198
	forceReposition();
insilmaril@749
   199
	*/
insilmaril@749
   200
}
insilmaril@749
   201
insilmaril@749
   202
bool BranchItem::isScrolled()
insilmaril@749
   203
{
insilmaril@749
   204
	return scrolled;
insilmaril@749
   205
}
insilmaril@749
   206
insilmaril@749
   207
bool BranchItem::hasScrolledParent(BranchItem *start)
insilmaril@749
   208
{
insilmaril@749
   209
	// Calls parents recursivly to
insilmaril@749
   210
	// find out, if we are scrolled at all.
insilmaril@749
   211
	// But ignore myself, just look at parents.
insilmaril@749
   212
insilmaril@749
   213
	if (this !=start && scrolled) return true;
insilmaril@749
   214
insilmaril@749
   215
	BranchItem* bi=(BranchItem*)parentItem;
insilmaril@749
   216
	if (bi) 
insilmaril@749
   217
		return bi->hasScrolledParent(start);
insilmaril@749
   218
	else
insilmaril@749
   219
		return false;
insilmaril@749
   220
}
insilmaril@749
   221
insilmaril@749
   222
void BranchItem::tmpUnscroll()
insilmaril@749
   223
{
insilmaril@749
   224
	// Unscroll parent (recursivly)
insilmaril@749
   225
	BranchItem * bi=(BranchItem*)parentItem;
insilmaril@749
   226
	if (bi) bi->tmpUnscroll();
insilmaril@749
   227
		
insilmaril@749
   228
	// Unscroll myself
insilmaril@749
   229
	if (scrolled)
insilmaril@749
   230
	{
insilmaril@749
   231
		tmpUnscrolled=true;
insilmaril@749
   232
		// FIXME-1 systemFlags->activate("tmpUnscrolledright");
insilmaril@749
   233
		toggleScroll();
insilmaril@749
   234
	}	
insilmaril@749
   235
}
insilmaril@749
   236
insilmaril@749
   237
void BranchItem::resetTmpUnscroll()
insilmaril@749
   238
{
insilmaril@749
   239
	// Unscroll parent (recursivly)
insilmaril@749
   240
	BranchItem * bi=(BranchItem*)parentItem;
insilmaril@749
   241
	if (bi) bi->resetTmpUnscroll();
insilmaril@749
   242
		
insilmaril@749
   243
	// Unscroll myself
insilmaril@749
   244
	if (tmpUnscrolled)
insilmaril@749
   245
	{
insilmaril@749
   246
		tmpUnscrolled=false;
insilmaril@749
   247
		// FIXME-1 systemFlags->deactivate("tmpUnscrolledright");
insilmaril@749
   248
		toggleScroll();
insilmaril@749
   249
	}	
insilmaril@749
   250
}
insilmaril@749
   251
insilmaril@754
   252
TreeItem* BranchItem::findMapItem (QPointF p, TreeItem* excludeLMO)
insilmaril@754
   253
{
insilmaril@754
   254
	// Search branches
insilmaril@754
   255
	TreeItem *ti;
insilmaril@754
   256
	for (int i=0; i<branchCount(); ++i)
insilmaril@754
   257
    {	
insilmaril@754
   258
		ti=getBranchNum(i)->findMapItem(p, excludeLMO);
insilmaril@754
   259
		if (ti != NULL) return ti;
insilmaril@754
   260
    }
insilmaril@754
   261
	
insilmaril@754
   262
insilmaril@754
   263
	// Search myself
insilmaril@754
   264
    if (getBranchObj()->isInClickBox (p) && (this != excludeLMO) && getBranchObj()->isVisibleObj() ) 
insilmaril@754
   265
		return this;
insilmaril@754
   266
insilmaril@754
   267
/* FIXME-2 // Search float images
insilmaril@754
   268
    for (int i=0; i<floatimage.size(); ++i )
insilmaril@754
   269
		if (floatimage.at(i)->isInClickBox(p) && 
insilmaril@754
   270
			(floatimage.at(i) != excludeLMO) && 
insilmaril@754
   271
			floatimage.at(i)->getParObj()!= excludeLMO &&
insilmaril@754
   272
			floatimage.at(i)->isVisibleObj() 
insilmaril@754
   273
		) return floatimage.at(i)->getTreeItem();
insilmaril@754
   274
*/
insilmaril@754
   275
    return NULL;
insilmaril@754
   276
}
insilmaril@754
   277
insilmaril@754
   278
TreeItem* BranchItem::findID (QString sid)
insilmaril@754
   279
{
insilmaril@754
   280
	// Search branches
insilmaril@754
   281
    TreeItem *ti;
insilmaril@754
   282
	for (int i=0; i<branchCount(); ++i)
insilmaril@754
   283
    {	
insilmaril@754
   284
		ti=getBranchNum(i)->findID (sid);
insilmaril@754
   285
		if (ti != NULL) return ti;
insilmaril@754
   286
    }
insilmaril@754
   287
	
insilmaril@754
   288
	// Search myself
insilmaril@754
   289
	if (sid==objID) return this;
insilmaril@754
   290
insilmaril@754
   291
insilmaril@754
   292
/*
insilmaril@754
   293
	// Search float images
insilmaril@754
   294
    for (int i=0; i<floatimage.size(); ++i )
insilmaril@754
   295
		if (floatimage.at(i)->inBox(p) && 
insilmaril@754
   296
			(floatimage.at(i) != excludeLMO) && 
insilmaril@754
   297
			floatimage.at(i)->getParObj()!= excludeLMO &&
insilmaril@754
   298
			floatimage.at(i)->isVisibleObj() 
insilmaril@754
   299
		) return floatimage.at(i);
insilmaril@754
   300
*/
insilmaril@754
   301
    return NULL;
insilmaril@754
   302
}
insilmaril@754
   303
insilmaril@754
   304
insilmaril@750
   305
BranchObj* BranchItem::getBranchObj()	// FIXME-3 only for transition BO->BI
insilmaril@750
   306
{
insilmaril@750
   307
	return (BranchObj*)lmo;
insilmaril@750
   308
}
insilmaril@749
   309