1.1 --- a/attributeitem.cpp	Wed Feb 10 13:48:42 2010 +0000
     1.2 +++ b/attributeitem.cpp	Fri Feb 19 13:47:03 2010 +0000
     1.3 @@ -9,10 +9,6 @@
     1.4  AttributeItem::AttributeItem(const QList<QVariant> &data, TreeItem *parent):BranchItem (data,parent)
     1.5  {
     1.6  	TreeItem::setType (Attribute);
     1.7 -	//table=NULL;
     1.8 -	//definition=NULL;
     1.9 -	type=Attribute;
    1.10 -
    1.11  	internal=false;
    1.12  }
    1.13  
    1.14 @@ -20,6 +16,20 @@
    1.15  {
    1.16  }
    1.17  
    1.18 +void AttributeItem::set (const QString &k, const QString &v, const Type &t)
    1.19 +{
    1.20 +	key=k;
    1.21 +	value=QVariant (v);
    1.22 +	setHeading (QString ("K: %1 | V: %2").arg(key).arg(value.toString()));
    1.23 +}
    1.24 +
    1.25 +void AttributeItem::get (QString &k, QString &v, Type &t)
    1.26 +{
    1.27 +	k=key;
    1.28 +	v=value.toString();
    1.29 +	t=attrType;
    1.30 +}
    1.31 +
    1.32  void AttributeItem::setKey (const QString &k, const Type &t)
    1.33  {
    1.34  /*
    1.35 @@ -145,6 +155,16 @@
    1.36  */	
    1.37  }
    1.38  
    1.39 +void AttributeItem::setInternal(bool b)
    1.40 +{
    1.41 +	internal=b;
    1.42 +}
    1.43 +
    1.44 +bool AttributeItem::isInternal()
    1.45 +{
    1.46 +	return internal;
    1.47 +}
    1.48 +
    1.49  QString AttributeItem::getDataXML()
    1.50  {
    1.51  	QString a=beginElement ("attribute");
     2.1 --- a/attributeitem.h	Wed Feb 10 13:48:42 2010 +0000
     2.2 +++ b/attributeitem.h	Fri Feb 19 13:47:03 2010 +0000
     2.3 @@ -11,7 +11,7 @@
     2.4  	A list of these tables AttributeTable is maintained for every MapEditor.
     2.5  */
     2.6  class AttributeItem:public BranchItem {
     2.7 -
     2.8 +public:
     2.9  enum Type {
    2.10  	Undefined,	//!< Undefined type
    2.11  	IntList,	//!< Free integer
    2.12 @@ -21,9 +21,10 @@
    2.13  	UniqueString//!< UniqueString, e.g. for IDs
    2.14  };
    2.15  
    2.16 -public:
    2.17  	AttributeItem(const QList<QVariant> &data, TreeItem *parent = 0);
    2.18  	virtual ~AttributeItem();
    2.19 +	void set (const QString &k, const QString &v, const Type &t);
    2.20 +	void get (QString &k, QString &v, Type &t);
    2.21  	void setKey (const QString &k, const Type &t);
    2.22  	QString getKey ();
    2.23  	void setValue (const QString &v);
    2.24 @@ -31,10 +32,14 @@
    2.25  	void setType (const Type &t);
    2.26  	AttributeItem::Type getAttributeType ();
    2.27  	QString getTypeString ();
    2.28 +	void setInternal (bool b);
    2.29 +	bool isInternal();
    2.30  	QString getDataXML();
    2.31  protected:
    2.32 -	QString freeString;		//!< String value for type FreeString
    2.33  	bool internal;			//!< Internal attributes cannot be edited by user
    2.34 +	QString key;
    2.35 +	QVariant value;
    2.36 +	Type attrType;
    2.37  };
    2.38  
    2.39  #endif
     3.1 --- a/branchitem.cpp	Wed Feb 10 13:48:42 2010 +0000
     3.2 +++ b/branchitem.cpp	Fri Feb 19 13:47:03 2010 +0000
     3.3 @@ -299,28 +299,24 @@
     3.4  	do
     3.5  	{
     3.6  		madeChanges=false;
     3.7 -		if (inverse)
     3.8 -			for(curChildIndex=1;curChildIndex<childCount;curChildIndex++)
     3.9 +		for(curChildIndex=1;curChildIndex<childCount;curChildIndex++)
    3.10 +		{
    3.11 +			BranchItem* curChild =getBranchNum(curChildIndex);
    3.12 +			BranchItem* prevChild=getBranchNum(curChildIndex-1);
    3.13 +			if (inverse)
    3.14  			{
    3.15 -				BranchItem* curChild =getBranchNum(curChildIndex);
    3.16 -				BranchItem* prevChild=getBranchNum(curChildIndex-1);
    3.17  				if (prevChild->getHeading().compare(curChild->getHeading())<0)
    3.18  				{
    3.19  					model->moveUp (curChild);
    3.20  					madeChanges=true;
    3.21  				}	
    3.22 -			} 
    3.23 -		else
    3.24 -			for(curChildIndex=1;curChildIndex<childCount;curChildIndex++)
    3.25 -			{
    3.26 -				BranchItem* curChild =getBranchNum(curChildIndex);
    3.27 -				BranchItem* prevChild=getBranchNum(curChildIndex-1);
    3.28 -				if ( prevChild->getHeading().compare(curChild->getHeading())>0)
    3.29 +			} else	
    3.30 +				if (prevChild->getHeading().compare(curChild->getHeading())>0)
    3.31  				{
    3.32 -					model->moveUp(curChild);
    3.33 +					model->moveUp (curChild);
    3.34  					madeChanges=true;
    3.35  				}	
    3.36 -			}
    3.37 +		} 
    3.38  	}while(madeChanges);
    3.39  }
    3.40  
     4.1 --- a/branchobj.cpp	Wed Feb 10 13:48:42 2010 +0000
     4.2 +++ b/branchobj.cpp	Fri Feb 19 13:47:03 2010 +0000
     4.3 @@ -39,18 +39,6 @@
     4.4  		model->stopAnimation (this);
     4.5  	}
     4.6  
     4.7 -	// Check, if this branch was the last child to be deleted
     4.8 -	// If so, unset the scrolled flags in parent // FIXME-2 better do this in model?
     4.9 -
    4.10 -	/*
    4.11 -	BranchObj *po=(BranchObj*)parObj;
    4.12 -	BranchObj *bo;
    4.13 -	if (po)
    4.14 -	{
    4.15 -		bo=((BranchObj*)parObj)->getLastBranch();
    4.16 -		if (bo) po->unScroll();
    4.17 -	}
    4.18 -	*/
    4.19  	clear();
    4.20  }
    4.21  
    4.22 @@ -465,11 +453,12 @@
    4.23  	heading->setFont(font );
    4.24  
    4.25  	if (mod==NewBranch && !keepFrame)
    4.26 -	if (treeItem->depth()==0)
    4.27 -		setFrameType (FrameObj::Rectangle);
    4.28 -	else	
    4.29 -		setFrameType (FrameObj::NoFrame);
    4.30 -
    4.31 +	{
    4.32 +		if (treeItem->depth()==0)
    4.33 +			setFrameType (FrameObj::Rectangle);
    4.34 +		else	
    4.35 +			setFrameType (FrameObj::NoFrame);
    4.36 +	}
    4.37  	if (mod==NewBranch)
    4.38  		setColor (treeItem->getHeadingColor() );
    4.39  	else
    4.40 @@ -630,31 +619,6 @@
    4.41  		treeItem->getBranchObjNum(i)->unsetAllRepositionRequests();
    4.42  }
    4.43  
    4.44 -
    4.45 -QRectF BranchObj::getTotalBBox() // FIXME-2 not really needed, get rid of this
    4.46 -{
    4.47 -	QRectF r=bbox;
    4.48 -
    4.49 -	if ( ((BranchItem*)treeItem)->isScrolled() ) return r;
    4.50 -
    4.51 -/* FIXME-2 really include children _here_ ?  likely not needed anymore, but done in TreeItem */
    4.52 -	for (int i=0; i<treeItem->branchCount(); ++i)
    4.53 -		if (!treeItem->getBranchNum(i)->isHidden())
    4.54 -			r=addBBox(treeItem->getBranchObjNum(i)->getTotalBBox(),r);
    4.55 -
    4.56 -/* FIXME-3 lots of occurences of treeItem->getBranchObjNum(i) in branchobj.cpp
    4.57 -            better check if they are not NULL and maybe simplify...
    4.58 -			(have been NULL at least in calcBBoxSizeWithChilds...)
    4.59 -*/			
    4.60 -
    4.61 -/* FIXME-2 in
    4.62 -	for (int i=0; i<treeItem->imageCount(); ++i
    4.63 -		if (!treeItem->isHidden())
    4.64 -			r=addBBox(treeItem->getImageObjNum(i)->getTotalBBox(),r);
    4.65 -*/			
    4.66 -	return r;
    4.67 -}
    4.68 -
    4.69  QRectF BranchObj::getBBoxSizeWithChildren()
    4.70  {
    4.71  	return bboxTotal;
    4.72 @@ -678,7 +642,7 @@
    4.73  		return MapObj::getBoundingPolygon();
    4.74  	}
    4.75  
    4.76 -	calcBBoxSizeWithChildren();	//FIXME-2 really needed?
    4.77 +	calcBBoxSizeWithChildren();	//FIXME-3 really needed?
    4.78  	QPolygonF p;
    4.79  	p<<bboxTotal.topLeft();
    4.80  	p<<bboxTotal.topRight();
     5.1 --- a/branchobj.h	Wed Feb 10 13:48:42 2010 +0000
     5.2 +++ b/branchobj.h	Fri Feb 19 13:47:03 2010 +0000
     5.3 @@ -46,7 +46,6 @@
     5.4  	virtual void reposition();
     5.5  	virtual void unsetAllRepositionRequests();
     5.6  
     5.7 -	virtual QRectF getTotalBBox();			// return BBox including children			
     5.8  	virtual QRectF getBBoxSizeWithChildren();	// return size of BBox including children  
     5.9  	virtual ConvexPolygon getBoundingPolygon();
    5.10  	virtual void calcBBoxSizeWithChildren();	// calc size of  BBox including children recursivly
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/bugagent.cpp	Fri Feb 19 13:47:03 2010 +0000
     6.3 @@ -0,0 +1,127 @@
     6.4 +#include "bugagent.h"
     6.5 +
     6.6 +#include "branchitem.h"
     6.7 +#include "mainwindow.h"
     6.8 +#include "vymmodel.h"
     6.9 +
    6.10 +extern Main *mainWindow;
    6.11 +
    6.12 +BugAgent::BugAgent (BranchItem *bi,const QString &bug)
    6.13 +{
    6.14 +	if (!bi) 
    6.15 +	{
    6.16 +		qWarning ("Const BugAgent: bi==NULL");
    6.17 +		return;
    6.18 +	}
    6.19 +	branchID=bi->getID();
    6.20 +	modelID=bi->getModel()->getID();
    6.21 +	bugID=bug;
    6.22 +
    6.23 +	script="test/vym-bug.pl";
    6.24 +
    6.25 +	p=new Process;
    6.26 +
    6.27 +	connect (p, SIGNAL (finished(int,QProcess::ExitStatus) ), 
    6.28 +		this, SLOT (processFinished(int,QProcess::ExitStatus) ));
    6.29 +
    6.30 +	p->start (script,QStringList()<<bugID);
    6.31 +	if (!p->waitForStarted())
    6.32 +	{
    6.33 +		qWarning()<<"BugAgent::getBugzillaData couldn't start "<<script;
    6.34 +		return;
    6.35 +	}	
    6.36 +
    6.37 +	/*
    6.38 +	QString result=getStdout();
    6.39 +	while (result.endsWith("\n")) result.chop(1); 
    6.40 +	//qWarning << QString(result);
    6.41 +	QString err=getErrout();
    6.42 +	if (!err.isEmpty())
    6.43 +	{
    6.44 +		qWarning << "BugAgent::getBugzillaData Error:\n";
    6.45 +		qWarning <<err;
    6.46 +	}
    6.47 +	else if (!result.isEmpty())
    6.48 +	{
    6.49 +		qWarning << "ok\n";
    6.50 +	}
    6.51 +
    6.52 +	*/
    6.53 +}
    6.54 +
    6.55 +BugAgent::~BugAgent ()
    6.56 +{
    6.57 +	delete p;
    6.58 +	qDebug ()<<"dest BugAgent";
    6.59 +}
    6.60 +
    6.61 +void BugAgent::processFinished(int exitCode, QProcess::ExitStatus exitStatus)
    6.62 +{
    6.63 +	if (exitStatus==QProcess::NormalExit)
    6.64 +	{
    6.65 +		VymModel *model=mainWindow->getModel (modelID);
    6.66 +		if (model)
    6.67 +		{
    6.68 +			BranchItem *bi=(BranchItem*)(model->findID (branchID));		
    6.69 +			if (bi)
    6.70 +			{
    6.71 +				QString oldsel=model->getSelectString ();
    6.72 +				model->select (bi);
    6.73 +
    6.74 +				// Now do needed changes:
    6.75 +
    6.76 +				QString result=p->getStdout();
    6.77 +				while (result.endsWith("\n")) result.chop(1); 
    6.78 +				//qWarning() << QString(result);
    6.79 +				QString err=p->getErrout();
    6.80 +				if (!err.isEmpty())
    6.81 +				{
    6.82 +					qWarning() << "VM::BugAgent Error:\n";
    6.83 +					qWarning() <<err;
    6.84 +				}
    6.85 +				else if (!result.isEmpty())
    6.86 +				{
    6.87 +					QString heading,cdate,mdate,state,whiteboard;
    6.88 +					QRegExp re("short_desc:(.*)\n");
    6.89 +					re.setMinimal(true);
    6.90 +					if (re.indexIn (result) !=-1) heading=re.cap(1);
    6.91 +
    6.92 +					re.setPattern ("creation_ts:(.*)\n");
    6.93 +					if (re.indexIn (result) !=-1) cdate=re.cap(1);
    6.94 +
    6.95 +					re.setPattern ("delta_ts:(.*)\n");
    6.96 +					if (re.indexIn (result) !=-1) mdate=re.cap(1);
    6.97 +
    6.98 +					re.setPattern ("bug_status:(.*)\n");
    6.99 +					if (re.indexIn (result) !=-1) state=re.cap(1);
   6.100 +
   6.101 +					re.setPattern ("status_whiteboard:(.*)\n");
   6.102 +					if (re.indexIn (result) !=-1) whiteboard=re.cap(1);
   6.103 +
   6.104 +					model->setHeading (bugID + " - " + heading);
   6.105 +					qDebug() << "VM: heading="<<heading;
   6.106 +					qDebug() << "VM:   cdate="<<cdate;
   6.107 +					qDebug() << "VM:   mdate="<<mdate;
   6.108 +					qDebug() << "VM:   state="<<state;
   6.109 +					qDebug() << "VM:  wboard="<<whiteboard;
   6.110 +					
   6.111 +					//qDebug() <<"VM::getBugzillaData  "<<script<<" returned:\n";
   6.112 +					//qDebug() <<QString(result);
   6.113 +				} else	
   6.114 +					qWarning() << "VM::getBugzillaData "<<script<<"  returned nothing\n";
   6.115 +
   6.116 +
   6.117 +
   6.118 +				// Changes finished
   6.119 +				model->select (oldsel);
   6.120 +			} else
   6.121 +				qWarning ()<<"BugAgent: Found model, but not branch #"<<branchID;
   6.122 +		} else
   6.123 +			qWarning ()<<"BugAgent: Couldn't find model #"<<modelID;
   6.124 +	} else		
   6.125 +		qWarning()<< "BugAgent: Process finished with exitCode="<<exitCode;
   6.126 +	delete (this);
   6.127 +}
   6.128 +
   6.129 +
   6.130 +
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/bugagent.h	Fri Feb 19 13:47:03 2010 +0000
     7.3 @@ -0,0 +1,28 @@
     7.4 +#ifndef BUGAGENT_H
     7.5 +#define BUGAGENT_H
     7.6 +
     7.7 +#include <QObject>
     7.8 +
     7.9 +#include "process.h"
    7.10 +
    7.11 +class BranchItem;
    7.12 +
    7.13 +class BugAgent:public QObject
    7.14 +{
    7.15 +	Q_OBJECT
    7.16 +public:	
    7.17 +	BugAgent (BranchItem *bi,const QString &bug);
    7.18 +	~BugAgent();
    7.19 +
    7.20 +public slots:
    7.21 +	virtual void processFinished(int exitCode, QProcess::ExitStatus exitStatus);
    7.22 +
    7.23 +private:
    7.24 +	uint branchID;
    7.25 +	uint modelID;
    7.26 +	QString bugID;
    7.27 +	QString script;
    7.28 +	Process *p;
    7.29 +};
    7.30 +#endif
    7.31 +
     8.1 --- a/exports.cpp	Wed Feb 10 13:48:42 2010 +0000
     8.2 +++ b/exports.cpp	Fri Feb 19 13:47:03 2010 +0000
     8.3 @@ -519,7 +519,7 @@
     8.4  			s+=QString ("<img src=\"flags/flag-url-16x16.png\">%1</a>").arg(quotemeta(current->getHeading()));
     8.5  			s+="</a>";
     8.6  			
     8.7 -			QRectF fbox=current->getBBoxFlag ("system-url");
     8.8 +			QRectF fbox=current->getBBoxURLFlag ();
     8.9  			if (vis)
    8.10  				imageMap+=QString("  <area shape='rect' coords='%1,%2,%3,%4' href='%5'>\n")
    8.11  					.arg(fbox.left()-offset.x())
     9.1 --- a/flag.cpp	Wed Feb 10 13:48:42 2010 +0000
     9.2 +++ b/flag.cpp	Fri Feb 19 13:47:03 2010 +0000
     9.3 @@ -1,7 +1,6 @@
     9.4  #include "flag.h"
     9.5  
     9.6 -#include <iostream>
     9.7 -using namespace std;
     9.8 +#include <QDebug>
     9.9  
    9.10  /////////////////////////////////////////////////////////////////
    9.11  // Flag
    9.12 @@ -49,7 +48,8 @@
    9.13  
    9.14  void Flag::load (const QString &fn)
    9.15  {
    9.16 -	pixmap.load(fn);
    9.17 +	if (!pixmap.load(fn))
    9.18 +		qDebug()<<"Flag::load failed to load "<<fn;
    9.19  }
    9.20  
    9.21  void Flag::load (const QPixmap &pm)
    10.1 --- a/flagrow.cpp	Wed Feb 10 13:48:42 2010 +0000
    10.2 +++ b/flagrow.cpp	Fri Feb 19 13:47:03 2010 +0000
    10.3 @@ -1,8 +1,7 @@
    10.4 +#include <QDebug>
    10.5 +
    10.6  #include "flagrow.h"
    10.7  
    10.8 -#include <iostream>
    10.9 -using namespace std;
   10.10 -
   10.11  /////////////////////////////////////////////////////////////////
   10.12  // FlagRow
   10.13  /////////////////////////////////////////////////////////////////
   10.14 @@ -47,9 +46,12 @@
   10.15  }
   10.16  
   10.17  
   10.18 -bool FlagRow::isActive (const QString &name)
   10.19 +bool FlagRow::isActive (const QString &name)	//FIXME-2 regression
   10.20  {
   10.21 -	return activeNames.contains (name);
   10.22 +	QString n;
   10.23 +	foreach (n,activeNames)
   10.24 +		if (n==name) return true;
   10.25 +	return false;	
   10.26  }
   10.27  
   10.28  void FlagRow::toggle (const QString &name, FlagRow *masterRow)
   10.29 @@ -76,14 +78,14 @@
   10.30  
   10.31  void FlagRow::activate (const QString &name)
   10.32  {
   10.33 -	if (!activeNames.contains (name))
   10.34 +	if (!isActive (name))
   10.35  		activeNames.append (name);
   10.36  	else
   10.37  		qWarning (QString("FlagRow::activate - %1 is already active").arg(name));
   10.38  }
   10.39  
   10.40  
   10.41 -void FlagRow::deactivate (const QString &name)
   10.42 +void FlagRow::deactivate (const QString &name)	//FIXME-4 complaints if CTRL-E is pressed with focus on NoteEditor ?!
   10.43  {
   10.44  	int n=activeNames.indexOf (name);
   10.45  	if (n>=0)
   10.46 @@ -142,23 +144,22 @@
   10.47  
   10.48  void FlagRow::setMasterRow (FlagRow *row)
   10.49  {
   10.50 -	masterRow=row;
   10.51 +	masterRow=row; 
   10.52  }
   10.53  
   10.54  void FlagRow::updateToolBar (const QStringList &activeNames)
   10.55  {
   10.56  	if (toolBar )
   10.57  	{
   10.58 -		if (activeNames.isEmpty() )
   10.59 -			for (int i=0;i<flags.size();++i)
   10.60 -				flags.at(i)->getAction()->setChecked (false);
   10.61 -		else		
   10.62 -			for (int i=0;i<flags.size();++i)
   10.63 -				flags.at(i)->getAction()->setChecked (
   10.64 -					activeNames.contains (flags.at(i)->getName()));
   10.65 +		for (int i=0;i<flags.size();++i)
   10.66 +			flags.at(i)->getAction()->setChecked (false);
   10.67 +		for (int i=0;i<flags.size();++i)
   10.68 +		{
   10.69 +			int n=activeNames.indexOf (flags.at(i)->getName());
   10.70 +			if (n>=0)
   10.71 +				flags.at(i)->getAction()->setChecked (true);	
   10.72 +		}
   10.73  	}
   10.74 -	return;
   10.75 -		
   10.76  }
   10.77  
   10.78  
    11.1 --- a/floatimageobj.cpp	Wed Feb 10 13:48:42 2010 +0000
    11.2 +++ b/floatimageobj.cpp	Fri Feb 19 13:47:03 2010 +0000
    11.3 @@ -8,15 +8,6 @@
    11.4  // FloatImageObj
    11.5  /////////////////////////////////////////////////////////////////
    11.6  
    11.7 -/* FIXME-3
    11.8 -FloatImageObj::FloatImageObj ():FloatObj()
    11.9 -{
   11.10 -//    cout << "Const FloatImageObj ()\n";
   11.11 -    setParObj (this);	
   11.12 -    init();
   11.13 -}
   11.14 -*/
   11.15 -
   11.16  FloatImageObj::FloatImageObj (QGraphicsScene* s,TreeItem *ti):FloatObj(s,ti)
   11.17  {
   11.18     //cout << "Const FloatImageObj s="<<s<<"  ti="<<ti<<endl;
   11.19 @@ -24,14 +15,6 @@
   11.20      init();
   11.21  }
   11.22  
   11.23 -/* FIXME-3 needed
   11.24 -FloatImageObj::FloatImageObj (QGraphicsScene *s, OrnamentedObj* p):FloatObj(s,p)
   11.25 -{
   11.26 - //   cout << "Const FloatImageObj (c,p)\n";
   11.27 -    init();
   11.28 -}
   11.29 -*/
   11.30 -
   11.31  FloatImageObj::~FloatImageObj ()
   11.32  {
   11.33  //	cout << "Destr FloatImageObj "<<this<<"\n";
   11.34 @@ -154,11 +137,6 @@
   11.35  	// TODO
   11.36  }
   11.37  
   11.38 -QRectF FloatImageObj::getTotalBBox()
   11.39 -{
   11.40 -	return bbox;
   11.41 -}
   11.42 -
   11.43  QRectF FloatImageObj::getBBoxSizeWithChildren()
   11.44  {
   11.45  	//TODO abstract in linkablemapobj.h, not calculated
    12.1 --- a/floatimageobj.h	Wed Feb 10 13:48:42 2010 +0000
    12.2 +++ b/floatimageobj.h	Fri Feb 19 13:47:03 2010 +0000
    12.3 @@ -12,9 +12,7 @@
    12.4  /////////////////////////////////////////////////////////////////////////////
    12.5  class FloatImageObj:public FloatObj {
    12.6  public:
    12.7 -    //FIXME-3 FloatImageObj ();
    12.8      FloatImageObj (QGraphicsScene*,TreeItem *ti=NULL);
    12.9 -    //FIXME-3 FloatImageObj (QGraphicsScene*, OrnamentedObj* parent);
   12.10      ~FloatImageObj ();
   12.11      virtual void init ();
   12.12      virtual void copy (FloatImageObj*);
   12.13 @@ -31,7 +29,6 @@
   12.14      virtual void move (QPointF);
   12.15  	virtual void positionBBox();
   12.16  	virtual void calcBBoxSize();
   12.17 -	virtual QRectF getTotalBBox();			// return BBox including children			
   12.18  	virtual QRectF getBBoxSizeWithChildren();	// return size of BBox including children  
   12.19  	virtual void calcBBoxSizeWithChildren();	// calc size of  BBox including children recursivly
   12.20  
    13.1 --- a/floatobj.cpp	Wed Feb 10 13:48:42 2010 +0000
    13.2 +++ b/floatobj.cpp	Fri Feb 19 13:47:03 2010 +0000
    13.3 @@ -1,7 +1,5 @@
    13.4  #include "floatobj.h"
    13.5 -
    13.6 -#include <iostream>
    13.7 -using namespace std;
    13.8 +#include "mapitem.h"
    13.9  
   13.10  /////////////////////////////////////////////////////////////////
   13.11  // FloatObj
   13.12 @@ -19,13 +17,11 @@
   13.13  //   cout << "Destr FloatObj\n";
   13.14  }
   13.15  
   13.16 -#include <iostream>
   13.17 -using namespace std;
   13.18  void FloatObj::init () 
   13.19  {
   13.20  	zPlane=Z_ICON;
   13.21  	setLinkStyle (LinkableMapObj::Parabel);
   13.22 -	//FIXME-2 setHideLinkUnselected(true);
   13.23 +	((MapItem*)treeItem)->setHideLinkUnselected(true);
   13.24  }
   13.25  
   13.26  void FloatObj::copy (FloatObj* other)
   13.27 @@ -66,11 +62,6 @@
   13.28  	updateLinkGeometry();	
   13.29  }
   13.30  
   13.31 -QRectF FloatObj::getTotalBBox()
   13.32 -{
   13.33 -	return bbox;
   13.34 -}
   13.35 -
   13.36  QRectF FloatObj::getBBoxSizeWithChildren()
   13.37  {
   13.38  	return bboxTotal;
    14.1 --- a/floatobj.h	Wed Feb 10 13:48:42 2010 +0000
    14.2 +++ b/floatobj.h	Fri Feb 19 13:47:03 2010 +0000
    14.3 @@ -22,7 +22,6 @@
    14.4  	virtual void setDockPos();
    14.5  	virtual void reposition();
    14.6  											
    14.7 -	virtual QRectF getTotalBBox();			// return BBox including children			
    14.8  	virtual QRectF getBBoxSizeWithChildren();	// return size of BBox including children  
    14.9  
   14.10  protected:
    15.1 --- a/linkablemapobj.cpp	Wed Feb 10 13:48:42 2010 +0000
    15.2 +++ b/linkablemapobj.cpp	Fri Feb 19 13:47:03 2010 +0000
    15.3 @@ -272,12 +272,6 @@
    15.4  	return style;
    15.5  }
    15.6  
    15.7 -void LinkableMapObj::setHideLinkUnselected()
    15.8 -{
    15.9 -	setVisibility (visible);
   15.10 -	updateLinkGeometry();
   15.11 -}
   15.12 -
   15.13  void LinkableMapObj::setLinkPos(Position lp)
   15.14  {
   15.15  	linkpos=lp;
    16.1 --- a/linkablemapobj.h	Wed Feb 10 13:48:42 2010 +0000
    16.2 +++ b/linkablemapobj.h	Fri Feb 19 13:47:03 2010 +0000
    16.3 @@ -73,7 +73,6 @@
    16.4      void setLinkStyle(Style);            
    16.5  	Style getLinkStyle();
    16.6  
    16.7 -	void setHideLinkUnselected();
    16.8  	void setLinkPos (Position);
    16.9  	Position getLinkPos ();
   16.10  
    17.1 --- a/mainwindow.cpp	Wed Feb 10 13:48:42 2010 +0000
    17.2 +++ b/mainwindow.cpp	Fri Feb 19 13:47:03 2010 +0000
    17.3 @@ -1133,6 +1133,15 @@
    17.4  	connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleNoteEditor() ) );
    17.5  	actionViewToggleNoteEditor=a;
    17.6  
    17.7 +	a = new QAction(QPixmap(), tr( "Show tree editor","View action" ),this);
    17.8 +	a->setStatusTip ( tr( "Show tree editor" ));
    17.9 +	a->setShortcut ( Qt::CTRL + Qt::Key_T );	// Toggle Note Editor // FIXME-3 originally: color subtree
   17.10 +	a->setToggleAction(true);
   17.11 +	a->addTo( tb );
   17.12 +	viewMenu->addAction (a);
   17.13 +	connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleTreeEditor() ) );
   17.14 +	actionViewToggleTreeEditor=a;
   17.15 +
   17.16  	a = new QAction(QPixmap(iconPath+"history.png"),  tr( "History Window","View action" ),this );
   17.17  	a->setStatusTip ( tr( "Show History Window" ));
   17.18  	a->setShortcut ( Qt::CTRL + Qt::Key_H  );	// Toggle history window
   17.19 @@ -1220,22 +1229,25 @@
   17.20  	Flag *flag=new Flag;;
   17.21  	flag->setVisible(true);
   17.22  
   17.23 -	flag->load(QPixmap(flagsPath+"flag-note.png"));
   17.24 +	flag->load(flagsPath+"flag-note.png");
   17.25  	setupFlag (flag,tb,"system-note",tr("Note","SystemFlag"));
   17.26  
   17.27 -	flag->load(QPixmap(flagsPath+"flag-url.png"));
   17.28 +	flag->load(flagsPath+"flag-url.png");
   17.29  	setupFlag (flag,tb,"system-url",tr("URL to Document ","SystemFlag"));
   17.30  
   17.31 -	flag->load(QPixmap(flagsPath+"flag-vymlink.png"));
   17.32 +	flag->load(flagsPath+"flag-url-bugzilla-novell.png");
   17.33 +	setupFlag (flag,tb,"system-url-bugzilla-novell",tr("URL to Bugzilla ","SystemFlag"));
   17.34 +
   17.35 +	flag->load(flagsPath+"flag-vymlink.png");
   17.36  	setupFlag (flag,tb,"system-vymLink",tr("Link to another vym map","SystemFlag"));
   17.37  
   17.38 -	flag->load(QPixmap(flagsPath+"flag-scrolled-right.png"));
   17.39 +	flag->load(flagsPath+"flag-scrolled-right.png");
   17.40  	setupFlag (flag,tb,"system-scrolledright",tr("subtree is scrolled","SystemFlag"));
   17.41  
   17.42 -	flag->load(QPixmap(flagsPath+"flag-tmpUnscrolled-right.png"));
   17.43 +	flag->load(flagsPath+"flag-tmpUnscrolled-right.png");
   17.44  	setupFlag (flag,tb,"system-tmpUnscrolledRight",tr("subtree is temporary scrolled","SystemFlag"));
   17.45  
   17.46 -	flag->load(QPixmap(flagsPath+"flag-hideexport.png"));
   17.47 +	flag->load(flagsPath+"flag-hideexport.png");
   17.48  	setupFlag (flag,tb,"system-hideInExport",tr("Hide object in exported maps","SystemFlag"));
   17.49  
   17.50  	// Create Standard Flags
   17.51 @@ -1569,13 +1581,13 @@
   17.52  	QAction *a;
   17.53  	a = new QAction( "Test function 1" , this);
   17.54  	a->setStatusTip( "Call test function 1" );
   17.55 -	a->setShortcut (Qt::CTRL + Qt::Key_T);	// Test function 1  //FIXME-2 originally: color subtree
   17.56 +	a->setShortcut (Qt::SHIFT + Qt::Key_T);	// Test function 1  
   17.57  	testMenu->addAction (a);
   17.58  	connect( a, SIGNAL( triggered() ), this, SLOT( testFunction1() ) );
   17.59  
   17.60  	a = new QAction( "Test function 2" , this);
   17.61  	a->setStatusTip( "Call test function 2" );
   17.62 -	a->setShortcut (Qt::SHIFT + Qt::Key_T);		// Test function 2
   17.63 +	a->setShortcut (Qt::ALT + Qt::Key_T);	// Test function 2
   17.64  	testMenu->addAction (a);
   17.65  	connect( a, SIGNAL( triggered() ), this, SLOT( testFunction2() ) );
   17.66  
   17.67 @@ -1788,6 +1800,13 @@
   17.68  	return NULL;	
   17.69  }
   17.70  
   17.71 +VymModel* Main::getModel(uint id) const
   17.72 +{
   17.73 +	if ( tabWidget->currentPage())
   17.74 +		return vymViews.at(tabWidget->currentIndex())->getModel();
   17.75 +	return NULL;	
   17.76 +}
   17.77 +
   17.78  
   17.79  void Main::editorChanged(QWidget *)
   17.80  {
   17.81 @@ -3354,6 +3373,12 @@
   17.82  		windowShowNoteEditor();
   17.83  }
   17.84  
   17.85 +void Main::windowToggleTreeEditor()
   17.86 +{
   17.87 +	if ( tabWidget->currentPage())
   17.88 +		vymViews.at(tabWidget->currentIndex())->toggleTreeEditor();
   17.89 +}
   17.90 +
   17.91  void Main::windowToggleHistory()
   17.92  {
   17.93  	if (historyWindow->isVisible())
   17.94 @@ -3754,65 +3779,26 @@
   17.95  	}
   17.96  }
   17.97  
   17.98 +
   17.99 +#include "attributeitem.h"
  17.100  void Main::testFunction1()
  17.101  {
  17.102 -
  17.103 -	Process p;
  17.104 -	QString script="test/sleep.sh";
  17.105 -	p.start (script);
  17.106 -	if (!p.waitForStarted())
  17.107 +	VymModel *m=currentModel();
  17.108 +	if (!m) return;
  17.109 +
  17.110 +	BranchItem *selbi=m->getSelectedBranch();
  17.111 +	if (selbi)
  17.112  	{
  17.113 -		cout <<"VM::getBugzillaData couldn't start "<<script.toStdString()<<endl;
  17.114 -		return;
  17.115 -	}	
  17.116 -	if (!p.waitForFinished())
  17.117 -	{
  17.118 -		cout <<"VM::getBugzillaData couldn't finish "<<script.toStdString()<<endl;
  17.119 -		return;
  17.120 +		QList<QVariant> cData;
  17.121 +		cData << "new ai" << "undef";
  17.122 +
  17.123 +		AttributeItem *ai=new AttributeItem (cData,selbi);
  17.124 +		ai->set ("Key 1","Val a",AttributeItem::FreeString);
  17.125 +
  17.126 +		m->addAttribute (ai);
  17.127  	}
  17.128 -	//QByteArray result=p.readAll();
  17.129 -	QString result=p.getStdout();
  17.130 -	while (result.endsWith("\n")) result.chop(1); 
  17.131 -	//cout << QString(result).toStdString()<<endl;
  17.132 -	QString err=p.getErrout();
  17.133 -	if (!err.isEmpty())
  17.134 -	{
  17.135 -		cout << "VM::getBugzillaData Error:\n";
  17.136 -		cout <<err.toStdString()<<endl;
  17.137 -	}
  17.138 -	else if (!result.isEmpty())
  17.139 -	{
  17.140 -		cout << "ok\n";
  17.141 -	}	
  17.142 -/*
  17.143 -	int max=100000;
  17.144 -	QProgressDialog p ("testprogress","cancel",0,max,this);
  17.145 -	p.setWindowModality (Qt::WindowModal);
  17.146 -	p.setAutoReset (false);
  17.147 -	p.setAutoClose (false);
  17.148 -	p.show();
  17.149 -	for (int i=0;i<max;i++)
  17.150 -	{
  17.151 -		p.setValue(i);
  17.152 -		if (p.wasCanceled()) break;
  17.153 -	}
  17.154 -
  17.155 -	cout << "Doing it again...\n";
  17.156 -	p.reset();
  17.157 -	p.hide();
  17.158 -	max=max+10;
  17.159 -	p.setRange(0,max);
  17.160 -	p.setValue (0);
  17.161 -	p.show();
  17.162 -	for (int i=0;i<max;i++)
  17.163 -	{
  17.164 -		p.setValue (i);
  17.165 -		if (p.wasCanceled()) break;
  17.166 -	}
  17.167 -	p.setValue (max);
  17.168 -	cout << "Done.\n";
  17.169  	return;
  17.170 -*/
  17.171 +
  17.172  /*
  17.173  	if (!currentMapEditor()) return;
  17.174  	currentMapEditor()->testFunction1();
    18.1 --- a/mainwindow.h	Wed Feb 10 13:48:42 2010 +0000
    18.2 +++ b/mainwindow.h	Fri Feb 19 13:47:03 2010 +0000
    18.3 @@ -73,6 +73,8 @@
    18.4  	void showEvent (QShowEvent * );
    18.5  	MapEditor* currentMapEditor() const;
    18.6  	VymModel* currentModel() const;
    18.7 +public:	
    18.8 +	VymModel* getModel(uint) const;
    18.9      
   18.10  private slots:
   18.11  	void editorChanged(QWidget*);
   18.12 @@ -209,6 +211,7 @@
   18.13  	void settingsToggleAnimation();
   18.14  
   18.15  	void windowToggleNoteEditor();
   18.16 +	void windowToggleTreeEditor();
   18.17  	void windowToggleHistory();
   18.18  	void windowToggleProperty();
   18.19  	void updateHistory(SimpleSettings &);
   18.20 @@ -355,6 +358,7 @@
   18.21  	QAction *actionFormatHideLinkUnselected;
   18.22  
   18.23  	QAction *actionViewToggleNoteEditor;
   18.24 +	QAction *actionViewToggleTreeEditor;
   18.25  	QAction *actionViewToggleHistoryWindow;
   18.26  	QAction *actionViewTogglePropertyWindow;
   18.27  	QAction *actionViewToggleAntiAlias;
    19.1 --- a/mapeditor.cpp	Wed Feb 10 13:48:42 2010 +0000
    19.2 +++ b/mapeditor.cpp	Fri Feb 19 13:47:03 2010 +0000
    19.3 @@ -1,8 +1,6 @@
    19.4  #include "mapeditor.h"
    19.5  
    19.6 -#include <iostream>
    19.7 -#include <cstdlib>
    19.8 -#include <typeinfo>
    19.9 +#include <iostream>	
   19.10  
   19.11  #include <QObject>
   19.12  
   19.13 @@ -89,13 +87,13 @@
   19.14      a = new QAction( "Select left branch", this);
   19.15  	a->setShortcut (Qt::Key_Left );
   19.16  //	a->setShortcutContext (Qt::WindowShortcut);
   19.17 -	a->setShortcutContext (Qt::WidgetWithChildrenShortcut);
   19.18 +//	a->setShortcutContext (Qt::WidgetWithChildrenShortcut);
   19.19  	addAction (a);
   19.20      connect( a, SIGNAL( triggered() ), this, SLOT( cursorLeft() ) );
   19.21  
   19.22      a = new QAction( "Select child branch", this);
   19.23  	a->setShortcut (Qt::Key_Right);
   19.24 -	a->setShortcutContext (Qt::WidgetWithChildrenShortcut);
   19.25 +//	a->setShortcutContext (Qt::WidgetWithChildrenShortcut);
   19.26  	addAction (a);
   19.27      connect( a, SIGNAL( triggered() ), this, SLOT( cursorRight() ) );
   19.28  
   19.29 @@ -940,7 +938,9 @@
   19.30  	editingHeading=false;
   19.31  	lineEdit->releaseKeyboard();
   19.32  	lineEdit->clearFocus();
   19.33 -	model->setHeading (lineEdit->text() );
   19.34 +	QString s=lineEdit->text();
   19.35 +	s.replace (QRegExp ("\\n")," ");	// Don't paste newline chars
   19.36 +	model->setHeading (s);
   19.37  	model->setSelectionBlocked(false);
   19.38  	delete (lineEdit);
   19.39  
   19.40 @@ -1055,7 +1055,7 @@
   19.41  		{
   19.42  			// systemFlag clicked
   19.43  			model->select (lmo);	
   19.44 -			if (foname=="system-url") 
   19.45 +			if (foname.contains("system-url")) 
   19.46  			{
   19.47  				if (e->state() & Qt::ControlModifier)
   19.48  					mainWindow->editOpenURLTab();
    20.1 --- a/mapitem.cpp	Wed Feb 10 13:48:42 2010 +0000
    20.2 +++ b/mapitem.cpp	Fri Feb 19 13:47:03 2010 +0000
    20.3 @@ -3,6 +3,8 @@
    20.4  #include "linkablemapobj.h"
    20.5  #include "ornamentedobj.h"
    20.6  
    20.7 +#include <QDebug>
    20.8 +
    20.9  MapItem::MapItem()
   20.10  {
   20.11  	init();
   20.12 @@ -62,7 +64,12 @@
   20.13  void MapItem::setHideLinkUnselected (bool b)
   20.14  {
   20.15  	hideLinkUnselected=b;
   20.16 -	if (lmo) lmo->setHideLinkUnselected();
   20.17 +	if (lmo) 
   20.18 +	{
   20.19 +		//lmo->setHideLinkUnselected();
   20.20 +		lmo->setVisibility (lmo->isVisibleObj());
   20.21 +		lmo->updateLinkGeometry();
   20.22 +	}	
   20.23  }
   20.24  
   20.25  bool MapItem::getHideLinkUnselected()
   20.26 @@ -104,6 +111,17 @@
   20.27  	return s;
   20.28  }
   20.29  
   20.30 +QRectF MapItem::getBBoxURLFlag ()
   20.31 +{
   20.32 +	QStringList list=systemFlags.activeFlagNames().filter ("system-url");
   20.33 +	if (list.count()>1)
   20.34 +	{
   20.35 +		qWarning()<<"MapItem::getBBoxURLFlag found more than one system-url*";
   20.36 +		return QRectF ();
   20.37 +	}	
   20.38 +	return getBBoxFlag (list.first());
   20.39 +}
   20.40 +
   20.41  QRectF MapItem::getBBoxFlag (const QString &fname)
   20.42  {
   20.43  	if (lmo)
    21.1 --- a/mapitem.h	Wed Feb 10 13:48:42 2010 +0000
    21.2 +++ b/mapitem.h	Fri Feb 19 13:47:03 2010 +0000
    21.3 @@ -54,6 +54,7 @@
    21.4  
    21.5  	virtual QString getMapAttr();	//! Get attributes for saving as XML
    21.6  
    21.7 +	virtual QRectF getBBoxURLFlag();//! get bbox of url flag
    21.8  	virtual QRectF getBBoxFlag   (const QString &fname);	//! get bbox of flag
    21.9  
   21.10  
    22.1 --- a/tex/vym.changelog	Wed Feb 10 13:48:42 2010 +0000
    22.2 +++ b/tex/vym.changelog	Fri Feb 19 13:47:03 2010 +0000
    22.3 @@ -1,3 +1,19 @@
    22.4 +-------------------------------------------------------------------
    22.5 +Fri Feb 19 08:05:02 CET 2010 - vym@insilmaril.de
    22.6 +
    22.7 +- Bugfix: Fixed regression of flags
    22.8 +
    22.9 +-------------------------------------------------------------------
   22.10 +Wed Feb 17 16:31:34 CET 2010 - vym@insilmaril.de
   22.11 +
   22.12 +- Bugfix: When pasting a heading into the LineEdit, newlines are removed
   22.13 +          to avoid broken rendering
   22.14 +
   22.15 +-------------------------------------------------------------------
   22.16 +Wed Feb 17 11:49:09 CET 2010 - vym@insilmaril.de
   22.17 +
   22.18 +- Feature: Novell Bugzilla now has extra flag
   22.19 +
   22.20  -------------------------------------------------------------------
   22.21  Wed Feb 10 14:47:49 CET 2010 - vym@insilmaril.de
   22.22  
    23.1 --- a/texteditor.cpp	Wed Feb 10 13:48:42 2010 +0000
    23.2 +++ b/texteditor.cpp	Fri Feb 19 13:47:03 2010 +0000
    23.3 @@ -521,7 +521,8 @@
    23.4  		// Load note
    23.5  		QFileDialog *fd=new QFileDialog( this);
    23.6  		QStringList types;
    23.7 -		types<< "VYM notes (*.html)" <<
    23.8 +		types<< "Text (*.txt *.html)"<<
    23.9 +			"VYM notes and HTML (*.html)" <<
   23.10  			"ASCII texts (*.txt)" <<
   23.11  			"All filed (*)";
   23.12  		fd->setFilters (types);
    24.1 --- a/treeitem.cpp	Wed Feb 10 13:48:42 2010 +0000
    24.2 +++ b/treeitem.cpp	Fri Feb 19 13:47:03 2010 +0000
    24.3 @@ -52,7 +52,7 @@
    24.4  {
    24.5  	model=NULL;
    24.6  
    24.7 -	// Reset ID  //FIXME-2 compare objID (string), so far only used for xLinks during load/save (Id=selString)
    24.8 +	// Assign ID  
    24.9  	idLast++;
   24.10  	id=idLast;
   24.11  
   24.12 @@ -342,9 +342,26 @@
   24.13  {
   24.14  	url=u;
   24.15  	if (!url.isEmpty())
   24.16 -		systemFlags.activate ("system-url");
   24.17 +	{
   24.18 +		if (url.contains ("bugzilla.novell.com"))
   24.19 +		{
   24.20 +			systemFlags.activate ("system-url-bugzilla-novell");
   24.21 +			if (systemFlags.isActive ("system-url"))
   24.22 +				systemFlags.deactivate ("system-url");
   24.23 +		} else
   24.24 +		{
   24.25 +			systemFlags.activate ("system-url");
   24.26 +			if (systemFlags.isActive ("system-url-bugzilla-novell"))
   24.27 +				systemFlags.deactivate ("system-url-bugzilla-novell");
   24.28 +		}
   24.29 +	}
   24.30  	else
   24.31 -		systemFlags.deactivate ("system-url");
   24.32 +	{
   24.33 +		if (systemFlags.isActive ("system-url"))
   24.34 +			systemFlags.deactivate ("system-url");
   24.35 +		if (systemFlags.isActive ("system-url-bugzilla-novell"))
   24.36 +			systemFlags.deactivate ("system-url-bugzilla-novell");
   24.37 +	}
   24.38  }
   24.39  
   24.40  QString TreeItem::getURL ()
   24.41 @@ -520,14 +537,10 @@
   24.42  
   24.43  TreeItem* TreeItem::findID (const uint &n)
   24.44  {
   24.45 -	if (n>=0 && n<childItems.count() )
   24.46 -	{
   24.47 -		for (int i=0;i<childItems.count(); i++)
   24.48 -			if (n==childItems.at(i)->id)
   24.49 -				return childItems.at(n);
   24.50 -	}
   24.51 -	else
   24.52 -		return NULL;
   24.53 +	for (int i=0;i<childItems.count(); i++)
   24.54 +		if (n==childItems.at(i)->id)
   24.55 +			return childItems.at(n);
   24.56 +	return NULL;
   24.57  }
   24.58  
   24.59  
   24.60 @@ -635,14 +648,14 @@
   24.61  }
   24.62  
   24.63  
   24.64 -void TreeItem::setHideTmp (HideTmpMode mode)  //FIXME-2	update visibility in derived objects
   24.65 +void TreeItem::setHideTmp (HideTmpMode mode)  //FIXME-3	update visibility in derived objects
   24.66  {
   24.67  	if (type==Image || type==Branch || type==MapCenter)
   24.68  //		((ImageItem*)this)->updateVisibility();
   24.69  	{
   24.70  		LinkableMapObj* lmo=((MapItem*)this)->getLMO();
   24.71  
   24.72 -		if (mode==HideExport && (hideExport || hasHiddenExportParent() ) ) // FIXME-2  try to avoid calling hasScrolledParent repeatedly
   24.73 +		if (mode==HideExport && (hideExport || hasHiddenExportParent() ) ) // FIXME-3  try to avoid calling hasScrolledParent repeatedly
   24.74  
   24.75  		{
   24.76  			// Hide stuff according to hideExport flag and parents
    25.1 --- a/version.h	Wed Feb 10 13:48:42 2010 +0000
    25.2 +++ b/version.h	Fri Feb 19 13:47:03 2010 +0000
    25.3 @@ -7,7 +7,7 @@
    25.4  #define __VYM_VERSION "1.13.0"
    25.5  //#define __VYM_CODENAME "Codename: RC-1"
    25.6  #define __VYM_CODENAME "Codename: development version, not for production!"
    25.7 -#define __VYM_BUILD_DATE "2010-02-10"
    25.8 +#define __VYM_BUILD_DATE "2010-02-19"
    25.9  
   25.10  
   25.11  bool checkVersion(const QString &);
    26.1 --- a/vym.pro	Wed Feb 10 13:48:42 2010 +0000
    26.2 +++ b/vym.pro	Fri Feb 19 13:47:03 2010 +0000
    26.3 @@ -41,6 +41,7 @@
    26.4  	branchitem.h \
    26.5  	branchobj.h \
    26.6  	branchpropwindow.h\
    26.7 +	bugagent.h \
    26.8  	editxlinkdialog.h \
    26.9  	exportoofiledialog.h \
   26.10  	exportxhtmldialog.h\
   26.11 @@ -106,6 +107,7 @@
   26.12  	branchitem.cpp \
   26.13  	branchobj.cpp \
   26.14  	branchpropwindow.cpp \
   26.15 +	bugagent.cpp \
   26.16  	editxlinkdialog.cpp \
   26.17  	exportoofiledialog.cpp \
   26.18  	exports.cpp \
    27.1 --- a/vymmodel.cpp	Wed Feb 10 13:48:42 2010 +0000
    27.2 +++ b/vymmodel.cpp	Fri Feb 19 13:47:03 2010 +0000
    27.3 @@ -6,6 +6,7 @@
    27.4  #include "attributeitem.h"
    27.5  #include "treeitem.h"
    27.6  #include "branchitem.h"
    27.7 +#include "bugagent.h"
    27.8  #include "editxlinkdialog.h"
    27.9  #include "exports.h"
   27.10  #include "exportxhtmldialog.h"
   27.11 @@ -48,9 +49,7 @@
   27.12  
   27.13  extern Settings settings;
   27.14  
   27.15 -
   27.16 -
   27.17 -int VymModel::mapNum=0;	// make instance
   27.18 +uint VymModel::idLast=0;	// make instance
   27.19  
   27.20  VymModel::VymModel()
   27.21  {
   27.22 @@ -83,7 +82,8 @@
   27.23  	mapScene=NULL;
   27.24  
   27.25  	// History 
   27.26 -	mapNum++;
   27.27 +	idLast++;
   27.28 +	mapID=idLast;
   27.29      mapChanged=false;
   27.30  	mapDefault=true;
   27.31  	mapUnsaved=false;
   27.32 @@ -145,14 +145,14 @@
   27.33  
   27.34  	//Initialize DBUS object
   27.35  	adaptorModel=new AdaptorModel(this);	// Created and not deleted as documented in Qt
   27.36 -    if (!dbusConnection.registerObject (QString("/vymmodel_%1").arg(mapNum),this))
   27.37 +    if (!dbusConnection.registerObject (QString("/vymmodel_%1").arg(mapID),this))
   27.38  		qWarning ("VymModel: Couldn't register DBUS object!");
   27.39  }
   27.40  
   27.41  void VymModel::makeTmpDirectories()
   27.42  {
   27.43  	// Create unique temporary directories
   27.44 -	tmpMapDir = tmpVymDir+QString("/model-%1").arg(mapNum);
   27.45 +	tmpMapDir = tmpVymDir+QString("/model-%1").arg(mapID);
   27.46  	histPath = tmpMapDir+"/history";
   27.47  	QDir d;
   27.48  	d.mkdir (tmpMapDir);
   27.49 @@ -169,7 +169,7 @@
   27.50  	return blockReposition;
   27.51  }
   27.52  
   27.53 -void VymModel::updateActions()	// FIXME-2  maybe don't update if blockReposition is set
   27.54 +void VymModel::updateActions()	// FIXME-4  maybe don't update if blockReposition is set
   27.55  {
   27.56  	//cout << "VM::updateActions \n";
   27.57  	// Tell mainwindow to update states of actions
   27.58 @@ -354,8 +354,6 @@
   27.59  	if (lmode==NewMap)
   27.60  	{
   27.61  		selModel->clearSelection();
   27.62 -		// FIXME-2 VM not needed??? model->setMapEditor(this);
   27.63 -		// (map state is set later at end of load...)
   27.64  	} else
   27.65  	{
   27.66  		BranchItem *bi=getSelectedBranch();
   27.67 @@ -470,7 +468,7 @@
   27.68  		file.close();
   27.69  		if ( ok ) 
   27.70  		{
   27.71 -			reposition();	// FIXME-2 VM reposition the view instead...
   27.72 +			reposition();	
   27.73  			emitSelectionChanged();
   27.74  			if (lmode==NewMap)
   27.75  			{
   27.76 @@ -952,7 +950,7 @@
   27.77  		QDateTime tmod=QFileInfo (filePath).lastModified();
   27.78  		if (tmod>fileChangedTime)
   27.79  		{
   27.80 -			// FIXME-2 VM switch to current mapeditor and finish lineedits...
   27.81 +			// FIXME-3 VM switch to current mapeditor and finish lineedits...
   27.82  			QMessageBox mb( vymName,
   27.83  				tr("The file of the map  on disk has changed:\n\n"  
   27.84  				   "   %1\n\nDo you want to reload that map with the new file?").arg(filePath),
   27.85 @@ -1877,7 +1875,7 @@
   27.86  	}	
   27.87  }
   27.88  
   27.89 -void VymModel::setHideLinkUnselected (bool b) // FIXME-2 Images still have visible link after load
   27.90 +void VymModel::setHideLinkUnselected (bool b) 
   27.91  {
   27.92  	TreeItem *ti=getSelectedItem();
   27.93  	if (ti && (ti->getType()==TreeItem::Image ||ti->isBranchLikeType()))
   27.94 @@ -2489,7 +2487,7 @@
   27.95  	return false;
   27.96  }
   27.97  
   27.98 -void VymModel::deleteSelection()	
   27.99 +void VymModel::deleteSelection()	//FIXME-2 xLinks in a deleted subtree are not restored on undo	
  27.100  {
  27.101  	BranchItem *selbi=getSelectedBranch();
  27.102  
  27.103 @@ -2532,7 +2530,7 @@
  27.104  			emitShowSelection();
  27.105  		} else if (ti->getType()==TreeItem::XLink)
  27.106  		{
  27.107 -			//FIXME-2 savestate missing
  27.108 +			//FIXME-2 savestate for deleting xlink missing
  27.109  			deleteItem (ti);
  27.110  		} else
  27.111  			qWarning ("VymmModel::deleteSelection()  unknown type?!");
  27.112 @@ -2728,7 +2726,7 @@
  27.113  	// saveState & reposition are called in above functions
  27.114  }
  27.115  
  27.116 -void VymModel::unscrollChildren() 	//FIXME-2 does not update flag yet, possible segfault
  27.117 +void VymModel::unscrollChildren() 
  27.118  {
  27.119  	BranchItem *selbi=getSelectedBranch();
  27.120  	BranchItem *prev=NULL;
  27.121 @@ -2929,72 +2927,19 @@
  27.122  
  27.123  void VymModel::getBugzillaData()	
  27.124  {
  27.125 -	TreeItem *selti=getSelectedItem();
  27.126 -	if (selti)
  27.127 +	BranchItem *selbi=getSelectedBranch();
  27.128 +	if (selbi)
  27.129  	{		
  27.130 -		QString url=selti->getURL();
  27.131 +		QString url=selbi->getURL();
  27.132  		if (!url.isEmpty())
  27.133  		{
  27.134  			QRegExp rx("(\\d+)");
  27.135  			if (rx.indexIn(url) !=-1)
  27.136  			{
  27.137  				QString bugID=rx.cap(1);
  27.138 -				cout << "VM::getBugzillaData bug="<<bugID.toStdString()<<endl;
  27.139 -
  27.140 -				Process p;
  27.141 -				//QString script="test/sleep.sh";
  27.142 -				QString script="test/vym-bug.pl";
  27.143 -				p.start (script,QStringList()<<bugID);
  27.144 -				if (!p.waitForStarted())
  27.145 -				{
  27.146 -					cout <<"VM::getBugzillaData couldn't start "<<script.toStdString()<<endl;
  27.147 -					return;
  27.148 -				}	
  27.149 -				if (!p.waitForFinished())
  27.150 -				{
  27.151 -					cout <<"VM::getBugzillaData couldn't finish "<<script.toStdString()<<endl;
  27.152 -					return;
  27.153 -				}
  27.154 -				//QByteArray result=p.readAll();
  27.155 -				QString result=p.getStdout();
  27.156 -				while (result.endsWith("\n")) result.chop(1); 
  27.157 -				//cout << QString(result).toStdString()<<endl;
  27.158 -				QString err=p.getErrout();
  27.159 -				if (!err.isEmpty())
  27.160 -				{
  27.161 -					cout << "VM::getBugzillaData Error:\n";
  27.162 -					cout <<err.toStdString()<<endl;
  27.163 -				}
  27.164 -				else if (!result.isEmpty())
  27.165 -				{
  27.166 -					QString heading,cdate,mdate,state,whiteboard;
  27.167 -					QRegExp re("short_desc:(.*)\n");
  27.168 -					re.setMinimal(true);
  27.169 -					if (re.indexIn (result) !=-1) heading=re.cap(1);
  27.170 -
  27.171 -					re.setPattern ("creation_ts:(.*)\\s");
  27.172 -					if (re.indexIn (result) !=-1) cdate=re.cap(1);
  27.173 -
  27.174 -					re.setPattern ("delta_ts:(.*)\\s");
  27.175 -					if (re.indexIn (result) !=-1) mdate=re.cap(1);
  27.176 -
  27.177 -					re.setPattern ("bug_status:(.*)\n");
  27.178 -					if (re.indexIn (result) !=-1) state=re.cap(1);
  27.179 -
  27.180 -					re.setPattern ("status_whiteboard:(.*)\n");
  27.181 -					if (re.indexIn (result) !=-1) whiteboard=re.cap(1);
  27.182 -
  27.183 -					setHeading (bugID + " - " + heading);
  27.184 -					cout << "VM: heading="<<heading.toStdString()<<endl;
  27.185 -					cout << "VM:   cdate="<<cdate.toStdString()<<endl;
  27.186 -					cout << "VM:   mdate="<<mdate.toStdString()<<endl;
  27.187 -					cout << "VM:   state="<<state.toStdString()<<endl;
  27.188 -					cout << "VM:  wboard="<<whiteboard.toStdString()<<endl;
  27.189 -					
  27.190 -					//cout <<"VM::getBugzillaData  "<<script.toStdString()<<" returned:\n";
  27.191 -					//cout <<QString(result).toStdString()<<endl;
  27.192 -				} else	
  27.193 -					cout << "VM::getBugzillaData "<<script.toStdString()<<"  returned nothing\n";
  27.194 +				qDebug()<< "VM::getBugzillaData bug="<<bugID;
  27.195 +
  27.196 +				new BugAgent (selbi,bugID);
  27.197  			}	
  27.198  		}
  27.199  	}
  27.200 @@ -3044,12 +2989,12 @@
  27.201  				"setVymLink (\""+fd->selectedFile()+"\")",
  27.202  				QString("Set vymlink of %1 to %2").arg(getObjectName(bi)).arg(fd->selectedFile())
  27.203  			);	
  27.204 -			setVymLink (fd->selectedFile() );	// FIXME-2 ok?
  27.205 +			setVymLink (fd->selectedFile() );	
  27.206  		}
  27.207  	}
  27.208  }
  27.209  
  27.210 -void VymModel::setVymLink (const QString &s)	// FIXME-3 no savestate?
  27.211 +void VymModel::setVymLink (const QString &s)	
  27.212  {
  27.213  	// Internal function, no saveState needed
  27.214  	TreeItem *selti=getSelectedItem();
  27.215 @@ -3297,7 +3242,7 @@
  27.216  			parser.setError (Aborted,"Type of selection is not a branch");
  27.217  		} else if (parser.checkParCount(0))
  27.218  		{
  27.219 -			selbi->deactivateAllStandardFlags();	
  27.220 +			selbi->deactivateAllStandardFlags();	//FIXME-2 this probably should emitDataChanged and also setChanged. Similar all other direct changes should be done...
  27.221  		}
  27.222  	/////////////////////////////////////////////////////////////////////
  27.223  	} else if (com=="colorBranch")
  27.224 @@ -4151,7 +4096,6 @@
  27.225  	// Any errors?
  27.226  	if (parser.errorLevel()==NoError)
  27.227  	{
  27.228 -		// setChanged();  FIXME-2 should not be called e.g. for export?!
  27.229  		reposition();
  27.230  		errorMsg.clear();
  27.231  		noErr=true;
  27.232 @@ -4536,6 +4480,11 @@
  27.233  	return linkstyle;
  27.234  }	
  27.235  
  27.236 +uint VymModel::getID()
  27.237 +{
  27.238 +	return mapID;
  27.239 +}
  27.240 +
  27.241  void VymModel::setMapDefLinkColor(QColor col)
  27.242  {
  27.243  	if ( !col.isValid() ) return;
    28.1 --- a/vymmodel.h	Wed Feb 10 13:48:42 2010 +0000
    28.2 +++ b/vymmodel.h	Fri Feb 19 13:47:03 2010 +0000
    28.3 @@ -34,6 +34,9 @@
    28.4  	QString comment;
    28.5  	QDate date;
    28.6  
    28.7 +	static uint idLast;		//! the last used unique ID
    28.8 +	uint mapID;
    28.9 +
   28.10  public:
   28.11  	VymModel();
   28.12  	~VymModel ();
   28.13 @@ -42,6 +45,7 @@
   28.14  	void makeTmpDirectories();		//!< create temporary directories e.g. for history
   28.15  
   28.16  	MapEditor* getMapEditor();			// FIXME-2 still necessary?
   28.17 +	uint getID();						//! Return unique ID of model
   28.18  
   28.19  	bool isRepositionBlocked();		//!< While load or undo there is no need to update graphicsview
   28.20  
    29.1 --- a/vymview.cpp	Wed Feb 10 13:48:42 2010 +0000
    29.2 +++ b/vymview.cpp	Fri Feb 19 13:47:03 2010 +0000
    29.3 @@ -72,7 +72,7 @@
    29.4  			mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
    29.5  			*/
    29.6  
    29.7 -		// FIXME-2 testing, if that reenables updating selbox during animation
    29.8 +		// Needed to update selbox during animation
    29.9  		connect (
   29.10  			model, SIGNAL (selectionChanged(const QItemSelection &, const QItemSelection &)), 
   29.11  			mapEditor,SLOT (updateSelection(const QItemSelection &,const QItemSelection &)));
   29.12 @@ -184,7 +184,7 @@
   29.13  	//cout << "VV::changeProxySelection   newsel.count="<<newsel.indexes().count()<<endl;
   29.14  	if (!newsel.indexes().isEmpty())
   29.15  	{
   29.16 -	/* FIXME-2 need to set current, too
   29.17 +	/* FIXME-3 need to set current, too
   29.18  	*/
   29.19  		proxySelModel->setCurrentIndex (
   29.20  			newsel.indexes().first(),
   29.21 @@ -319,3 +319,12 @@
   29.22  	if (mapEditor) mapEditor->setFocus();
   29.23  }
   29.24  
   29.25 +void VymView::toggleTreeEditor()
   29.26 +{
   29.27 +	if (treeEditor->isVisible() )
   29.28 +		treeEditor->hide();
   29.29 +	else
   29.30 +		treeEditor->show();
   29.31 +}
   29.32 +
   29.33 +
    30.1 --- a/vymview.h	Wed Feb 10 13:48:42 2010 +0000
    30.2 +++ b/vymview.h	Fri Feb 19 13:47:03 2010 +0000
    30.3 @@ -32,6 +32,7 @@
    30.4  	void hideFindWidget();
    30.5  	void findNext (QString s);
    30.6  	void findReset();
    30.7 +	void toggleTreeEditor();
    30.8  
    30.9  private:
   30.10  	VymModel *model;
    31.1 --- a/xml-vym.cpp	Wed Feb 10 13:48:42 2010 +0000
    31.2 +++ b/xml-vym.cpp	Fri Feb 19 13:47:03 2010 +0000
    31.3 @@ -502,7 +502,7 @@
    31.4  {
    31.5  	lastMI=lastImage;
    31.6  	
    31.7 -	//if (!readOOAttr(a)) return false;   FIXME-3
    31.8 +	if (!readOOAttr(a)) return false;  
    31.9  
   31.10  	if (!a.value( "href").isEmpty() )
   31.11  	{