Started to use QtKinetic for Animation
authorinsilmaril
Wed May 13 08:26:27 2009 +0000 (2009-05-13)
changeset 7676d2b32f305f9
parent 766 7a71a914afdb
child 768 382a444f5b0c
Started to use QtKinetic for Animation
aboutdialog.cpp
animpoint.cpp
attribute.h
branchitem.cpp
branchitem.h
branchobj.cpp
branchobj.h
branchpropwindow.cpp
branchpropwindow.h
flagobj.cpp
flagobj.h
flagrowobj.cpp
flagrowobj.h
main.cpp
mainwindow.cpp
mainwindow.h
mapcenteritem.cpp
mapcenterobj.cpp
mapcenterobj.h
mapeditor.cpp
mapeditor.h
ornamentedobj.cpp
ornamentedobj.h
treeitem.cpp
treeitem.h
version.h
vym.pro
vymmodel.cpp
vymmodel.h
vymview.cpp
vymview.h
     1.1 --- a/aboutdialog.cpp	Thu May 07 08:48:53 2009 +0000
     1.2 +++ b/aboutdialog.cpp	Wed May 13 08:26:27 2009 +0000
     1.3 @@ -91,7 +91,7 @@
     1.4      license->setText (
     1.5  	"<center>"
     1.6  	"<h3>VYM - View Your Mind</h3>"
     1.7 -    "<p>Copyright (C) 2004-2007  Uwe Drechsel</p>"  
     1.8 +    "<p>Copyright (C) 2004-2009  Uwe Drechsel</p>"  
     1.9  	"</center>"
    1.10  
    1.11      "<p>This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.</p>"
     2.1 --- a/animpoint.cpp	Thu May 07 08:48:53 2009 +0000
     2.2 +++ b/animpoint.cpp	Wed May 13 08:26:27 2009 +0000
     2.3 @@ -115,7 +115,7 @@
     2.4  		return animated;
     2.5  	}
     2.6  
     2.7 -	// Some math slow down the movement
     2.8 +	// Some math to slow down the movement in the end
     2.9  	qreal f=1-n/animTicks;
    2.10  	qreal ff=1-f*f*f;
    2.11  	setX (startPos.x() + vector.x()*ff );
     3.1 --- a/attribute.h	Thu May 07 08:48:53 2009 +0000
     3.2 +++ b/attribute.h	Wed May 13 08:26:27 2009 +0000
     3.3 @@ -6,8 +6,8 @@
     3.4  
     3.5  #include "xmlobj.h"
     3.6  
     3.7 -class AttributeTable;
     3.8 -class AttributeDef;
     3.9 +class AttributeTable;	//FIXME-3 remove from CVS
    3.10 +class AttributeDef;		//FIXME-3 remove from CVS
    3.11  
    3.12  enum AttributeType {
    3.13  	Undefined,	//!< Undefined type
     4.1 --- a/branchitem.cpp	Thu May 07 08:48:53 2009 +0000
     4.2 +++ b/branchitem.cpp	Wed May 13 08:26:27 2009 +0000
     4.3 @@ -202,38 +202,38 @@
     4.4  	if (scrolled) toggleScroll();
     4.5  }
     4.6  
     4.7 -void BranchItem::toggleScroll()
     4.8 +bool BranchItem::toggleScroll()	
     4.9  {
    4.10 -	BranchItem *bi=getFirstBranch();
    4.11  
    4.12 +	if (!branchCount()>0) return false;
    4.13  	BranchObj *bo=NULL;
    4.14  	if (scrolled)
    4.15  	{
    4.16  		scrolled=false;
    4.17 -		//FIXME-1 systemFlags->deactivate("scrolledright");
    4.18 -		while (bi)
    4.19 +		systemFlags.deactivate("system-scrolledright");
    4.20 +		if (branchCounter>0)
    4.21  		{
    4.22 -			bo=(BranchObj*)(bi->getLMO());
    4.23 -			if (bo) bo->setVisibility(true);
    4.24 -			bi=getNextBranch(bi);
    4.25 +			for (int i=0;i<branchCounter;++i)
    4.26 +			{
    4.27 +				bo=(BranchObj*)(getBranchNum(i)->getLMO());
    4.28 +				if (bo) bo->setVisibility(true);
    4.29 +			}
    4.30  		}
    4.31 +		model->reposition();
    4.32  	} else
    4.33  	{
    4.34  		scrolled=true;
    4.35 -		//FIXME-1 systemFlags->activate("scrolledright");
    4.36 -		while (bi)
    4.37 +		systemFlags.activate("system-scrolledright");
    4.38 +		if (branchCounter>0)
    4.39  		{
    4.40 -			bo=(BranchObj*)(bi->getLMO());
    4.41 -			if (bo) bo->setVisibility(false);
    4.42 -			bi=getNextBranch(bi);
    4.43 +			for (int i=0;i<branchCounter;++i)
    4.44 +			{
    4.45 +				bo=(BranchObj*)(getBranchNum(i)->getLMO());
    4.46 +				if (bo) bo->setVisibility(false);
    4.47 +			}
    4.48  		}
    4.49  	}
    4.50 -	if (bo)
    4.51 -	{
    4.52 -		bo->calcBBoxSize();
    4.53 -		bo->positionBBox();	
    4.54 -		bo->forceReposition();
    4.55 -	}
    4.56 +	return true;
    4.57  }
    4.58  
    4.59  bool BranchItem::isScrolled()
    4.60 @@ -357,7 +357,7 @@
    4.61  
    4.62  	if (!getHeading().isEmpty() ) 
    4.63  	{
    4.64 -		newbo->updateHeading();
    4.65 +		newbo->updateData();	//FIXME-3 maybe better model->emitDataHasChanged()?
    4.66  		newbo->setColor (headingColor);
    4.67  	}	
    4.68  
     5.1 --- a/branchitem.h	Thu May 07 08:48:53 2009 +0000
     5.2 +++ b/branchitem.h	Wed May 13 08:26:27 2009 +0000
     5.3 @@ -34,7 +34,7 @@
     5.4  	bool tmpUnscrolled;		// can only be true (temporary) for a scrolled subtree
     5.5  public:
     5.6  	virtual void unScroll();				
     5.7 -	virtual void toggleScroll();			// scroll or unscroll
     5.8 +	virtual bool toggleScroll();			// scroll or unscroll
     5.9  	virtual bool isScrolled();				// returns scroll state
    5.10  	virtual bool hasScrolledParent(BranchItem*);	// true, if any of the parents is scrolled
    5.11  	virtual void tmpUnscroll();				// unscroll scrolled parents temporary e.g. during "find" process
     6.1 --- a/branchobj.cpp	Thu May 07 08:48:53 2009 +0000
     6.2 +++ b/branchobj.cpp	Wed May 13 08:26:27 2009 +0000
     6.3 @@ -6,12 +6,8 @@
     6.4  #include "mainwindow.h"
     6.5  #include "misc.h"
     6.6  
     6.7 -//class TextEditor; //FIXME-3
     6.8 -
     6.9 -//extern TextEditor *textEditor;
    6.10 -//extern Main *mainWindow;
    6.11 -//extern FlagRowObj *standardFlagsDefault;
    6.12 -
    6.13 +extern FlagRow *standardFlagsMaster;
    6.14 +extern FlagRow *systemFlagsMaster;
    6.15  
    6.16  /////////////////////////////////////////////////////////////////
    6.17  // BranchObj
    6.18 @@ -325,12 +321,12 @@
    6.19      QSizeF heading_r=heading->getSize();
    6.20      qreal heading_w=(qreal) heading_r.width() ;
    6.21      qreal heading_h=(qreal) heading_r.height() ;
    6.22 -    QSizeF sysflags_r; //FIXME-1 =systemFlags->getSize();
    6.23 -	qreal sysflags_h=0;//sysflags_r.height();
    6.24 -	qreal sysflags_w=0;//sysflags_r.width();
    6.25 -    QSizeF stanflags_r; //FIXME-1 =standardFlags->getSize();
    6.26 -	qreal stanflags_h=0; //stanflags_r.height();
    6.27 -	qreal stanflags_w=0; //stanflags_r.width();
    6.28 +    QSizeF sysflags_r=systemFlags->getSize();
    6.29 +	qreal sysflags_h=sysflags_r.height();
    6.30 +	qreal sysflags_w=sysflags_r.width();
    6.31 +    QSizeF stanflags_r=standardFlags->getSize();
    6.32 +	qreal stanflags_h=stanflags_r.height();
    6.33 +	qreal stanflags_w=stanflags_r.width();
    6.34      qreal w;
    6.35      qreal h;
    6.36  
    6.37 @@ -416,105 +412,67 @@
    6.38      }
    6.39  }
    6.40  
    6.41 -void BranchObj::updateHeading()
    6.42 +void BranchObj::updateData()
    6.43  {
    6.44 +	bool changed=false;
    6.45  	if (!treeItem)
    6.46  	{
    6.47  		qWarning ("BranchObj::udpateHeading treeItem==NULL");
    6.48  		return;
    6.49  	}
    6.50 -	heading->setText (treeItem->getHeading() );
    6.51 -	updateContentSize();
    6.52 +	QString s=treeItem->getHeading();
    6.53 +	if (s!=heading->text())
    6.54 +	{
    6.55 +		heading->setText (s);
    6.56 +		changed=true;
    6.57 +	}
    6.58 +	QStringList TIactiveFlags=treeItem->activeStandardFlagNames();
    6.59 +
    6.60 +	// Add missing standard flags active in TreeItem
    6.61 +	for (int i=0;i<=TIactiveFlags.size()-1;i++)
    6.62 +	{	
    6.63 +		if (!standardFlags->isActive (TIactiveFlags.at(i) ))
    6.64 +		{
    6.65 +			Flag *f=standardFlagsMaster->getFlag(TIactiveFlags.at(i));
    6.66 +			if (f) standardFlags->activate (f);
    6.67 +			changed=true;
    6.68 +		}
    6.69 +	}
    6.70 +	// Remove standard flags no longer active in TreeItem
    6.71 +	QStringList BOactiveFlags=standardFlags->activeFlagNames();
    6.72 +	for (int i=0;i<BOactiveFlags.size();++i)
    6.73 +		if (!TIactiveFlags.contains (BOactiveFlags.at(i)))
    6.74 +		{
    6.75 +			standardFlags->deactivate (BOactiveFlags.at(i));
    6.76 +			changed=true;
    6.77 +		}	
    6.78 +
    6.79 +	// Add missing system flags active in TreeItem
    6.80 +	TIactiveFlags=treeItem->activeSystemFlagNames();
    6.81 +	for (int i=0;i<TIactiveFlags.size();++i)
    6.82 +	{	
    6.83 +		if (!systemFlags->isActive (TIactiveFlags.at(i) ))
    6.84 +		{
    6.85 +			Flag *f=systemFlagsMaster->getFlag(TIactiveFlags.at(i));
    6.86 +			if (f) systemFlags->activate (f);
    6.87 +			changed=true;
    6.88 +		}
    6.89 +	}
    6.90 +	// Remove system flags no longer active in TreeItem
    6.91 +	BOactiveFlags=systemFlags->activeFlagNames();
    6.92 +	for (int i=0;i<BOactiveFlags.size();++i)
    6.93 +	{
    6.94 +		if (!TIactiveFlags.contains (BOactiveFlags.at(i)))
    6.95 +		{
    6.96 +			systemFlags->deactivate (BOactiveFlags.at(i));
    6.97 +			changed=true;
    6.98 +		}	
    6.99 +	}
   6.100 +
   6.101 +	if (changed)
   6.102 +		updateContentSize();
   6.103  }
   6.104  
   6.105 -QString BranchObj::saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset)
   6.106 -{
   6.107 -	// Cloudy stuff can be hidden during exports
   6.108 -	// FIXME-1 if (hidden) return "";
   6.109 -
   6.110 -	// Update of note is usually done while unselecting a branch
   6.111 -	// if (isNoteInEditor) getNoteFromTextEditor();		//FIXME-2 moved to TreeItem
   6.112 -	
   6.113 -    QString s,a;
   6.114 -	/*
   6.115 -	QString scrolledAttr;
   6.116 -	if ( ((BranchItem*)treeItem)->isScrolled() ) 
   6.117 -		scrolledAttr=attribut ("scrolled","yes");
   6.118 -	else
   6.119 -		scrolledAttr="";
   6.120 -
   6.121 -	// save area, if not scrolled
   6.122 -	QString areaAttr;
   6.123 -	if (!((BranchItem*) (treeItem->parent()) )->isScrolled() )
   6.124 -	{
   6.125 -		areaAttr=
   6.126 -			attribut("x1",QString().setNum(absPos.x()-offset.x())) +
   6.127 -			attribut("y1",QString().setNum(absPos.y()-offset.y())) +
   6.128 -			attribut("x2",QString().setNum(absPos.x()+width()-offset.x())) +
   6.129 -			attribut("y2",QString().setNum(absPos.y()+height()-offset.y()));
   6.130 -
   6.131 -	} else
   6.132 -		areaAttr="";
   6.133 -	
   6.134 -	// Providing an ID for a branch makes export to XHTML easier
   6.135 -	QString idAttr;
   6.136 -	if (treeItem->xlinkCount()>0)
   6.137 -		idAttr=attribut ("id",model->getSelectString(this)); //TODO directly access model
   6.138 -	else
   6.139 -		idAttr="";
   6.140 -
   6.141 -    s=beginElement ("branch" 
   6.142 -		+getOrnXMLAttr() 
   6.143 -		+scrolledAttr 
   6.144 -		+areaAttr 
   6.145 -		+idAttr 
   6.146 -		+getIncludeImageAttr() );
   6.147 -    incIndent();
   6.148 -
   6.149 -	// save heading
   6.150 -    s+=valueElement("heading", treeItem->getHeading(),
   6.151 -		attribut ("textColor",QColor(heading->getColor()).name()));
   6.152 -
   6.153 -	// Save frame
   6.154 -	if (frame->getFrameType()!=FrameObj::NoFrame) 
   6.155 -		s+=frame->saveToDir ();
   6.156 -
   6.157 -	// save names of flags set
   6.158 -	s+=standardFlags->saveToDir(tmpdir,prefix,0);
   6.159 -	
   6.160 -	// Save FloatImages
   6.161 -	for (int i=0; i<floatimage.size(); ++i)
   6.162 -		s+=floatimage.at(i)->saveToDir (tmpdir,prefix);
   6.163 -
   6.164 -	// save note
   6.165 -	if (!treeItem->getNoteObj().isEmpty() )
   6.166 -		s+=treeItem->getNoteObj().saveToDir();
   6.167 -	
   6.168 -	// Save branches
   6.169 -	for (int i=0; i<treeItem->branchCount(); ++i)
   6.170 -		s+=treeItem->getBranchObjNum(i)->saveToDir(tmpdir,prefix,offset);
   6.171 -
   6.172 -	// Save XLinks
   6.173 -	QString ol;	// old link
   6.174 -	QString cl;	// current link
   6.175 -	for (int i=0; i<xlink.size(); ++i)
   6.176 -	{
   6.177 -		cl=xlink.at(i)->saveToDir();
   6.178 -		if (cl!=ol)
   6.179 -		{
   6.180 -			s+=cl;
   6.181 -			ol=cl;
   6.182 -		} else
   6.183 -		{
   6.184 -			qWarning (QString("Ignoring of duplicate xLink in %1").arg(treeItem->getHeading()));
   6.185 -		}
   6.186 -	}	
   6.187 -
   6.188 -    decIndent();
   6.189 -    s+=endElement   ("branch");
   6.190 -    return s;
   6.191 -*/	
   6.192 -}
   6.193  
   6.194  void BranchObj::addXLink (XLinkObj *xlo)
   6.195  {
   6.196 @@ -732,66 +690,6 @@
   6.197  */	
   6.198  }
   6.199  
   6.200 -bool BranchObj::canMoveBranchUp() // FIXME-1 move to BranchItem
   6.201 -{
   6.202 -/*
   6.203 -	if (!parObj || depth==1) return false;
   6.204 -	BranchObj* par=(BranchObj*)parObj;
   6.205 -	if (this==par->getTreeItem()->getFirstBranch())
   6.206 -		return false;
   6.207 -	else
   6.208 -		return true;
   6.209 -		*/
   6.210 -return false;
   6.211 -}
   6.212 -
   6.213 -BranchObj* BranchObj::moveBranchUp(BranchObj* bo1) // FIXME-1
   6.214 -{
   6.215 -/*
   6.216 -	savePosInAngle();
   6.217 -    int i=branch.indexOf(bo1);
   6.218 -    if (i>0) 
   6.219 -	{	// -1 if bo1 not found 
   6.220 -		treeItem->getBranchObjNum(i)->angle--;
   6.221 -		treeItem->getBranchObjNum(i-1)->angle++;
   6.222 -		qSort (branch.begin(),branch.end(), isAbove);
   6.223 -		return treeItem->getBranchObjNum(i);
   6.224 -	} else
   6.225 -*/	
   6.226 -		return NULL;
   6.227 -}
   6.228 -
   6.229 -bool BranchObj::canMoveBranchDown() //FIXME-1 move to BranchItem
   6.230 -{
   6.231 -	/* 
   6.232 -	if (!parObj|| depth==1) return false;
   6.233 -	BranchObj* par=(BranchObj*)parObj;
   6.234 -	if (this==par->getTreeItem()->getLastBranch())
   6.235 -		return false;
   6.236 -	else
   6.237 -		return true;
   6.238 -	*/
   6.239 -return false;	
   6.240 -}
   6.241 -
   6.242 -BranchObj* BranchObj::moveBranchDown(BranchObj* bo1)// FIXME-1
   6.243 -{
   6.244 -/*
   6.245 -	savePosInAngle();
   6.246 -    int i=branch.indexOf(bo1);
   6.247 -	int j;
   6.248 -	if (i <treeItem->branchCount())
   6.249 -	{
   6.250 -		j = i+1;
   6.251 -		treeItem->getBranchObjNum(i)->angle++;
   6.252 -		treeItem->getBranchObjNum(j)->angle--;
   6.253 -		qSort (branch.begin(),branch.end(), isAbove);
   6.254 -		return treeItem->getBranchObjNum(i);
   6.255 -	} else
   6.256 -*/	
   6.257 -		return NULL;
   6.258 -}
   6.259 -
   6.260  void BranchObj::sortChildren() //FIXME-2  
   6.261  {
   6.262  /*
   6.263 @@ -1070,65 +968,6 @@
   6.264  	bboxTotal.setHeight(max (r.height(),  bbox.height()));
   6.265  }
   6.266  
   6.267 -/*
   6.268 -void BranchObj::select()	// FIXME-4 try to get rid of this in BO completely
   6.269 -{
   6.270 -	cout << "BO::select()\n";
   6.271 -	textEditor->setText(treeItem->getNoteObj().getNote() );
   6.272 -	QString fnh=treeItem->getNoteObj().getFilenameHint();
   6.273 -	if (fnh!="")
   6.274 -		textEditor->setFilenameHint(treeItem->getNoteObj().getFilenameHint() );
   6.275 -	else	
   6.276 -		textEditor->setFilenameHint(getHeading() );
   6.277 -	textEditor->setFontHint (treeItem->getNoteObj().getFontHint() );
   6.278 -	//isNoteInEditor=true;
   6.279 -
   6.280 -	// set selected and visible
   6.281 -    LinkableMapObj::select();
   6.282 -
   6.283 -    //if (po)	po->setLastSelectedBranch(this);  needed?
   6.284 -		
   6.285 -	// temporary unscroll, if we have scrolled parents somewhere
   6.286 -	if (parObj) ((BranchObj*)(parObj))->tmpUnscroll();
   6.287 -
   6.288 -	//moved to vymmodel or vymview...
   6.289 -	// Show URL and link in statusbar
   6.290 -	QString status;
   6.291 -	if (!url.isEmpty()) status+="URL: "+url+"  ";
   6.292 -	if (!vymLink.isEmpty()) status+="Link: "+vymLink;
   6.293 -	if (!status.isEmpty()) mainWindow->statusMessage (status);
   6.294 -
   6.295 -	// Update Toolbar
   6.296 -	updateFlagsToolbar();
   6.297 -
   6.298 -	// Update actions
   6.299 -	model->updateActions();
   6.300 -}
   6.301 -	*/
   6.302 -
   6.303 -/*
   6.304 -void BranchObj::unselect()	//FIXME-4 should not be needed
   6.305 -{
   6.306 -	cout << "BO::unselect()\n";
   6.307 -	LinkableMapObj::unselect();
   6.308 -	// Delete any messages like vymLink in StatusBar
   6.309 -	mainWindow->statusMessage ("");		//this causes segfault, when MainWindow is already gone in global destructor on quitting vym
   6.310 -
   6.311 -	// Save current note
   6.312 -	if (isNoteInEditor) getNoteFromTextEditor();
   6.313 -	isNoteInEditor=false;
   6.314 -
   6.315 -	// reset temporary unscroll, if we have scrolled parents somewhere
   6.316 -	if (parObj) ((BranchObj*)(parObj))->resetTmpUnscroll();
   6.317 -
   6.318 -	// Erase content of editor 
   6.319 -	textEditor->setInactive();
   6.320 -
   6.321 -	// unselect all buttons in toolbar
   6.322 -	standardFlagsDefault->updateToolbar();
   6.323 -}
   6.324 -*/	
   6.325 -
   6.326  QString BranchObj::getSelectString()
   6.327  {
   6.328  	return model->getSelectString (this);
     7.1 --- a/branchobj.h	Thu May 07 08:48:53 2009 +0000
     7.2 +++ b/branchobj.h	Wed May 13 08:26:27 2009 +0000
     7.3 @@ -46,9 +46,7 @@
     7.4      virtual void calcBBoxSize();
     7.5  	virtual void setDockPos();
     7.6      
     7.7 -    virtual void updateHeading ();
     7.8 -
     7.9 -	virtual QString saveToDir (const QString&,const QString&, const QPointF&);// Save data recursivly to tempdir
    7.10 +    virtual void updateData();	//! Update represantatio of heading, flags, etc.
    7.11  
    7.12  	virtual void addXLink (XLinkObj*);
    7.13  	virtual void removeXLinkRef (XLinkObj*);// Remove ref in list
    7.14 @@ -79,11 +77,6 @@
    7.15      virtual void removeBranch(BranchObj*);  
    7.16      virtual void removeBranchPtr (BranchObj*);  
    7.17  
    7.18 -    virtual bool canMoveBranchUp();
    7.19 -    virtual BranchObj* moveBranchUp(BranchObj*);
    7.20 -    virtual bool canMoveBranchDown();
    7.21 -    virtual BranchObj* moveBranchDown(BranchObj*);
    7.22 -
    7.23      virtual void sortChildren();
    7.24      virtual void alignRelativeTo(const QPointF, bool alignSelf=false );
    7.25  	virtual void reposition();
    7.26 @@ -107,8 +100,6 @@
    7.27  public:	
    7.28  	float angle;					// used in mainbranch to reorder mainbranches
    7.29  protected:	
    7.30 -//	bool scrolled;					// true if all children are scrolled and thus invisible
    7.31 -//	bool tmpUnscrolled;				// can only be true (temporary) for a scrolled subtree
    7.32  	bool includeImagesVer;			// include floatimages in bbox vertically
    7.33  	bool includeImagesHor;			// include floatimages in bbox horizontally
    7.34  };
     8.1 --- a/branchpropwindow.cpp	Thu May 07 08:48:53 2009 +0000
     8.2 +++ b/branchpropwindow.cpp	Wed May 13 08:26:27 2009 +0000
     8.3 @@ -27,13 +27,14 @@
     8.4  	ui.framePenColorButton->setPixmap (pix);
     8.5  	ui.frameBrushColorButton->setPixmap (pix);
     8.6  
     8.7 -	// Create Model and View to hold attributes
     8.8 +	// Create Model and View to hold attributes 
     8.9 +	/*
    8.10  	attributeModel = new QStandardItemModel (1,3,this);
    8.11  	attributeModel->setHeaderData(0, Qt::Horizontal, tr("Name","Branchprop window: Attribute name"));
    8.12  	attributeModel->setHeaderData(1, Qt::Horizontal, tr("Value","Branchprop window: Attribute value"));
    8.13  	attributeModel->setHeaderData(2, Qt::Horizontal, tr("Type","Branchprop window: Attribute type"));
    8.14  	ui.attributeTableView->setModel (attributeModel);
    8.15 -	
    8.16 +	*/
    8.17  
    8.18  	// Load Settings
    8.19  	resize (settings.value ( "/satellite/propertywindow/geometry/size", QSize(450,600)).toSize());
    8.20 @@ -56,7 +57,7 @@
    8.21  	settings.setValue( "/satellite/propertywindow/showWithMain",isVisible() );
    8.22  }
    8.23  
    8.24 -void BranchPropertyWindow::setBranch (BranchObj *bo)
    8.25 +void BranchPropertyWindow::setBranch (BranchObj *bo)	//FIXME-2 maybe do this via signals emitted anyway from model?
    8.26  {
    8.27  	disconnectSignals();
    8.28  	branch=bo;
    8.29 @@ -122,10 +123,10 @@
    8.30  		else	
    8.31  			ui.incImgHor->setCheckState (Qt::Unchecked);
    8.32  
    8.33 +/*
    8.34  		// Attributes
    8.35  		attributeModel->removeRows(0, attributeModel->rowCount(), QModelIndex());
    8.36  
    8.37 -/*
    8.38  		// FIXME-3 some samples for attribute testing
    8.39  		QStringList attrTypes=mapEditor->attributeTable()->getTypes();
    8.40  		for (int i=0; i<attrTypes.count()-1;i++)
    8.41 @@ -241,6 +242,7 @@
    8.42      return;
    8.43  }
    8.44  
    8.45 +/*
    8.46  void BranchPropertyWindow::addAttributeClicked()
    8.47  {
    8.48  	// Add empty line for adding attributes
    8.49 @@ -265,6 +267,7 @@
    8.50  {
    8.51  	//FIXME-3 cout << "BPW::delete\n";
    8.52  }
    8.53 +*/
    8.54  
    8.55  void BranchPropertyWindow::connectSignals()
    8.56  {
    8.57 @@ -299,6 +302,7 @@
    8.58  		ui.incImgHor, SIGNAL (stateChanged( int)), 
    8.59  		this, SLOT (incImgHorChanged (int)));
    8.60  
    8.61 +/*
    8.62  	// Attributes	
    8.63  	connect ( 
    8.64  		ui.addAttributeButton, SIGNAL (clicked()), 
    8.65 @@ -306,6 +310,7 @@
    8.66  	connect ( 
    8.67  		ui.deleteAttributeButton, SIGNAL (clicked()), 
    8.68  		this, SLOT (deleteAttributeClicked()));
    8.69 +*/		
    8.70  }
    8.71  
    8.72  
    8.73 @@ -326,8 +331,10 @@
    8.74  	disconnect ( ui.incImgHor, 0,0,0);
    8.75  
    8.76  	// Attributes
    8.77 +	/*
    8.78  	disconnect ( ui.addAttributeButton, 0,0,0);
    8.79  	disconnect ( ui.deleteAttributeButton, 0,0,0);
    8.80 +	*/
    8.81  }
    8.82  
    8.83  
     9.1 --- a/branchpropwindow.h	Thu May 07 08:48:53 2009 +0000
     9.2 +++ b/branchpropwindow.h	Wed May 13 08:26:27 2009 +0000
     9.3 @@ -8,7 +8,7 @@
     9.4  #include <QtGui>
     9.5  
     9.6  
     9.7 -#include "attributedelegate.h"
     9.8 +//#include "attributedelegate.h"
     9.9  #include "branchobj.h"
    9.10  #include "vymmodel.h"
    9.11  
    9.12 @@ -32,8 +32,8 @@
    9.13  	void linkHideUnselectedChanged (int);
    9.14  	void incImgVerChanged (int);
    9.15  	void incImgHorChanged (int);
    9.16 -	void addAttributeClicked();
    9.17 -	void deleteAttributeClicked();
    9.18 +//	void addAttributeClicked();
    9.19 +//	void deleteAttributeClicked();
    9.20  
    9.21  signals:
    9.22  	void windowClosed();
    9.23 @@ -53,9 +53,9 @@
    9.24  	QColor penColor;
    9.25  	QColor brushColor;
    9.26  
    9.27 -	QAbstractItemModel *attributeModel;
    9.28 +//	QAbstractItemModel *attributeModel;
    9.29  
    9.30 -	AttributeDelegate delegate;
    9.31 +//	AttributeDelegate delegate;
    9.32  };
    9.33  
    9.34  #endif // 
    10.1 --- a/flagobj.cpp	Thu May 07 08:48:53 2009 +0000
    10.2 +++ b/flagobj.cpp	Wed May 13 08:26:27 2009 +0000
    10.3 @@ -20,6 +20,13 @@
    10.4      copy (io);
    10.5  }
    10.6  
    10.7 +FlagObj::FlagObj (Flag* f)
    10.8 +{
    10.9 +	init();
   10.10 +	name=f->getName();
   10.11 +	icon->load(f->getPixmap());
   10.12 +}
   10.13 +
   10.14  FlagObj::~FlagObj()
   10.15  {
   10.16  //   cout << "Destr FlagObj  this="<<this <<"  " << qPrintable(name) << "\n";
   10.17 @@ -30,27 +37,20 @@
   10.18  void FlagObj::init ()
   10.19  {
   10.20  	name="undefined";
   10.21 -	unsetGroup();
   10.22  
   10.23  	icon=new ImageObj (scene);
   10.24  	icon->setPos (absPos.x(), absPos.y() );
   10.25  	state=false;
   10.26 -	used=false;
   10.27  	avis=true;
   10.28 -	action=NULL;
   10.29  }
   10.30  
   10.31  void FlagObj::copy (FlagObj* other)
   10.32  {
   10.33      MapObj::copy(other);
   10.34  	name=other->name;
   10.35 -	group=other->group;
   10.36 -	tooltip=other->tooltip;
   10.37  	state=other->state;
   10.38  	avis=other->avis;
   10.39 -	used=other->used;
   10.40  	icon->copy(other->icon);
   10.41 -	action=other->action;
   10.42  	setVisibility (other->isVisibleObj() );
   10.43  }
   10.44  
   10.45 @@ -99,51 +99,6 @@
   10.46  	return name;
   10.47  }
   10.48  
   10.49 -void FlagObj::setGroup (const QString &n)
   10.50 -{
   10.51 -	group=n;
   10.52 -}
   10.53 -
   10.54 -const QString FlagObj::getGroup()
   10.55 -{
   10.56 -	return group;
   10.57 -}
   10.58 -
   10.59 -void FlagObj::unsetGroup()
   10.60 -{
   10.61 -	group="undefined";
   10.62 -}
   10.63 -
   10.64 -void FlagObj::setToolTip(const QString &n)
   10.65 -{
   10.66 -	tooltip=n;
   10.67 -}
   10.68 -
   10.69 -const QString FlagObj::getToolTip()
   10.70 -{
   10.71 -	return tooltip;
   10.72 -}
   10.73 -
   10.74 -QPixmap FlagObj::getPixmap()
   10.75 -{
   10.76 -	return icon->pixmap();
   10.77 -}
   10.78 -
   10.79 -void FlagObj::setAction (QAction* a)
   10.80 -{
   10.81 -	action=a;
   10.82 -}
   10.83 -
   10.84 -void FlagObj::updateAction ()
   10.85 -{
   10.86 -	if (action) 
   10.87 -	{
   10.88 -		action->setChecked(state);
   10.89 -		if (!avis)
   10.90 -			action->setVisible(state);
   10.91 -	}
   10.92 -}
   10.93 -
   10.94  void FlagObj::setAlwaysVisible(bool b)
   10.95  {
   10.96  	avis=b;
   10.97 @@ -189,16 +144,6 @@
   10.98  	}	
   10.99  }
  10.100  
  10.101 -void FlagObj::setUsed (bool b)
  10.102 -{
  10.103 -	used=b;
  10.104 -}
  10.105 -
  10.106 -bool FlagObj::isUsed()
  10.107 -{
  10.108 -	return used;
  10.109 -}
  10.110 -
  10.111  void FlagObj::saveToDir (const QString &tmpdir, const QString &prefix)
  10.112  {
  10.113  	QString fn=tmpdir + prefix + name + ".png";
    11.1 --- a/flagobj.h	Thu May 07 08:48:53 2009 +0000
    11.2 +++ b/flagobj.h	Wed May 13 08:26:27 2009 +0000
    11.3 @@ -5,6 +5,7 @@
    11.4  #include <QAction>
    11.5  #include <QPixmap>
    11.6  
    11.7 +#include "flag.h"
    11.8  #include "mapobj.h"
    11.9  #include "imageobj.h"
   11.10  
   11.11 @@ -20,6 +21,7 @@
   11.12      FlagObj ();
   11.13      FlagObj (QGraphicsScene*);
   11.14      FlagObj (FlagObj*);
   11.15 +    FlagObj (Flag*);
   11.16      ~FlagObj ();
   11.17      virtual void init ();
   11.18      virtual void copy (FlagObj*);
   11.19 @@ -30,36 +32,24 @@
   11.20  	void load (const QPixmap&);
   11.21  	void setName (const QString&);
   11.22  	const QString getName ();
   11.23 -	void setGroup (const QString&);
   11.24 -	const QString getGroup();
   11.25 -	void unsetGroup ();
   11.26 -	void setToolTip(const QString&);
   11.27 -	const QString getToolTip();
   11.28  	QPixmap getPixmap();
   11.29  	void setAction(QAction*);
   11.30 -	void updateAction ();
   11.31  	void setAlwaysVisible (bool b);
   11.32  	bool isAlwaysVisible ();
   11.33  	bool isActive();
   11.34  	void toggle();
   11.35  	void activate();
   11.36  	void deactivate();
   11.37 -	void setUsed (bool);
   11.38 -	bool isUsed();
   11.39  	void saveToDir (const QString&, const QString&);
   11.40  	
   11.41  protected:	
   11.42  	QString name;
   11.43 -	QString group;
   11.44 -	QString tooltip;
   11.45  	bool state;
   11.46  	bool avis;
   11.47 -	bool used;
   11.48      virtual void positionBBox();
   11.49      virtual void calcBBoxSize();
   11.50  private:
   11.51  	ImageObj* icon;
   11.52 -	QAction* action;
   11.53  };
   11.54  
   11.55  #endif
    12.1 --- a/flagrowobj.cpp	Thu May 07 08:48:53 2009 +0000
    12.2 +++ b/flagrowobj.cpp	Wed May 13 08:26:27 2009 +0000
    12.3 @@ -3,6 +3,7 @@
    12.4  #include <iostream>
    12.5  using namespace std;
    12.6  
    12.7 +#include "flag.h"
    12.8  #include "flagrowobj.h"
    12.9  
   12.10  #include "geometry.h"
   12.11 @@ -31,30 +32,17 @@
   12.12  
   12.13  void FlagRowObj::init ()
   12.14  {
   12.15 -	parentRow=NULL;
   12.16  	showFlags=true;
   12.17  }
   12.18  
   12.19  void FlagRowObj::copy (FlagRowObj* other)
   12.20  {
   12.21      MapObj::copy(other);
   12.22 -	parentRow=other->parentRow;
   12.23  	flag.clear();
   12.24  	for (int i=0; i<flag.size(); ++i)
   12.25  		addFlag (flag.at(i));
   12.26  }
   12.27  
   12.28 -void FlagRowObj::clone (FlagRowObj* pr)
   12.29 -{
   12.30 -	// Difference to copy:
   12.31 -	// We don't copy the flags here, they
   12.32 -	// are created on the fly by toggle and activate
   12.33 -	// This saves lots of canvas objects.
   12.34 -	MapObj::copy(pr);
   12.35 -	flag.clear();
   12.36 -	parentRow=pr;
   12.37 -}
   12.38 -
   12.39  void FlagRowObj::move(double x, double y)
   12.40  {
   12.41      MapObj::move(x,y);
   12.42 @@ -89,6 +77,14 @@
   12.43  	return newfo;
   12.44  }
   12.45  
   12.46 +QStringList FlagRowObj::activeFlagNames()
   12.47 +{
   12.48 +	QStringList list;
   12.49 +	for (int i=0; i<flag.size(); ++i)
   12.50 +		list.append (flag.at(i)->getName());
   12.51 +	return list;
   12.52 +}
   12.53 +
   12.54  void FlagRowObj::positionBBox()
   12.55  {
   12.56      bbox.moveTopLeft(absPos );
   12.57 @@ -124,84 +120,28 @@
   12.58  
   12.59  bool FlagRowObj::isActive (const QString &foname)
   12.60  {
   12.61 +
   12.62  	FlagObj *fo=findFlag (foname);
   12.63 -	if (parentRow && fo)
   12.64 -		return fo->isActive();
   12.65 +	if (fo) 
   12.66 +		return true;
   12.67  	else
   12.68 -		if (fo) return true;
   12.69 -	return false;
   12.70 +		return false;
   12.71  }
   12.72  
   12.73 -void FlagRowObj::toggle (const QString &foname)
   12.74 +void FlagRowObj::activate (Flag *flag)	
   12.75  {
   12.76 -	FlagObj *fo=findFlag (foname);
   12.77 -	if (fo)
   12.78 +	if (flag) 
   12.79  	{
   12.80 -		// FlagObj is here, it will be active, too.
   12.81 -		// Deactivate it by removing it from this row.
   12.82 -		flag.remove (fo);
   12.83 -		delete (fo);
   12.84 -	} else
   12.85 -	{
   12.86 -		// FlagObj is not present in this row.
   12.87 -		// Copy it from parentRow
   12.88 -		fo=parentRow->findFlag (foname);
   12.89 -		if (fo)
   12.90 -		{
   12.91 -			fo=addFlag (fo);
   12.92 -			fo->activate();
   12.93 -			/*FIXME-0 move to VM if (exclusive) 
   12.94 -			{
   12.95 -				deactivateGroup (fo);
   12.96 -				updateToolbar();
   12.97 -			}
   12.98 -			*/
   12.99 -		} else
  12.100 -			qWarning ("FlagRowObj ("+name+")::toggle ("+foname+")  failed - could not find it in parentRow");
  12.101 -	}	
  12.102 -	calcBBoxSize();
  12.103 -	positionBBox();	
  12.104 -}
  12.105 -
  12.106 -void FlagRowObj::activate (const QString &foname)
  12.107 -{
  12.108 -	cout << "FRO::activate  "<<foname.toStdString()<<endl;
  12.109 -	// Note: "activate" is also called during loading of a map
  12.110 -	// Here we do not check for exclusive flags!
  12.111 -	FlagObj *fo=findFlag (foname);
  12.112 -	if (parentRow)
  12.113 -	{
  12.114 -		if (!fo)
  12.115 -		{
  12.116 -			// FlagObj is not present in this row.
  12.117 -			// Copy it from parentRow and activate there
  12.118 -			fo=parentRow->findFlag (foname);
  12.119 -			if (fo)
  12.120 -			{
  12.121 -				fo=addFlag (fo);
  12.122 -				fo->activate();
  12.123 -				if (showFlags) 
  12.124 -					fo->setVisibility (visible);
  12.125 -				else
  12.126 -					fo->setVisibility (false);
  12.127 -				calcBBoxSize();
  12.128 -			} else
  12.129 -				qWarning ("FlagRowObj ("+name+")::activate ("+foname+")  failed - could not find it in parentRow");
  12.130 -		}	
  12.131 -	} else
  12.132 -	{
  12.133 -		// I am the parentRow, mark flag as used
  12.134 -		if (fo)
  12.135 -		{
  12.136 -			fo->setUsed(true);
  12.137 -			fo->activate();
  12.138 -		}	
  12.139 +		FlagObj *fo=addFlag (new FlagObj (flag));
  12.140 +		fo->activate();
  12.141 +		if (showFlags)	// FIXME-3 necessary? only called from FIO::init
  12.142 +			fo->setVisibility (visible);
  12.143  		else
  12.144 -			qWarning ("FlagRowObj::activate no FlagObj \""+foname+"\" found in parentRow");
  12.145 +			fo->setVisibility (false);
  12.146 +		calcBBoxSize();
  12.147  	}
  12.148  }
  12.149  
  12.150 -
  12.151  void FlagRowObj::deactivate (const QString &foname)
  12.152  {
  12.153  	FlagObj *fo=findFlag (foname);
  12.154 @@ -214,116 +154,11 @@
  12.155  	positionBBox();
  12.156  }
  12.157  
  12.158 -void FlagRowObj::deactivateAll ()
  12.159 -{
  12.160 -	if (!parentRow)
  12.161 -	{
  12.162 -		for (int i=0; i<flag.size(); ++i)
  12.163 -			if (flag.at(i)->isActive()) flag.at(i)->deactivate();
  12.164 -	} else
  12.165 -	{
  12.166 -		while (!flag.isEmpty())
  12.167 -			delete flag.takeFirst();
  12.168 -		calcBBoxSize();
  12.169 -		positionBBox();
  12.170 -	}
  12.171 -}
  12.172 -
  12.173 -void FlagRowObj::deactivateGroup (FlagObj *keepfo)	//FIXME-0 move to VM
  12.174 -{
  12.175 -	// deactivate all flags in keepof, but keep keepfo [sic!]
  12.176 -	if (keepfo)
  12.177 -	{
  12.178 -		QString g=keepfo->getGroup();
  12.179 -		if (g!="undefined")
  12.180 -		{
  12.181 -			for (int i=0; i<flag.size(); ++i)
  12.182 -				if (g==flag.at(i)->getGroup() && keepfo!=flag.at(i)) 
  12.183 -				{
  12.184 -					FlagObj *fo=flag.at(i);
  12.185 -					flag.remove (fo);
  12.186 -					delete (fo);
  12.187 -				}	
  12.188 -		}		
  12.189 -	}	
  12.190 -}
  12.191 -
  12.192 -void FlagRowObj::setToolBar(QToolBar *tb)
  12.193 -{
  12.194 -	toolbar=tb;
  12.195 -}
  12.196 -
  12.197 -void FlagRowObj::setEnabled (bool b)
  12.198 -{
  12.199 -	if (toolbar)
  12.200 -	{
  12.201 -		toolbar->setEnabled (b);
  12.202 -	}
  12.203 -}
  12.204 -
  12.205  void FlagRowObj::setShowFlags (bool b)
  12.206  {
  12.207  	showFlags=b;
  12.208  }
  12.209  
  12.210 -void FlagRowObj::resetUsedCounter()
  12.211 -{
  12.212 -	for (int i=0; i<flag.size(); ++i)
  12.213 -		flag.at(i)->setUsed (false);
  12.214 -}
  12.215 -
  12.216 -QString FlagRowObj::saveToDir (const QString &tmpdir,const QString &prefix, bool writeflags)
  12.217 -{
  12.218 -	// Build xml string
  12.219 -	QString s;
  12.220 -	if (parentRow)
  12.221 -		for (int i=0; i<flag.size(); ++i)
  12.222 -		{
  12.223 -			// save flag to xml, if flag is set 
  12.224 -			s+=valueElement("standardflag",flag.at(i)->getName() );
  12.225 -
  12.226 -			// and tell parentRow, that this flag is used
  12.227 -			parentRow->activate(flag.at(i)->getName() );
  12.228 -		}	
  12.229 -	else
  12.230 -		// Save icons to dir, if verbose is set (xml export)
  12.231 -		// and I am a parentRow 
  12.232 -		// and this flag is really used somewhere
  12.233 -		if (writeflags)
  12.234 -			for (int i=0; i<flag.size(); ++i)
  12.235 -				if (flag.at(i)->isUsed()) flag.at(i)->saveToDir (tmpdir,prefix);
  12.236 -	return s;		
  12.237 -
  12.238 -}
  12.239 -
  12.240 -void FlagRowObj::setName (const QString &n)
  12.241 -{
  12.242 -	name=n;
  12.243 -}
  12.244 -
  12.245 -void  FlagRowObj::updateToolbar()	//FIXME-2 this needs to be changed with VM
  12.246 -{
  12.247 -	if (parentRow)
  12.248 -	{
  12.249 -		// We are just a branch, not the toolbar default
  12.250 -		// but state has to be copied from ourselves to parentrow!
  12.251 -		parentRow->deactivateAll();
  12.252 -		// In parentRow activate all existing (==active) flags
  12.253 -		for (int i=0; i<flag.size(); ++i)
  12.254 -			parentRow->activate(flag.at(i)->getName());
  12.255 -		parentRow->updateToolbar();	
  12.256 -	} else
  12.257 -	{
  12.258 -		// We are the toolbar default
  12.259 -		if (toolbar)
  12.260 -		{
  12.261 -			// Update state of actions in toolbar
  12.262 -			for (int i=0; i<flag.size(); ++i)
  12.263 -				flag.at(i)->updateAction();
  12.264 -		}	
  12.265 -	}
  12.266 -}
  12.267 -
  12.268  FlagObj* FlagRowObj::findFlag (const QString &name)
  12.269  {
  12.270  	for (int i=0; i<flag.size(); ++i)
    13.1 --- a/flagrowobj.h	Thu May 07 08:48:53 2009 +0000
    13.2 +++ b/flagrowobj.h	Wed May 13 08:26:27 2009 +0000
    13.3 @@ -6,47 +6,35 @@
    13.4  //#include "mapobj.h"
    13.5  #include "flagobj.h"
    13.6  
    13.7 -/*! \brief A collection of flags (FlagObj). 
    13.8 +class Flag;
    13.9 +
   13.10 +/*! \brief A collection of flags (FlagObj) in a map. 
   13.11  
   13.12     The flags are aligned horizontally  in a row on the map. 
   13.13 -   A toolbar can be created from the flags in this row.
   13.14   */
   13.15  
   13.16 -class FlagRowObj:public MapObj {	// FIXME-0 move pixmaps to mainwindow or model in the end...
   13.17 +class FlagRowObj:public MapObj {
   13.18  public:
   13.19      FlagRowObj ();
   13.20      FlagRowObj (QGraphicsScene *);
   13.21      ~FlagRowObj ();
   13.22      virtual void init ();
   13.23      virtual void copy (FlagRowObj*);
   13.24 -    virtual void clone(FlagRowObj*);
   13.25      virtual void move   (double,double);
   13.26      virtual void moveBy (double,double);
   13.27      virtual void setVisibility(bool);
   13.28      virtual FlagObj* addFlag (FlagObj *fo);			// make deep copy of FlagObj
   13.29 +	virtual QStringList activeFlagNames();
   13.30      virtual void positionBBox();
   13.31      virtual void calcBBoxSize();
   13.32  	virtual QString getFlagName (const QPointF &p);	// Find flag by position
   13.33  	bool isActive(const QString&);
   13.34 -	void toggle (const QString &name);
   13.35 -	void activate(const QString&);
   13.36 +	void activate (Flag *flag);
   13.37  	void deactivate(const QString&);
   13.38 -	void deactivateAll();
   13.39 -	void deactivateGroup(FlagObj *);	//FIXME-0
   13.40 -	void setToolBar (QToolBar *);		//FIXME-0
   13.41 -	void setEnabled (bool);
   13.42  	void setShowFlags (bool);
   13.43 -	void resetUsedCounter();
   13.44 -	QString saveToDir (const QString &,const QString &,bool);
   13.45 -	void setName (const QString&);			// prefix for exporting flags to dir
   13.46 -	void makeToolbar (QMainWindow*, const QString &);	// Create Toolbar buttons FIXME-0
   13.47 -	void updateToolbar();					// Update Toolbar buttons	FIXME-0
   13.48  private:	
   13.49 -	FlagRowObj* parentRow;					// look for flags in this row
   13.50  	FlagObj* findFlag (const QString&);
   13.51      QList <FlagObj*> flag; 
   13.52 -	QToolBar *toolbar;
   13.53 -	QString name;
   13.54  	bool showFlags;							// FloatObjects want to hide their flags
   13.55  };
   13.56  #endif
    14.1 --- a/main.cpp	Thu May 07 08:48:53 2009 +0000
    14.2 +++ b/main.cpp	Wed May 13 08:26:27 2009 +0000
    14.3 @@ -3,6 +3,7 @@
    14.4  #include <iostream>
    14.5  using namespace std;
    14.6  
    14.7 +#include "flagrow.h"
    14.8  #include "flagrowobj.h"
    14.9  #include "mainwindow.h"
   14.10  #include "options.h"
   14.11 @@ -36,9 +37,8 @@
   14.12  QString flagsPath;				// Pointing to flags
   14.13  bool clipboardEmpty;			
   14.14  bool debug;						// global debugging flag
   14.15 -FlagRowObj *systemFlagsDefault;	// used to copy from in LinkableMapObj
   14.16 -FlagRowObj *standardFlagsDefault;
   14.17 -
   14.18 +FlagRow *systemFlagsMaster;	
   14.19 +FlagRow *standardFlagsMaster;	
   14.20  
   14.21  Settings settings ("InSilmaril","vym"); // Organization, Application name
   14.22  
   14.23 @@ -158,11 +158,12 @@
   14.24  	translator.load( QString("vym_")+QTextCodec::locale(), vymBaseDir.path() + "/lang");
   14.25      app.installTranslator( &translator );
   14.26  
   14.27 -	// Initializing the row of system flags
   14.28 -	// is done in first call to MapEditor(),
   14.29 -	// because we need at least one canvas first
   14.30 -	systemFlagsDefault=NULL;
   14.31 -	standardFlagsDefault=NULL;
   14.32 +	// Initializing the master rows of flags
   14.33 +	systemFlagsMaster=new FlagRow;
   14.34 +	systemFlagsMaster->setName ("systemFlagsMaster");
   14.35 +	standardFlagsMaster=new FlagRow;
   14.36 +	standardFlagsMaster->setName ("standardFlagsMaster");
   14.37 +
   14.38  
   14.39  	// Initialize window of TextEditor
   14.40  	textEditor = new TextEditor();
    15.1 --- a/mainwindow.cpp	Thu May 07 08:48:53 2009 +0000
    15.2 +++ b/mainwindow.cpp	Wed May 13 08:26:27 2009 +0000
    15.3 @@ -12,7 +12,7 @@
    15.4  #include "exportoofiledialog.h"
    15.5  #include "exports.h"
    15.6  #include "file.h"
    15.7 -#include "flagrowobj.h"
    15.8 +#include "flagrow.h"
    15.9  #include "historywindow.h"
   15.10  #include "imports.h"
   15.11  #include "mapeditor.h"
   15.12 @@ -43,8 +43,8 @@
   15.13  extern QString clipboardFile;
   15.14  extern bool clipboardEmpty;
   15.15  extern int statusbarTime;
   15.16 -extern FlagRowObj* standardFlagsDefault;
   15.17 -extern FlagRowObj* systemFlagsDefault;
   15.18 +extern FlagRow *standardFlagsMaster;	
   15.19 +extern FlagRow *systemFlagsMaster;
   15.20  extern QString vymName;
   15.21  extern QString vymVersion;
   15.22  extern QString vymBuildDate;
   15.23 @@ -1187,229 +1187,217 @@
   15.24  {
   15.25  	// Create System Flags
   15.26  	QToolBar *tb=NULL;
   15.27 -	bool avis=true;
   15.28 -
   15.29 -	systemFlagsDefault = new FlagRowObj ();
   15.30 -	systemFlagsDefault->setVisibility (false);
   15.31 -	systemFlagsDefault->setName ("systemFlagsDef");
   15.32 -
   15.33 -	FlagObj *fo = new FlagObj ();
   15.34 -	fo->load(QPixmap(flagsPath+"flag-note.png"));
   15.35 -	setupFlag (fo,tb,avis,"note",tr("Note","SystemFlag"));
   15.36 -
   15.37 -	fo->load(QPixmap(flagsPath+"flag-url.png"));
   15.38 -	setupFlag (fo,tb,avis,"url",tr("URL to Document ","SystemFlag"));
   15.39 +
   15.40 +	Flag *flag=new Flag;;
   15.41 +
   15.42 +	flag->load(QPixmap(flagsPath+"flag-note.png"));
   15.43 +	setupFlag (flag,tb,"system-note",tr("Note","SystemFlag"));
   15.44 +
   15.45 +	flag->load(QPixmap(flagsPath+"flag-url.png"));
   15.46 +	setupFlag (flag,tb,"system-url",tr("URL to Document ","SystemFlag"));
   15.47  	
   15.48 -	fo->load(QPixmap(flagsPath+"flag-vymlink.png"));
   15.49 -	setupFlag (fo,tb,avis,"vymLink",tr("Link to another vym map","SystemFlag"));
   15.50 -
   15.51 -	fo->load(QPixmap(flagsPath+"flag-scrolled-right.png"));
   15.52 -	setupFlag (fo,tb,avis,"scrolledright",tr("subtree is scrolled","SystemFlag"));
   15.53 +	flag->load(QPixmap(flagsPath+"flag-vymlink.png"));
   15.54 +	setupFlag (flag,tb,"system-vymLink",tr("Link to another vym map","SystemFlag"));
   15.55 +
   15.56 +	flag->load(QPixmap(flagsPath+"flag-scrolled-right.png"));
   15.57 +	setupFlag (flag,tb,"system-scrolledright",tr("subtree is scrolled","SystemFlag"));
   15.58  	
   15.59 -	fo->load(QPixmap(flagsPath+"flag-tmpUnscrolled-right.png"));
   15.60 -	setupFlag (fo,tb,avis,"tmpUnscrolledright",tr("subtree is temporary scrolled","SystemFlag"));
   15.61 -
   15.62 -	fo->load(QPixmap(flagsPath+"flag-hideexport.png"));
   15.63 -	setupFlag (fo,tb,avis,"hideInExport",tr("Hide object in exported maps","SystemFlag"));
   15.64 +	flag->load(QPixmap(flagsPath+"flag-tmpUnscrolled-right.png"));
   15.65 +	setupFlag (flag,tb,"system-tmpUnscrolledright",tr("subtree is temporary scrolled","SystemFlag"));
   15.66 +
   15.67 +	flag->load(QPixmap(flagsPath+"flag-hideexport.png"));
   15.68 +	setupFlag (flag,tb,"system-hideInExport",tr("Hide object in exported maps","SystemFlag"));
   15.69  
   15.70  	// Create Standard Flags
   15.71  	tb=addToolBar (tr ("Standard Flags","Standard Flag Toolbar"));
   15.72  	tb->setObjectName ("standardFlagTB");
   15.73  
   15.74 -	standardFlagsDefault = new FlagRowObj ();
   15.75 -	standardFlagsDefault->setVisibility (false);
   15.76 -	standardFlagsDefault->setName ("standardFlagsDef");
   15.77 -	standardFlagsDefault->setToolBar (tb);
   15.78 -
   15.79 -	fo->load(flagsPath+"flag-exclamationmark.png");
   15.80 -	fo->setGroup("standard-mark");
   15.81 -	setupFlag (fo,tb,avis,"exclamationmark",tr("Take care!","Standardflag"));
   15.82  	
   15.83 -	fo->load(flagsPath+"flag-questionmark.png");
   15.84 -	fo->setGroup("standard-mark");
   15.85 -	setupFlag (fo,tb,avis,"questionmark",tr("Really?","Standardflag"));
   15.86 -
   15.87 -	fo->load(flagsPath+"flag-hook-green.png");
   15.88 -	fo->setGroup("standard-hook");
   15.89 -	setupFlag (fo,tb,avis,"hook-green",tr("ok!","Standardflag"));
   15.90 -
   15.91 -	fo->load(flagsPath+"flag-cross-red.png");
   15.92 -	fo->setGroup("standard-hook");
   15.93 -	setupFlag (fo,tb,avis,"cross-red",tr("Not ok!","Standardflag"));
   15.94 -	fo->unsetGroup();
   15.95 -
   15.96 -	fo->load(flagsPath+"flag-stopsign.png");
   15.97 -	setupFlag (fo,tb,avis,"stopsign",tr("This won't work!","Standardflag"));
   15.98 -
   15.99 -	fo->load(flagsPath+"flag-smiley-good.png");
  15.100 -	fo->setGroup("standard-smiley");
  15.101 -	setupFlag (fo,tb,avis,"smiley-good",tr("Good","Standardflag"));
  15.102 -
  15.103 -	fo->load(flagsPath+"flag-smiley-sad.png");
  15.104 -	fo->setGroup("standard-smiley");
  15.105 -	setupFlag (fo,tb,avis,"smiley-sad",tr("Bad","Standardflag"));
  15.106 -
  15.107 -	fo->load(flagsPath+"flag-smiley-omg.png");
  15.108 -	fo->setGroup("standard-smiley");
  15.109 -	setupFlag (fo,tb,avis,"smiley-omb",tr("Oh no!","Standardflag"));
  15.110 +	flag->load(flagsPath+"flag-exclamationmark.png");
  15.111 +	flag->setGroup("standard-mark");
  15.112 +	setupFlag (flag,tb,"exclamationmark",tr("Take care!","Standardflag"));
  15.113 +	
  15.114 +	flag->load(flagsPath+"flag-questionmark.png");
  15.115 +	flag->setGroup("standard-mark");
  15.116 +	setupFlag (flag,tb,"questionmark",tr("Really?","Standardflag"));
  15.117 +
  15.118 +	flag->load(flagsPath+"flag-hook-green.png");
  15.119 +	flag->setGroup("standard-hook");
  15.120 +	setupFlag (flag,tb,"hook-green",tr("ok!","Standardflag"));
  15.121 +
  15.122 +	flag->load(flagsPath+"flag-cross-red.png");
  15.123 +	flag->setGroup("standard-hook");
  15.124 +	setupFlag (flag,tb,"cross-red",tr("Not ok!","Standardflag"));
  15.125 +	flag->unsetGroup();
  15.126 +
  15.127 +	flag->load(flagsPath+"flag-stopsign.png");
  15.128 +	setupFlag (flag,tb,"stopsign",tr("This won't work!","Standardflag"));
  15.129 +
  15.130 +	flag->load(flagsPath+"flag-smiley-good.png");
  15.131 +	flag->setGroup("standard-smiley");
  15.132 +	setupFlag (flag,tb,"smiley-good",tr("Good","Standardflag"));
  15.133 +
  15.134 +	flag->load(flagsPath+"flag-smiley-sad.png");
  15.135 +	flag->setGroup("standard-smiley");
  15.136 +	setupFlag (flag,tb,"smiley-sad",tr("Bad","Standardflag"));
  15.137 +
  15.138 +	flag->load(flagsPath+"flag-smiley-omg.png");
  15.139 +	flag->setGroup("standard-smiley");
  15.140 +	setupFlag (flag,tb,"smiley-omb",tr("Oh no!","Standardflag"));
  15.141  	// Original omg.png (in KDE emoticons)
  15.142 -	fo->unsetGroup();
  15.143 -
  15.144 -	fo->load(flagsPath+"flag-kalarm.png");
  15.145 -	setupFlag (fo,tb,avis,"clock",tr("Time critical","Standardflag"));
  15.146 -
  15.147 -	fo->load(flagsPath+"flag-phone.png");
  15.148 -	setupFlag (fo,tb,avis,"phone",tr("Call...","Standardflag"));
  15.149 -
  15.150 -	fo->load(flagsPath+"flag-lamp.png");
  15.151 -	setupFlag (fo,tb,avis,"lamp",tr("Idea!","Standardflag"));
  15.152 -
  15.153 -	fo->load(flagsPath+"flag-arrow-up.png");
  15.154 -	fo->setGroup("standard-arrow");
  15.155 -	setupFlag (fo,tb,avis,"arrow-up",tr("Important","Standardflag"));
  15.156 -
  15.157 -	fo->load(flagsPath+"flag-arrow-down.png");
  15.158 -	fo->setGroup("standard-arrow");
  15.159 -	setupFlag (fo,tb,avis,"arrow-down",tr("Unimportant","Standardflag"));
  15.160 -
  15.161 -	fo->load(flagsPath+"flag-arrow-2up.png");
  15.162 -	fo->setGroup("standard-arrow");
  15.163 -	setupFlag (fo,tb,avis,"2arrow-up",tr("Very important!","Standardflag"));
  15.164 -
  15.165 -	fo->load(flagsPath+"flag-arrow-2down.png");
  15.166 -	fo->setGroup("standard-arrow");
  15.167 -	setupFlag (fo,tb,avis,"2arrow-down",tr("Very unimportant!","Standardflag"));
  15.168 -	fo->unsetGroup();
  15.169 -
  15.170 -	fo->load(flagsPath+"flag-thumb-up.png");
  15.171 -	fo->setGroup("standard-thumb");
  15.172 -	setupFlag (fo,tb,avis,"thumb-up",tr("I like this","Standardflag"));
  15.173 -
  15.174 -	fo->load(flagsPath+"flag-thumb-down.png");
  15.175 -	fo->setGroup("standard-thumb");
  15.176 -	setupFlag (fo,tb,avis,"thumb-down",tr("I do not like this","Standardflag"));
  15.177 -	fo->unsetGroup();
  15.178 +	flag->unsetGroup();
  15.179 +
  15.180 +	flag->load(flagsPath+"flag-kalarm.png");
  15.181 +	setupFlag (flag,tb,"clock",tr("Time critical","Standardflag"));
  15.182 +
  15.183 +	flag->load(flagsPath+"flag-phone.png");
  15.184 +	setupFlag (flag,tb,"phone",tr("Call...","Standardflag"));
  15.185 +
  15.186 +	flag->load(flagsPath+"flag-lamp.png");
  15.187 +	setupFlag (flag,tb,"lamp",tr("Idea!","Standardflag"));
  15.188 +
  15.189 +	flag->load(flagsPath+"flag-arrow-up.png");
  15.190 +	flag->setGroup("standard-arrow");
  15.191 +	setupFlag (flag,tb,"arrow-up",tr("Important","Standardflag"));
  15.192 +
  15.193 +	flag->load(flagsPath+"flag-arrow-down.png");
  15.194 +	flag->setGroup("standard-arrow");
  15.195 +	setupFlag (flag,tb,"arrow-down",tr("Unimportant","Standardflag"));
  15.196 +
  15.197 +	flag->load(flagsPath+"flag-arrow-2up.png");
  15.198 +	flag->setGroup("standard-arrow");
  15.199 +	setupFlag (flag,tb,"2arrow-up",tr("Very important!","Standardflag"));
  15.200 +
  15.201 +	flag->load(flagsPath+"flag-arrow-2down.png");
  15.202 +	flag->setGroup("standard-arrow");
  15.203 +	setupFlag (flag,tb,"2arrow-down",tr("Very unimportant!","Standardflag"));
  15.204 +	flag->unsetGroup();
  15.205 +
  15.206 +	flag->load(flagsPath+"flag-thumb-up.png");
  15.207 +	flag->setGroup("standard-thumb");
  15.208 +	setupFlag (flag,tb,"thumb-up",tr("I like this","Standardflag"));
  15.209 +
  15.210 +	flag->load(flagsPath+"flag-thumb-down.png");
  15.211 +	flag->setGroup("standard-thumb");
  15.212 +	setupFlag (flag,tb,"thumb-down",tr("I do not like this","Standardflag"));
  15.213 +	flag->unsetGroup();
  15.214  	
  15.215 -	fo->load(flagsPath+"flag-rose.png");
  15.216 -	setupFlag (fo,tb,avis,"rose",tr("Rose","Standardflag"));
  15.217 -
  15.218 -	fo->load(flagsPath+"flag-heart.png");
  15.219 -	setupFlag (fo,tb,avis,"heart",tr("I just love...","Standardflag"));
  15.220 -
  15.221 -	fo->load(flagsPath+"flag-present.png");
  15.222 -	setupFlag (fo,tb,avis,"present",tr("Surprise!","Standardflag"));
  15.223 -
  15.224 -	fo->load(flagsPath+"flag-flash.png");
  15.225 -	setupFlag (fo,tb,avis,"flash",tr("Dangerous","Standardflag"));
  15.226 +	flag->load(flagsPath+"flag-rose.png");
  15.227 +	setupFlag (flag,tb,"rose",tr("Rose","Standardflag"));
  15.228 +
  15.229 +	flag->load(flagsPath+"flag-heart.png");
  15.230 +	setupFlag (flag,tb,"heart",tr("I just love...","Standardflag"));
  15.231 +
  15.232 +	flag->load(flagsPath+"flag-present.png");
  15.233 +	setupFlag (flag,tb,"present",tr("Surprise!","Standardflag"));
  15.234 +
  15.235 +	flag->load(flagsPath+"flag-flash.png");
  15.236 +	setupFlag (flag,tb,"flash",tr("Dangerous","Standardflag"));
  15.237  	
  15.238  	// Original: xsldbg_output.png
  15.239 -	fo->load(flagsPath+"flag-info.png");
  15.240 -	setupFlag (fo,tb,avis,"info",tr("Info","Standardflag"));
  15.241 +	flag->load(flagsPath+"flag-info.png");
  15.242 +	setupFlag (flag,tb,"inflag",tr("Info","Standardflag"));
  15.243  
  15.244  	// Original khelpcenter.png
  15.245 -	fo->load(flagsPath+"flag-lifebelt.png");
  15.246 -	setupFlag (fo,tb,avis,"lifebelt",tr("This will help","Standardflag"));
  15.247 +	flag->load(flagsPath+"flag-lifebelt.png");
  15.248 +	setupFlag (flag,tb,"lifebelt",tr("This will help","Standardflag"));
  15.249  
  15.250  	// Freemind flags
  15.251  
  15.252 -	avis=false;
  15.253 -
  15.254 -	fo->load(flagsPath+"freemind/warning.png");
  15.255 -	setupFlag (fo,tb, avis, "freemind-warning",tr("Important","Freemind-Flag"));
  15.256 +	flag->load(flagsPath+"freemind/warning.png");
  15.257 +	setupFlag (flag,tb,  "freemind-warning",tr("Important","Freemind-Flag"));
  15.258  
  15.259  	for (int i=1; i<8; i++)
  15.260  	{
  15.261 -		fo->load(flagsPath+QString("freemind/priority-%1.png").arg(i));
  15.262 -		setupFlag (fo,tb, avis,QString("freemind-priority-%1").arg(i),tr("Priority","Freemind-Flag"));
  15.263 +		flag->load(flagsPath+QString("freemind/priority-%1.png").arg(i));
  15.264 +		setupFlag (flag,tb, QString("freemind-priority-%1").arg(i),tr("Priority","Freemind-Flag"));
  15.265  	}
  15.266  
  15.267 -	fo->load(flagsPath+"freemind/back.png");
  15.268 -	setupFlag (fo,tb,avis,"freemind-back",tr("Back","Freemind-Flag"));
  15.269 -
  15.270 -	fo->load(flagsPath+"freemind/forward.png");
  15.271 -	setupFlag (fo,tb,avis,"freemind-forward",tr("Forward","Freemind-Flag"));
  15.272 -
  15.273 -	fo->load(flagsPath+"freemind/attach.png");
  15.274 -	setupFlag (fo,tb,avis,"freemind-attach",tr("Look here","Freemind-Flag"));
  15.275 -
  15.276 -	fo->load(flagsPath+"freemind/clanbomber.png");
  15.277 -	setupFlag (fo,tb,avis,"freemind-clanbomber",tr("Dangerous","Freemind-Flag"));
  15.278 -
  15.279 -	fo->load(flagsPath+"freemind/desktopnew.png");
  15.280 -	setupFlag (fo,tb,avis,"freemind-desktopnew",tr("Don't forget","Freemind-Flag"));
  15.281 -
  15.282 -	fo->load(flagsPath+"freemind/flag.png");
  15.283 -	setupFlag (fo,tb,avis,"freemind-flag",tr("Flag","Freemind-Flag"));
  15.284 -
  15.285 -
  15.286 -	fo->load(flagsPath+"freemind/gohome.png");
  15.287 -	setupFlag (fo,tb,avis,"freemind-gohome",tr("Home","Freemind-Flag"));
  15.288 -
  15.289 -
  15.290 -	fo->load(flagsPath+"freemind/kaddressbook.png");
  15.291 -	setupFlag (fo,tb,avis,"freemind-kaddressbook",tr("Telephone","Freemind-Flag"));
  15.292 -
  15.293 -	fo->load(flagsPath+"freemind/knotify.png");
  15.294 -	setupFlag (fo,tb,avis,"freemind-knotify",tr("Music","Freemind-Flag"));
  15.295 -
  15.296 -	fo->load(flagsPath+"freemind/korn.png");
  15.297 -	setupFlag (fo,tb,avis,"freemind-korn",tr("Mailbox","Freemind-Flag"));
  15.298 -
  15.299 -	fo->load(flagsPath+"freemind/mail.png");
  15.300 -	setupFlag (fo,tb,avis,"freemind-mail",tr("Maix","Freemind-Flag"));
  15.301 -
  15.302 -	fo->load(flagsPath+"freemind/password.png");
  15.303 -	setupFlag (fo,tb,avis,"freemind-password",tr("Password","Freemind-Flag"));
  15.304 -
  15.305 -	fo->load(flagsPath+"freemind/pencil.png");
  15.306 -	setupFlag (fo,tb,avis,"freemind-pencil",tr("To be improved","Freemind-Flag"));
  15.307 -
  15.308 -	fo->load(flagsPath+"freemind/stop.png");
  15.309 -	setupFlag (fo,tb,avis,"freemind-stop",tr("Stop","Freemind-Flag"));
  15.310 -
  15.311 -	fo->load(flagsPath+"freemind/wizard.png");
  15.312 -	setupFlag (fo,tb,avis,"freemind-wizard",tr("Magic","Freemind-Flag"));
  15.313 -
  15.314 -	fo->load(flagsPath+"freemind/xmag.png");
  15.315 -	setupFlag (fo,tb,avis,"freemind-xmag",tr("To be discussed","Freemind-Flag"));
  15.316 -
  15.317 -	fo->load(flagsPath+"freemind/bell.png");
  15.318 -	setupFlag (fo,tb,avis,"freemind-bell",tr("Reminder","Freemind-Flag"));
  15.319 -
  15.320 -	fo->load(flagsPath+"freemind/bookmark.png");
  15.321 -	setupFlag (fo,tb,avis,"freemind-bookmark",tr("Excellent","Freemind-Flag"));
  15.322 -
  15.323 -	fo->load(flagsPath+"freemind/penguin.png");
  15.324 -	setupFlag (fo,tb,avis,"freemind-penguin",tr("Linux","Freemind-Flag"));
  15.325 -
  15.326 -	fo->load(flagsPath+"freemind/licq.png");
  15.327 -	setupFlag (fo,tb,avis,"freemind-licq",tr("Sweet","Freemind-Flag"));
  15.328 -
  15.329 -	delete (fo);
  15.330 +	flag->load(flagsPath+"freemind/back.png");
  15.331 +	setupFlag (flag,tb,"freemind-back",tr("Back","Freemind-Flag"));
  15.332 +
  15.333 +	flag->load(flagsPath+"freemind/forward.png");
  15.334 +	setupFlag (flag,tb,"freemind-forward",tr("forward","Freemind-Flag"));
  15.335 +
  15.336 +	flag->load(flagsPath+"freemind/attach.png");
  15.337 +	setupFlag (flag,tb,"freemind-attach",tr("Look here","Freemind-Flag"));
  15.338 +
  15.339 +	flag->load(flagsPath+"freemind/clanbomber.png");
  15.340 +	setupFlag (flag,tb,"freemind-clanbomber",tr("Dangerous","Freemind-Flag"));
  15.341 +
  15.342 +	flag->load(flagsPath+"freemind/desktopnew.png");
  15.343 +	setupFlag (flag,tb,"freemind-desktopnew",tr("Don't flagrget","Freemind-Flag"));
  15.344 +
  15.345 +	flag->load(flagsPath+"freemind/flag.png");
  15.346 +	setupFlag (flag,tb,"freemind-flag",tr("Flag","Freemind-Flag"));
  15.347 +
  15.348 +
  15.349 +	flag->load(flagsPath+"freemind/gohome.png");
  15.350 +	setupFlag (flag,tb,"freemind-gohome",tr("Home","Freemind-Flag"));
  15.351 +
  15.352 +
  15.353 +	flag->load(flagsPath+"freemind/kaddressbook.png");
  15.354 +	setupFlag (flag,tb,"freemind-kaddressbook",tr("Telephone","Freemind-Flag"));
  15.355 +
  15.356 +	flag->load(flagsPath+"freemind/knotify.png");
  15.357 +	setupFlag (flag,tb,"freemind-knotify",tr("Music","Freemind-Flag"));
  15.358 +
  15.359 +	flag->load(flagsPath+"freemind/korn.png");
  15.360 +	setupFlag (flag,tb,"freemind-korn",tr("Mailbox","Freemind-Flag"));
  15.361 +
  15.362 +	flag->load(flagsPath+"freemind/mail.png");
  15.363 +	setupFlag (flag,tb,"freemind-mail",tr("Maix","Freemind-Flag"));
  15.364 +
  15.365 +	flag->load(flagsPath+"freemind/password.png");
  15.366 +	setupFlag (flag,tb,"freemind-password",tr("Password","Freemind-Flag"));
  15.367 +
  15.368 +	flag->load(flagsPath+"freemind/pencil.png");
  15.369 +	setupFlag (flag,tb,"freemind-pencil",tr("To be improved","Freemind-Flag"));
  15.370 +
  15.371 +	flag->load(flagsPath+"freemind/stop.png");
  15.372 +	setupFlag (flag,tb,"freemind-stop",tr("Stop","Freemind-Flag"));
  15.373 +
  15.374 +	flag->load(flagsPath+"freemind/wizard.png");
  15.375 +	setupFlag (flag,tb,"freemind-wizard",tr("Magic","Freemind-Flag"));
  15.376 +
  15.377 +	flag->load(flagsPath+"freemind/xmag.png");
  15.378 +	setupFlag (flag,tb,"freemind-xmag",tr("To be discussed","Freemind-Flag"));
  15.379 +
  15.380 +	flag->load(flagsPath+"freemind/bell.png");
  15.381 +	setupFlag (flag,tb,"freemind-bell",tr("Reminder","Freemind-Flag"));
  15.382 +
  15.383 +	flag->load(flagsPath+"freemind/bookmark.png");
  15.384 +	setupFlag (flag,tb,"freemind-bookmark",tr("Excellent","Freemind-Flag"));
  15.385 +
  15.386 +	flag->load(flagsPath+"freemind/penguin.png");
  15.387 +	setupFlag (flag,tb,"freemind-penguin",tr("Linux","Freemind-Flag"));
  15.388 +
  15.389 +	flag->load(flagsPath+"freemind/licq.png");
  15.390 +	setupFlag (flag,tb,"freemind-licq",tr("Sweet","Freemind-Flag"));
  15.391  }
  15.392  
  15.393 -void Main::setupFlag (FlagObj *fo, QToolBar *tb, bool aw, const QString &name, const QString &tooltip)
  15.394 +void Main::setupFlag (Flag *flag, QToolBar *tb, const QString &name, const QString &tooltip)
  15.395  {
  15.396 -	fo->setName(name);
  15.397 -	fo->setToolTip (tooltip);
  15.398 -	QAction *a=new QAction (fo->getPixmap(),fo->getName(),this);
  15.399 +	flag->setName(name);
  15.400 +	flag->setToolTip (tooltip);
  15.401 +	QAction *a;
  15.402  	if (tb)
  15.403  	{
  15.404 +		a=new QAction (flag->getPixmap(),name,this);
  15.405  		// StandardFlag
  15.406  		tb->addAction (a);
  15.407 -		fo->setAction (a);
  15.408 -		fo->setAlwaysVisible(aw);
  15.409  		a->setCheckable(true);
  15.410 -		a->setObjectName(fo->getName());
  15.411 +		a->setObjectName(name);
  15.412  		a->setToolTip(tooltip);
  15.413  		connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
  15.414 -		standardFlagsDefault->addFlag (fo);	
  15.415 +		standardFlagsMaster->addFlag (flag);	
  15.416  	} else
  15.417  	{
  15.418  		// SystemFlag
  15.419 -		systemFlagsDefault->addFlag (fo);	
  15.420 +		systemFlagsMaster->addFlag (flag);	
  15.421  	}
  15.422  }
  15.423 +
  15.424  // Network Actions
  15.425  void Main::setupNetworkActions()
  15.426  {
  15.427 @@ -2692,107 +2680,6 @@
  15.428  	}
  15.429  }
  15.430  
  15.431 -
  15.432 -void Main::editAttributeFinished()
  15.433 -{
  15.434 -	// only called from editHeading(), so there is a currentME
  15.435 -
  15.436 -	/*
  15.437 -	MapEditor *me=currentMapEditor();
  15.438 -	if (me)
  15.439 -	{
  15.440 -		me->setStateEditHeading (false);
  15.441 -		QPoint p;	//Not used here, only to find out pos of branch
  15.442 -		bool ok;
  15.443 -		QString s=me->getHeading(ok,p);
  15.444 -
  15.445 -#if defined(Q_OS_MACX)
  15.446 -#else
  15.447 -		if (ok && s!=lineedit->text())
  15.448 -			me->setHeading(lineedit->text());
  15.449 -			
  15.450 -		lineedit->releaseKeyboard();
  15.451 -		lineedit->hide();
  15.452 -		setFocus();
  15.453 -#endif	
  15.454 -		if (!actionSettingsAutoSelectNewBranch->isOn() && 
  15.455 -			!prevSelection.isEmpty()) 
  15.456 -			me->select(prevSelection);
  15.457 -		prevSelection="";
  15.458 -	}
  15.459 -	*/
  15.460 -}
  15.461 -
  15.462 -#include "attribute.h"
  15.463 -#include "attributedialog.h"
  15.464 -void Main::editAttribute()
  15.465 -{
  15.466 -/*
  15.467 -	MapEditor *me=currentMapEditor();
  15.468 -	if (me)
  15.469 -	{
  15.470 -		BranchObj *bo=me->getModel()->getSelectedBranch();
  15.471 -		if (bo)
  15.472 -		{
  15.473 -			AttributeDialog dia(this);
  15.474 -			dia.setTable (me->attributeTable() );
  15.475 -			dia.setBranch (bo);
  15.476 -			dia.setMode (Definition);
  15.477 -			dia.updateTable();
  15.478 -			dia.exec();
  15.479 -		}
  15.480 -	}	
  15.481 -	*/
  15.482 -	/*
  15.483 -	if (currentMapEditor())
  15.484 -	{
  15.485 -		MapEditor *me=currentMapEditor();
  15.486 -		QString oldSel=me->getSelectString();
  15.487 -
  15.488 -		if (lineedit->isVisible())
  15.489 -			editAttributeFinished();
  15.490 -		else
  15.491 -		{
  15.492 -			bool ok;
  15.493 -			QPoint p;
  15.494 -			QString s=me->getHeading(ok,p);
  15.495 -
  15.496 -			if (ok)
  15.497 -			{
  15.498 -				me->setStateEditHeading (true);
  15.499 -#if defined(Q_OS_MACX)
  15.500 -				p=me->mapToGlobal (p);
  15.501 -				QDialog *d =new QDialog(NULL);
  15.502 -				QLineEdit *le=new QLineEdit (d);
  15.503 -				d->setWindowFlags (Qt::FramelessWindowHint);
  15.504 -				d->setGeometry(p.x(),p.y(),230,25);
  15.505 -				le->resize (d->width()-10,d->height());
  15.506 -				le->setText (s);
  15.507 -				le->selectAll();
  15.508 -				connect (le, SIGNAL (returnPressed()), d, SLOT (accept()));
  15.509 -				d->activateWindow();
  15.510 -				d->exec();
  15.511 -				me->setHeading (le->text());
  15.512 -				delete (le);
  15.513 -				delete (d);
  15.514 -				editHeadingFinished();
  15.515 -#else
  15.516 -				p=me->mapTo (this,p);
  15.517 -				lineedit->setGeometry(p.x(),p.y(),230,25);
  15.518 -				lineedit->setText(s);
  15.519 -				lineedit->setCursorPosition(1);
  15.520 -				lineedit->selectAll();
  15.521 -				lineedit->show();
  15.522 -				lineedit->grabKeyboard();
  15.523 -				lineedit->setFocus();
  15.524 -#endif
  15.525 -			}
  15.526 -		} 
  15.527 -	} // currentMapEditor()	
  15.528 -
  15.529 -	*/
  15.530 -}
  15.531 -
  15.532  void Main::openVymLinks(const QStringList &vl)
  15.533  {
  15.534  	for (int j=0; j<vl.size(); j++)
  15.535 @@ -2912,13 +2799,13 @@
  15.536  void Main::editMoveUp()
  15.537  {
  15.538  	VymModel *m=currentModel();
  15.539 -	if (m) m->moveBranchUp();
  15.540 +	if (m) m->moveUp();
  15.541  }
  15.542  
  15.543  void Main::editMoveDown()
  15.544  {
  15.545  	VymModel *m=currentModel();
  15.546 -	if (m) m->moveBranchDown();
  15.547 +	if (m) m->moveDown();
  15.548  }
  15.549  
  15.550  void Main::editSortChildren()
  15.551 @@ -3266,32 +3153,20 @@
  15.552  
  15.553  void Main::viewZoomReset()
  15.554  {
  15.555 -	if (currentMapEditor())
  15.556 -	{
  15.557 -		QMatrix m;
  15.558 -		m.reset();
  15.559 -		currentMapEditor()->setMatrix( m );
  15.560 -	}	
  15.561 +	MapEditor *me=currentMapEditor();
  15.562 +	if (me) me->setZoomFactorTarget (1);
  15.563  }
  15.564  
  15.565  void Main::viewZoomIn()
  15.566  {
  15.567 -	if (currentMapEditor())
  15.568 -	{
  15.569 -		QMatrix m = currentMapEditor()->matrix();
  15.570 -		m.scale( 1.25, 1.25 );
  15.571 -		currentMapEditor()->setMatrix( m );
  15.572 -	}	
  15.573 +	MapEditor *me=currentMapEditor();
  15.574 +	if (me) me->setZoomFactorTarget (me->getZoomFactorTarget()*1.25);
  15.575  }
  15.576  
  15.577  void Main::viewZoomOut()
  15.578  {
  15.579 -	if (currentMapEditor())
  15.580 -	{
  15.581 -		QMatrix m = currentMapEditor()->matrix();
  15.582 -		m.scale( 0.8, 0.8 );
  15.583 -		currentMapEditor()->setMatrix( m );
  15.584 -	}	
  15.585 +	MapEditor *me=currentMapEditor();
  15.586 +	if (me) me->setZoomFactorTarget (me->getZoomFactorTarget()*0.75);
  15.587  }
  15.588  
  15.589  void Main::viewCenter()
  15.590 @@ -3523,7 +3398,7 @@
  15.591  		if (!status.isEmpty() ) statusMessage (status);
  15.592  */
  15.593  
  15.594 -		// Update Toolbar // FIXME-1, was so far in BranchObj
  15.595 +		// Update Toolbar // FIXME-0, was so far in BranchObj
  15.596  		//updateFlagsToolbar();
  15.597  
  15.598  		updateActions();
  15.599 @@ -3640,15 +3515,13 @@
  15.600  			}
  15.601  			*/
  15.602  
  15.603 -			standardFlagsDefault->setEnabled (true);
  15.604 -
  15.605  			actionToggleScroll->setEnabled (true);
  15.606  			if ( selbi->isScrolled() )
  15.607  				actionToggleScroll->setOn(true);
  15.608  			else	
  15.609  				actionToggleScroll->setOn(false);
  15.610  
  15.611 -/* FIXME-1 if ( selti->getURL().isEmpty() )
  15.612 +			if ( selti->getURL().isEmpty() )
  15.613  			{
  15.614  				actionOpenURL->setEnabled (false);
  15.615  				actionOpenURLTab->setEnabled (false);
  15.616 @@ -3667,16 +3540,16 @@
  15.617  				actionOpenVymLink->setEnabled (true);
  15.618  				actionDeleteVymLink->setEnabled (true);
  15.619  			}	
  15.620 -*/
  15.621 -/* FIXME-1  if (selbi->canMoveBranchUp()) 
  15.622 +
  15.623 +            if (selbi->canMoveUp()) 
  15.624  				actionMoveUp->setEnabled (true);
  15.625  			else	
  15.626  				actionMoveUp->setEnabled (false);
  15.627 -			if (selbi->canMoveBranchDown()) 
  15.628 +			if (selbi->canMoveDown()) 
  15.629  				actionMoveDown->setEnabled (true);
  15.630  			else	
  15.631  				actionMoveDown->setEnabled (false);
  15.632 -*/
  15.633 +
  15.634  			actionSortChildren->setEnabled (true);
  15.635  
  15.636  			actionToggleHideExport->setEnabled (true);	
  15.637 @@ -3709,7 +3582,7 @@
  15.638  
  15.639  			actionCopy->setEnabled (true);
  15.640  			actionCut->setEnabled (true);	
  15.641 -			actionPaste->setEnabled (false);
  15.642 +			actionPaste->setEnabled (false);	//FIXME-4 why not allowing copy of images?
  15.643  			for (int i=0; i<actionListBranches.size(); ++i)	
  15.644  				actionListBranches.at(i)->setEnabled(false);
  15.645  			actionDelete->setEnabled (true);
  15.646 @@ -3722,7 +3595,6 @@
  15.647  
  15.648  	} else
  15.649  	{
  15.650 -		standardFlagsDefault->setEnabled (false);
  15.651  		actionFileSave->setEnabled (false);	
  15.652  		actionCopy->setEnabled (false);	
  15.653  		actionCut->setEnabled (false);	
  15.654 @@ -3761,11 +3633,6 @@
  15.655  	return actionSettingsAutoSelectNewBranch->isOn();
  15.656  }
  15.657  
  15.658 -bool Main::useFlagGroups()
  15.659 -{
  15.660 -	return actionSettingsUseFlagGroups->isOn();
  15.661 -}
  15.662 -
  15.663  void Main::windowShowNoteEditor()
  15.664  {
  15.665  	textEditor->setShowWithMain(true);
  15.666 @@ -3816,13 +3683,18 @@
  15.667  void Main::standardFlagChanged()
  15.668  {
  15.669  	if (currentModel())
  15.670 -		currentModel()->toggleStandardFlag(sender()->name());
  15.671 +	{
  15.672 +		if ( actionSettingsUseFlagGroups->isOn() )
  15.673 +			currentModel()->toggleStandardFlag(sender()->name(),standardFlagsMaster);
  15.674 +		else	
  15.675 +			currentModel()->toggleStandardFlag(sender()->name());
  15.676 +	}
  15.677  }
  15.678  
  15.679  void Main::testFunction1()
  15.680  {
  15.681 -	//if (!currentMapEditor()) return;
  15.682 -	//currentMapEditor()->testFunction1();
  15.683 +	if (!currentMapEditor()) return;
  15.684 +		currentMapEditor()->testFunction1();
  15.685  	//editAttribute();
  15.686  }
  15.687  
    16.1 --- a/mainwindow.h	Thu May 07 08:48:53 2009 +0000
    16.2 +++ b/mainwindow.h	Wed May 13 08:26:27 2009 +0000
    16.3 @@ -5,6 +5,7 @@
    16.4  
    16.5  #include "branchpropwindow.h"
    16.6  #include "extrainfodialog.h"
    16.7 +#include "flag.h"
    16.8  #include "file.h"
    16.9  #include "findwindow.h"
   16.10  #include "historywindow.h"
   16.11 @@ -58,7 +59,7 @@
   16.12      void setupViewActions();
   16.13      void setupModeActions();
   16.14      void setupWindowActions();
   16.15 -    void setupFlag(FlagObj *fo, QToolBar *tb, bool aw, const QString &name, const QString &tooltip);
   16.16 +    void setupFlag(Flag *flag, QToolBar *tb, const QString &name, const QString &tooltip);
   16.17      void setupFlagActions();
   16.18      void setupNetworkActions();
   16.19      void setupSettingsActions();
   16.20 @@ -133,11 +134,9 @@
   16.21  	void openVymLinks(const QStringList &);
   16.22  	void editVymLink();
   16.23  	void editOpenMultipleVymLinks();
   16.24 -    void editAttributeFinished();
   16.25  public slots:
   16.26      void editHeadingFinished(VymModel *m);
   16.27  //    void editHeading();
   16.28 -    void editAttribute();
   16.29  	void editOpenVymLink();
   16.30  private slots:
   16.31  	void editDeleteVymLink();
   16.32 @@ -223,7 +222,6 @@
   16.33  	ModMode getModMode();
   16.34  	bool autoEditNewBranch();
   16.35  	bool autoSelectNewBranch();
   16.36 -	bool useFlagGroups();
   16.37  	void setScript(const QString &);
   16.38  	void runScript(const QString &);
   16.39  	void runScriptEverywhere (const QString &);
    17.1 --- a/mapcenteritem.cpp	Thu May 07 08:48:53 2009 +0000
    17.2 +++ b/mapcenteritem.cpp	Wed May 13 08:26:27 2009 +0000
    17.3 @@ -135,7 +135,7 @@
    17.4  
    17.5  	if (!getHeading().isEmpty() ) 
    17.6  	{
    17.7 -		mco->updateHeading();
    17.8 +		mco->updateData();	//FIXME-3 better call model->emitDataHasChanged(treeItem);
    17.9  		mco->setColor (headingColor);
   17.10  	}	
   17.11  		
    18.1 --- a/mapcenterobj.cpp	Thu May 07 08:48:53 2009 +0000
    18.2 +++ b/mapcenterobj.cpp	Wed May 13 08:26:27 2009 +0000
    18.3 @@ -108,103 +108,3 @@
    18.4  	if (repositionRequest) reposition();
    18.5  }
    18.6  
    18.7 -QString MapCenterObj::saveToDir (const QString &tmpdir,const QString &prefix, int verbose, const QPointF &offset)
    18.8 -{
    18.9 -    QString s,a;
   18.10 -
   18.11 -/*
   18.12 -	// save area, if not scrolled
   18.13 -	QString areaAttr=
   18.14 -		attribut("x1",QString().setNum(absPos.x()-offset.x())) +
   18.15 -		attribut("y1",QString().setNum(absPos.y()-offset.y())) +
   18.16 -		attribut("x2",QString().setNum(absPos.x()+width()-offset.x())) +
   18.17 -		attribut("y2",QString().setNum(absPos.y()+height()-offset.y()));
   18.18 -	
   18.19 -	// Providing an ID for a branch makes export to XHTML easier
   18.20 -	// FIXME-3
   18.21 -	QString idAttr;
   18.22 -	if (treeItem->xlinkCount()>0)
   18.23 -		idAttr=attribut ("id",mapEditor->getModel()->getSelectString(this)); //TODO directly access model
   18.24 -
   18.25 -	else
   18.26 -		idAttr="";
   18.27 -	
   18.28 -
   18.29 -	QString linkAttr=getLinkAttr();
   18.30 -
   18.31 -    s=beginElement ("mapcenter" 
   18.32 -		+getOrnXMLAttr() 
   18.33 -		+areaAttr 
   18.34 -//		+idAttr 
   18.35 -		+getIncludeImageAttr() );
   18.36 -    incIndent();
   18.37 -    if (heading->getColor()!=QColor("black"))
   18.38 -		a=attribut ("textColor",QColor(heading->getColor()).name() );
   18.39 -    else	
   18.40 -		a="";
   18.41 -    
   18.42 -	// Save flags. If verbose is set (export to xml dir), also write
   18.43 -	// the flags as picture
   18.44 -	s+=standardFlags->saveToDir(tmpdir+"/flags", "/standardFlag-", verbose);
   18.45 -
   18.46 -	// Save heading
   18.47 -    s+=valueElement("heading", treeItem->getHeading(),a);
   18.48 -
   18.49 -	// Save frame
   18.50 -	s+=frame->saveToDir ();
   18.51 -
   18.52 -	// Update of note is usually done while unselecting a branch
   18.53 -	//if (isNoteInEditor) getNoteFromTextEditor();  FIXME-3
   18.54 -
   18.55 -	// save note
   18.56 -	if (!treeItem->getNoteObj().isEmpty() )
   18.57 -		s+=treeItem->getNoteObj().saveToDir();
   18.58 -	
   18.59 -	// Save branches
   18.60 -	for (int i=0; i<treeItem->branchCount(); ++i)
   18.61 -		s+=treeItem->getBranchObjNum(i)->saveToDir(tmpdir,prefix, offset);
   18.62 -
   18.63 -	// Save FloatImages
   18.64 -	for (int i=0; i<floatimage.size(); ++i)
   18.65 -		s+=floatimage.at(i)->saveToDir (tmpdir,prefix);
   18.66 -
   18.67 -	// Save XLinks
   18.68 -	for (int i=0;i<xlink.size(); ++i)
   18.69 -		s+=xlink.at(i)->saveToDir();
   18.70 -
   18.71 -    decIndent();
   18.72 -    s+=endElement   ("mapcenter");
   18.73 -	*/
   18.74 -    return s;
   18.75 -}
   18.76 -
   18.77 -void MapCenterObj::setVersion (const QString &s)
   18.78 -{
   18.79 -	version=s;
   18.80 -}
   18.81 -
   18.82 -void MapCenterObj::setAuthor (const QString &s)
   18.83 -{
   18.84 -	author=s;
   18.85 -}
   18.86 -
   18.87 -QString MapCenterObj::getAuthor()
   18.88 -{
   18.89 -	return author;
   18.90 -}
   18.91 -
   18.92 -void MapCenterObj::setComment (const QString &s)
   18.93 -{
   18.94 -	comment=s;
   18.95 -}
   18.96 -
   18.97 -QString MapCenterObj::getComment ()
   18.98 -{
   18.99 -	return comment;
  18.100 -}
  18.101 -
  18.102 -QString MapCenterObj::getDate ()
  18.103 -{
  18.104 -	return QDate::currentDate().toString ("yyyy-MM-dd");
  18.105 -}
  18.106 -
    19.1 --- a/mapcenterobj.h	Thu May 07 08:48:53 2009 +0000
    19.2 +++ b/mapcenterobj.h	Wed May 13 08:26:27 2009 +0000
    19.3 @@ -27,17 +27,5 @@
    19.4      virtual void moveAllBy (double,double);
    19.5      virtual void updateLink();
    19.6      virtual void updateRelPositions();
    19.7 -	virtual QString saveToDir (const QString&,const QString&,int, const QPointF&);// Save data recursivly to tempdir
    19.8 -	void setVersion(const  QString &);
    19.9 -	void setAuthor  (const QString &);
   19.10 -	QString getAuthor ();
   19.11 -	void setComment (const QString &);
   19.12 -	QString getComment ();
   19.13 -	QString getDate();
   19.14 -private:
   19.15 -	QString version;	//!< version string saved in vym file
   19.16 -	QString author;
   19.17 -	QString comment;
   19.18 -	QDate date;
   19.19  };
   19.20  #endif
    20.1 --- a/mapeditor.cpp	Thu May 07 08:48:53 2009 +0000
    20.2 +++ b/mapeditor.cpp	Wed May 13 08:26:27 2009 +0000
    20.3 @@ -19,7 +19,6 @@
    20.4  extern QString clipboardFile;
    20.5  extern bool clipboardEmpty;
    20.6  extern bool debug;
    20.7 -extern FlagRowObj *standardFlagsDefault;
    20.8  
    20.9  extern QMenu* branchContextMenu;
   20.10  extern QMenu* branchAddContextMenu;
   20.11 @@ -41,6 +40,8 @@
   20.12  	mapScene= new QGraphicsScene(NULL);
   20.13  	mapScene->setBackgroundBrush (QBrush(Qt::white, Qt::SolidPattern));
   20.14  
   20.15 +	zoomFactor=zoomFactorTarget=1;
   20.16 +
   20.17  	model=vm;
   20.18  	model->setScene (mapScene);
   20.19  	model->registerEditor(this);
   20.20 @@ -147,6 +148,105 @@
   20.21      return mapScene;
   20.22  }
   20.23  
   20.24 +void MapEditor::setScrollBarPosTarget (const QRectF &rect)
   20.25 +{
   20.26 +	// Code copied from Qt sources
   20.27 +	int xmargin=50;
   20.28 +	int ymargin=50;
   20.29 +
   20.30 +    qreal width = viewport()->width();
   20.31 +    qreal height = viewport()->height();
   20.32 +    QRectF viewRect = matrix().mapRect(rect);
   20.33 +
   20.34 +    qreal left = horizontalScrollBar()->value();
   20.35 +    qreal right = left + width;
   20.36 +    qreal top = verticalScrollBar()->value();
   20.37 +    qreal bottom = top + height;
   20.38 +
   20.39 +    if (viewRect.left() <= left + xmargin) {
   20.40 +        // need to scroll from the left
   20.41 +  //      if (!d->leftIndent)
   20.42 +            scrollBarPosTarget.setX(int(viewRect.left() - xmargin - 0.5));
   20.43 +    }
   20.44 +    if (viewRect.right() >= right - xmargin) {
   20.45 +        // need to scroll from the right
   20.46 +//        if (!d->leftIndent)
   20.47 +            scrollBarPosTarget.setX(int(viewRect.right() - width + xmargin + 0.5));
   20.48 +    }
   20.49 +    if (viewRect.top() <= top + ymargin) {
   20.50 +        // need to scroll from the top
   20.51 +   //     if (!d->topIndent)
   20.52 +            scrollBarPosTarget.setY(int(viewRect.top() - ymargin - 0.5));
   20.53 +    }
   20.54 +    if (viewRect.bottom() >= bottom - ymargin) {
   20.55 +        // need to scroll from the bottom
   20.56 +//        if (!d->topIndent)
   20.57 +            scrollBarPosTarget.setY(int(viewRect.bottom() - height + ymargin + 0.5));
   20.58 +    }
   20.59 +
   20.60 +	if (scrollBarPosAnimation.state()==QtAbstractAnimation::Running)
   20.61 +		scrollBarPosAnimation.stop();
   20.62 +	scrollBarPosAnimation.setTargetObject (this);
   20.63 +	scrollBarPosAnimation.setPropertyName ("scrollBarPos");
   20.64 +	scrollBarPosAnimation.setDuration(1000);
   20.65 +	scrollBarPosAnimation.setEasingCurve ( QtEasingCurve::OutQuint);
   20.66 +	scrollBarPosAnimation.setStartValue(
   20.67 +		QPointF (horizontalScrollBar()->value() ,
   20.68 +		         verticalScrollBar()->value() ) );
   20.69 +	scrollBarPosAnimation.setEndValue(scrollBarPosTarget);
   20.70 +	scrollBarPosAnimation.start();
   20.71 +}
   20.72 +
   20.73 +QPointF MapEditor::getScrollBarPosTarget()
   20.74 +{
   20.75 +    return scrollBarPosTarget;
   20.76 +}
   20.77 +
   20.78 +
   20.79 +void MapEditor::setScrollBarPos(const QPointF &p)
   20.80 +{
   20.81 +    scrollBarPos=p;
   20.82 +	horizontalScrollBar()->setValue(int(p.x()));
   20.83 +	verticalScrollBar()->setValue(int(p.y()));
   20.84 +}
   20.85 +
   20.86 +QPointF MapEditor::getScrollBarPos()
   20.87 +{
   20.88 +    return scrollBarPos;
   20.89 +}
   20.90 +
   20.91 +void MapEditor::setZoomFactorTarget (const qreal &zft)
   20.92 +{
   20.93 +	zoomFactorTarget=zft;
   20.94 +	if (zoomAnimation.state()==QtAbstractAnimation::Running)
   20.95 +		zoomAnimation.stop();
   20.96 +	//zoomAnimation=QtPropertyAnimation(this, "zoomFactor");
   20.97 +	zoomAnimation.setTargetObject (this);
   20.98 +	zoomAnimation.setPropertyName ("zoomFactor");
   20.99 +	zoomAnimation.setDuration(1000);
  20.100 +	zoomAnimation.setEasingCurve ( QtEasingCurve::OutQuint);
  20.101 +	zoomAnimation.setStartValue(zoomFactor);
  20.102 +	zoomAnimation.setEndValue(zft);
  20.103 +	zoomAnimation.start();
  20.104 +}
  20.105 +
  20.106 +qreal MapEditor::getZoomFactorTarget()
  20.107 +{
  20.108 +    return zoomFactorTarget;
  20.109 +}
  20.110 +
  20.111 +
  20.112 +void MapEditor::setZoomFactor(const qreal &zf)
  20.113 +{
  20.114 +    zoomFactor=zf;
  20.115 +	setMatrix (QMatrix(zf, 0, 0, zf, 0, 0),false );
  20.116 +}
  20.117 +
  20.118 +qreal MapEditor::getZoomFactor()
  20.119 +{
  20.120 +    return zoomFactor;
  20.121 +}
  20.122 +
  20.123  void MapEditor::print()
  20.124  {
  20.125  	if ( !printer ) 
  20.126 @@ -273,42 +373,70 @@
  20.127  
  20.128  void MapEditor::testFunction1()
  20.129  {
  20.130 -	BranchItem *cur=NULL;
  20.131 -	BranchItem *prev=NULL;
  20.132 -	int d;
  20.133 -	cout << "ME::testFunction1  starting to walk the map...\n";
  20.134 -	while (model->next (cur,prev,d) )
  20.135 -		cout << "*** " <<cur->getHeading().toStdString()<<endl;
  20.136 +	
  20.137 +	// Code copied from Qt sources
  20.138 +	QRectF rect=model->getSelectedBranchObj()->getBBox();
  20.139 +	int xmargin=50;
  20.140 +	int ymargin=50;
  20.141  
  20.142 +    qreal width = viewport()->width();
  20.143 +    qreal height = viewport()->height();
  20.144 +    QRectF viewRect = matrix().mapRect(rect);
  20.145  
  20.146 -	//BranchObj *bo=model->getSelectedBranchObj();
  20.147 -	//if (bo) model->moveAway (bo);
  20.148 -	//if (bo) bo->setLinkStyle (LinkableMapObj::Line);
  20.149 -	
  20.150 +    qreal left = horizontalScrollBar()->value();
  20.151 +    qreal right = left + width;
  20.152 +    qreal top = verticalScrollBar()->value();
  20.153 +    qreal bottom = top + height;
  20.154  
  20.155 +    if (viewRect.left() <= left + xmargin) {
  20.156 +        // need to scroll from the left
  20.157 +  //      if (!d->leftIndent)
  20.158 +            horizontalScrollBar()->setValue(int(viewRect.left() - xmargin - 0.5));
  20.159 +    }
  20.160 +    if (viewRect.right() >= right - xmargin) {
  20.161 +        // need to scroll from the right
  20.162 +//        if (!d->leftIndent)
  20.163 +            horizontalScrollBar()->setValue(int(viewRect.right() - width + xmargin + 0.5));
  20.164 +    }
  20.165 +    if (viewRect.top() <= top + ymargin) {
  20.166 +        // need to scroll from the top
  20.167 +   //     if (!d->topIndent)
  20.168 +            verticalScrollBar()->setValue(int(viewRect.top() - ymargin - 0.5));
  20.169 +    }
  20.170 +    if (viewRect.bottom() >= bottom - ymargin) {
  20.171 +        // need to scroll from the bottom
  20.172 +//        if (!d->topIndent)
  20.173 +            verticalScrollBar()->setValue(int(viewRect.bottom() - height + ymargin + 0.5));
  20.174 +    }
  20.175 +	cout << "test1:  hor="<<horizontalScrollBar()->value()<<endl;
  20.176 +	cout << "test1:  ver="<<verticalScrollBar()->value()<<endl;
  20.177 +}
  20.178  /*
  20.179 -	// Displacement and animation of all non-mainbranches
  20.180 -	QPointF p;
  20.181 -	QPointF q;
  20.182 -	BranchObj *bo;
  20.183 -	TreeItem *cur=NULL;
  20.184 -	TreeItem *prev=NULL;
  20.185 -	int d;
  20.186 -	while (cur) 
  20.187 -	{
  20.188 -		bo=(BranchObj*)(cur->getLMO());
  20.189 +	 QtPropertyAnimation *animation=new QtPropertyAnimation(this, "sceneRect");
  20.190 +	 animation->setDuration(5000);
  20.191 +	 //animation->setEasingCurve ( QtEasingCurve::OutElastic);
  20.192 +	 animation->setEasingCurve ( QtEasingCurve::OutQuint);
  20.193 +	 animation->setStartValue(sceneRect() );
  20.194 +	 animation->setEndValue(QRectF(50, 50, 1000, 1000));
  20.195  
  20.196 -		if (cur->depth() >0 && !bo->hasScrolledParent(bo) )
  20.197 -		{
  20.198 -			p=QPointF (qrand() %600-300, qrand () %600-300);
  20.199 -			bo->setRelPos();
  20.200 -			q=bo->getRelPos();
  20.201 -			model->startAnimation (bo,p, q);
  20.202 -		}
  20.203 -		model->next(cur,prev,d);
  20.204 -	}
  20.205 -*/
  20.206 +	 animation->start();
  20.207 +*/	 
  20.208 +/*
  20.209 +	QDialog *dia= new QDialog (this);
  20.210 +	dia->setGeometry (50,50,10,10);
  20.211  
  20.212 +     dia->show();
  20.213 +     dia ->raise();
  20.214 +
  20.215 +	 QtPropertyAnimation *animation=new QtPropertyAnimation(dia, "geometry");
  20.216 +	 animation->setDuration(1000);
  20.217 +	 //animation->setEasingCurve ( QtEasingCurve::OutElastic);
  20.218 +	 animation->setEasingCurve ( QtEasingCurve::OutQuint);
  20.219 +	 animation->setStartValue(QRect(50, 50, 10, 10));
  20.220 +	 animation->setEndValue(QRect(250, 250, 100, 100));
  20.221 +
  20.222 +	 animation->start();
  20.223 + */
  20.224  
  20.225  /* TODO Hide hidden stuff temporary, maybe add this as regular function somewhere
  20.226  	if (hidemode==HideNone)
  20.227 @@ -335,7 +463,6 @@
  20.228  	}	
  20.229  	cout <<"  hidemode="<<hidemode<<endl;
  20.230  	*/
  20.231 -}	
  20.232  	
  20.233  void MapEditor::testFunction2()
  20.234  {
  20.235 @@ -885,40 +1012,43 @@
  20.236  				QString preParStr=model->getSelectString (bsel->getParObj());
  20.237  				QString preNum=QString::number (seli->num(),10);
  20.238  				QString preDstParStr;
  20.239 +				bool relinked;
  20.240  
  20.241  				if (e->state() & Qt::ShiftModifier && dst->getParObj())
  20.242  				{	// Link above dst
  20.243  					preDstParStr=model->getSelectString (dst->getParObj());
  20.244 -					model->relinkBranch ((BranchItem*)seli,(BranchItem*)dsti->parent(),((BranchItem*)dsti)->num());
  20.245 +					relinked=model->relinkBranch ((BranchItem*)seli,(BranchItem*)dsti->parent(),((BranchItem*)dsti)->num());
  20.246  				} else 
  20.247  				if (e->state() & Qt::ControlModifier && dst->getParObj())
  20.248  				{
  20.249  					// Link below dst
  20.250  					preDstParStr=model->getSelectString (dst->getParObj());
  20.251 -					model->relinkBranch ((BranchItem*)seli,(BranchItem*)dsti->parent(),((BranchItem*)seli)->num()+1);
  20.252 +					relinked=model->relinkBranch ((BranchItem*)seli,(BranchItem*)dsti->parent(),((BranchItem*)dsti)->num()+1);
  20.253  				} else	
  20.254  				{	// Append to dst
  20.255  					preDstParStr=model->getSelectString(dst);
  20.256 -					model->relinkBranch ((BranchItem*)seli,(BranchItem*)dsti);
  20.257 +					relinked=model->relinkBranch ((BranchItem*)seli,(BranchItem*)dsti);
  20.258  					if (dsti->depth()==0) bsel->move (savePos);
  20.259  				} 
  20.260 -				QString postSelStr=model->getSelectString(lmosel);
  20.261 -				QString postNum=QString::number (seli->num(),10);
  20.262 +				if (relinked)
  20.263 +				{
  20.264 +					QString postSelStr=model->getSelectString(lmosel);
  20.265 +					QString postNum=QString::number (seli->num(),10);
  20.266  
  20.267 -				QString undoCom="linkTo (\""+ 
  20.268 -					preParStr+ "\"," + preNum  +"," + 
  20.269 -					QString ("%1,%2").arg(movingObj_orgPos.x()).arg(movingObj_orgPos.y())+ ")";
  20.270 +					QString undoCom="linkTo (\""+ 
  20.271 +						preParStr+ "\"," + preNum  +"," + 
  20.272 +						QString ("%1,%2").arg(movingObj_orgPos.x()).arg(movingObj_orgPos.y())+ ")";
  20.273  
  20.274 -				QString redoCom="linkTo (\""+ 
  20.275 -					preDstParStr + "\"," + postNum + "," +
  20.276 -					QString ("%1,%2").arg(savePos.x()).arg(savePos.y())+ ")";
  20.277 +					QString redoCom="linkTo (\""+ 
  20.278 +						preDstParStr + "\"," + postNum + "," +
  20.279 +						QString ("%1,%2").arg(savePos.x()).arg(savePos.y())+ ")";
  20.280  
  20.281 -				model->saveState (
  20.282 -					postSelStr,undoCom,
  20.283 -					preSelStr, redoCom,
  20.284 -					QString("Relink %1 to %2").arg(model->getObjectName(bsel)).arg(model->getObjectName(dst)) );
  20.285 +					model->saveState (
  20.286 +						postSelStr,undoCom,
  20.287 +						preSelStr, redoCom,
  20.288 +						QString("Relink %1 to %2").arg(model->getObjectName(bsel)).arg(model->getObjectName(dst)) );
  20.289  
  20.290 -				model->reposition();	// not necessary if we undo temporary move  below
  20.291 +				}
  20.292  			} else
  20.293  			{
  20.294  				// No destination, undo  temporary move
  20.295 @@ -1135,7 +1265,7 @@
  20.296  	if (ti->isBranchLikeType())
  20.297  	{
  20.298  		BranchObj *bo=(BranchObj*)ti->getLMO();
  20.299 -		bo->updateHeading();
  20.300 +		bo->updateData();
  20.301  	}
  20.302  
  20.303  }
    21.1 --- a/mapeditor.h	Thu May 07 08:48:53 2009 +0000
    21.2 +++ b/mapeditor.h	Wed May 13 08:26:27 2009 +0000
    21.3 @@ -4,6 +4,8 @@
    21.4  #include <QGraphicsView>
    21.5  #include <QItemSelectionModel>
    21.6  
    21.7 +#include <QtPropertyAnimation>	//! Not yet officially in Qt!
    21.8 +
    21.9  #include "attribute.h"
   21.10  #include "ornamentedobj.h"
   21.11  #include "settings.h"
   21.12 @@ -12,8 +14,11 @@
   21.13  
   21.14  /*! \brief Main widget in vym to display and edit a map */
   21.15  
   21.16 -class MapEditor : public QGraphicsView  {	
   21.17 +
   21.18 +class MapEditor : public QGraphicsView {	
   21.19      Q_OBJECT
   21.20 +	Q_PROPERTY(qreal zoomFactor READ getZoomFactor WRITE setZoomFactor)
   21.21 +	Q_PROPERTY(QPointF scrollBarPos READ getScrollBarPos WRITE setScrollBarPos)
   21.22  
   21.23  public:
   21.24      MapEditor(VymModel *vm);
   21.25 @@ -21,6 +26,26 @@
   21.26  	VymModel* getModel();
   21.27  	QGraphicsScene * getScene();
   21.28  
   21.29 +protected:
   21.30 +	QPointF scrollBarPos;
   21.31 +	QPointF scrollBarPosTarget;
   21.32 +	QtPropertyAnimation scrollBarPosAnimation;
   21.33 +public:
   21.34 +	void setScrollBarPosTarget (const QRectF &rect);	//!  ensureVisible of rect
   21.35 +	QPointF getScrollBarPosTarget ();
   21.36 +	void setScrollBarPos (const QPointF &p);
   21.37 +	QPointF getScrollBarPos();
   21.38 +
   21.39 +protected:
   21.40 +	qreal zoomFactor;
   21.41 +	qreal zoomFactorTarget;
   21.42 +	QtPropertyAnimation zoomAnimation;
   21.43 +public:
   21.44 +	void setZoomFactorTarget (const qreal &zf);
   21.45 +	qreal getZoomFactorTarget();
   21.46 +	void setZoomFactor (const qreal &zf);
   21.47 +	qreal getZoomFactor();
   21.48 +
   21.49  public:
   21.50      void print();				//!< Print the map
   21.51  	void setAntiAlias (bool);	//!< Set or unset antialiasing
    22.1 --- a/ornamentedobj.cpp	Thu May 07 08:48:53 2009 +0000
    22.2 +++ b/ornamentedobj.cpp	Wed May 13 08:26:27 2009 +0000
    22.3 @@ -6,9 +6,6 @@
    22.4  #include "linkablemapobj.h"
    22.5  
    22.6  extern TextEditor *textEditor;
    22.7 -extern FlagRowObj *systemFlagsDefault;
    22.8 -extern FlagRowObj *standardFlagsDefault;
    22.9 -
   22.10  
   22.11  /////////////////////////////////////////////////////////////////
   22.12  // OrnamentedObj
   22.13 @@ -46,20 +43,9 @@
   22.14  	heading->move (absPos.x(), absPos.y());
   22.15  
   22.16  	systemFlags=new FlagRowObj(scene);
   22.17 -	systemFlags->clone(systemFlagsDefault);
   22.18 -	systemFlags->setName ("systemFlags");
   22.19 -	
   22.20  	standardFlags=new FlagRowObj(scene);
   22.21 -	standardFlags->clone(standardFlagsDefault);
   22.22 -	standardFlags->setName ("standardFlags");
   22.23 -
   22.24 -	attributes.clear();
   22.25  
   22.26  	frame = new FrameObj (scene);
   22.27 -
   22.28 -	url="";
   22.29 -	vymLink="";
   22.30 -	
   22.31  }
   22.32  
   22.33  void OrnamentedObj::copy (OrnamentedObj* other)
   22.34 @@ -72,9 +58,6 @@
   22.35  	standardFlags->copy (other->standardFlags);
   22.36  
   22.37  	ornamentsBBox=other->ornamentsBBox;
   22.38 -
   22.39 -	url=other->url;
   22.40 -	vymLink=other->vymLink;
   22.41  }
   22.42  
   22.43  void OrnamentedObj::setLinkColor()
   22.44 @@ -246,90 +229,9 @@
   22.45  	move2RelPos (p.x(),p.y());
   22.46  }
   22.47  
   22.48 -void OrnamentedObj::setURL(QString s)
   22.49 +void OrnamentedObj::activateStandardFlag(Flag *flag)
   22.50  {
   22.51 -	url=s;
   22.52 -	if (!url.isEmpty())
   22.53 -		systemFlags->activate("url");
   22.54 -	else	
   22.55 -		systemFlags->deactivate("url");
   22.56 -	calcBBoxSize();			// recalculate bbox
   22.57 -    positionBBox();			// rearrange contents
   22.58 -	forceReposition();
   22.59 -}
   22.60 -
   22.61 -QString OrnamentedObj::getURL()
   22.62 -{
   22.63 -	return url;
   22.64 -}
   22.65 -
   22.66 -void OrnamentedObj::setVymLink(QString s)
   22.67 -{
   22.68 -	if (!s.isEmpty())
   22.69 -	{
   22.70 -		// We need the relative (from loading) 
   22.71 -		// or absolute path (from User event)
   22.72 -		// and build the absolute path.
   22.73 -		// Note: If we have relative, use path of
   22.74 -		// current map to build absolute path
   22.75 -		QDir d(s);
   22.76 -		if (!d.path().startsWith ("/"))
   22.77 -		{
   22.78 -			QString p=model->getDestPath();
   22.79 -			int i=p.findRev("/",-1);
   22.80 -			d.setPath(p.left(i)+"/"+s);
   22.81 -			d.convertToAbs();
   22.82 -		}
   22.83 -		vymLink=d.path();
   22.84 -		systemFlags->activate("vymLink");
   22.85 -	}	
   22.86 -	else	
   22.87 -	{
   22.88 -		systemFlags->deactivate("vymLink");
   22.89 -		vymLink="";
   22.90 -	}	
   22.91 -	calcBBoxSize();			// recalculate bbox
   22.92 -    positionBBox();			// rearrange contents
   22.93 -	forceReposition();
   22.94 -}
   22.95 -
   22.96 -QString OrnamentedObj::getVymLink()
   22.97 -{
   22.98 -	return vymLink;
   22.99 -}
  22.100 -
  22.101 -
  22.102 -void OrnamentedObj::setAttributes (const QList <Attribute> &al)
  22.103 -{
  22.104 -	attributes=al;
  22.105 -}
  22.106 -
  22.107 -QList <Attribute> OrnamentedObj::getAttributes()
  22.108 -{
  22.109 -	return attributes;
  22.110 -}
  22.111 -
  22.112 -void OrnamentedObj::clearStandardFlags()
  22.113 -{
  22.114 -	standardFlags->deactivateAll();
  22.115 -	calcBBoxSize();
  22.116 -	positionBBox();
  22.117 -	move (absPos.x(), absPos.y() );
  22.118 -	forceReposition();
  22.119 -}
  22.120 -
  22.121 -void OrnamentedObj::toggleStandardFlag(const QString &name)
  22.122 -{
  22.123 -	standardFlags->toggle(name);
  22.124 -	calcBBoxSize();
  22.125 -	positionBBox();
  22.126 -	move (absPos.x(), absPos.y() );
  22.127 -	forceReposition();
  22.128 -}
  22.129 -
  22.130 -void OrnamentedObj::activateStandardFlag(const QString &name)
  22.131 -{
  22.132 -	standardFlags->activate(name);
  22.133 +	standardFlags->activate(flag);
  22.134  	calcBBoxSize();
  22.135  	positionBBox();
  22.136  	move (absPos.x(), absPos.y() );
  22.137 @@ -345,22 +247,12 @@
  22.138  	forceReposition();
  22.139  }
  22.140  
  22.141 -bool OrnamentedObj::isSetStandardFlag (const QString &name)
  22.142 -{
  22.143 -	return standardFlags->isActive(name);
  22.144 -}
  22.145  
  22.146  QString OrnamentedObj::getSystemFlagName(const QPointF &p)
  22.147  {
  22.148  	return systemFlags->getFlagName(p);	
  22.149  }
  22.150  
  22.151 -bool OrnamentedObj::isActiveFlag (const QString &name)
  22.152 -{
  22.153 -	if (standardFlags->isActive (name) ) return true;
  22.154 -	return false;
  22.155 -}
  22.156 -
  22.157  /* FIXME-3 should move to VymView ?!  void OrnamentedObj::getNoteFromTextEditor ()
  22.158  {
  22.159  	note.setFilenameHint (textEditor->getFilename());
  22.160 @@ -369,41 +261,7 @@
  22.161  }
  22.162  */
  22.163  
  22.164 -void OrnamentedObj::updateSystemFlags()
  22.165 -{
  22.166 -	// FIXME-3 check if note here and text in editor are still in sync!!	
  22.167 -	// Best would be to always have current text here...
  22.168 -	bool noteEmpty=treeItem->getNoteObj().isEmpty();
  22.169 -	/*
  22.170 -	if (isNoteInEditor)
  22.171 -		noteEmpty=textEditor->isEmpty();
  22.172 -	else	
  22.173 -		noteEmpty=note.isEmpty();
  22.174 -	*/	
  22.175 -
  22.176 -	if (!noteEmpty)
  22.177 -	{	
  22.178 -		if (systemFlags->isActive ("note")) return;
  22.179 -		systemFlags->activate("note");
  22.180 -	}	
  22.181 -	else		
  22.182 -	{	
  22.183 -		if (!systemFlags->isActive ("note")) return;
  22.184 -		systemFlags->deactivate("note");
  22.185 -	}	
  22.186 -	//model->setChanged();
  22.187 -	calcBBoxSize();
  22.188 -	positionBBox();	
  22.189 -	move (absPos.x(), absPos.y() );
  22.190 -	forceReposition();
  22.191 -}	
  22.192 -
  22.193 -void OrnamentedObj::updateFlagsToolbar()
  22.194 -{
  22.195 -	standardFlags->updateToolbar();
  22.196 -}
  22.197 -
  22.198 -QString OrnamentedObj::getOrnXMLAttr()
  22.199 +QString OrnamentedObj::getOrnXMLAttr()	//FIXME-2
  22.200  {
  22.201  	QString posAttr;
  22.202  
  22.203 @@ -424,20 +282,12 @@
  22.204  			posAttr="";
  22.205  	}	
  22.206  
  22.207 -	QString urlAttr;
  22.208 -	if (!url.isEmpty())
  22.209 -		urlAttr=attribut ("url",url);
  22.210 -
  22.211 -	QString vymLinkAttr;
  22.212 -	if (!vymLink.isEmpty())
  22.213 -		vymLinkAttr=attribut ("vymLink",convertToRel(model->getDestPath(),vymLink) );
  22.214 -
  22.215  /* FIXME-2 QString hideExpAttr;
  22.216  	if (hideExport)
  22.217  		hideExpAttr= attribut("hideInExport","true");
  22.218  	else	
  22.219  		hideExpAttr="";
  22.220  */
  22.221 -	return posAttr +urlAttr +vymLinkAttr +getLinkAttr() ;//+hideExpAttr;
  22.222 +	return posAttr +getLinkAttr() ;//+hideExpAttr;
  22.223  }
  22.224  
    23.1 --- a/ornamentedobj.h	Thu May 07 08:48:53 2009 +0000
    23.2 +++ b/ornamentedobj.h	Wed May 13 08:26:27 2009 +0000
    23.3 @@ -11,8 +11,6 @@
    23.4  	- frame
    23.5  	- note
    23.6  	- references
    23.7 -		- URL
    23.8 -		-vymLink
    23.9  	- flags
   23.10  		- standard flags
   23.11  		- system flags
   23.12 @@ -53,24 +51,9 @@
   23.13      virtual void move2RelPos (QPointF);		// move relativly to parent^
   23.14      virtual void move2RelPos (double,double);
   23.15  
   23.16 -    virtual void setURL (QString);
   23.17 -    virtual QString getURL ();
   23.18 -
   23.19 -    virtual void setVymLink (QString);
   23.20 -    virtual QString getVymLink ();
   23.21 -
   23.22 -	virtual void setAttributes (const QList <Attribute> &al);
   23.23 -	virtual QList <Attribute> getAttributes ();
   23.24 -
   23.25 -	virtual void clearStandardFlags();
   23.26 -	virtual void toggleStandardFlag(const QString &name);
   23.27 -	virtual void activateStandardFlag(const QString &name);
   23.28 +	virtual void activateStandardFlag(Flag *flag);
   23.29  	virtual void deactivateStandardFlag(const QString &name);
   23.30 -	virtual bool isSetStandardFlag(const QString &name);
   23.31  	virtual QString getSystemFlagName (const QPointF &p);
   23.32 -	virtual bool isActiveFlag(const QString&);	// check if flag is set
   23.33 -	virtual void updateSystemFlags();
   23.34 -	virtual void updateFlagsToolbar();
   23.35  
   23.36  	//virtual void getNoteFromTextEditor ();// FIXME-3 should move to vymview?!
   23.37  	virtual QString getOrnXMLAttr();		// get attributes for saveToDir
   23.38 @@ -81,9 +64,6 @@
   23.39  	FlagRowObj *standardFlags;		// Standard Flags
   23.40  	FrameObj *frame;				// frame around object
   23.41  	QRectF ornamentsBBox;			// bbox of flags and heading
   23.42 -	QString url;					// url to external doc
   23.43 -	QString vymLink;				// path to another map  // FIXME-3 remove this
   23.44 -	QList <Attribute> attributes;	// List with attributes
   23.45  };
   23.46  
   23.47  #endif
    24.1 --- a/treeitem.cpp	Thu May 07 08:48:53 2009 +0000
    24.2 +++ b/treeitem.cpp	Wed May 13 08:26:27 2009 +0000
    24.3 @@ -278,20 +278,72 @@
    24.4  	return headingColor;
    24.5  }
    24.6  
    24.7 -void TreeItem::setNote(const QString s)
    24.8 +void TreeItem::setURL (const QString &u)
    24.9  {
   24.10 -	note.setNote(s);
   24.11 -	// updateNoteFlag();  FIXME-2 needed?
   24.12 -	if (model) 
   24.13 -		model->emitNoteHasChanged (this);
   24.14 +	url=u;
   24.15 +	if (!url.isEmpty())
   24.16 +		systemFlags.activate ("system-url");
   24.17 +	else
   24.18 +		systemFlags.deactivate ("system-url");
   24.19 +}
   24.20 +
   24.21 +QString TreeItem::getURL ()
   24.22 +{
   24.23 +	return url;
   24.24 +}
   24.25 +
   24.26 +void TreeItem::setVymLink (const QString &vl)
   24.27 +{
   24.28 +	if (!vl.isEmpty())
   24.29 +	{
   24.30 +		// We need the relative (from loading) 
   24.31 +		// or absolute path (from User event)
   24.32 +		// and build the absolute path.
   24.33 +		// Note: If we have relative, use path of
   24.34 +		// current map to build absolute path
   24.35 +		QDir d(vl);
   24.36 +		if (!d.path().startsWith ("/"))
   24.37 +		{
   24.38 +			QString p=model->getDestPath();
   24.39 +			int i=p.findRev("/",-1);
   24.40 +			d.setPath(p.left(i)+"/"+vl);
   24.41 +			d.convertToAbs();
   24.42 +		}
   24.43 +		vymLink=d.path();
   24.44 +		systemFlags.activate("system-vymLink");
   24.45 +	}	
   24.46 +	else	
   24.47 +	{
   24.48 +		systemFlags.deactivate("system-vymLink");
   24.49 +		vymLink.clear();
   24.50 +	}	
   24.51 +}
   24.52 +
   24.53 +QString TreeItem::getVymLink ()
   24.54 +{
   24.55 +	return vymLink;
   24.56 +}
   24.57 +
   24.58 +void TreeItem::setNote(const QString &s)
   24.59 +{
   24.60 +	NoteObj n;
   24.61 +	n.setNote(s);
   24.62 +	setNoteObj (n,false);
   24.63 +}
   24.64 +
   24.65 +void TreeItem::clearNote()
   24.66 +{
   24.67 +	note.clear();
   24.68 +	systemFlags.deactivate ("system-note");
   24.69  }
   24.70  
   24.71  void TreeItem::setNoteObj(const NoteObj &n, bool updateNoteEditor)
   24.72  {
   24.73  	note=n;
   24.74 -	// updateNoteFlag();  FIXME-2 needed?
   24.75 -	if (model && updateNoteEditor)	
   24.76 -		model->emitNoteHasChanged (this);
   24.77 +	if (!note.isEmpty() && !systemFlags.isActive ("system-note"))
   24.78 +		systemFlags.activate ("system-note");
   24.79 +	if (note.isEmpty() && systemFlags.isActive ("system-note"))
   24.80 +		systemFlags.deactivate ("system-note");
   24.81  }
   24.82  
   24.83  QString TreeItem::getNote()
   24.84 @@ -321,28 +373,26 @@
   24.85  
   24.86  void TreeItem::activateStandardFlag (const QString &name)
   24.87  {
   24.88 -	cout << "TI::activateStandardFlag "<<name.toStdString()<<" for item "<<getHeadingStd()<<endl;
   24.89 -	cout << "   lmo="<<lmo<< "  "<<isBranchLikeType()<<endl;
   24.90  	standardFlags.activate (name);
   24.91 -	if (lmo &&isBranchLikeType() ) 
   24.92 -		((BranchObj*)lmo)->activateStandardFlag (name);
   24.93 +	model->emitDataHasChanged(this);
   24.94  }
   24.95  
   24.96  void TreeItem::deactivateStandardFlag (const QString &name)
   24.97  {
   24.98 -	cout << "TI::deactivateStandardFlag "<<name.toStdString()<<" for item "<<getHeadingStd()<<endl;
   24.99  	standardFlags.deactivate (name);
  24.100 -	if (lmo &&isBranchLikeType() ) 
  24.101 -		((BranchObj*)lmo)->deactivateStandardFlag (name);
  24.102 +	model->emitDataHasChanged(this);
  24.103  }
  24.104  
  24.105 -void TreeItem::toggleStandardFlag(const QString &name)
  24.106 +void TreeItem::deactivateAllStandardFlags ()
  24.107  {
  24.108 -	cout << "TI::toggleStandardFlag "<<name.toStdString()<<" for item "<<getHeadingStd()<<endl;
  24.109 -	if (standardFlags.isActive (name))
  24.110 -		deactivateStandardFlag (name);
  24.111 -	else	
  24.112 -		activateStandardFlag (name);
  24.113 +	standardFlags.deactivateAll ();
  24.114 +	model->emitDataHasChanged(this);
  24.115 +}
  24.116 +
  24.117 +void TreeItem::toggleStandardFlag(const QString &name, FlagRow *master)
  24.118 +{
  24.119 +	standardFlags.toggle (name,master);
  24.120 +	model->emitDataHasChanged(this);
  24.121  }
  24.122  
  24.123  bool TreeItem::isActiveStandardFlag (const QString &name)
  24.124 @@ -350,6 +400,52 @@
  24.125  	return standardFlags.isActive (name);
  24.126  }
  24.127  
  24.128 +QStringList TreeItem::activeStandardFlagNames ()
  24.129 +{
  24.130 +	return standardFlags.activeFlagNames();
  24.131 +}
  24.132 +
  24.133 +QStringList TreeItem::activeSystemFlagNames ()	//FIXME-1 missing: scrolled-tmp,hideInExport
  24.134 +{
  24.135 +	return systemFlags.activeFlagNames();
  24.136 +}
  24.137 +
  24.138 +bool TreeItem::canMoveDown()
  24.139 +{
  24.140 +	switch (type)
  24.141 +	{
  24.142 +		case Undefined: return false;
  24.143 +		case MapCenter: 
  24.144 +		case Branch: 
  24.145 +			if (!parentItem) return false;
  24.146 +			if (parentItem->num (this) < parentItem->branchCount()-1)
  24.147 +				return true;
  24.148 +			else
  24.149 +				return false;
  24.150 +			break;	
  24.151 +		case Image: return false;
  24.152 +		default: return false;
  24.153 +	}
  24.154 +}
  24.155 +
  24.156 +bool TreeItem::canMoveUp()
  24.157 +{
  24.158 +	switch (type)
  24.159 +	{
  24.160 +		case Undefined: return false;
  24.161 +		case MapCenter: 
  24.162 +		case Branch: 
  24.163 +			if (!parentItem) return false;
  24.164 +			if (parentItem->num (this) > 0)
  24.165 +				return true;
  24.166 +			else
  24.167 +				return false;
  24.168 +			break;	
  24.169 +		case Image: return false;
  24.170 +		default: return false;
  24.171 +	}
  24.172 +}
  24.173 +
  24.174  void TreeItem::setID (const QString &s)
  24.175  {
  24.176  	objID=s;
    25.1 --- a/treeitem.h	Thu May 07 08:48:53 2009 +0000
    25.2 +++ b/treeitem.h	Wed May 13 08:26:27 2009 +0000
    25.3 @@ -25,7 +25,8 @@
    25.4      ~TreeItem();
    25.5  	void init();
    25.6  
    25.7 -	virtual QString saveToDir (const QString &tmpdir,const QString &prefix, const QPointF& offset);
    25.8 +	virtual QString saveToDir (const QString &tmpdir=QString(),const
    25.9 +	QString &prefix=QString(), const QPointF& offset=QPointF());
   25.10  
   25.11  
   25.12  	// General housekeeping
   25.13 @@ -65,6 +66,7 @@
   25.14  // Accessing data
   25.15      virtual QVariant data(int column) const;
   25.16  
   25.17 +
   25.18  protected:
   25.19  	QColor headingColor;
   25.20  public:	
   25.21 @@ -74,10 +76,26 @@
   25.22  	virtual void setHeadingColor(QColor color);	//! Set color of heading. In BranchItem overloaded to update QGraphicsView
   25.23  	virtual QColor getHeadingColor();			//! Returns color of heading
   25.24  
   25.25 +
   25.26 +protected:
   25.27 +	QString url;
   25.28 +public:
   25.29 +	void setURL (const QString &url);			//! Set URL
   25.30 +	QString getURL ();							//! Get URL
   25.31 +
   25.32 +
   25.33 +protected:
   25.34 +	QString vymLink;
   25.35 +public:
   25.36 +	void setVymLink (const QString &url);			//! Set URL
   25.37 +	QString getVymLink ();							//! Get URL
   25.38 +
   25.39 +
   25.40  protected:
   25.41  	NoteObj note;
   25.42  public:	
   25.43 -	virtual void setNote(const QString s);
   25.44 +	virtual void setNote(const QString &s);
   25.45 +	virtual void clearNote();
   25.46  	virtual QString getNote();
   25.47  	virtual void setNoteObj(const NoteObj &, bool updateNoteEditor=true);
   25.48  	virtual NoteObj getNoteObj();			
   25.49 @@ -85,15 +103,27 @@
   25.50      virtual QString getNoteASCII();			// returns note	(ASCII)
   25.51      virtual QString getNoteOpenDoc();		// returns note	(OpenDoc)
   25.52  
   25.53 +
   25.54  protected:
   25.55  	FlagRow standardFlags;
   25.56 +	FlagRow systemFlags;
   25.57  public:	
   25.58  	virtual void activateStandardFlag(const QString &flag);
   25.59  	virtual void deactivateStandardFlag(const QString &flag);
   25.60 -	virtual void toggleStandardFlag(const QString &flag);
   25.61 +	virtual void deactivateAllStandardFlags();
   25.62 +
   25.63 +	/*! \brief Toggle a Flag 
   25.64 +	    If master is not NULL,, only one Flag from FlagRow master may 
   25.65 +		be active simultanously, the others get deactivated.
   25.66 +	*/	
   25.67 +	virtual void toggleStandardFlag(const QString &flag, FlagRow *master=NULL);
   25.68  	virtual bool isActiveStandardFlag (const QString &flag);
   25.69 +	virtual QStringList activeStandardFlagNames();
   25.70 +	virtual QStringList activeSystemFlagNames();
   25.71  
   25.72  
   25.73 +	virtual bool canMoveDown();
   25.74 +	virtual bool canMoveUp();
   25.75  
   25.76  protected:
   25.77  	QString objID;					//! id set during load/save currently used for xLinks
    26.1 --- a/version.h	Thu May 07 08:48:53 2009 +0000
    26.2 +++ b/version.h	Wed May 13 08:26:27 2009 +0000
    26.3 @@ -7,7 +7,7 @@
    26.4  #define __VYM_VERSION "1.13.0"
    26.5  //#define __VYM_CODENAME "Codename: RC-1"
    26.6  #define __VYM_CODENAME "Codename: development version, not for production!"
    26.7 -#define __VYM_BUILD_DATE "2009-05-01"
    26.8 +#define __VYM_BUILD_DATE "2009-05-13"
    26.9  
   26.10  
   26.11  bool checkVersion(const QString &);
    27.1 --- a/vym.pro	Thu May 07 08:48:53 2009 +0000
    27.2 +++ b/vym.pro	Wed May 13 08:26:27 2009 +0000
    27.3 @@ -4,6 +4,12 @@
    27.4  CONFIG	+= qt warn_on release debug
    27.5  CONFIG += x86 ppc
    27.6  
    27.7 +
    27.8 +include (/data/qtanimationframework-2.3-opensource/src/gui-animation.pri)
    27.9 +include (/data/qtanimationframework-2.3-opensource/src/corelib-animation.pri)
   27.10 +include (/data/qtanimationframework-2.3-opensource/src/qtanimationframework.pri)
   27.11 +
   27.12 +
   27.13  TRANSLATIONS += lang/vym_de.ts
   27.14  TRANSLATIONS += lang/vym_en.ts
   27.15  TRANSLATIONS += lang/vym_es.ts
   27.16 @@ -29,9 +35,9 @@
   27.17  	aboutdialog.h \
   27.18  	animpoint.h \
   27.19  	attribute.h \
   27.20 -	attributedelegate.h\
   27.21 -	attributedialog.h \
   27.22 -	attributewidget.h \
   27.23 +#	attributedelegate.h\
   27.24 +#	attributedialog.h \
   27.25 +#	attributewidget.h \
   27.26  	branchitem.h \
   27.27  	branchobj.h \
   27.28  	branchpropwindow.h\
   27.29 @@ -42,6 +48,7 @@
   27.30  	extrainfodialog.h \
   27.31  	file.h \
   27.32  	findwindow.h \
   27.33 +	flag.h \
   27.34  	flagobj.h \
   27.35  	flagrowobj.h \
   27.36  	flagrow.h \
   27.37 @@ -89,9 +96,9 @@
   27.38  	aboutdialog.cpp \
   27.39  	animpoint.cpp \
   27.40  	attribute.cpp \
   27.41 -	attributedelegate.cpp \
   27.42 -	attributedialog.cpp \
   27.43 -	attributewidget.cpp \
   27.44 +#	attributedelegate.cpp \
   27.45 +#	attributedialog.cpp \
   27.46 +#	attributewidget.cpp \
   27.47  	branchitem.cpp \
   27.48  	branchobj.cpp \
   27.49  	branchpropwindow.cpp \
   27.50 @@ -102,6 +109,7 @@
   27.51  	extrainfodialog.cpp \
   27.52  	file.cpp \
   27.53  	findwindow.cpp \
   27.54 +	flag.cpp \
   27.55  	flagobj.cpp \
   27.56  	flagrow.cpp \
   27.57  	flagrowobj.cpp \
    28.1 --- a/vymmodel.cpp	Thu May 07 08:48:53 2009 +0000
    28.2 +++ b/vymmodel.cpp	Wed May 13 08:26:27 2009 +0000
    28.3 @@ -44,8 +44,6 @@
    28.4  extern QDir lastImageDir;
    28.5  extern QDir lastFileDir;
    28.6  
    28.7 -extern FlagRowObj *standardFlagsDefault;
    28.8 -
    28.9  extern Settings settings;
   28.10  
   28.11  
   28.12 @@ -234,7 +232,7 @@
   28.13  	xml.incIndent();
   28.14  
   28.15  	// Find the used flags while traversing the tree	// FIXME-2 this can be done local to vymmodel maybe...
   28.16 -	standardFlagsDefault->resetUsedCounter();
   28.17 +	//FIXME-2 not used any longer: standardFlagsDefault->resetUsedCounter();
   28.18  	
   28.19  	// Reset the counters before saving
   28.20  	// TODO constr. of FIO creates lots of objects, better do this in some other way...
   28.21 @@ -267,8 +265,7 @@
   28.22  	xml.decIndent();
   28.23  	s+=xml.endElement("vymmap");
   28.24  
   28.25 -	if (writeflags)
   28.26 -		standardFlagsDefault->saveToDir (tmpdir+"/flags/","",writeflags);
   28.27 +	// FIXME-2 if (writeflags) standardFlagsDefault->saveToDir (tmpdir+"/flags/","",writeflags);
   28.28  	return s;
   28.29  }
   28.30  
   28.31 @@ -1514,14 +1511,11 @@
   28.32  			"setHeading (\""+s+"\")", 
   28.33  			QString("Set heading of %1 to \"%2\"").arg(getObjectName(selbi)).arg(s) );
   28.34  		selbi->setHeading(s );
   28.35 -		QModelIndex ix2=index (selbi);
   28.36 -		emit (dataChanged ( ix2,ix2));
   28.37 -		/* FIXME-3 testing only
   28.38 -		*/
   28.39 +		emitDataHasChanged ( selbi);	//FIXME-3 maybe emit signal from TreeItem? 
   28.40  
   28.41  		reposition();
   28.42  //		selection.update();	//FIXME-4
   28.43 -		emitShowSelection();
   28.44 +		updateSelection();
   28.45  	}
   28.46  }
   28.47  
   28.48 @@ -1597,38 +1591,33 @@
   28.49  			// which is (still) needed to create MapCenters
   28.50  }
   28.51  
   28.52 -void VymModel::setURL(const QString &url) //FIXME-2
   28.53 -{
   28.54 -/*
   28.55 -	BranchObj *bo=getSelectedBranch();
   28.56 -	if (bo)
   28.57 +void VymModel::setURL(const QString &url) 
   28.58 +{
   28.59 +	TreeItem *selti=getSelectedItem();
   28.60 +	if (selti)
   28.61  	{
   28.62 -		QString oldurl=bo->getURL();
   28.63 -		bo->setURL (url);
   28.64 +		QString oldurl=selti->getURL();
   28.65 +		selti->setURL (url);
   28.66  		saveState (
   28.67 -			bo,
   28.68 +			selti,
   28.69  			QString ("setURL (\"%1\")").arg(oldurl),
   28.70 -			bo,
   28.71 +			selti,
   28.72  			QString ("setURL (\"%1\")").arg(url),
   28.73 -			QString ("set URL of %1 to %2").arg(getObjectName(bo)).arg(url)
   28.74 +			QString ("set URL of %1 to %2").arg(getObjectName(selti)).arg(url)
   28.75  		);
   28.76 -		updateActions();
   28.77  		reposition();
   28.78 -		selection.update();
   28.79 +		emitDataHasChanged (selti);
   28.80  		emitShowSelection();
   28.81  	}
   28.82 -*/
   28.83  }	
   28.84  
   28.85 -QString VymModel::getURL()	//FIXME-2
   28.86 -{
   28.87 -/*
   28.88 -	BranchObj *bo=getSelectedBranch();
   28.89 -	if (bo)
   28.90 -		return bo->getURL();
   28.91 -	else
   28.92 -		return "";
   28.93 -*/
   28.94 +QString VymModel::getURL()	
   28.95 +{
   28.96 +	TreeItem *selti=getSelectedItem();
   28.97 +	if (selti)
   28.98 +		return selti->getURL();
   28.99 +	else	
  28.100 +		return QString();
  28.101  }
  28.102  
  28.103  QStringList VymModel::getURLs()	// FIXME-1	first, next moved to vymmodel
  28.104 @@ -1864,20 +1853,19 @@
  28.105  }
  28.106  
  28.107  
  28.108 -void VymModel::copy()	//FIXME-2
  28.109 -{
  28.110 -/*
  28.111 -	LinkableMapObj *sel=getSelectedLMO();
  28.112 -	if (sel &&
  28.113 -		(selectionType() == TreeItem::Branch || 
  28.114 -		selectionType() == TreeItem::MapCenter  ||
  28.115 -		selectionType() == TreeItem::Image ))
  28.116 +void VymModel::copy()	
  28.117 +{
  28.118 +	TreeItem *selti=getSelectedItem();
  28.119 +	if (selti &&
  28.120 +		(selti->getType() == TreeItem::Branch || 
  28.121 +		selti->getType() == TreeItem::MapCenter  ||
  28.122 +		selti->getType() == TreeItem::Image ))
  28.123  	{
  28.124  		if (redosAvail == 0)
  28.125  		{
  28.126  			// Copy to history
  28.127 -			QString s=getSelectString(sel);
  28.128 -			saveState (PartOfMap, s, "nop ()", s, "copy ()","Copy selection to clipboard",sel  );
  28.129 +			QString s=getSelectString(selti);
  28.130 +			saveState (PartOfMap, s, "nop ()", s, "copy ()","Copy selection to clipboard",selti  );
  28.131  			curClipboard=curStep;
  28.132  		}
  28.133  
  28.134 @@ -1889,13 +1877,11 @@
  28.135  		clipboardEmpty=false;
  28.136  		updateActions();
  28.137  	}	    
  28.138 -*/	
  28.139  }
  28.140  
  28.141  
  28.142 -void VymModel::pasteNoSave(const int &n)	//FIXME-2
  28.143 -{
  28.144 -/*
  28.145 +void VymModel::pasteNoSave(const int &n)
  28.146 +{
  28.147  	bool old=blockSaveState;
  28.148  	blockSaveState=true;
  28.149  	bool zippedOrg=zipped;
  28.150 @@ -1910,87 +1896,59 @@
  28.151  		load (clipboardDir+"/"+clipboardFile,ImportAdd, VymMap);
  28.152  	zipped=zippedOrg;
  28.153  	blockSaveState=old;
  28.154 -*/
  28.155  }
  28.156  
  28.157 -void VymModel::paste()		//FIXME-2
  28.158 +void VymModel::paste()	
  28.159  {   
  28.160 -/*
  28.161 -	BranchObj *sel=getSelectedBranch();
  28.162 -	if (sel)
  28.163 +	BranchItem *selbi=getSelectedBranchItem();
  28.164 +	if (selbi)
  28.165  	{
  28.166  		saveStateChangingPart(
  28.167 -			sel,
  28.168 -			sel,
  28.169 +			selbi,
  28.170 +			selbi,
  28.171  			QString ("paste (%1)").arg(curClipboard),
  28.172 -			QString("Paste to %1").arg( getObjectName(sel))
  28.173 +			QString("Paste to %1").arg( getObjectName(selbi))
  28.174  		);
  28.175  		pasteNoSave(0);
  28.176  		reposition();
  28.177  	}
  28.178 -*/	
  28.179  }
  28.180  
  28.181 -void VymModel::cut()	//FIXME-2
  28.182 -{
  28.183 -/*
  28.184 -	LinkableMapObj *sel=getSelectedLMO();
  28.185 -	if ( sel && (selectionType() == TreeItem::Branch ||
  28.186 -		selectionType()==TreeItem::MapCenter ||
  28.187 -		selectionType()==TreeItem::Image))
  28.188 +void VymModel::cut()	
  28.189 +{
  28.190 +	TreeItem *selti=getSelectedItem();
  28.191 +	if ( selti && (selti->isBranchLikeType() ||selti->getType()==TreeItem::Image))
  28.192  	{
  28.193 -*/
  28.194 -	/* No savestate! savestate is called in cutNoSave
  28.195 -		saveStateChangingPart(
  28.196 -			sel->getParObj(),
  28.197 -			sel,
  28.198 -			"cut ()",
  28.199 -			QString("Cut %1").arg(getObjectName(sel ))
  28.200 -		);
  28.201 -	*/	
  28.202 -/*	
  28.203  		copy();
  28.204  		deleteSelection();
  28.205  		reposition();
  28.206  	}
  28.207 -*/}
  28.208 -
  28.209 -void VymModel::moveBranchUp()	//FIXME-2
  28.210 -{
  28.211 -/*
  28.212 -	BranchObj* bo=getSelectedBranch();
  28.213 -	BranchObj* par;
  28.214 -	if (bo)
  28.215 +}
  28.216 +
  28.217 +void VymModel::moveUp()	
  28.218 +{
  28.219 +	BranchItem *selbi=getSelectedBranchItem();
  28.220 +	if (selbi)
  28.221  	{
  28.222 -		if (!bo->canMoveBranchUp()) return;
  28.223 -		par=(BranchObj*)(bo->getParObj());
  28.224 -		BranchObj *obo=par->moveBranchUp (bo);	// bo will be the one below selection
  28.225 -		saveState (getSelectString(bo),"moveBranchDown ()",getSelectString(obo),"moveBranchUp ()",QString("Move up %1").arg(getObjectName(bo)));
  28.226 -		reposition();
  28.227 -		//FIXME-3 VM needed? scene()->update();
  28.228 -		selection.update();
  28.229 -		emitShowSelection();
  28.230 +		if (!selbi->canMoveUp()) return;
  28.231 +		QString oldsel=getSelectString();
  28.232 +		if (relinkBranch (selbi,(BranchItem*)selbi->parent(),selbi->num()-1) )
  28.233 +
  28.234 +			saveState (getSelectString(),"moveDown ()",oldsel,"moveUp ()",QString("Move up %1").arg(getObjectName(selbi)));
  28.235  	}
  28.236 -	*/
  28.237  }
  28.238  
  28.239 -void VymModel::moveBranchDown()	//FIXME-2
  28.240 -{
  28.241 -/*
  28.242 -	BranchObj* bo=getSelectedBranch();
  28.243 -	BranchObj* par;
  28.244 -	if (bo)
  28.245 +void VymModel::moveDown()	
  28.246 +{
  28.247 +	BranchItem *selbi=getSelectedBranchItem();
  28.248 +	if (selbi)
  28.249  	{
  28.250 -		if (!bo->canMoveBranchDown()) return;
  28.251 -		par=(BranchObj*)(bo->getParObj());
  28.252 -		BranchObj *obo=par->moveBranchDown(bo);	// bo will be the one above selection
  28.253 -		saveState(getSelectString(bo),"moveBranchUp ()",getSelectString(obo),"moveBranchDown ()",QString("Move down %1").arg(getObjectName(bo)));
  28.254 -		reposition();
  28.255 -		//FIXME-3 VM needed? scene()->update();
  28.256 -		selection.update();
  28.257 -		emitShowSelection();
  28.258 -	}	
  28.259 -*/	
  28.260 +		if (!selbi->canMoveDown()) return;
  28.261 +		QString oldsel=getSelectString();
  28.262 +		if ( relinkBranch (selbi,(BranchItem*)selbi->parent(),selbi->num()+1) )
  28.263 +
  28.264 +			saveState (getSelectString(),"moveUp ()",oldsel,"moveDown ()",QString("Move down %1").arg(getObjectName(selbi)));
  28.265 +	}
  28.266  }
  28.267  
  28.268  void VymModel::sortChildren()	// FIXME-2 not implemented yet
  28.269 @@ -2084,7 +2042,6 @@
  28.270  	rootItem->appendChild (mci);
  28.271  
  28.272  	endInsertRows();
  28.273 -	emit (newChildObject (parix));
  28.274  	emit (layoutChanged() );
  28.275  
  28.276  	// Create MapObj
  28.277 @@ -2162,7 +2119,6 @@
  28.278  			parbi->insertBranch(n,newbi);	
  28.279  			endInsertRows ();
  28.280  		}
  28.281 -		emit (newChildObject (parix));
  28.282  		emit (layoutChanged() );
  28.283  
  28.284  		// save scroll state. If scrolled, automatically select
  28.285 @@ -2251,10 +2207,11 @@
  28.286  	return NULL;
  28.287  }
  28.288  
  28.289 -BranchItem* VymModel::relinkBranch (BranchItem *branch, BranchItem *dst, int pos)
  28.290 +bool VymModel::relinkBranch (BranchItem *branch, BranchItem *dst, int pos)
  28.291  {
  28.292  	if (branch && dst)
  28.293  	{
  28.294 +		cout << "VM::relinkBranch "<<branch->getHeadingStd()<<"  to "<<dst->getHeadingStd()<<"  at "<<pos<<endl;
  28.295  		emit (layoutAboutToBeChanged() );
  28.296  		BranchItem *branchpi=(BranchItem*)branch->parent();
  28.297  		// Remove at current position
  28.298 @@ -2276,8 +2233,11 @@
  28.299  
  28.300  		branch->getLMO()->setParObj(dst->getLMO());	//FIXME-5 update parObj in View
  28.301  		emit (layoutChanged() );
  28.302 +		reposition();	// both for moveUp/Down and relinking
  28.303  		select (branch);
  28.304 +		return true;
  28.305  	}
  28.306 +	return false;
  28.307  }
  28.308  
  28.309  void VymModel::deleteSelection()
  28.310 @@ -2393,21 +2353,23 @@
  28.311  		if (bi->isScrolled()) return false;
  28.312  		if (bi->branchCount()==0) return false;
  28.313  		if (bi->depth()==0) return false;
  28.314 -		QString u,r;
  28.315 -		r="scroll";
  28.316 -		u="unscroll";
  28.317 -		/* FIXME-3 no savestate yet
  28.318 -		saveState(
  28.319 -			bo,
  28.320 -			QString ("%1 ()").arg(u),
  28.321 -			bo,
  28.322 -			QString ("%1 ()").arg(r),
  28.323 -			QString ("%1 %2").arg(r).arg(getObjectName(bo))
  28.324 -		);
  28.325 -		*/
  28.326 -		bi->toggleScroll();
  28.327 -		mapScene->update(); //Needed for _quick_ update
  28.328 -		return true;
  28.329 +		if (bi->toggleScroll())
  28.330 +		{
  28.331 +			QString u,r;
  28.332 +			r="scroll";
  28.333 +			u="unscroll";
  28.334 +			saveState(
  28.335 +				bi,
  28.336 +				QString ("%1 ()").arg(u),
  28.337 +				bi,
  28.338 +				QString ("%1 ()").arg(r),
  28.339 +				QString ("%1 %2").arg(r).arg(getObjectName(bi))
  28.340 +			);
  28.341 +			emitDataHasChanged(bi);
  28.342 +			updateSelection();
  28.343 +			mapScene->update(); //Needed for _quick_ update,  even in 1.13.x //FIXME-3 force update via signal...
  28.344 +			return true;
  28.345 +		}
  28.346  	}	
  28.347  	return false;
  28.348  }
  28.349 @@ -2423,32 +2385,34 @@
  28.350  		QString u,r;
  28.351  		u="scroll";
  28.352  		r="unscroll";
  28.353 -		/* FIXME-3 no savestate yet
  28.354  		saveState(
  28.355 -			bo,
  28.356 +			bi,
  28.357  			QString ("%1 ()").arg(u),
  28.358 -			bo,
  28.359 +			bi,
  28.360  			QString ("%1 ()").arg(r),
  28.361 -			QString ("%1 %2").arg(r).arg(getObjectName(bo))
  28.362 +			QString ("%1 %2").arg(r).arg(getObjectName(bi))
  28.363  		);
  28.364 -		*/
  28.365  		bi->toggleScroll();
  28.366 -		mapScene->update();	// Needed for _quick_ update
  28.367 +		emitDataHasChanged(bi);
  28.368 +		updateSelection();
  28.369 +
  28.370 +		mapScene->update(); //Needed for _quick_ update,  even in 1.13.x //FIXME-3 force update via signal...
  28.371  		return true;
  28.372  	}	
  28.373  	return false;
  28.374  }
  28.375  
  28.376 -void VymModel::toggleScroll()
  28.377 +void VymModel::toggleScroll()	
  28.378  {
  28.379  	BranchItem *bi=(BranchItem*)getSelectedBranchItem();
  28.380 -	if (bi && bi->getType()==TreeItem::Branch )
  28.381 +	if (bi && bi->isBranchLikeType() )
  28.382  	{
  28.383  		if (bi->isScrolled())
  28.384  			unscrollBranch (bi);
  28.385  		else
  28.386  			scrollBranch (bi);
  28.387  	}
  28.388 +	// saveState is called in above functions
  28.389  }
  28.390  
  28.391  void VymModel::unscrollChildren() 	// FIXME-2	first, next moved to vymmodel
  28.392 @@ -2473,9 +2437,8 @@
  28.393  	emit (expandAll() );
  28.394  }
  28.395  
  28.396 -void VymModel::toggleStandardFlag (const QString &name)
  28.397 -{
  28.398 -	cout << "VM::toggleStandardFlag "<<name.toStdString()<<endl;
  28.399 +void VymModel::toggleStandardFlag (const QString &name, FlagRow *master)
  28.400 +{
  28.401  	BranchItem *bi=getSelectedBranchItem();
  28.402  	if (bi) 
  28.403  	{
  28.404 @@ -2496,8 +2459,9 @@
  28.405  			bi,
  28.406  			QString("%1 (\"%2\")").arg(r).arg(name),
  28.407  			QString("Toggling standard flag \"%1\" of %2").arg(name).arg(getObjectName(bi)));
  28.408 -		bi->toggleStandardFlag (name); //FIXME-0,mainWindow->useFlagGroups());
  28.409 -		//FIXME-0 model->updateSelection();	// geometry has changed
  28.410 +			bi->toggleStandardFlag (name, master);
  28.411 +		reposition();
  28.412 +		updateSelection();	
  28.413  	}
  28.414  }
  28.415  
  28.416 @@ -2568,28 +2532,25 @@
  28.417  
  28.418  
  28.419  
  28.420 -void VymModel::editURL()	//FIXME-2
  28.421 -{
  28.422 -/*
  28.423 -	BranchObj *bo=getSelectedBranch();
  28.424 -	if (bo)
  28.425 +void VymModel::editURL()	
  28.426 +{
  28.427 +	TreeItem *selti=getSelectedItem();
  28.428 +	if (selti)
  28.429  	{		
  28.430  		bool ok;
  28.431  		QString text = QInputDialog::getText(
  28.432  				"VYM", tr("Enter URL:"), QLineEdit::Normal,
  28.433 -				bo->getURL(), &ok, NULL);
  28.434 +				selti->getURL(), &ok, NULL);
  28.435  		if ( ok) 
  28.436  			// user entered something and pressed OK
  28.437  			setURL(text);
  28.438  	}
  28.439 -*/
  28.440  }
  28.441  
  28.442 -void VymModel::editLocalURL()	//FIXME-2
  28.443 -{
  28.444 -/*
  28.445 -	BranchObj *bo=getSelectedBranch();
  28.446 -	if (bo)
  28.447 +void VymModel::editLocalURL()
  28.448 +{
  28.449 +	TreeItem *selti=getSelectedItem();
  28.450 +	if (selti)
  28.451  	{		
  28.452  		QStringList filters;
  28.453  		filters <<"All files (*)";
  28.454 @@ -2601,8 +2562,8 @@
  28.455  		fd->setFilters (filters);
  28.456  		fd->setCaption(vymName+" - " +tr("Set URL to a local file"));
  28.457  		fd->setDirectory (lastFileDir);
  28.458 -		if (! bo->getVymLink().isEmpty() )
  28.459 -			fd->selectFile( bo->getURL() );
  28.460 +		if (! selti->getVymLink().isEmpty() )
  28.461 +			fd->selectFile( selti->getURL() );
  28.462  		fd->show();
  28.463  
  28.464  		if ( fd->exec() == QDialog::Accepted )
  28.465 @@ -2611,49 +2572,42 @@
  28.466  			setURL (fd->selectedFile() );
  28.467  		}
  28.468  	}
  28.469 -	*/
  28.470  }
  28.471  
  28.472  
  28.473 -void VymModel::editHeading2URL() //FIXME-2
  28.474 -{
  28.475 -/*
  28.476 -	BranchObj *bo=getSelectedBranch();
  28.477 -	if (bo)
  28.478 -		setURL (bo->getHeading());
  28.479 -*/		
  28.480 +void VymModel::editHeading2URL() 
  28.481 +{
  28.482 +	TreeItem *selti=getSelectedItem();
  28.483 +	if (selti)
  28.484 +		setURL (selti->getHeading());
  28.485  }	
  28.486  
  28.487 -void VymModel::editBugzilla2URL()	//FIXME-2
  28.488 -{
  28.489 -/*
  28.490 -	BranchObj *bo=getSelectedBranch();
  28.491 -	if (bo)
  28.492 +void VymModel::editBugzilla2URL()	
  28.493 +{
  28.494 +	TreeItem *selti=getSelectedItem();
  28.495 +	if (selti)
  28.496  	{		
  28.497 -		QString url= "https://bugzilla.novell.com/show_bug.cgi?id="+bo->getHeading();
  28.498 +		QString url= "https://bugzilla.novell.com/show_bug.cgi?id="+selti->getHeading();
  28.499  		setURL (url);
  28.500  	}
  28.501 -*/	
  28.502  }	
  28.503  
  28.504 -void VymModel::editFATE2URL()	//FIXME-2
  28.505 -{
  28.506 -/*
  28.507 -	BranchObj *bo=getSelectedBranch();
  28.508 -	if (bo)
  28.509 +void VymModel::editFATE2URL()
  28.510 +{
  28.511 +	TreeItem *selti=getSelectedItem();
  28.512 +	if (selti)
  28.513  	{		
  28.514 -		QString url= "http://keeper.suse.de:8080/webfate/match/id?value=ID"+bo->getHeading();
  28.515 +		QString url= "http://keeper.suse.de:8080/webfate/match/id?value=ID"+selti->getHeading();
  28.516  		saveState(
  28.517 -			bo,
  28.518 -			"setURL (\""+bo->getURL()+"\")",
  28.519 -			bo,
  28.520 +			selti,
  28.521 +			"setURL (\""+selti->getURL()+"\")",
  28.522 +			selti,
  28.523  			"setURL (\""+url+"\")",
  28.524 -			QString("Use heading of %1 as link to FATE").arg(getObjectName(bo))
  28.525 +			QString("Use heading of %1 as link to FATE").arg(getObjectName(selti))
  28.526  		);	
  28.527 -		bo->setURL (url);
  28.528 -		updateActions();
  28.529 +		selti->setURL (url);
  28.530 +		// FIXME-4 updateActions();
  28.531  	}
  28.532 -*/	
  28.533  }	
  28.534  
  28.535  void VymModel::editVymLink()
  28.536 @@ -2693,7 +2647,7 @@
  28.537  	BranchItem *bi=getSelectedBranchItem();
  28.538  	if (bi)
  28.539  	{
  28.540 -		bi->getBranchObj()->setVymLink(s);	//FIXME-3 check getBO
  28.541 +		bi->setVymLink(s);
  28.542  		reposition();
  28.543  		updateActions();
  28.544  		//selection.update();
  28.545 @@ -2708,16 +2662,14 @@
  28.546  	{		
  28.547  		saveState(
  28.548  			bi,
  28.549 -			"setVymLink (\""+bi->getBranchObj()->getVymLink()+"\")", //FIXME-3 check getBO
  28.550 -
  28.551 +			"setVymLink (\""+bi->getVymLink()+"\")", 
  28.552  			bi,
  28.553  			"setVymLink (\"\")",
  28.554  			QString("Unset vymlink of %1").arg(getObjectName(bi))
  28.555  		);	
  28.556 -		bi->getBranchObj()->setVymLink ("" );	//FIXME-3 check getBO
  28.557 +		bi->setVymLink ("" );
  28.558  		updateActions();
  28.559  		reposition();
  28.560 -		// FIXME-3 VM needed? scene()->update();
  28.561  	}
  28.562  }
  28.563  
  28.564 @@ -2725,7 +2677,7 @@
  28.565  {
  28.566  	BranchItem *bi=getSelectedBranchItem();
  28.567  	if (bi)
  28.568 -		return bi->getBranchObj()->getVymLink();	//FIXME-3 check getBO here...
  28.569 +		return bi->getVymLink();
  28.570  	else	
  28.571  		return "";
  28.572  	
  28.573 @@ -2907,7 +2859,7 @@
  28.574  			}
  28.575  		}
  28.576  	/////////////////////////////////////////////////////////////////////
  28.577 -	} else /*if (com=="clearFlags")	// FIXME-2
  28.578 +	} else if (com=="clearFlags")	
  28.579  	{
  28.580  		if (!selti )
  28.581  		{
  28.582 @@ -2917,11 +2869,10 @@
  28.583  			parser.setError (Aborted,"Type of selection is not a branch");
  28.584  		} else if (parser.checkParCount(0))
  28.585  		{
  28.586 -			selb->clearStandardFlags();	
  28.587 -			selb->updateFlagsToolbar();
  28.588 +			selbi->deactivateAllStandardFlags();	
  28.589  		}
  28.590  	/////////////////////////////////////////////////////////////////////
  28.591 -	} else */ if (com=="colorBranch")
  28.592 +	} else if (com=="colorBranch")
  28.593  	{
  28.594  		if (!selti)
  28.595  		{
  28.596 @@ -3172,7 +3123,7 @@
  28.597  			if (ok) loadFloatImageInt (s);
  28.598  		}	
  28.599  	/////////////////////////////////////////////////////////////////////
  28.600 -	} else if (com=="moveBranchUp")
  28.601 +	} else if (com=="moveUp")
  28.602  	{
  28.603  		if (!selti )
  28.604  		{
  28.605 @@ -3182,10 +3133,10 @@
  28.606  			parser.setError (Aborted,"Type of selection is not a branch");
  28.607  		} else if (parser.checkParCount(0))
  28.608  		{
  28.609 -			moveBranchUp();
  28.610 +			moveUp();
  28.611  		}	
  28.612  	/////////////////////////////////////////////////////////////////////
  28.613 -	} else if (com=="moveBranchDown")
  28.614 +	} else if (com=="moveDown")
  28.615  	{
  28.616  		if (!selti )
  28.617  		{
  28.618 @@ -3195,7 +3146,7 @@
  28.619  			parser.setError (Aborted,"Type of selection is not a branch");
  28.620  		} else if (parser.checkParCount(0))
  28.621  		{
  28.622 -			moveBranchDown();
  28.623 +			moveDown();
  28.624  		}	
  28.625  	/////////////////////////////////////////////////////////////////////
  28.626  	} else if (com=="move")
  28.627 @@ -3624,7 +3575,7 @@
  28.628  		}	
  28.629  	}
  28.630  	/////////////////////////////////////////////////////////////////////
  28.631 -	else /* FIXME-2 if (com=="setFlag")
  28.632 +	else if (com=="setFlag")
  28.633  	{
  28.634  		if (!selti )
  28.635  		{
  28.636 @@ -3636,13 +3587,10 @@
  28.637  		{
  28.638  			s=parser.parString(ok,0);
  28.639  			if (ok) 
  28.640 -			{
  28.641 -				selb->activateStandardFlag(s);
  28.642 -				selb->updateFlagsToolbar();
  28.643 -			}	
  28.644 +				selbi->activateStandardFlag(s);
  28.645  		}
  28.646  	/////////////////////////////////////////////////////////////////////
  28.647 -	} else */ /* FIXME-2 if (com=="setFrameType")
  28.648 +	} else /* FIXME-2 if (com=="setFrameType")
  28.649  	{
  28.650  		if (!selti )
  28.651  		{
  28.652 @@ -3670,7 +3618,7 @@
  28.653  			sortChildren();
  28.654  		}
  28.655  	/////////////////////////////////////////////////////////////////////
  28.656 -	} else /* FIXME-2 if (com=="toggleFlag")
  28.657 +	} else if (com=="toggleFlag")
  28.658  	{
  28.659  		if (!selti )
  28.660  		{
  28.661 @@ -3682,13 +3630,10 @@
  28.662  		{
  28.663  			s=parser.parString(ok,0);
  28.664  			if (ok) 
  28.665 -			{
  28.666  				selbi->toggleStandardFlag(s);	
  28.667 -				selb->updateFlagsToolbar();
  28.668 -			}	
  28.669  		}
  28.670  	/////////////////////////////////////////////////////////////////////
  28.671 -	} else */ if (com=="unscroll")
  28.672 +	} else  if (com=="unscroll")
  28.673  	{
  28.674  		if (!selti)
  28.675  		{
  28.676 @@ -3715,9 +3660,9 @@
  28.677  			unscrollChildren ();
  28.678  		}	
  28.679  	/////////////////////////////////////////////////////////////////////
  28.680 -	} else /* FIXME-2 if (com=="unsetFlag")
  28.681 +	} else if (com=="unsetFlag")
  28.682  	{
  28.683 -		if (selection.isEmpty() )
  28.684 +		if (!selti)
  28.685  		{
  28.686  			parser.setError (Aborted,"Nothing selected");
  28.687  		} else if (! selbi )
  28.688 @@ -3727,12 +3672,9 @@
  28.689  		{
  28.690  			s=parser.parString(ok,0);
  28.691  			if (ok) 
  28.692 -			{
  28.693 -				selb->deactivateStandardFlag(s);
  28.694 -				selb->updateFlagsToolbar();
  28.695 -			}	
  28.696 +				selbi->deactivateStandardFlag(s);
  28.697  		}
  28.698 -	} else */
  28.699 +	} else 
  28.700  		parser.setError (Aborted,"Unknown command");
  28.701  
  28.702  	// Any errors?
  28.703 @@ -3946,18 +3888,20 @@
  28.704  void VymModel::updateNoteFlag()
  28.705  {
  28.706  	setChanged();
  28.707 -	cout << "VM::updateNoteFlag()\n";
  28.708 -	/* FIXME-1 modify note flag
  28.709 -	BranchObj *bo=getSelectedBranch();
  28.710 -	if (bo) 
  28.711 +	TreeItem *selti=getSelectedItem();
  28.712 +	if (selti)
  28.713  	{
  28.714 -		bo->updateNoteFlag();
  28.715 -		mainWindow->updateActions();
  28.716 -	}	
  28.717 -	*/
  28.718 +		if (textEditor->isEmpty()) 
  28.719 +			selti->clearNote();
  28.720 +		else
  28.721 +			selti->setNote (textEditor->getText());
  28.722 +		emitDataHasChanged(selti);		
  28.723 +		updateSelection();
  28.724 +
  28.725 +	}
  28.726  }
  28.727  
  28.728 -void VymModel::updateRelPositions()		//FIXME-2 VM should have no need to updateRelPos
  28.729 +void VymModel::updateRelPositions()		//FIXME-3 VM should have no need to updateRelPos
  28.730  {
  28.731  	//cout << "VM::updateRelPos...\n";
  28.732  	for (int i=0; i<rootItem->branchCount(); i++)
  28.733 @@ -4694,7 +4638,7 @@
  28.734  void VymModel::emitDataHasChanged (TreeItem *ti)
  28.735  {
  28.736  	QModelIndex ix=index(ti);
  28.737 -	emit (dataHasChanged (ix) );
  28.738 +	emit (dataChanged (ix,ix) );
  28.739  }
  28.740  
  28.741  
    29.1 --- a/vymmodel.h	Thu May 07 08:48:53 2009 +0000
    29.2 +++ b/vymmodel.h	Wed May 13 08:26:27 2009 +0000
    29.3 @@ -277,8 +277,8 @@
    29.4      void paste();		//!< Paste clipboard to branch and backup
    29.5      void cut();			//!< Cut to clipboard (and copy)
    29.6  
    29.7 -    void moveBranchUp();	//!< Move branch up
    29.8 -    void moveBranchDown();	//!< Move branch down
    29.9 +    void moveUp();	//!< Move branch up
   29.10 +    void moveDown();	//!< Move branch down
   29.11  	void sortChildren();	//!< Sort children lexically
   29.12  
   29.13  	// The create methods are used to quickly parse a XML file
   29.14 @@ -317,7 +317,14 @@
   29.15  	*/
   29.16      BranchItem* addNewBranch(int pos);		
   29.17      BranchItem* addNewBranchBefore();		//!< Insert branch between selection and its parent
   29.18 -	BranchItem* relinkBranch (BranchItem* branch, BranchItem* dst, int pos =-1);	//! Relink branch to dst at position pos
   29.19 +	/*! \brief Relink a branch to a new destination dst 
   29.20 +	    Relinks branch to dst at branch position pos. There is no saveState
   29.21 +		here, as for example moveUp or moving in MapEditor have
   29.22 +		different needs to call saveState
   29.23 +		Returns true if relinking was successful.
   29.24 +	*/	
   29.25 +	bool relinkBranch (BranchItem* branch, BranchItem* dst, int pos =-1);	
   29.26 +
   29.27      void deleteSelection();					//!< Delete selection
   29.28  	void deleteKeepChildren();				//!< remove branch, but keep children
   29.29  	void deleteChildren();					//!< keep branch, but remove children
   29.30 @@ -333,7 +340,7 @@
   29.31  	void expandAll();
   29.32  
   29.33  public:	
   29.34 -	void toggleStandardFlag (const QString &name);
   29.35 +	void toggleStandardFlag (const QString &name, FlagRow *master=NULL);
   29.36      void addFloatImage(const QPixmap &img);
   29.37  
   29.38      void colorBranch(QColor);
   29.39 @@ -426,7 +433,6 @@
   29.40  
   29.41  signals:
   29.42  	void noteHasChanged (QModelIndex ix);
   29.43 -	void dataHasChanged (QModelIndex ix);	//FIXME-3 necessary? There is dataChanged in AbstractModel
   29.44  	void newChildObject(QModelIndex ix);
   29.45  
   29.46  private:
   29.47 @@ -477,7 +483,7 @@
   29.48  	uint animationTicks;
   29.49  	uint animationInterval;
   29.50  	int timerId;				// animation timer
   29.51 -	QList <MapObj*> animObjList;// list with animated objects
   29.52 +	QList <MapObj*> animObjList;// list with animated objects //FIXME-2 should go to MapEditor
   29.53  
   29.54  private slots:
   29.55  	void animate();						//!< Called by timer to animate stuff
    30.1 --- a/vymview.cpp	Thu May 07 08:48:53 2009 +0000
    30.2 +++ b/vymview.cpp	Wed May 13 08:26:27 2009 +0000
    30.3 @@ -49,12 +49,6 @@
    30.4  		model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
    30.5  		mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
    30.6  
    30.7 -		/*
    30.8 -	connect (
    30.9 -		model, SIGNAL (newChildObject(QModelIndex) ),
   30.10 -		this,SLOT (updateChilds (QModelIndex) ) );
   30.11 -*/
   30.12 -
   30.13  	connect (
   30.14  		model, SIGNAL (noteHasChanged(QModelIndex) ),
   30.15  		mainWindow, SLOT (updateNoteEditor (QModelIndex) ) );
   30.16 @@ -91,13 +85,6 @@
   30.17  	return NULL;
   30.18  }
   30.19  
   30.20 -
   30.21 -void VymView::updateChilds (QModelIndex ix)		//FIXME-4 not needed?
   30.22 -{
   30.23 -	cout << "VV::updateChilds \n";
   30.24 -	//treeview->setExpanded (ix,true);	// This is expensive...
   30.25 -}
   30.26 -
   30.27  void VymView::changeSelection (const QItemSelection &newsel, const QItemSelection &oldsel)
   30.28  {
   30.29  	/*
   30.30 @@ -112,6 +99,7 @@
   30.31  
   30.32  	// Notify mainwindow to update satellites like NoteEditor, if needed (model==currenModel...)
   30.33  	mainWindow->changeSelection (model,newsel,oldsel);	// FIXME-3 maybe connect VymModel <-> MainWindow directly?
   30.34 +	showSelection();
   30.35  }
   30.36  
   30.37  void VymView::expandAll()
   30.38 @@ -128,7 +116,7 @@
   30.39  	);
   30.40  
   30.41  	LinkableMapObj* lmo=model->getSelectedLMO();
   30.42 -	if (lmo)
   30.43 -		mapEditor->ensureVisible(lmo->getBBox() );
   30.44 +	if (lmo) 
   30.45 +		mapEditor->setScrollBarPosTarget (lmo->getBBox() );
   30.46  }
   30.47  
    31.1 --- a/vymview.h	Thu May 07 08:48:53 2009 +0000
    31.2 +++ b/vymview.h	Wed May 13 08:26:27 2009 +0000
    31.3 @@ -17,7 +17,6 @@
    31.4  	QItemSelectionModel* selectionModel();
    31.5  
    31.6  public slots:
    31.7 -	void updateChilds (QModelIndex ix);
    31.8  	void changeSelection (const QItemSelection &newSel, const QItemSelection &delSel);
    31.9  	void expandAll ();
   31.10  	void showSelection ();