Hiding of links works again
authorinsilmaril
Tue, 07 Jul 2009 09:34:24 +0000
changeset 7791fb50e79661c
parent 778 7b4e73ac247e
child 780 fe839bdfd10c
Hiding of links works again
branchitem.cpp
branchitem.h
branchobj.cpp
branchpropwindow.cpp
floatobj.cpp
imageitem.cpp
imageitem.h
linkablemapobj.cpp
linkablemapobj.h
mapeditor.cpp
mapitem.cpp
mapitem.h
ornamentedobj.cpp
treeitem.cpp
treeitem.h
version.h
vymmodel.cpp
xml-vym.cpp
     1.1 --- a/branchitem.cpp	Mon Jun 29 10:28:28 2009 +0000
     1.2 +++ b/branchitem.cpp	Tue Jul 07 09:34:24 2009 +0000
     1.3 @@ -7,7 +7,7 @@
     1.4  
     1.5  using namespace std;
     1.6  
     1.7 -BranchItem::BranchItem(const QList<QVariant> &data, TreeItem *parent):TreeItem (data,parent)
     1.8 +BranchItem::BranchItem(const QList<QVariant> &data, TreeItem *parent):MapItem (data,parent)
     1.9  {
    1.10  	//cout << "Constr. BranchItem\n";
    1.11  
    1.12 @@ -93,7 +93,8 @@
    1.13  		elementName="branch";
    1.14  
    1.15      s=beginElement (elementName
    1.16 -		+getAttr()
    1.17 +		+getMapAttr()
    1.18 +		+getGeneralAttr()
    1.19  		+scrolledAttr 
    1.20  	//	+areaAttr 
    1.21  	//	+idAttr 
    1.22 @@ -249,10 +250,11 @@
    1.23  	// find out, if we are scrolled at all.
    1.24  	// But ignore myself, just look at parents.
    1.25  
    1.26 +	//cout << "BI::hasScrolledParent this="<<this<<"  "<<getHeadingStd()<<endl;
    1.27  	if (this !=start && scrolled) return true;
    1.28  
    1.29  	BranchItem* bi=(BranchItem*)parentItem;
    1.30 -	if (bi && bi->isBranchLikeType() ) 
    1.31 +	if (bi && bi!=rootItem && bi->isBranchLikeType() ) 
    1.32  		return bi->hasScrolledParent(start);
    1.33  	else
    1.34  		return false;
    1.35 @@ -350,9 +352,9 @@
    1.36  {
    1.37  	// FIXME-5 compare also MapItem::initLMO...
    1.38  
    1.39 -	if (lmo)
    1.40 +	if (lmo && parentItem != rootItem)
    1.41  	{
    1.42 -		lmo->setParObj ( parentItem->getLMO() );
    1.43 +		lmo->setParObj ( ((MapItem*)parentItem)->getLMO() );
    1.44  	}
    1.45  }
    1.46  
    1.47 @@ -374,9 +376,9 @@
    1.48  		newbo->setFrameType (FrameObj::Rectangle);
    1.49  	} else
    1.50  	{
    1.51 -		newbo->setParObj( parentItem->getLMO() );
    1.52 +		newbo->setParObj( ((MapItem*)parentItem)->getLMO() );
    1.53  		// Set visibility depending on parents
    1.54 -		if (((BranchItem*)parentItem)->scrolled || !parentItem->getLMO()->isVisibleObj() )
    1.55 +		if (((BranchItem*)parentItem)->scrolled || !((MapItem*)parentItem)->getLMO()->isVisibleObj() )
    1.56  			newbo->setVisibility (false);
    1.57  	}
    1.58  	newbo->setDefAttr(BranchObj::NewBranch);
    1.59 @@ -388,7 +390,7 @@
    1.60  		newbo->setColor (headingColor);
    1.61  	}	
    1.62  		
    1.63 -	//newbo->updateLink();	//FIXME-3
    1.64 +	//newbo->updateLinkGeometry();	//FIXME-3
    1.65  
    1.66  	return newbo;
    1.67  }
     2.1 --- a/branchitem.h	Mon Jun 29 10:28:28 2009 +0000
     2.2 +++ b/branchitem.h	Tue Jul 07 09:34:24 2009 +0000
     2.3 @@ -1,23 +1,24 @@
     2.4  #ifndef BRANCHITEM_H
     2.5  #define BRANCHITEM_H
     2.6  
     2.7 -#include "treeitem.h"
     2.8 +//#include "treeitem.h"
     2.9 +#include "mapitem.h"
    2.10  
    2.11  
    2.12  class QString;
    2.13  class BranchObj;
    2.14  class QGraphicsScene;
    2.15  
    2.16 -class BranchItem:public TreeItem
    2.17 +class BranchItem:public MapItem
    2.18  {
    2.19  public:
    2.20      BranchItem(const QList<QVariant> &data, TreeItem *parent = 0);
    2.21      virtual ~BranchItem();
    2.22 -	void copy (BranchItem *item);
    2.23 +	virtual void copy (BranchItem *item);
    2.24  
    2.25 -	void insertBranch (int pos,BranchItem *branch);
    2.26 +	virtual void insertBranch (int pos,BranchItem *branch);
    2.27  
    2.28 -	QString saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset);
    2.29 +	virtual QString saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset);
    2.30  
    2.31  	virtual void updateVisibility();
    2.32  
     3.1 --- a/branchobj.cpp	Mon Jun 29 10:28:28 2009 +0000
     3.2 +++ b/branchobj.cpp	Tue Jul 07 09:34:24 2009 +0000
     3.3 @@ -146,7 +146,7 @@
     3.4  
     3.5  	// FIXME-2 depth=parObj->getDepth()+1;
     3.6  
     3.7 -	// setLinkStyle calls updateLink, only set it once
     3.8 +	// setLinkStyle calls updateLinkGeometry, only set it once
     3.9  	if (style!=getDefLinkStyle() ) setLinkStyle (getDefLinkStyle());
    3.10  
    3.11  	// Move temporary to new position at destination
    3.12 @@ -190,7 +190,7 @@
    3.13  			move (o->getChildPos().x() + linkwidth, y );
    3.14  	}	
    3.15  
    3.16 -	// updateLink is called implicitly in move
    3.17 +	// updateLinkGeometry is called implicitly in move
    3.18  	requestReposition();	
    3.19  }
    3.20  
    3.21 @@ -203,7 +203,7 @@
    3.22  		parObjTmpBuf=NULL;
    3.23  		//FIXME-2 depth=parObj->getDepth()+1;
    3.24  		setLinkStyle (getDefLinkStyle() );
    3.25 -		updateLink();
    3.26 +		updateLinkGeometry();
    3.27  	}		
    3.28  }
    3.29  
    3.30 @@ -397,7 +397,7 @@
    3.31  		childPos.setY( clickBox.topLeft().y() + clickBox.height()/2 );
    3.32  		parPos=childPos;		
    3.33  		for (int i=0; i<treeItem->branchCount(); ++i)
    3.34 -			treeItem->getBranchObjNum(i)->updateLink();
    3.35 +			treeItem->getBranchObjNum(i)->updateLinkGeometry();
    3.36  
    3.37  	} else
    3.38  	{
    3.39 @@ -702,7 +702,7 @@
    3.40  */
    3.41  
    3.42  	setOrientation();
    3.43 -	//updateLink();
    3.44 +	//updateLinkGeometry();
    3.45  
    3.46  	if (depth==1 && parObj)
    3.47  	{
    3.48 @@ -788,7 +788,7 @@
    3.49  		// changes its height,
    3.50  		// all upper LMOs have to change, too.
    3.51  		calcBBoxSizeWithChildren();
    3.52 -		updateLink();	// This update is needed if the scene is resized 
    3.53 +		updateLinkGeometry();	// This update is needed if the scene is resized 
    3.54  						// due to excessive moving of a FIO
    3.55  
    3.56  	    alignRelativeTo ( QPointF (absPos.x(),
     4.1 --- a/branchpropwindow.cpp	Mon Jun 29 10:28:28 2009 +0000
     4.2 +++ b/branchpropwindow.cpp	Tue Jul 07 09:34:24 2009 +0000
     4.3 @@ -2,6 +2,7 @@
     4.4  
     4.5  #include <QColorDialog>
     4.6  
     4.7 +#include "branchitem.h"
     4.8  #include "frameobj.h"
     4.9  #include "settings.h"
    4.10  
    4.11 @@ -63,7 +64,7 @@
    4.12  	branch=bo;
    4.13  	if (bo) 
    4.14  	{
    4.15 -		qWarning ("BPW::setBranch");
    4.16 +		BranchItem *bi=(BranchItem*)(bo->getTreeItem());
    4.17  		ui.tabWidget->setEnabled (true);
    4.18  
    4.19  		// Frame
    4.20 @@ -109,7 +110,7 @@
    4.21  		}	
    4.22  		
    4.23  		// Link
    4.24 -		if (branch->getHideLinkUnselected())
    4.25 +		if (bi->getHideLinkUnselected())
    4.26  			ui.hideLinkIfUnselected->setCheckState (Qt::Checked);
    4.27  		else	
    4.28  			ui.hideLinkIfUnselected->setCheckState (Qt::Unchecked);
     5.1 --- a/floatobj.cpp	Mon Jun 29 10:28:28 2009 +0000
     5.2 +++ b/floatobj.cpp	Tue Jul 07 09:34:24 2009 +0000
     5.3 @@ -30,13 +30,15 @@
     5.4  //   cout << "Destr FloatObj\n";
     5.5  }
     5.6  
     5.7 +#include <iostream>
     5.8 +using namespace std;
     5.9  void FloatObj::init () 
    5.10  {
    5.11  	floatExport=true;
    5.12  	zPlane=Z_ICON;
    5.13  	setLinkStyle (LinkableMapObj::Parabel);
    5.14 -	setHideLinkUnselected(false);
    5.15  	//FIXME-2 setHideLinkUnselected(true);
    5.16 +	cout << "FO::init  tI="<<treeItem<<endl;
    5.17  }
    5.18  
    5.19  void FloatObj::copy (FloatObj* other)
    5.20 @@ -84,7 +86,7 @@
    5.21  void FloatObj::reposition()
    5.22  {
    5.23  	move2RelPos (relPos);
    5.24 -	updateLink();	
    5.25 +	updateLinkGeometry();	
    5.26  }
    5.27  
    5.28  QRectF FloatObj::getTotalBBox()
     6.1 --- a/imageitem.cpp	Mon Jun 29 10:28:28 2009 +0000
     6.2 +++ b/imageitem.cpp	Tue Jul 07 09:34:24 2009 +0000
     6.3 @@ -14,7 +14,7 @@
     6.4  	init();
     6.5  }
     6.6  
     6.7 -ImageItem::ImageItem (const QList<QVariant> &data, TreeItem *parent):TreeItem (data,parent)
     6.8 +ImageItem::ImageItem (const QList<QVariant> &data, TreeItem *parent):MapItem (data,parent)
     6.9  {
    6.10  	init();
    6.11  }
    6.12 @@ -29,6 +29,7 @@
    6.13  {
    6.14  	type=Image;
    6.15  	imageType=Undefined;
    6.16 +	hideLinkUnselected=true;
    6.17  	originalFilename="no original name available";
    6.18  	zValue=Z_FLOATIMG;
    6.19  	posMode=Relative;
    6.20 @@ -56,8 +57,8 @@
    6.21  	FloatImageObj *fio=new FloatImageObj (scene);
    6.22  	fio->setTreeItem (this);
    6.23  	lmo=fio;
    6.24 -	fio->setParObj ( parentItem->getLMO());
    6.25 -	if (((BranchItem*)parentItem)->isScrolled() || !parentItem->getLMO()->isVisibleObj() )
    6.26 +	fio->setParObj ( ((MapItem*)parentItem)->getLMO());
    6.27 +	if (((BranchItem*)parentItem)->isScrolled() || !((MapItem*)parentItem)->getLMO()->isVisibleObj() )
    6.28  			fio->setVisibility (false);
    6.29  	initLMO();
    6.30  	fio->setZValue(zValue);
    6.31 @@ -136,7 +137,8 @@
    6.32  	QString nameAttr=attribut ("originalName",originalFilename);
    6.33  
    6.34      return singleElement ("floatimage",  
    6.35 -		getAttr() 
    6.36 +		getMapAttr() 
    6.37 +		+getGeneralAttr()
    6.38  //		+useOrientAttr 
    6.39  //		+saveInMapAttr 
    6.40  //		+exportAttr  
     7.1 --- a/imageitem.h	Mon Jun 29 10:28:28 2009 +0000
     7.2 +++ b/imageitem.h	Tue Jul 07 09:34:24 2009 +0000
     7.3 @@ -6,10 +6,11 @@
     7.4  #include <QVariant>
     7.5  
     7.6  #include "floatimageobj.h"
     7.7 -#include "treeitem.h"
     7.8 +//#include "treeitem.h"
     7.9 +#include "mapitem.h"
    7.10  
    7.11  
    7.12 -class ImageItem: public TreeItem
    7.13 +class ImageItem: public MapItem
    7.14  {
    7.15  public:
    7.16  	enum ImageType {Undefined,Pixmap,SVG};
     8.1 --- a/linkablemapobj.cpp	Mon Jun 29 10:28:28 2009 +0000
     8.2 +++ b/linkablemapobj.cpp	Tue Jul 07 09:34:24 2009 +0000
     8.3 @@ -79,11 +79,6 @@
     8.4      bottomline->setZValue(Z_LINK);
     8.5      bottomline->show();
     8.6  
     8.7 -    // Prepare showing the selection of a MapObj
     8.8 -    selected=false;
     8.9 -
    8.10 -	hideLinkUnselected=false;
    8.11 -
    8.12  	topPad=botPad=leftPad=rightPad=0;
    8.13  
    8.14  	repositionRequest=false;
    8.15 @@ -287,16 +282,10 @@
    8.16  	return style;
    8.17  }
    8.18  
    8.19 -void LinkableMapObj::setHideLinkUnselected(bool b)
    8.20 +void LinkableMapObj::setHideLinkUnselected()
    8.21  {
    8.22 -	hideLinkUnselected=b;
    8.23  	setVisibility (visible);
    8.24 -	updateLink();
    8.25 -}
    8.26 -
    8.27 -bool LinkableMapObj::getHideLinkUnselected()
    8.28 -{
    8.29 -	return hideLinkUnselected;
    8.30 +	updateLinkGeometry();
    8.31  }
    8.32  
    8.33  void LinkableMapObj::setLinkPos(Position lp)
    8.34 @@ -353,10 +342,40 @@
    8.35  void LinkableMapObj::setVisibility (bool v)
    8.36  {
    8.37  	MapObj::setVisibility (v);
    8.38 +	updateVisibility();
    8.39 +}
    8.40 +
    8.41 +void LinkableMapObj::setOrientation()
    8.42 +{
    8.43 +	Orientation orientOld=orientation;
    8.44 +
    8.45 +	if (!parObj) 
    8.46 +	{
    8.47 +		orientation=UndefinedOrientation;
    8.48 +		return;
    8.49 +	}
    8.50 +		
    8.51 +    // Set orientation, first look for orientation of parent
    8.52 +    if (parObj->getOrientation() != UndefinedOrientation ) 
    8.53 +		// use the orientation of the parent:
    8.54 +		orientation=parObj->getOrientation();
    8.55 +    else
    8.56 +    {
    8.57 +		// calc orientation depending on position rel to parent
    8.58 +		if (absPos.x() < QPointF(parObj->getChildPos() ).x() )
    8.59 +			orientation=LeftOfCenter; 
    8.60 +		else
    8.61 +			orientation=RightOfCenter;
    8.62 +    }
    8.63 +	if (orientOld!=orientation) requestReposition();
    8.64 +}
    8.65 +
    8.66 +void LinkableMapObj::updateVisibility()
    8.67 +{
    8.68  	bool visnow=visible;
    8.69  
    8.70 -	// We can hide the link, while object is not selected
    8.71 -	if (hideLinkUnselected && !selected)
    8.72 +	if (((MapItem*)treeItem)->getHideLinkUnselected()
    8.73 +		&& treeItem->getModel()->getSelectedLMO() !=this)
    8.74  		visnow=false;
    8.75  
    8.76  	if (visnow) 
    8.77 @@ -372,11 +391,11 @@
    8.78  					segment.at(i)->show();
    8.79  				break;	
    8.80  			case PolyLine:
    8.81 -				if (!p) cout << "LMO::setVis p==0 (PolyLine)\n"; //FIXME-3
    8.82 +				if (!p) cout << "LMO::updateVis p==0 (PolyLine)\n"; //FIXME-3
    8.83  				if (p) p->show();
    8.84  				break;
    8.85  			case PolyParabel:	
    8.86 -				if (!p) cout << "LMO::setVis p==0 (PolyParabel) "<<treeItem->getHeading().toStdString()<<endl; //FIXME-3
    8.87 +				if (!p) cout << "LMO::updateVis p==0 (PolyParabel) "<<treeItem->getHeading().toStdString()<<endl; //FIXME-3
    8.88  				if (p) p->show();
    8.89  				break;
    8.90  			default:
    8.91 @@ -406,32 +425,7 @@
    8.92  	}	
    8.93  }
    8.94  
    8.95 -void LinkableMapObj::setOrientation()
    8.96 -{
    8.97 -	Orientation orientOld=orientation;
    8.98 -
    8.99 -	if (!parObj) 
   8.100 -	{
   8.101 -		orientation=UndefinedOrientation;
   8.102 -		return;
   8.103 -	}
   8.104 -		
   8.105 -    // Set orientation, first look for orientation of parent
   8.106 -    if (parObj->getOrientation() != UndefinedOrientation ) 
   8.107 -		// use the orientation of the parent:
   8.108 -		orientation=parObj->getOrientation();
   8.109 -    else
   8.110 -    {
   8.111 -		// calc orientation depending on position rel to parent
   8.112 -		if (absPos.x() < QPointF(parObj->getChildPos() ).x() )
   8.113 -			orientation=LeftOfCenter; 
   8.114 -		else
   8.115 -			orientation=RightOfCenter;
   8.116 -    }
   8.117 -	if (orientOld!=orientation) requestReposition();
   8.118 -}
   8.119 -
   8.120 -void LinkableMapObj::updateLink()
   8.121 +void LinkableMapObj::updateLinkGeometry()
   8.122  {
   8.123      // needs:
   8.124      //	childPos of parent
   8.125 @@ -445,7 +439,7 @@
   8.126  	//  bottomlineY
   8.127      //	drawing of the link itself
   8.128  
   8.129 -	// updateLink is called from move, but called from constructor we don't
   8.130 +	// updateLinkGeometry is called from move, but called from constructor we don't
   8.131  	// have parents yet...
   8.132  
   8.133  	if (!parObj)	
   8.134 @@ -456,7 +450,7 @@
   8.135  		parPos=childPos;		
   8.136  		// Redraw links to children
   8.137  		for (int i=0; i<treeItem->branchCount(); ++i)
   8.138 -			treeItem->getBranchObjNum(i)->updateLink();
   8.139 +			treeItem->getBranchObjNum(i)->updateLinkGeometry();
   8.140  		return;	
   8.141  	}
   8.142  
   8.143 @@ -511,7 +505,6 @@
   8.144  	switch (style)
   8.145  	{
   8.146  		case Line:
   8.147 -			//l->prepareGeometryChange();
   8.148  			l->setLine( QLine(qRound (parPos.x()),
   8.149  				qRound(parPos.y()),
   8.150  				qRound(p2x),
   8.151 @@ -520,17 +513,13 @@
   8.152  		case Parabel:	
   8.153  			parabel (pa0, p1x,p1y,p2x,p2y);
   8.154  			for (int i=0; i<segment.size(); ++i)
   8.155 -			{
   8.156 -				//segment.at(i)->prepareGeometryChange();
   8.157  				segment.at(i)->setLine(QLineF( pa0.at(i).x(), pa0.at(i).y(),pa0.at(i+1).x(),pa0.at(i+1).y()));
   8.158 -			}	
   8.159  			break;
   8.160  		case PolyLine:
   8.161  			pa0.clear();
   8.162  			pa0<<QPointF (qRound(p2x+tp.x()), qRound(p2y+tp.y()));
   8.163  			pa0<<QPointF (qRound(p2x-tp.x()), qRound(p2y-tp.y()));
   8.164  			pa0<<QPointF (qRound (parPos.x()), qRound(parPos.y()) );
   8.165 -			//p->prepareGeometryChange();
   8.166  			p->setPolygon(QPolygonF (pa0));
   8.167  			break;
   8.168  		case PolyParabel:	
   8.169 @@ -541,12 +530,11 @@
   8.170  				pa0 << QPointF (pa1.at(i));
   8.171  			for (int i=0;i<=arcsegs;i++)
   8.172  				pa0 << QPointF (pa2.at(arcsegs-i));
   8.173 -			//p->prepareGeometryChange();
   8.174  			p->setPolygon(QPolygonF (pa0));
   8.175  			break;
   8.176  		default:
   8.177  			break;
   8.178 -	} // switch (style)	
   8.179 +	} 
   8.180  }
   8.181  	
   8.182  LinkableMapObj* LinkableMapObj::getParObj()
   8.183 @@ -626,23 +614,6 @@
   8.184  	return repositionRequest;
   8.185  }
   8.186  
   8.187 -
   8.188 -void LinkableMapObj::select()
   8.189 -{
   8.190 -	// select and unselect are still needed to
   8.191 -	// handle hiding of links
   8.192 -    selected=true;
   8.193 -	setVisibility (visible);
   8.194 -}
   8.195 -
   8.196 -
   8.197 -void LinkableMapObj::unselect()
   8.198 -{
   8.199 -    selected=false;
   8.200 -	// Maybe we have to hide the link:
   8.201 -	setVisibility (visible);
   8.202 -}
   8.203 -
   8.204  void LinkableMapObj::parabel (QPolygonF &ya, double p1x, double p1y, double p2x, double p2y)
   8.205  
   8.206  {
   8.207 @@ -672,12 +643,3 @@
   8.208  	}	
   8.209  }
   8.210  
   8.211 -QString LinkableMapObj::getLinkAttr ()
   8.212 -{
   8.213 -	if (hideLinkUnselected)
   8.214 -		return attribut ("hideLink","true");
   8.215 -	else
   8.216 -		return attribut ("hideLink","false");
   8.217 -	
   8.218 -}
   8.219 -
     9.1 --- a/linkablemapobj.h	Mon Jun 29 10:28:28 2009 +0000
     9.2 +++ b/linkablemapobj.h	Tue Jul 07 09:34:24 2009 +0000
     9.3 @@ -79,19 +79,23 @@
     9.4  	Style getDefLinkStyle();
     9.5      void setLinkStyle(Style);            
     9.6  	Style getLinkStyle();
     9.7 -	void setHideLinkUnselected(bool);
     9.8 -	bool getHideLinkUnselected();
     9.9 +
    9.10 +	void setHideLinkUnselected();
    9.11  	void setLinkPos (Position);
    9.12  	Position getLinkPos ();
    9.13  
    9.14 -	virtual void setLinkColor();					// sets color according to colorhint, overloaded
    9.15 +	virtual void setLinkColor();			// sets color according to colorhint, overloaded
    9.16  	virtual void setLinkColor(QColor);
    9.17  	QColor getLinkColor();
    9.18  	virtual void setVisibility (bool);
    9.19  	virtual void setOrientation();
    9.20 -    virtual void updateLink();				// update parPos and childPos
    9.21 -											// depending on pos
    9.22 -											// redraw link with given style
    9.23 +    virtual void updateVisibility();		//! hides/unhides link depending on selection
    9.24 +
    9.25 +    /*! update parPos, childPos 
    9.26 +		depending on pos
    9.27 +		redraw link with given style */
    9.28 +    virtual void updateLinkGeometry();		
    9.29 +
    9.30      LinkableMapObj* getChildObj();			// returns pointer to fromObj
    9.31      LinkableMapObj* getParObj();			// returns pointer to toObj
    9.32  	virtual void setDockPos()=0;				// sets childPos and parPos
    9.33 @@ -108,12 +112,8 @@
    9.34  
    9.35  	virtual void calcBBoxSizeWithChildren()=0;// calc size of  BBox including children recursivly
    9.36  
    9.37 -    virtual void select();					// FIXME-3  show/hide links...
    9.38 -    virtual void unselect();
    9.39 -
    9.40  protected:
    9.41  	void parabel(QPolygonF &,double,double,double,double);	// Create Parabel connecting two points
    9.42 -	QString getLinkAttr();
    9.43  
    9.44      QPointF childPos;
    9.45      QPointF parPos;
    9.46 @@ -142,8 +142,6 @@
    9.47      QGraphicsLineItem* bottomline;  // on bottom of BBox
    9.48  	bool repositionRequest;			// 
    9.49  
    9.50 -	bool selected;					// Used for marking the selection
    9.51 -	bool hideLinkUnselected;		// to hide links if unselected
    9.52  	qreal topPad, botPad,
    9.53  		leftPad, rightPad;          // padding within bbox
    9.54  
    10.1 --- a/mapeditor.cpp	Mon Jun 29 10:28:28 2009 +0000
    10.2 +++ b/mapeditor.cpp	Tue Jul 07 09:34:24 2009 +0000
    10.3 @@ -189,7 +189,7 @@
    10.4  		LinkableMapObj* lmo=NULL;
    10.5  		TreeItem *ti= static_cast<TreeItem*>(index.internalPointer());
    10.6  		if (ti->getType()==TreeItem::Image ||ti->isBranchLikeType() )
    10.7 -			lmo=ti->getLMO();
    10.8 +			lmo=((MapItem*)ti)->getLMO();
    10.9  		if (lmo) setScrollBarPosTarget (lmo->getBBox() );
   10.10  	}
   10.11  }
   10.12 @@ -599,7 +599,7 @@
   10.13      QPointF p = mapToScene(e->pos());
   10.14      TreeItem *ti=findMapItem (p, NULL);
   10.15      LinkableMapObj* lmo=NULL;
   10.16 -	if (ti) lmo=ti->getLMO();
   10.17 +	if (ti) lmo=((MapItem*)ti)->getLMO();
   10.18  	
   10.19      if (lmo) 
   10.20  	{	// MapObj was found
   10.21 @@ -683,7 +683,7 @@
   10.22      QPointF p = mapToScene(e->pos());
   10.23      TreeItem *ti=findMapItem (p, NULL);
   10.24      LinkableMapObj* lmo=NULL;
   10.25 -	if (ti) lmo=ti->getLMO();
   10.26 +	if (ti) lmo=((MapItem*)ti)->getLMO();
   10.27  	
   10.28  	e->accept();
   10.29  
   10.30 @@ -818,7 +818,7 @@
   10.31  	TreeItem *seli=model->getSelectedItem();
   10.32  	LinkableMapObj* lmosel=NULL;	
   10.33  	if (seli && (seli->isBranchLikeType() ||seli->getType()==TreeItem::Image))
   10.34 -		lmosel=seli->getLMO();
   10.35 +		lmosel=((MapItem*)seli)->getLMO();
   10.36  
   10.37      // Move the selected MapObj
   10.38      if ( lmosel && movingObj) 
   10.39 @@ -854,7 +854,7 @@
   10.40  			FloatObj *fio=(FloatImageObj*)lmosel;
   10.41  			fio->move   (p.x() -movingObj_start.x(), p.y()-movingObj_start.y() );		
   10.42  			fio->setRelPos();
   10.43 -			fio->updateLink(); //no need for reposition, if we update link here
   10.44 +			fio->updateLinkGeometry(); //no need for reposition, if we update link here
   10.45  			model->emitSelectionChanged();	// position has changed
   10.46  
   10.47  			// Relink float to new mapcenter or branch, if shift is pressed	
   10.48 @@ -968,7 +968,7 @@
   10.49  	if (seli) dsti=findMapItem(p, seli);
   10.50  	LinkableMapObj* dst=NULL;
   10.51  	if (dsti && dsti->isBranchLikeType ()) 
   10.52 -		dst=dsti->getLMO();	
   10.53 +		dst=((MapItem*)dsti)->getLMO();	
   10.54  	else
   10.55  		dsti=NULL;
   10.56  
   10.57 @@ -1013,7 +1013,7 @@
   10.58      {	
   10.59  		if (seli->getType()==TreeItem::Image)
   10.60  		{
   10.61 -			FloatImageObj *fio=(FloatImageObj*)(seli->getLMO());
   10.62 +			FloatImageObj *fio=(FloatImageObj*)( ((MapItem*)seli)->getLMO());
   10.63  			if(fio)
   10.64  			{
   10.65  				// Moved FloatObj. Maybe we need to reposition
   10.66 @@ -1051,7 +1051,7 @@
   10.67  		if (seli->isBranchLikeType() ) //(seli->getType() == TreeItem::Branch )
   10.68  		{	// A branch was moved
   10.69  			LinkableMapObj* lmosel=NULL;		
   10.70 -			lmosel=seli->getLMO();
   10.71 +			lmosel=((MapItem*)seli)->getLMO();
   10.72  				
   10.73  			// save the position in case we link to mapcenter
   10.74  			QPointF savePos=QPointF (lmosel->getAbsPos()  );
   10.75 @@ -1272,6 +1272,9 @@
   10.76  
   10.77  void MapEditor::updateSelection(QItemSelection newsel,QItemSelection oldsel)
   10.78  {
   10.79 +	// Note: Here we are prepared for multiple selections, though this 
   10.80 +	// is not yet implemented elsewhere
   10.81 +
   10.82  	// Here in MapEditor we can only select Branches and Images
   10.83  	QModelIndex ix;
   10.84  	foreach (ix,newsel.indexes() )
   10.85 @@ -1281,6 +1284,7 @@
   10.86  			newsel.indexes().removeOne (ix);
   10.87  	}
   10.88  
   10.89 +	// Trim list of selection rectangles 
   10.90  	while (newsel.indexes().count() < selboxList.count() )
   10.91  		delete selboxList.takeFirst();
   10.92  
   10.93 @@ -1291,10 +1295,17 @@
   10.94  		if (ix.isValid() )
   10.95  		{
   10.96  			TreeItem *ti= static_cast<TreeItem*>(ix.internalPointer());
   10.97 -			if (ti && ti->isBranchLikeType() )
   10.98 +			if (ti)
   10.99  			{
  10.100 -				BranchItem *bi=(BranchItem*)ti;
  10.101 -				bi->resetTmpUnscroll();
  10.102 +				if (ti->isBranchLikeType() )
  10.103 +				{
  10.104 +					// reset tmp scrolled branches
  10.105 +					BranchItem *bi=(BranchItem*)ti;
  10.106 +					bi->resetTmpUnscroll();
  10.107 +				}
  10.108 +				if (ti->isBranchLikeType() || ti->getType()==TreeItem::Image)
  10.109 +					// Hide link if not needed
  10.110 +					((MapItem*)ti)->getLMO()->updateVisibility();
  10.111  			}
  10.112  		}
  10.113  	}
  10.114 @@ -1313,6 +1324,9 @@
  10.115  					bi->tmpUnscroll();
  10.116  			}
  10.117  			scrollTo (ix);
  10.118 +			if (ti->isBranchLikeType() || ti->getType()==TreeItem::Image)
  10.119 +				// Show link if needed
  10.120 +				((MapItem*)ti)->getLMO()->updateVisibility();
  10.121  		}
  10.122  	}
  10.123  
  10.124 @@ -1344,7 +1358,7 @@
  10.125  	{
  10.126  		index=newsel.indexes().at(i);
  10.127  		ti= static_cast<TreeItem*>(index.internalPointer());
  10.128 -		lmo=ti->getLMO();
  10.129 +		lmo=((MapItem*)ti)->getLMO();
  10.130  		bbox=lmo->getBBox();
  10.131  		sb->setRect (
  10.132  			bbox.x(),bbox.y(), 
  10.133 @@ -1370,7 +1384,7 @@
  10.134  	
  10.135  	if (ti->isBranchLikeType())
  10.136  	{
  10.137 -		BranchObj *bo=(BranchObj*) (ti->getLMO());
  10.138 +		BranchObj *bo=(BranchObj*) ( ((MapItem*)ti)->getLMO());
  10.139  		bo->updateData();
  10.140  	}
  10.141  
    11.1 --- a/mapitem.cpp	Mon Jun 29 10:28:28 2009 +0000
    11.2 +++ b/mapitem.cpp	Tue Jul 07 09:34:24 2009 +0000
    11.3 @@ -8,10 +8,32 @@
    11.4  	init();
    11.5  }
    11.6  
    11.7 +MapItem::MapItem(const QList<QVariant> &data, TreeItem *parent):TreeItem (data,parent)
    11.8 +{
    11.9 +	init();
   11.10 +}
   11.11 +
   11.12  void MapItem::init()
   11.13  {
   11.14  	lmo=NULL;
   11.15  	posMode=Unused;
   11.16 +	hideLinkUnselected=false;
   11.17 +}
   11.18 +
   11.19 +void MapItem::appendChild (TreeItem *item)
   11.20 +{
   11.21 +	TreeItem::appendChild (item);
   11.22 +
   11.23 +	// FIXME-4 maybe access parent in MapObjs directly via treeItem
   11.24 +	// and remove this here...
   11.25 +
   11.26 +	// If lmo exists, also set parObj there
   11.27 +	if (lmo && (item->isBranchLikeType() || item->getType()==TreeItem::Image) )
   11.28 +	{
   11.29 +		LinkableMapObj *itemLMO=((MapItem*)item)->lmo;
   11.30 +		if (itemLMO)
   11.31 +			itemLMO->setParObj (lmo);
   11.32 +	}
   11.33  }
   11.34  
   11.35  void MapItem::setRelPos (const QPointF &p)
   11.36 @@ -37,6 +59,51 @@
   11.37  	posMode=mode;
   11.38  }
   11.39  
   11.40 +void MapItem::setHideLinkUnselected (bool b)
   11.41 +{
   11.42 +	hideLinkUnselected=b;
   11.43 +	if (lmo) lmo->setHideLinkUnselected();
   11.44 +}
   11.45 +
   11.46 +bool MapItem::getHideLinkUnselected()
   11.47 +{
   11.48 +	return hideLinkUnselected;
   11.49 +}	
   11.50 +
   11.51 +QString MapItem::getMapAttr ()	
   11.52 +{
   11.53 +	QString s;
   11.54 +
   11.55 +	if (parentItem==rootItem)
   11.56 +		posMode=Absolute;
   11.57 +	else
   11.58 +	{
   11.59 +		if (type==TreeItem::Image ||depth()==1)
   11.60 +			posMode=Relative;
   11.61 +		else
   11.62 +			posMode=Unused;
   11.63 +	}
   11.64 +	switch (posMode)
   11.65 +	{
   11.66 +		case Relative:	
   11.67 +			if (lmo) pos=lmo->getRelPos();
   11.68 +			s= attribut("relPosX",QString().setNum(pos.x())) +
   11.69 +			   attribut("relPosY",QString().setNum(pos.y())); 
   11.70 +			break;
   11.71 +		case Absolute:	
   11.72 +			if (lmo) pos=lmo->getAbsPos();
   11.73 +			s=attribut("absPosX",QString().setNum(pos.x())) +
   11.74 +			  attribut("absPosY",QString().setNum(pos.y())); 
   11.75 +			break;
   11.76 +		default: break;
   11.77 +	}
   11.78 +	if (hideLinkUnselected)
   11.79 +		s+=attribut ("hideLink","true");
   11.80 +	else
   11.81 +		s+=attribut ("hideLink","false");
   11.82 +	return s;
   11.83 +}
   11.84 +
   11.85  LinkableMapObj* MapItem::getLMO()
   11.86  {
   11.87  	return lmo;
    12.1 --- a/mapitem.h	Mon Jun 29 10:28:28 2009 +0000
    12.2 +++ b/mapitem.h	Tue Jul 07 09:34:24 2009 +0000
    12.3 @@ -3,7 +3,8 @@
    12.4  
    12.5  #include <QPointF>
    12.6  
    12.7 -#include "xmlobj.h"
    12.8 +//#include "xmlobj.h"
    12.9 +#include "treeitem.h"
   12.10  
   12.11  class LinkableMapObj;
   12.12  
   12.13 @@ -15,7 +16,7 @@
   12.14  	but just a treeview instead.
   12.15  */
   12.16  
   12.17 -class MapItem:public XMLObj
   12.18 +class MapItem:public TreeItem
   12.19  {
   12.20  public:
   12.21  	enum PositionMode {Unused,Absolute,Relative};
   12.22 @@ -25,8 +26,13 @@
   12.23  
   12.24  public:
   12.25  	MapItem();
   12.26 +	MapItem(const QList<QVariant> &data, TreeItem *parent = 0);
   12.27 +
   12.28  	void init();
   12.29  
   12.30 +	/*! Overloaded from TreeItem. Used to set parObj in LinkableMapObj */
   12.31 +	virtual void appendChild (TreeItem *item);
   12.32 +
   12.33  	/*! Used to save relative position while map is not in QGraphicsView */
   12.34  	virtual void setRelPos(const QPointF&);	
   12.35  
   12.36 @@ -37,6 +43,20 @@
   12.37  	    Defaulst is MapItem::Unused */
   12.38  	void setPositionMode (PositionMode mode);
   12.39  
   12.40 +
   12.41 +protected:
   12.42 +	bool hideLinkUnselected;
   12.43 +public:
   12.44 +	/*! Hide link if item is not selected */
   12.45 +	virtual void setHideLinkUnselected(bool);
   12.46 +
   12.47 +	/*! Check if link is hidden for unselected items */
   12.48 +	virtual bool getHideLinkUnselected();
   12.49 +
   12.50 +	virtual QString getMapAttr();	//! Get attributes for saving as XML
   12.51 +
   12.52 +
   12.53 +
   12.54  protected:
   12.55  	LinkableMapObj *lmo;
   12.56  public:
    13.1 --- a/ornamentedobj.cpp	Mon Jun 29 10:28:28 2009 +0000
    13.2 +++ b/ornamentedobj.cpp	Tue Jul 07 09:34:24 2009 +0000
    13.3 @@ -190,7 +190,7 @@
    13.4  {
    13.5  	MapObj::move (x,y);
    13.6  	positionContents();
    13.7 -	updateLink();
    13.8 +	updateLinkGeometry();
    13.9  	requestReposition();
   13.10  }
   13.11  
   13.12 @@ -207,7 +207,7 @@
   13.13      systemFlags->moveBy (x,y);
   13.14      standardFlags->moveBy (x,y);
   13.15      heading->moveBy (x,y);
   13.16 -	updateLink();
   13.17 +	updateLinkGeometry();
   13.18  	requestReposition();
   13.19  }
   13.20  
    14.1 --- a/treeitem.cpp	Mon Jun 29 10:28:28 2009 +0000
    14.2 +++ b/treeitem.cpp	Tue Jul 07 09:34:24 2009 +0000
    14.3 @@ -124,10 +124,6 @@
    14.4  	item->rootItem=rootItem;
    14.5  	item->setModel (model);
    14.6  
    14.7 -	// If lmo exists, also set parObj there
    14.8 -	if (lmo && item->lmo)
    14.9 -		item->lmo->setParObj (lmo);
   14.10 -
   14.11  	if (item->type == Image)
   14.12  	{
   14.13  		childItems.insert (imageCounter,item);
   14.14 @@ -609,6 +605,7 @@
   14.15  		return NULL;
   14.16  }
   14.17  
   14.18 +
   14.19  void TreeItem::setHideTmp (HideTmpMode mode)
   14.20  {
   14.21  	if (isBranchLikeType() )
   14.22 @@ -690,37 +687,12 @@
   14.23  	return hidden;
   14.24  }	
   14.25  
   14.26 -QString TreeItem::getAttr()
   14.27 +QString TreeItem::getGeneralAttr()
   14.28  {
   14.29 -	QString s;
   14.30 -	if (parentItem==rootItem)
   14.31 -		posMode=Absolute;
   14.32 +	if (hideExport)
   14.33 +		 return attribut("hideInExport","true");
   14.34  	else
   14.35 -	{
   14.36 -		if (type==TreeItem::Image ||depth()==1)
   14.37 -			posMode=Relative;
   14.38 -		else
   14.39 -			posMode=Unused;
   14.40 -	}
   14.41 -	switch (posMode)
   14.42 -	{
   14.43 -		case Relative:	
   14.44 -			if (lmo) pos=lmo->getRelPos();
   14.45 -			s= attribut("relPosX",QString().setNum(pos.x())) +
   14.46 -			   attribut("relPosY",QString().setNum(pos.y())); 
   14.47 -			break;
   14.48 -		case Absolute:	
   14.49 -			if (lmo) pos=lmo->getAbsPos();
   14.50 -			s=attribut("absPosX",QString().setNum(pos.x())) +
   14.51 -			  attribut("absPosY",QString().setNum(pos.y())); 
   14.52 -			break;
   14.53 -		default: break;
   14.54 -	}
   14.55 -	if (hideExport)
   14.56 -		return s+attribut("hideInExport","true");
   14.57 -	else	
   14.58 -		return s;
   14.59 +		return QString();
   14.60  }
   14.61  
   14.62  
   14.63 -
    15.1 --- a/treeitem.h	Mon Jun 29 10:28:28 2009 +0000
    15.2 +++ b/treeitem.h	Tue Jul 07 09:34:24 2009 +0000
    15.3 @@ -6,7 +6,7 @@
    15.4  #include <QVariant>
    15.5  
    15.6  #include "flagrow.h"
    15.7 -#include "mapitem.h"
    15.8 +//#include "mapitem.h"
    15.9  #include "noteobj.h"
   15.10  #include "xmlobj.h"
   15.11  
   15.12 @@ -17,7 +17,7 @@
   15.13  class ImageItem;
   15.14  class VymModel;
   15.15  
   15.16 -class TreeItem:public MapItem
   15.17 +class TreeItem:public XMLObj
   15.18  {
   15.19  public:
   15.20  	enum Type {Undefined,MapCenter,Branch,Image};	//FIXME-3 MapCenter still needed?
   15.21 @@ -157,6 +157,7 @@
   15.22  
   15.23  	virtual ImageItem* getImageNum(const int &n);
   15.24  	virtual FloatImageObj* getImageObjNum(const int &n);
   15.25 +
   15.26  protected:
   15.27  	bool hideExport;							//! Hide this item in export
   15.28  public:
   15.29 @@ -165,8 +166,8 @@
   15.30  	virtual void setHideInExport(bool);		// set export of object (and children)
   15.31  	virtual bool hideInExport();
   15.32  	virtual bool isHidden ();		
   15.33 -	virtual QString getAttr();				//! Get attributes for saving as XML
   15.34  
   15.35 +	virtual QString getGeneralAttr();
   15.36  	
   15.37  protected:
   15.38  	VymModel *model;
    16.1 --- a/version.h	Mon Jun 29 10:28:28 2009 +0000
    16.2 +++ b/version.h	Tue Jul 07 09:34:24 2009 +0000
    16.3 @@ -7,7 +7,7 @@
    16.4  #define __VYM_VERSION "1.13.0"
    16.5  //#define __VYM_CODENAME "Codename: RC-1"
    16.6  #define __VYM_CODENAME "Codename: development version, not for production!"
    16.7 -#define __VYM_BUILD_DATE "2009-06-29"
    16.8 +#define __VYM_BUILD_DATE "2009-07-07"
    16.9  
   16.10  
   16.11  bool checkVersion(const QString &);
    17.1 --- a/vymmodel.cpp	Mon Jun 29 10:28:28 2009 +0000
    17.2 +++ b/vymmodel.cpp	Tue Jul 07 09:34:24 2009 +0000
    17.3 @@ -1623,7 +1623,7 @@
    17.4  			saveState (bi, QString("setFrameType (\"%1\")").arg(s),
    17.5  				bi, QString ("setFrameType (\"%1\")").arg(bo->getFrameTypeName()),QString ("set type of frame to %1").arg(s));
    17.6  			reposition();
    17.7 -			bo->updateLink();
    17.8 +			bo->updateLinkGeometry();
    17.9  		}
   17.10  	}
   17.11  }
   17.12 @@ -1640,7 +1640,7 @@
   17.13  				bi, QString ("setFrameType (\"%1\")").arg(s),QString ("set type of frame to %1").arg(s));
   17.14  			bo->setFrameType (s);
   17.15  			reposition();
   17.16 -			bo->updateLink();
   17.17 +			bo->updateLinkGeometry();
   17.18  		}
   17.19  	}
   17.20  }
   17.21 @@ -1688,7 +1688,7 @@
   17.22  				bi, QString ("setFramePadding (\"%1\")").arg(i),QString ("set brush color of frame to %1").arg(i));
   17.23  			bo->setFramePadding (i);
   17.24  			reposition();
   17.25 -			bo->updateLink();
   17.26 +			bo->updateLinkGeometry();
   17.27  		}	
   17.28  	}	
   17.29  }
   17.30 @@ -1705,7 +1705,7 @@
   17.31  				bi, QString ("setFrameBorderWidth (\"%1\")").arg(i),QString ("set border width of frame to %1").arg(i));
   17.32  			bo->setFrameBorderWidth (i);
   17.33  			reposition();
   17.34 -			bo->updateLink();
   17.35 +			bo->updateLinkGeometry();
   17.36  		}	
   17.37  	}	
   17.38  }
   17.39 @@ -1763,26 +1763,21 @@
   17.40  
   17.41  void VymModel::setHideLinkUnselected (bool b)//FIXME-2
   17.42  {
   17.43 -/*
   17.44 -	LinkableMapObj *sel=getSelectedLMO();
   17.45 -	if (sel &&
   17.46 -		(selectionType() == TreeItem::Branch || 
   17.47 -		selectionType() == TreeItem::MapCenter  ||
   17.48 -		selectionType() == TreeItem::Image ))
   17.49 +	TreeItem *ti=getSelectedItem();
   17.50 +	if (ti && (ti->getType()==TreeItem::Image ||ti->isBranchLikeType()))
   17.51  	{
   17.52  		QString u= b ? "false" : "true";
   17.53  		QString r=!b ? "false" : "true";
   17.54  		
   17.55  		saveState(
   17.56 -			sel,
   17.57 +			ti,
   17.58  			QString("setHideLinkUnselected (%1)").arg(u),
   17.59 -			sel, 
   17.60 +			ti, 
   17.61  			QString("setHideLinkUnselected (%1)").arg(r),
   17.62 -			QString("Hide link of %1 if unselected").arg(getObjectName(sel))
   17.63 +			QString("Hide link of %1 if unselected").arg(getObjectName(ti))
   17.64  		);	
   17.65 -		sel->setHideLinkUnselected(b);
   17.66 +		((MapItem*)ti)->setHideLinkUnselected(b);
   17.67  	}
   17.68 -*/
   17.69  }
   17.70  
   17.71  void VymModel::setHideExport(bool b)
   17.72 @@ -4283,7 +4278,7 @@
   17.73                  QString("Move %1 to relative position %2").arg(getObjectName(bo)).arg(ps));
   17.74              ((OrnamentedObj*)bo)->move2RelPos (x,y);
   17.75              reposition();
   17.76 -            bo->updateLink();
   17.77 +            bo->updateLinkGeometry();
   17.78              emitSelectionChanged();
   17.79          }
   17.80  	}
   17.81 @@ -4953,9 +4948,7 @@
   17.82  		TreeItem *ti = getItem (list.first() );
   17.83  		TreeItem::Type type=ti->getType();
   17.84  		if (type ==TreeItem::Branch || type==TreeItem::MapCenter || type==TreeItem::Image)
   17.85 -		{
   17.86 -			return ti->getLMO();
   17.87 -		}	
   17.88 +			return ((MapItem*)ti)->getLMO();
   17.89  	}
   17.90  	return NULL;
   17.91  }
   17.92 @@ -4964,7 +4957,7 @@
   17.93  {
   17.94  	TreeItem *ti = getSelectedBranchItem();
   17.95  	if (ti)
   17.96 -		return (BranchObj*)(ti->getLMO());
   17.97 +		return (BranchObj*)(  ((MapItem*)ti)->getLMO());
   17.98  	else	
   17.99  		return NULL;
  17.100  }
    18.1 --- a/xml-vym.cpp	Mon Jun 29 10:28:28 2009 +0000
    18.2 +++ b/xml-vym.cpp	Tue Jul 07 09:34:24 2009 +0000
    18.3 @@ -359,7 +359,8 @@
    18.4  	if (!readOOAttr(a)) return false;
    18.5  
    18.6  	if (!a.value( "scrolled").isEmpty() )
    18.7 -		lastBranch->toggleScroll();
    18.8 +		lastBranch->toggleScroll();	//FIXME-3 in endElement unscroll again, if branch is still empty 
    18.9 +		// (interesting for import of KDE bookmarks)
   18.10  /*
   18.11  	if (!a.value( "frameType").isEmpty() ) 
   18.12  		lastOO->setFrameType (a.value("frameType")); //Compatibility 1.8.1
   18.13 @@ -456,15 +457,13 @@
   18.14  			if (a.value("hideInExport")=="true")
   18.15  				lastBranch->setHideInExport(true);
   18.16  
   18.17 -		/* FIXME-2
   18.18  		if (!a.value( "hideLink").isEmpty()) 
   18.19  		{
   18.20  			if (a.value ("hideLink") =="true")
   18.21 -				lastOO->setHideLinkUnselected(true);
   18.22 +				lastMI->setHideLinkUnselected(true);
   18.23  			else	
   18.24 -				lastOO->setHideLinkUnselected(false);
   18.25 +				lastMI->setHideLinkUnselected(false);
   18.26  		}	
   18.27 -		*/
   18.28  	}
   18.29  	return true;	
   18.30  }