1.1 --- a/exportoofiledialog.h	Tue Sep 05 09:47:13 2006 +0000
     1.2 +++ b/exportoofiledialog.h	Tue Sep 05 09:47:14 2006 +0000
     1.3 @@ -1,8 +1,8 @@
     1.4  #ifndef EXPORTOOFILEDIALOG
     1.5  #define EXPORTOOFILEDIALOG
     1.6  
     1.7 -#include <qfiledialog.h>
     1.8 -#include <qstringlist.h>
     1.9 +#include <QFileDialog>
    1.10 +#include <QStringList>
    1.11  
    1.12  #include "settings.h"
    1.13  
    1.14 @@ -12,18 +12,18 @@
    1.15  public:
    1.16  	ExportOOFileDialog();
    1.17  
    1.18 -	ExportOOFileDialog (QWidget * parent = 0, const char * name = 0, bool
    1.19 -	modal = false);
    1.20 +	ExportOOFileDialog (QWidget * parent = 0, const  QString &caption=QString());
    1.21  	bool foundConfig();
    1.22  	QString selectedConfig();
    1.23  	QString selectedFile();
    1.24 -	void addFilter(const QString &);
    1.25 +	void show();
    1.26  	 
    1.27  private slots:
    1.28  	void  newConfigPath (const QString&f);
    1.29  
    1.30  private:
    1.31  	void init();
    1.32 +	void addFilter(const QString &);
    1.33  	void scanExportConfigs(QDir );
    1.34  	QStringList configPaths;
    1.35  	QStringList filters;
     2.1 --- a/exports.cpp	Tue Sep 05 09:47:13 2006 +0000
     2.2 +++ b/exports.cpp	Tue Sep 05 09:47:14 2006 +0000
     2.3 @@ -1,6 +1,8 @@
     2.4 -#include <qfiledialog.h>
     2.5 +#include <q3filedialog.h>
     2.6  #include <qmessagebox.h>
     2.7 -#include <qprocess.h>
     2.8 +#include <QProcess>
     2.9 +//Added by qt3to4:
    2.10 +#include <QTextStream>
    2.11  
    2.12  #include "exports.h"
    2.13  #include "file.h"
    2.14 @@ -18,7 +20,10 @@
    2.15  {
    2.16  	indentPerDepth="  ";
    2.17  	// Create tmpdir
    2.18 -	tmpDir.setPath (makeUniqueDir("/tmp/vym-XXXXXX"));
    2.19 +	// FIXME not neededtmpDir.setPath (makeUniqueDir("/tmp/vym-XXXXXX"));
    2.20 +	if (!tmpDir.cd ("tmp"))
    2.21 +		qWarning ("Could not access temporary directory for export");
    2.22 +		// FIXME there's more needed here...
    2.23  }
    2.24  
    2.25  ExportBase::~ExportBase()
    2.26 @@ -57,7 +62,7 @@
    2.27  	if (mapCenter && mapCenter->getMapEditor())
    2.28  	{
    2.29  		QFileDialog *fd=new QFileDialog( mapCenter->getMapEditor(), caption);
    2.30 -		fd->addFilter (filter);
    2.31 +		fd->setFilter (filter);
    2.32  		fd->setCaption(caption);
    2.33  		fd->setMode( QFileDialog::AnyFile );
    2.34  		fd->show();
    2.35 @@ -71,7 +76,7 @@
    2.36  				QMessageBox::Warning,
    2.37  				QMessageBox::Yes | QMessageBox::Default,
    2.38  				QMessageBox::Cancel | QMessageBox::Escape,
    2.39 -				QMessageBox::NoButton );
    2.40 +				Qt::NoButton );
    2.41  				mb.setButtonText( QMessageBox::Yes, QObject::tr("Overwrite") );
    2.42  				mb.setButtonText( QMessageBox::No, QObject::tr("Cancel"));
    2.43  				ExportBase ex;
    2.44 @@ -116,9 +121,8 @@
    2.45  void ExportASCII::doExport()
    2.46  {
    2.47  	QFile file (outputFile);
    2.48 -	if ( !file.open( IO_WriteOnly ) )
    2.49 +	if ( !file.open( QIODevice::WriteOnly ) )
    2.50  	{
    2.51 -		// FIXME experimental, testing
    2.52  		qWarning ("ExportBase::exportXML  couldn't open "+outputFile);
    2.53  		return;
    2.54  	}
    2.55 @@ -127,8 +131,7 @@
    2.56  	// Main loop over all branches
    2.57  	QString s;
    2.58  	QString actIndent("");
    2.59 -	int i;
    2.60 -	uint j;
    2.61 +	int i,j;
    2.62  	BranchObj *bo;
    2.63  	bo=mapCenter->first();
    2.64  	while (bo) 
    2.65 @@ -184,17 +187,14 @@
    2.66  			p.process();
    2.67  
    2.68  			QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
    2.69 -			QProcess *proc = new QProcess( );
    2.70 -			proc->addArgument(ub);
    2.71 -
    2.72 -			if ( !proc->start() ) 
    2.73 +			QProcess *proc= new QProcess ();
    2.74 +			proc->start( ub);
    2.75 +			if (!proc->waitForStarted());
    2.76  			{
    2.77  				QMessageBox::warning(0, 
    2.78  					QObject::tr("Warning"),
    2.79  					QObject::tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
    2.80  			}	
    2.81 -
    2.82 -
    2.83  		}
    2.84  	}
    2.85  
    2.86 @@ -248,8 +248,6 @@
    2.87  	if (me)
    2.88  	{
    2.89  		me->exportXML(tmpDir.path());
    2.90 -		//FIXME testing
    2.91 -		cout << "tmpDir="<<tmpDir.path()<<endl;
    2.92  
    2.93  		XSLTProc p;
    2.94  		p.setInputFile (tmpDir.path()+"/"+me->getMapName()+".xml");
    2.95 @@ -269,7 +267,7 @@
    2.96  	// it will not add a preamble, or anything 
    2.97  	// that makes a full LaTex document.
    2.98    QFile file (outputFile);
    2.99 -  if ( !file.open( IO_WriteOnly ) ) {
   2.100 +  if ( !file.open( QIODevice::WriteOnly ) ) {
   2.101  	QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(outputFile));
   2.102  	mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
   2.103      return;
   2.104 @@ -405,7 +403,7 @@
   2.105  
   2.106  	// Write modified content
   2.107  	QFile f (contentFile);
   2.108 -    if ( !f.open( IO_WriteOnly ) ) 
   2.109 +    if ( !f.open( QIODevice::WriteOnly ) ) 
   2.110  	{
   2.111  		QMessageBox::critical (0,QObject::tr("Critical Export Error"),QObject::tr("Could not write %1").arg(contentFile));
   2.112  		mainWindow->statusMessage(QString(QObject::tr("Export failed.")));
     3.1 --- a/file.cpp	Tue Sep 05 09:47:13 2006 +0000
     3.2 +++ b/file.cpp	Tue Sep 05 09:47:14 2006 +0000
     3.3 @@ -1,5 +1,9 @@
     3.4  #include <qobject.h>
     3.5  #include <qmessagebox.h>
     3.6 +//Added by qt3to4:
     3.7 +#include <QPixmap>
     3.8 +#include <QLabel>
     3.9 +#include <QTextStream>
    3.10  #include <iostream>
    3.11  
    3.12  #include "file.h"
    3.13 @@ -45,8 +49,8 @@
    3.14  		}
    3.15  
    3.16  		// Now take care of paths where we have to go back first
    3.17 -		int srcsep=s.contains("/");
    3.18 -		int dstsep=d.contains("/");
    3.19 +		int srcsep=s.count("/");
    3.20 +		int dstsep=d.count("/");
    3.21  		if (srcsep <=  dstsep )
    3.22  		{
    3.23  			// find path to go up first and then back to dst
    3.24 @@ -61,11 +65,12 @@
    3.25  	return d;
    3.26  }
    3.27  
    3.28 -QString makeUniqueDir (QString s)
    3.29 +QString makeUniqueDir (bool &ok,QString s)
    3.30  {
    3.31  	// Create unique directory e.g. s="/tmp/vym-XXXXXX"
    3.32  
    3.33  	// Convert QString to string first
    3.34 +	ok=true;
    3.35  	char *p;
    3.36  	int bytes=s.length();
    3.37  	p=(char*) malloc (bytes+1);
    3.38 @@ -74,6 +79,7 @@
    3.39  		p[i]=s.at(i).latin1();
    3.40  	p[bytes]=0;	
    3.41  	QString r=mkdtemp (p);
    3.42 +	if (r.isEmpty()) ok=false;
    3.43  	free (p);
    3.44  	return r;
    3.45  }
    3.46 @@ -89,16 +95,16 @@
    3.47  
    3.48  	// Traverse directories
    3.49  	d.setFilter( QDir::Dirs| QDir::Hidden | QDir::NoSymLinks );
    3.50 -	const QFileInfoList *dirlist = d.entryInfoList();
    3.51 -	QFileInfoListIterator itdir( *dirlist );
    3.52 -	QFileInfo *fi;
    3.53 +	QFileInfoList list = d.entryInfoList();
    3.54 +	QFileInfo fi;
    3.55  
    3.56 -	while ( (fi = itdir.current()) != 0 ) 
    3.57 +	for (int i = 0; i < list.size(); ++i) 
    3.58  	{
    3.59 -		if (fi->fileName() != "." && fi->fileName() != ".." )
    3.60 +		fi=list.at(i);
    3.61 +		if (fi.fileName() != "." && fi.fileName() != ".." )
    3.62  		{
    3.63 -			if ( !d.cd(fi->fileName()) ) 
    3.64 -				qWarning ("removeDir() cannot find the directory "+fi->fileName());
    3.65 +			if ( !d.cd(fi.fileName()) ) 
    3.66 +				qWarning ("removeDir() cannot find the directory "+fi.fileName());
    3.67  			else 
    3.68  			{
    3.69  				// Recursively remove subdirs
    3.70 @@ -106,18 +112,16 @@
    3.71  				d.cdUp();
    3.72  			}
    3.73  		}	
    3.74 -		++itdir;
    3.75 -	}		
    3.76 +	}
    3.77 +
    3.78  	// Traverse files
    3.79  	d.setFilter( QDir::Files| QDir::Hidden | QDir::NoSymLinks );
    3.80 -	const QFileInfoList *filelist = d.entryInfoList();
    3.81 -	QFileInfoListIterator itfile( *filelist );
    3.82 +	list = d.entryInfoList();
    3.83  
    3.84 -	while ( (fi = itfile.current()) != 0 ) 
    3.85 +	for (int i = 0; i < list.size(); ++i) 
    3.86  	{
    3.87 -		QFile (fi->filePath()).remove();
    3.88 -		
    3.89 -		++itfile;
    3.90 +		fi=list.at(i);
    3.91 +		QFile (fi.filePath()).remove(); 
    3.92  	}	
    3.93  
    3.94  	if (!d.rmdir(d.path()))
    3.95 @@ -228,7 +232,7 @@
    3.96  {
    3.97  	s="";
    3.98  	QFile file ( fname);
    3.99 -	if ( !file.open( IO_ReadOnly ) ) return false;
   3.100 +	if ( !file.open( QIODevice::ReadOnly ) ) return false;
   3.101  
   3.102  	QTextStream ts( &file );
   3.103  	ts.setEncoding (QTextStream::UnicodeUTF8);
   3.104 @@ -243,7 +247,7 @@
   3.105  	QFile file( fname);
   3.106  
   3.107  	file.setName ( fname);
   3.108 -	if ( !file.open( IO_WriteOnly ) ) 
   3.109 +	if ( !file.open( QIODevice::WriteOnly ) ) 
   3.110  	{
   3.111  		file.close();
   3.112  		return false;
   3.113 @@ -260,10 +264,10 @@
   3.114  
   3.115  ImagePreview::ImagePreview (QWidget *par=0): QLabel (par)
   3.116  {
   3.117 -	fdia=(QFileDialog*)par;
   3.118 +	fdia=(Q3FileDialog*)par;
   3.119  }
   3.120  
   3.121 -void ImagePreview::previewUrl( const QUrl &u )
   3.122 +void ImagePreview::previewUrl( const Q3Url &u )
   3.123  {
   3.124      QString path = u.path();
   3.125      QPixmap pix( path );
   3.126 @@ -301,3 +305,39 @@
   3.127  	}	
   3.128  }
   3.129  
   3.130 +ImageIO::ImageIO ()
   3.131 +{
   3.132 +	// Create list with supported image types
   3.133 +	// foreach (QByteArray format, QImageWriter::supportedImageFormats()) 
   3.134 +	// imageTypes.append( tr("%1...").arg(QString(format).toUpper()));
   3.135 +	imageFilters.append ("Images (*.png *.jpg *.jpeg *.bmp *.bmp *.ppm *.xpm *.xbm)");
   3.136 +	imageTypes.append ("PNG");
   3.137 +	imageFilters.append ("Portable Network Graphics (*.png)");
   3.138 +	imageTypes.append ("PNG");
   3.139 +	imageFilters.append ("Joint Photographic Experts Group (*.jpg)");
   3.140 +	imageTypes.append ("JPG");
   3.141 +	imageFilters.append ("Joint Photographic Experts Group (*.jpeg)");
   3.142 +	imageTypes.append ("JPG");
   3.143 +	imageFilters.append ("Windows Bitmap (*.bmp)");
   3.144 +	imageTypes.append ("BMP");
   3.145 +	imageFilters.append ("Portable Pixmap (*.ppm)");
   3.146 +	imageTypes.append ("PPM");
   3.147 +	imageFilters.append ("X11 Bitmap (*.xpm)");
   3.148 +	imageTypes.append ("XPM");
   3.149 +	imageFilters.append ("X11 Bitmap (*.xbm)");
   3.150 +	imageTypes.append ("XBM");
   3.151 +}
   3.152 +
   3.153 +QStringList ImageIO::getFilters()
   3.154 +{
   3.155 +	return imageFilters;
   3.156 +}
   3.157 +
   3.158 +QString ImageIO::getType(QString filter)
   3.159 +{
   3.160 +	for (int i=0;i<imageFilters.count()+1;i++)
   3.161 +		if (imageFilters.at(i)==filter) return imageTypes.at(i);
   3.162 +	return QString();	
   3.163 +}
   3.164 +
   3.165 +
     4.1 --- a/file.h	Tue Sep 05 09:47:13 2006 +0000
     4.2 +++ b/file.h	Tue Sep 05 09:47:14 2006 +0000
     4.3 @@ -11,7 +11,7 @@
     4.4  /////////////////////////////////////////////////////////////////////////////
     4.5  QString maskPath (QString );
     4.6  QString convertToRel (const QString &,const QString &);
     4.7 -QString makeUniqueDir (QString);
     4.8 +QString makeUniqueDir (bool &,QString);
     4.9  void removeDir(QDir);
    4.10  void makeSubDirs (const QString &);
    4.11  ErrorCode zipDir (const QDir &,const QString&);
    4.12 @@ -21,16 +21,32 @@
    4.13  
    4.14  /////////////////////////////////////////////////////////////////////////////
    4.15  #include <qlabel.h>
    4.16 -#include <qfiledialog.h>
    4.17 +#include <q3filedialog.h>
    4.18  #include <qpixmap.h>
    4.19  
    4.20 -class ImagePreview : public QLabel, public QFilePreview
    4.21 +class ImagePreview : public QLabel, public Q3FilePreview
    4.22  {
    4.23  public:
    4.24      ImagePreview( QWidget * );
    4.25 -    void previewUrl( const QUrl & );
    4.26 +    void previewUrl( const Q3Url & );
    4.27  protected:
    4.28 -	QFileDialog *fdia;
    4.29 +	Q3FileDialog *fdia;
    4.30 +};
    4.31 +
    4.32 +
    4.33 +//////////////////////////////////////////////////////////
    4.34 +// Helper function to select image format while in SaveDialogs
    4.35 +
    4.36 +class ImageIO
    4.37 +{
    4.38 +public:
    4.39 +	ImageIO ();
    4.40 +	QStringList getFilters();
    4.41 +	QString getType ( QString );
    4.42 +
    4.43 +private:	
    4.44 +	QStringList imageFilters;
    4.45 +	QStringList imageTypes;
    4.46  };
    4.47  
    4.48  #endif
     5.1 --- a/flagobj.cpp	Tue Sep 05 09:47:13 2006 +0000
     5.2 +++ b/flagobj.cpp	Tue Sep 05 09:47:14 2006 +0000
     5.3 @@ -1,4 +1,6 @@
     5.4  #include "flagobj.h"
     5.5 +//Added by qt3to4:
     5.6 +#include <QPixmap>
     5.7  
     5.8  /////////////////////////////////////////////////////////////////
     5.9  // FlagObj
    5.10 @@ -9,7 +11,7 @@
    5.11      init ();
    5.12  }
    5.13  
    5.14 -FlagObj::FlagObj(QCanvas* c):MapObj(c) 
    5.15 +FlagObj::FlagObj(Q3Canvas* c):MapObj(c) 
    5.16  {
    5.17  //	cout << "Const FlagObj  canvas="<<c<<endl;
    5.18      init ();
    5.19 @@ -34,8 +36,8 @@
    5.20  
    5.21  	icon=new ImageObj (canvas);
    5.22  	icon->move (absPos.x(), absPos.y() );
    5.23 -	button=NULL;
    5.24  	state=false;
    5.25 +	action=NULL;
    5.26  }
    5.27  
    5.28  void FlagObj::copy (FlagObj* other)
    5.29 @@ -46,10 +48,8 @@
    5.30  	tooltip=other->tooltip;
    5.31  	state=other->state;
    5.32  	icon->copy(other->icon);
    5.33 +	action=other->action;
    5.34  	setVisibility (other->isVisibleObj() );
    5.35 -	// button is not copied, because
    5.36 -	// we won't copy to a parentRow and
    5.37 -	// all others don't need a button
    5.38  }
    5.39  
    5.40  void FlagObj::move(double x, double y)
    5.41 @@ -117,24 +117,21 @@
    5.42  	return tooltip;
    5.43  }
    5.44  
    5.45 -void FlagObj::setButton(QAction* b)
    5.46 -{
    5.47 -    button=b;
    5.48 -}
    5.49 -
    5.50 -void FlagObj::updateButton()
    5.51 -{
    5.52 -	if (button)
    5.53 -		button->setOn(state);
    5.54 -	else
    5.55 -		qWarning ("FlagObj::updateButton  no button defined");
    5.56 -}
    5.57 -
    5.58  QPixmap FlagObj::getPixmap()
    5.59  {
    5.60  	return icon->getPixmap();
    5.61  }
    5.62  
    5.63 +void FlagObj::setAction (QAction* a)
    5.64 +{
    5.65 +	action=a;
    5.66 +}
    5.67 +
    5.68 +void FlagObj::updateAction ()
    5.69 +{
    5.70 +	if (action) action->setChecked(state);
    5.71 +}
    5.72 +
    5.73  bool FlagObj::isActive()
    5.74  {
    5.75  	return state;
    5.76 @@ -170,12 +167,6 @@
    5.77  	}	
    5.78  }
    5.79  
    5.80 -void FlagObj::setEnabled(bool b)
    5.81 -{
    5.82 -	button->setEnabled (b);
    5.83 -}	
    5.84 -	
    5.85 -
    5.86  void FlagObj::setUsed (bool b)
    5.87  {
    5.88  	used=b;
     6.1 --- a/flagobj.h	Tue Sep 05 09:47:13 2006 +0000
     6.2 +++ b/flagobj.h	Tue Sep 05 09:47:14 2006 +0000
     6.3 @@ -2,8 +2,10 @@
     6.4  #define FLAGOBJ_H
     6.5  
     6.6  
     6.7 -#include <qcanvas.h>
     6.8 +#include <q3canvas.h>
     6.9  #include <qaction.h>
    6.10 +//Added by qt3to4:
    6.11 +#include <QPixmap>
    6.12  
    6.13  #include "mapobj.h"
    6.14  #include "imageobj.h"
    6.15 @@ -12,7 +14,7 @@
    6.16  class FlagObj:public MapObj {
    6.17  public:
    6.18      FlagObj ();
    6.19 -    FlagObj (QCanvas*);
    6.20 +    FlagObj (Q3Canvas*);
    6.21      FlagObj (FlagObj*);
    6.22      ~FlagObj ();
    6.23      virtual void init ();
    6.24 @@ -28,14 +30,13 @@
    6.25  	const QString getGroup();
    6.26  	void setToolTip(const QString&);
    6.27  	const QString getToolTip();
    6.28 -	void setButton (QAction*);
    6.29 -	void updateButton ();
    6.30  	QPixmap getPixmap();
    6.31 +	void setAction(QAction*);
    6.32 +	void updateAction ();
    6.33  	bool isActive();
    6.34  	void toggle();
    6.35  	void activate();
    6.36  	void deactivate();
    6.37 -	void setEnabled (bool);
    6.38  	void setUsed (bool);
    6.39  	bool isUsed();
    6.40  	void saveToDir (const QString&, const QString&);
    6.41 @@ -50,7 +51,7 @@
    6.42      virtual void calcBBoxSize();
    6.43  private:
    6.44  	ImageObj* icon;
    6.45 -	QAction* button;
    6.46 +	QAction* action;
    6.47  };
    6.48  
    6.49  #endif
     7.1 --- a/flagrowobj.cpp	Tue Sep 05 09:47:13 2006 +0000
     7.2 +++ b/flagrowobj.cpp	Tue Sep 05 09:47:14 2006 +0000
     7.3 @@ -1,5 +1,7 @@
     7.4  #include "flagrowobj.h"
     7.5  
     7.6 +#include <QToolBar>
     7.7 +
     7.8  /////////////////////////////////////////////////////////////////
     7.9  // FlagRowObj
    7.10  /////////////////////////////////////////////////////////////////
    7.11 @@ -9,7 +11,7 @@
    7.12      init ();
    7.13  }
    7.14  
    7.15 -FlagRowObj::FlagRowObj(QCanvas* c):MapObj(c) 
    7.16 +FlagRowObj::FlagRowObj(Q3Canvas* c):MapObj(c) 
    7.17  {
    7.18  //    cout << "Const FlagRowObj\n";
    7.19      init ();
    7.20 @@ -232,15 +234,16 @@
    7.21  	}	
    7.22  }
    7.23  
    7.24 +void FlagRowObj::setToolBar(QToolBar *tb)
    7.25 +{
    7.26 +	toolbar=tb;
    7.27 +}
    7.28 +
    7.29  void FlagRowObj::setEnabled (bool b)
    7.30  {
    7.31 -	// If we have no parent, we are the default FlagRowObj
    7.32 -	// and have QToolbarButtons
    7.33 -	if (!parentRow)
    7.34 +	if (toolbar)
    7.35  	{
    7.36 -		FlagObj *fo;
    7.37 -		for (fo=flag.first();fo; fo=flag.next() )
    7.38 -			fo->setEnabled (b);
    7.39 +		toolbar->setEnabled (b);
    7.40  	}
    7.41  }
    7.42  
    7.43 @@ -286,44 +289,13 @@
    7.44  	name=n;
    7.45  }
    7.46  
    7.47 -void FlagRowObj::makeToolbar (QMainWindow *w, const QString &n)
    7.48 -{
    7.49 -	//Only make toolbar for the parentrow, not each row in branches
    7.50 -	if (!parentRow)
    7.51 -	{
    7.52 -		// create bar and buttons
    7.53 -		QToolBar* tb = new QToolBar( w);
    7.54 -		tb->setLabel (n);
    7.55 -		QAction *a;
    7.56 -		FlagObj *fo;
    7.57 -		for (fo=flag.first();fo; fo=flag.next() )
    7.58 -		{
    7.59 -			a=new QAction (
    7.60 -				fo->getToolTip(),
    7.61 -				fo->getPixmap(),
    7.62 -				fo->getName(),
    7.63 -				0,
    7.64 -				w,
    7.65 -				fo->getName()
    7.66 -			);
    7.67 -			a->setToggleAction(true);
    7.68 -			// FIXME should not be enabled by default, later in updateToolbar
    7.69 -			a->setEnabled(true);
    7.70 -			a->addTo (tb);
    7.71 -			fo->setButton (a);
    7.72 -			connect(a, SIGNAL( activated() ), 
    7.73 -					w, SLOT( standardFlagChanged() ) );
    7.74 -		}
    7.75 -	} else
    7.76 -		qWarning ("FlagRowObj::makeToolbar must not be called for ordinary rows");
    7.77 -}
    7.78 -
    7.79  void  FlagRowObj::updateToolbar()
    7.80  {
    7.81  	FlagObj *fo;
    7.82  	if (parentRow)
    7.83  	{
    7.84  		// We are just a branch, not the toolbar default
    7.85 +		// but state has to be copied from ourselves to parentrow!
    7.86  		parentRow->deactivateAll();
    7.87  		// In parentRow activate all existing (==active) flags
    7.88  		for (fo=flag.first();fo; fo=flag.next() ) 
    7.89 @@ -332,8 +304,12 @@
    7.90  	} else
    7.91  	{
    7.92  		// We are the toolbar default
    7.93 -		for (fo=flag.first();fo; fo=flag.next() ) 
    7.94 -			fo->updateButton();
    7.95 +		if (toolbar)
    7.96 +		{
    7.97 +			// Update state of actions in toolbar
    7.98 +			for (fo=flag.first();fo; fo=flag.next() ) 
    7.99 +				fo->updateAction();
   7.100 +		}	
   7.101  	}
   7.102  }
   7.103  
     8.1 --- a/flagrowobj.h	Tue Sep 05 09:47:13 2006 +0000
     8.2 +++ b/flagrowobj.h	Tue Sep 05 09:47:14 2006 +0000
     8.3 @@ -1,7 +1,9 @@
     8.4  #ifndef FLAGROWOBJ_H
     8.5  #define FLAGROWOBJ_H
     8.6  
     8.7 -#include <qmainwindow.h>
     8.8 +#include <QMainWindow>
     8.9 +//Added by qt3to4:
    8.10 +#include <Q3PtrList>
    8.11  
    8.12  #include "mapobj.h"
    8.13  #include "flagobj.h"
    8.14 @@ -9,7 +11,7 @@
    8.15  class FlagRowObj:public QObject,public MapObj {
    8.16  public:
    8.17      FlagRowObj ();
    8.18 -    FlagRowObj (QCanvas*);
    8.19 +    FlagRowObj (Q3Canvas*);
    8.20      ~FlagRowObj ();
    8.21      virtual void init ();
    8.22      virtual void copy (FlagRowObj*);
    8.23 @@ -27,6 +29,7 @@
    8.24  	void deactivate(const QString&);
    8.25  	void deactivateAll();
    8.26  	void deactivateGroup(FlagObj *);
    8.27 +	void setToolBar (QToolBar *);
    8.28  	void setEnabled (bool);
    8.29  	void setShowFlags (bool);
    8.30  	void resetUsedCounter();
    8.31 @@ -37,7 +40,8 @@
    8.32  private:	
    8.33  	FlagRowObj* parentRow;					// look for flags in this row
    8.34  	FlagObj* findFlag (const QString&);
    8.35 -    QPtrList <FlagObj> flag; 
    8.36 +    Q3PtrList <FlagObj> flag; 
    8.37 +	QToolBar *toolbar;
    8.38  	QString name;
    8.39  	bool showFlags;							// FloatObjects want to hide their flags
    8.40  };
     9.1 --- a/floatimageobj.cpp	Tue Sep 05 09:47:13 2006 +0000
     9.2 +++ b/floatimageobj.cpp	Tue Sep 05 09:47:14 2006 +0000
     9.3 @@ -1,5 +1,7 @@
     9.4  #include "floatimageobj.h"
     9.5  #include "branchobj.h"
     9.6 +//Added by qt3to4:
     9.7 +#include <QPixmap>
     9.8  
     9.9  
    9.10  /////////////////////////////////////////////////////////////////
    9.11 @@ -17,7 +19,7 @@
    9.12      depth=-1;
    9.13  }
    9.14  
    9.15 -FloatImageObj::FloatImageObj (QCanvas* c):FloatObj(c)
    9.16 +FloatImageObj::FloatImageObj (Q3Canvas* c):FloatObj(c)
    9.17  {
    9.18   //   cout << "Const FloatImageObj (c)  called from MapCenterObj (c)\n";
    9.19      setParObj (this);	
    9.20 @@ -25,7 +27,7 @@
    9.21      depth=-1;
    9.22  }
    9.23  
    9.24 -FloatImageObj::FloatImageObj (QCanvas* c, OrnamentedObj* p):FloatObj(c,p)
    9.25 +FloatImageObj::FloatImageObj (Q3Canvas* c, OrnamentedObj* p):FloatObj(c,p)
    9.26  {
    9.27   //   cout << "Const FloatImageObj (c,p)\n";
    9.28      init();
    9.29 @@ -94,7 +96,7 @@
    9.30  		bbox.setSize (QSize(icon->size().width()+8, icon->size().height()+8));
    9.31  		positionBBox();
    9.32  		filename=fn;
    9.33 -		filetype=QPixmap::imageFormat (fn);
    9.34 +//FIXME QT3 was		filetype=QPixmap::imageFormat (fn);
    9.35  		setOriginalFilename (fn);
    9.36  		return true;
    9.37  	} else
    9.38 @@ -102,9 +104,9 @@
    9.39  	
    9.40  }
    9.41  
    9.42 -void FloatImageObj::save (const QString &fn, const char *format)
    9.43 +void FloatImageObj::save (const QString &fn, const QString &format)
    9.44  {	
    9.45 -	icon->save (fn,format);
    9.46 +	icon->save (fn,qPrintable (format));
    9.47  }
    9.48  
    9.49  void FloatImageObj::setOriginalFilename(const QString & fn)
    9.50 @@ -180,14 +182,10 @@
    9.51  	QString zAttr=attribut ("zPlane",QString().setNum(zPlane));
    9.52  	QString url;
    9.53  
    9.54 -	// prevent saving as GIF
    9.55 -	if (filetype=="GIF")
    9.56 -		filetype="PNG";
    9.57 -		
    9.58  	url="images/"+prefix+"image-" + QString().number(saveCounter,10) + "." +filetype;
    9.59  
    9.60  	// And really save the image
    9.61 -	icon->save (tmpdir + "/" + url, filetype);
    9.62 +	icon->save (tmpdir + "/" + url, "PNG");
    9.63   
    9.64  	QString nameAttr=attribut ("orgName",originalFilename);
    9.65  
    10.1 --- a/floatimageobj.h	Tue Sep 05 09:47:13 2006 +0000
    10.2 +++ b/floatimageobj.h	Tue Sep 05 09:47:14 2006 +0000
    10.3 @@ -2,13 +2,15 @@
    10.4  #define FLOATIMAGEOBJ_H
    10.5  
    10.6  #include "floatobj.h"
    10.7 +//Added by qt3to4:
    10.8 +#include <QPixmap>
    10.9  
   10.10  /////////////////////////////////////////////////////////////////////////////
   10.11  class FloatImageObj:public FloatObj {
   10.12  public:
   10.13      FloatImageObj ();
   10.14 -    FloatImageObj (QCanvas*);
   10.15 -    FloatImageObj (QCanvas*, OrnamentedObj* parent);
   10.16 +    FloatImageObj (Q3Canvas*);
   10.17 +    FloatImageObj (Q3Canvas*, OrnamentedObj* parent);
   10.18      ~FloatImageObj ();
   10.19      virtual void init ();
   10.20      virtual void copy (FloatImageObj*);
   10.21 @@ -17,7 +19,7 @@
   10.22  
   10.23  	virtual void load (const QPixmap &);
   10.24  	virtual bool load (const QString &);
   10.25 -	virtual void save (const QString &, const char *);
   10.26 +	virtual void save (const QString &, const QString&);
   10.27  	virtual void setOriginalFilename(const QString &);
   10.28  	virtual QString getOriginalFilename();
   10.29      virtual void setVisibility(bool);	    // set vis. for w
    11.1 --- a/floatobj.cpp	Tue Sep 05 09:47:13 2006 +0000
    11.2 +++ b/floatobj.cpp	Tue Sep 05 09:47:14 2006 +0000
    11.3 @@ -14,7 +14,7 @@
    11.4      depth=-1;
    11.5  }
    11.6  
    11.7 -FloatObj::FloatObj (QCanvas* c):OrnamentedObj(c)
    11.8 +FloatObj::FloatObj (Q3Canvas* c):OrnamentedObj(c)
    11.9  {
   11.10  //	cout << "Const FloatObj (c)  called from MapCenterObj (c)\n";
   11.11      setParObj (this);	
   11.12 @@ -22,7 +22,7 @@
   11.13      depth=-1;
   11.14  }
   11.15  
   11.16 -FloatObj::FloatObj (QCanvas* c, LinkableMapObj* p):OrnamentedObj (c)
   11.17 +FloatObj::FloatObj (Q3Canvas* c, LinkableMapObj* p):OrnamentedObj (c)
   11.18  {
   11.19  //    cout << "Const FloatObj (c,p)\n";
   11.20      setParObj (p);	
    12.1 --- a/floatobj.h	Tue Sep 05 09:47:13 2006 +0000
    12.2 +++ b/floatobj.h	Tue Sep 05 09:47:14 2006 +0000
    12.3 @@ -7,8 +7,8 @@
    12.4  class FloatObj:public OrnamentedObj {
    12.5  public:
    12.6      FloatObj ();
    12.7 -    FloatObj (QCanvas*);
    12.8 -    FloatObj (QCanvas*, LinkableMapObj* parent);
    12.9 +    FloatObj (Q3Canvas*);
   12.10 +    FloatObj (Q3Canvas*, LinkableMapObj* parent);
   12.11      ~FloatObj ();
   12.12      virtual void init ();
   12.13      virtual void copy (FloatObj*);
    13.1 --- a/frameobj.cpp	Tue Sep 05 09:47:13 2006 +0000
    13.2 +++ b/frameobj.cpp	Tue Sep 05 09:47:14 2006 +0000
    13.3 @@ -11,7 +11,7 @@
    13.4      init ();
    13.5  }
    13.6  
    13.7 -FrameObj::FrameObj(QCanvas* c) :MapObj(c)
    13.8 +FrameObj::FrameObj(Q3Canvas* c) :MapObj(c)
    13.9  {
   13.10  //    cout << "Const FrameObj\n";
   13.11      init ();
   13.12 @@ -117,7 +117,7 @@
   13.13  				break;
   13.14  			case Rectangle:
   13.15  				border=10;
   13.16 -				rectFrame = new QCanvasRectangle (canvas);
   13.17 +				rectFrame = new Q3CanvasRectangle (canvas);
   13.18  				rectFrame->setZ(Z_FRAME);
   13.19  				rectFrame->setBrush( QColor("white") );
   13.20  				rectFrame->setPen( QPen(QColor("black") ));
    14.1 --- a/frameobj.h	Tue Sep 05 09:47:13 2006 +0000
    14.2 +++ b/frameobj.h	Tue Sep 05 09:47:14 2006 +0000
    14.3 @@ -8,7 +8,7 @@
    14.4  class FrameObj:public MapObj {
    14.5  public:
    14.6      FrameObj();
    14.7 -    FrameObj(QCanvas*);
    14.8 +    FrameObj(Q3Canvas*);
    14.9      ~FrameObj();
   14.10      void init();
   14.11      void clear();
   14.12 @@ -26,7 +26,7 @@
   14.13  
   14.14  protected:
   14.15      FrameType type;
   14.16 -    QCanvasRectangle* rectFrame;
   14.17 +    Q3CanvasRectangle* rectFrame;
   14.18      int border;									// distance text - frame
   14.19  };
   14.20  #endif
    15.1 --- a/headingobj.cpp	Tue Sep 05 09:47:13 2006 +0000
    15.2 +++ b/headingobj.cpp	Tue Sep 05 09:47:14 2006 +0000
    15.3 @@ -10,7 +10,7 @@
    15.4      init ();
    15.5  }
    15.6  
    15.7 -HeadingObj::HeadingObj(QCanvas* c) :MapObj(c)
    15.8 +HeadingObj::HeadingObj(Q3Canvas* c) :MapObj(c)
    15.9  {
   15.10  //    cout << "Const HeadingObj\n";
   15.11      init ();
   15.12 @@ -50,7 +50,7 @@
   15.13  		h=textline.first()->boundingRect().height();
   15.14      else
   15.15  		h=2;
   15.16 -    QCanvasText *t;
   15.17 +    Q3CanvasText *t;
   15.18      ho=0;
   15.19      for (t=textline.first(); t; t=textline.next() )
   15.20      {
   15.21 @@ -80,7 +80,7 @@
   15.22  	// then no selection would be visible, thus we prevent it in ::setText()
   15.23  	if (!textline.isEmpty() )
   15.24  	{
   15.25 -		QCanvasText *t;
   15.26 +		Q3CanvasText *t;
   15.27  		for (t=textline.first(); t; t=textline.next() )
   15.28  		{
   15.29  			h+=t->boundingRect().height();
   15.30 @@ -91,10 +91,10 @@
   15.31      bbox.setSize (QSize(w,h));
   15.32  }
   15.33  
   15.34 -QCanvasText* HeadingObj::newLine(QString s)
   15.35 +Q3CanvasText* HeadingObj::newLine(QString s)
   15.36  {
   15.37 -    QCanvasText *t;
   15.38 -    t = new QCanvasText(canvas);
   15.39 +    Q3CanvasText *t;
   15.40 +    t = new Q3CanvasText(canvas);
   15.41      t->setFont (font);
   15.42      t->setColor (color);
   15.43      t->setZ(Z_TEXT);
   15.44 @@ -220,7 +220,7 @@
   15.45      if (color!=c)
   15.46      {
   15.47  		color=c;
   15.48 -		QCanvasText *t;
   15.49 +		Q3CanvasText *t;
   15.50  		for (t=textline.first(); t; t=textline.next() )
   15.51  			t->setColor(c);
   15.52      }	    
   15.53 @@ -234,7 +234,7 @@
   15.54  void HeadingObj::setVisibility (bool v)
   15.55  {
   15.56      MapObj::setVisibility(v);
   15.57 -    QCanvasText *t;
   15.58 +    Q3CanvasText *t;
   15.59      for (t=textline.first(); t; t=textline.next() )
   15.60  		if (v)
   15.61  			t->show();
    16.1 --- a/headingobj.h	Tue Sep 05 09:47:13 2006 +0000
    16.2 +++ b/headingobj.h	Tue Sep 05 09:47:14 2006 +0000
    16.3 @@ -2,11 +2,13 @@
    16.4  #define HEADINGOBJ_H
    16.5  
    16.6  #include "mapobj.h"
    16.7 +//Added by qt3to4:
    16.8 +#include <Q3PtrList>
    16.9  
   16.10  class HeadingObj:public MapObj {
   16.11  public:
   16.12      HeadingObj();
   16.13 -    HeadingObj(QCanvas*);
   16.14 +    HeadingObj(Q3Canvas*);
   16.15      virtual ~HeadingObj();
   16.16      virtual void init();
   16.17      virtual void copy(HeadingObj*);
   16.18 @@ -15,7 +17,7 @@
   16.19      virtual void positionBBox();
   16.20  	virtual void calcBBoxSize();
   16.21  private:
   16.22 -    QCanvasText* newLine(QString);				// generate new textline
   16.23 +    Q3CanvasText* newLine(QString);				// generate new textline
   16.24  public:    
   16.25      virtual void setText(QString);
   16.26      virtual QString text();
   16.27 @@ -30,7 +32,7 @@
   16.28  protected:
   16.29      QString heading;
   16.30      uint textwidth;								// width for formatting text
   16.31 -    QPtrList <QCanvasText> textline;			// a part of e.g. the parabel
   16.32 +    Q3PtrList <Q3CanvasText> textline;			// a part of e.g. the parabel
   16.33      QColor color;
   16.34      QFont font;
   16.35  };
    17.1 --- a/imageobj.cpp	Tue Sep 05 09:47:13 2006 +0000
    17.2 +++ b/imageobj.cpp	Tue Sep 05 09:47:14 2006 +0000
    17.3 @@ -1,10 +1,12 @@
    17.4  #include "imageobj.h"
    17.5 +//Added by qt3to4:
    17.6 +#include <QPixmap>
    17.7  
    17.8  /////////////////////////////////////////////////////////////////
    17.9  // ImageObj
   17.10  /////////////////////////////////////////////////////////////////
   17.11 -ImageObj::ImageObj( QCanvas *canvas )
   17.12 -    : QCanvasRectangle( canvas )
   17.13 +ImageObj::ImageObj( Q3Canvas *canvas )
   17.14 +    : Q3CanvasRectangle( canvas )
   17.15  {
   17.16  //	cout << "Const ImageObj (canvas)\n";
   17.17      setZ(Z_ICON);	
   17.18 @@ -54,7 +56,7 @@
   17.19  	type=qimage;
   17.20  
   17.21  #if !defined(Q_WS_QWS)
   17.22 -    pixmap.convertFromImage(image, OrderedAlphaDither);
   17.23 +    pixmap.convertFromImage(image, Qt::OrderedAlphaDither);
   17.24  #endif
   17.25  	return true;
   17.26  }
   17.27 @@ -78,7 +80,7 @@
   17.28  {
   17.29  	type=qimage;
   17.30  	image=img;
   17.31 -    pixmap.convertFromImage(image, OrderedAlphaDither);
   17.32 +    pixmap.convertFromImage(image, Qt::OrderedAlphaDither);
   17.33  }
   17.34  
   17.35  QPixmap ImageObj::getPixmap()
   17.36 @@ -91,7 +93,7 @@
   17.37  // On Qt/Embedded, we can paint a QImage as fast as a QPixmap,
   17.38  // but on other platforms, we need to use a QPixmap.
   17.39  #if defined(Q_WS_QWS)
   17.40 -    p.drawImage( int(x()), int(y()), image, 0, 0, -1, -1, OrderedAlphaDither );
   17.41 +    p.drawImage( int(x()), int(y()), image, 0, 0, -1, -1, Qt::OrderedAlphaDither );
   17.42  #else
   17.43      p.drawPixmap( int(x()), int(y()), pixmap );
   17.44  #endif
    18.1 --- a/imageobj.h	Tue Sep 05 09:47:13 2006 +0000
    18.2 +++ b/imageobj.h	Tue Sep 05 09:47:14 2006 +0000
    18.3 @@ -2,17 +2,19 @@
    18.4  #define IMAGEOBJ_H
    18.5  
    18.6  #include <qimage.h>
    18.7 -#include <qcanvas.h>
    18.8 +#include <q3canvas.h>
    18.9  #include <qpainter.h>
   18.10 +//Added by qt3to4:
   18.11 +#include <QPixmap>
   18.12  
   18.13  #include "mapobj.h"
   18.14  
   18.15  enum ImageType {qimage,qpixmap,undef};
   18.16  
   18.17 -class ImageObj: public QCanvasRectangle
   18.18 +class ImageObj: public Q3CanvasRectangle
   18.19  {
   18.20  public:
   18.21 -    ImageObj( QCanvas *canvas );
   18.22 +    ImageObj( Q3Canvas *canvas );
   18.23      ~ImageObj();
   18.24  	virtual void copy (ImageObj*);
   18.25      virtual void setVisibility(bool);
    19.1 --- a/imports.cpp	Tue Sep 05 09:47:13 2006 +0000
    19.2 +++ b/imports.cpp	Tue Sep 05 09:47:14 2006 +0000
    19.3 @@ -1,4 +1,6 @@
    19.4 -#include <qmessagebox.h>
    19.5 +#include <QMessageBox>
    19.6 +//Added by qt3to4:
    19.7 +#include <QTextStream>
    19.8  
    19.9  #include "file.h"
   19.10  #include "imports.h"
   19.11 @@ -13,7 +15,10 @@
   19.12  ImportBase::ImportBase()
   19.13  {
   19.14  	// Create tmpdir
   19.15 -	tmpDir.setPath (makeUniqueDir("/tmp/vym-XXXXXX"));
   19.16 +	// FIXME not neededtmpDir.setPath (makeUniqueDir("/tmp/vym-XXXXXX"));
   19.17 +	if (!tmpDir.cd ("tmp"))
   19.18 +		qWarning ("Could not access temporary directory for export");
   19.19 +		// FIXME
   19.20  }
   19.21  
   19.22  
   19.23 @@ -70,7 +75,7 @@
   19.24  
   19.25  	QStringList lines;
   19.26  	QFile file( inputFile );
   19.27 -	if ( file.open( IO_ReadOnly ) ) 
   19.28 +	if ( file.open( QIODevice::ReadOnly ) ) 
   19.29  	{
   19.30  		QTextStream stream( &file );
   19.31  		while ( !stream.atEnd() ) 
   19.32 @@ -90,7 +95,6 @@
   19.33  	// try to unzip 
   19.34  	if (success==unzipDir (tmpDir, inputFile))
   19.35  	{
   19.36 -		cout << "Unzipped "<<inputFile<<" to "<<tmpDir.path()<<endl;
   19.37  		
   19.38  		// Set short name, too. Search from behind:
   19.39  		transformedFile=inputFile;
   19.40 @@ -98,7 +102,6 @@
   19.41  		if (i>=0) transformedFile=transformedFile.remove (0,i+1);
   19.42  		transformedFile.replace(".mmap",".xml");
   19.43  		transformedFile=tmpDir.path()+"/"+transformedFile;
   19.44 -		cout << "  transformedFile="<<transformedFile<<endl;
   19.45  
   19.46  		XSLTProc p;
   19.47  		p.setInputFile (tmpDir.path()+"/Document.xml");
    20.1 --- a/linkablemapobj.cpp	Tue Sep 05 09:47:13 2006 +0000
    20.2 +++ b/linkablemapobj.cpp	Tue Sep 05 09:47:14 2006 +0000
    20.3 @@ -5,6 +5,8 @@
    20.4  #include "mapeditor.h"
    20.5  
    20.6  #include "version.h"
    20.7 +//Added by qt3to4:
    20.8 +#include <Q3PointArray>
    20.9  
   20.10  
   20.11  /////////////////////////////////////////////////////////////////
   20.12 @@ -17,7 +19,7 @@
   20.13      init ();
   20.14  }
   20.15  
   20.16 -LinkableMapObj::LinkableMapObj(QCanvas* c) :MapObj(c)
   20.17 +LinkableMapObj::LinkableMapObj(Q3Canvas* c) :MapObj(c)
   20.18  {
   20.19  //    cout << "Const LinkableMapObj\n";
   20.20      init ();
   20.21 @@ -77,15 +79,15 @@
   20.22  	linkpos=LinkBottom;
   20.23      segment.setAutoDelete (TRUE);
   20.24      arcsegs=13;
   20.25 -	QPointArray pa(arcsegs*2+2);
   20.26 +	Q3PointArray pa(arcsegs*2+2);
   20.27      
   20.28 -    bottomline=new QCanvasLine(canvas);
   20.29 +    bottomline=new Q3CanvasLine(canvas);
   20.30      bottomline->setPen( QPen(linkcolor, 1) );
   20.31      bottomline->setZ(Z_LINK);
   20.32      bottomline->show();
   20.33  
   20.34      // Prepare showing the selection of a MapObj
   20.35 -    selbox = new QCanvasRectangle (canvas);
   20.36 +    selbox = new Q3CanvasRectangle (canvas);
   20.37      selbox->setZ(Z_SELBOX);
   20.38      selbox->setBrush( QColor(255,255,0) );
   20.39      selbox->setPen( QPen(QColor(255,255,0) ));
   20.40 @@ -152,8 +154,7 @@
   20.41  {
   20.42  	if (parObj)
   20.43  	{	
   20.44 -		relPos.setX (absPos.x() - parObj->getChildPos().x() );
   20.45 -		relPos.setY (absPos.y() - parObj->getChildPos().y() );
   20.46 +		relPos=getRelPos();
   20.47  
   20.48  		parObj->calcBBoxSize();
   20.49  		parObj->requestReposition();
   20.50 @@ -169,6 +170,14 @@
   20.51  	}	
   20.52  }
   20.53  
   20.54 +QPoint LinkableMapObj::getRelPos()
   20.55 +{
   20.56 +	if (!parObj) return QPoint();
   20.57 +	relPos.setX (absPos.x() - parObj->getChildPos().x() );
   20.58 +	relPos.setY (absPos.y() - parObj->getChildPos().y() );
   20.59 +	return relPos;
   20.60 +}
   20.61 +
   20.62  int LinkableMapObj::getTopPad()
   20.63  {
   20.64  	return topPad;
   20.65 @@ -225,14 +234,14 @@
   20.66      if (childObj!=NULL && parObj != NULL)
   20.67      {
   20.68  		int i;
   20.69 -		QCanvasLine* cl;
   20.70 +		Q3CanvasLine* cl;
   20.71  		switch (style)
   20.72  		{
   20.73  			case StyleUndef:
   20.74  				bottomline->hide();
   20.75  				break;
   20.76  			case StyleLine: 
   20.77 -				l = new QCanvasLine(canvas);
   20.78 +				l = new Q3CanvasLine(canvas);
   20.79  				l->setPen( QPen(linkcolor, 1) );
   20.80  				l->setZ(Z_LINK);
   20.81  				if (visible)
   20.82 @@ -243,7 +252,7 @@
   20.83  			case StyleParabel:
   20.84  				for (i=0;i<arcsegs;i++)
   20.85  				{
   20.86 -					cl = new QCanvasLine(canvas);
   20.87 +					cl = new Q3CanvasLine(canvas);
   20.88  					cl->setPen( QPen(linkcolor, 1) );
   20.89  					cl->setPoints( 0,0,i*10,100);
   20.90  					cl->setZ(Z_LINK);
   20.91 @@ -256,7 +265,7 @@
   20.92  				pa0.resize (arcsegs+1);
   20.93  				break;
   20.94  			case StylePolyLine:	
   20.95 -				p = new QCanvasPolygon(canvas);
   20.96 +				p = new Q3CanvasPolygon(canvas);
   20.97  				p->setBrush( linkcolor );
   20.98  				p->setZ(Z_LINK);
   20.99  				if (visible)
  20.100 @@ -266,7 +275,7 @@
  20.101  				pa0.resize (3);
  20.102  				// TODO a bit awkward: draw the lines additionally to polygon, to avoid
  20.103  				// missing pixels, when polygon is extremly flat
  20.104 -				l = new QCanvasLine(canvas);
  20.105 +				l = new Q3CanvasLine(canvas);
  20.106  				l->setPen( QPen(linkcolor, 1) );
  20.107  				l->setZ(Z_LINK);
  20.108  				if (visible)
  20.109 @@ -275,7 +284,7 @@
  20.110  					l->hide();
  20.111  				break;
  20.112  			case StylePolyParabel:	
  20.113 -				p = new QCanvasPolygon(canvas);
  20.114 +				p = new Q3CanvasPolygon(canvas);
  20.115  				p->setBrush( linkcolor );
  20.116  				p->setZ(Z_LINK);
  20.117  				if (visible)
  20.118 @@ -291,7 +300,7 @@
  20.119  				// if polygon is extremly flat
  20.120  				for (i=0;i<arcsegs;i++)
  20.121  				{
  20.122 -					cl = new QCanvasLine(canvas);
  20.123 +					cl = new Q3CanvasLine(canvas);
  20.124  					cl->setPen( QPen(linkcolor, 1) );
  20.125  					cl->setPoints( 0,0,i*10,100);
  20.126  					cl->setZ(Z_LINK);
  20.127 @@ -348,7 +357,7 @@
  20.128  {
  20.129  	linkcolor=col;
  20.130      bottomline->setPen( QPen(linkcolor, 1) );
  20.131 -	QCanvasLine *cl;
  20.132 +	Q3CanvasLine *cl;
  20.133  	switch (style)
  20.134  	{
  20.135  		case StyleLine:
  20.136 @@ -400,7 +409,7 @@
  20.137  
  20.138  void LinkableMapObj::setVisibility (bool v)
  20.139  {
  20.140 -	QCanvasLine* cl;
  20.141 +	Q3CanvasLine* cl;
  20.142  	MapObj::setVisibility (v);
  20.143  	bool visnow=visible;
  20.144  
  20.145 @@ -550,7 +559,7 @@
  20.146  	// "turning point" for drawing polygonal links
  20.147  	QPoint tp (-qRound(sin (a)*thickness_start), qRound(cos (a)*thickness_start));	
  20.148  	
  20.149 -	QCanvasLine *cl;
  20.150 +	Q3CanvasLine *cl;
  20.151  
  20.152  	int i;
  20.153  
  20.154 @@ -663,21 +672,6 @@
  20.155      return parPos;
  20.156  }
  20.157  
  20.158 -QPoint LinkableMapObj::getRelPos()
  20.159 -{
  20.160 -	return relPos;
  20.161 -/* FIXME not needed? relPos was moved in 1.7.10 from
  20.162 -   floatobj to linkablemapobj. Before we had:
  20.163 -	
  20.164 -	if (!parObj) return QPoint (0,0);
  20.165 -    return QPoint(
  20.166 -		absPos.x() - parObj->x(),
  20.167 -		absPos.y() - parObj->y()
  20.168 -	);
  20.169 -*/	
  20.170 -}
  20.171 -
  20.172 -
  20.173  void LinkableMapObj::setUseOrientation (const bool &b)
  20.174  {	
  20.175  	if (useOrientation!=b)
  20.176 @@ -802,7 +796,7 @@
  20.177  	setVisibility (visible);
  20.178  }
  20.179  
  20.180 -void LinkableMapObj::parabel (QPointArray &ya, double p1x, double p1y, double p2x, double p2y)
  20.181 +void LinkableMapObj::parabel (Q3PointArray &ya, double p1x, double p1y, double p2x, double p2y)
  20.182  
  20.183  {
  20.184  	double vx=p2x - p1x;	// V=P2-P1
    21.1 --- a/linkablemapobj.h	Tue Sep 05 09:47:13 2006 +0000
    21.2 +++ b/linkablemapobj.h	Tue Sep 05 09:47:14 2006 +0000
    21.3 @@ -5,6 +5,9 @@
    21.4  #include "noteobj.h"
    21.5  #include "headingobj.h"
    21.6  #include "flagrowobj.h"
    21.7 +//Added by qt3to4:
    21.8 +#include <Q3PointArray>
    21.9 +#include <Q3PtrList>
   21.10  
   21.11  #define MAX_DEPTH 999
   21.12  
   21.13 @@ -23,7 +26,7 @@
   21.14  	Q_OBJECT
   21.15  public:
   21.16      LinkableMapObj ();
   21.17 -    LinkableMapObj (QCanvas*);
   21.18 +    LinkableMapObj (Q3Canvas*);
   21.19      LinkableMapObj (LinkableMapObj*);
   21.20      ~LinkableMapObj ();
   21.21  	virtual void delLink();
   21.22 @@ -38,6 +41,7 @@
   21.23  	virtual void setUseRelPos (const bool&);
   21.24  	virtual void setRelPos();				// set relPos to current parentPos
   21.25  	virtual void setRelPos(const QPoint&);	
   21.26 +	virtual QPoint getRelPos();
   21.27  	virtual void setUseOrientation (const bool &);
   21.28  
   21.29  
   21.30 @@ -68,7 +72,6 @@
   21.31  	virtual void setDockPos();				// sets childPos and parPos
   21.32      QPoint getChildPos();					// returns pos where childs dock
   21.33      QPoint getParPos();						// returns pos where parents dock
   21.34 -    QPoint getRelPos();						// get position relative to parent (or (0,0))
   21.35      LinkOrient getOrientation();			// get orientation
   21.36      virtual int getDepth();					// return depth
   21.37  	virtual void setMapEditor(MapEditor*);	// set MapEditor (needed in LMO::updateNoteFlag)
   21.38 @@ -93,7 +96,7 @@
   21.39  	virtual QString saveToDir (const QString&,const QString&, const QPoint&)=0;// Save data to tempdir
   21.40  
   21.41  protected:
   21.42 -	void parabel(QPointArray &,double,double,double,double);	// Create Parabel connecting two points
   21.43 +	void parabel(Q3PointArray &,double,double,double,double);	// Create Parabel connecting two points
   21.44  	QString getLinkAttr();
   21.45  
   21.46      QPoint childPos;
   21.47 @@ -114,19 +117,19 @@
   21.48      LinkStyle style;				// Current style
   21.49  	LinkPos linkpos;				// Link at bottom of object or middle of height
   21.50      QColor linkcolor;               // Link color
   21.51 -    QCanvasLine* l;                 // line style
   21.52 -	QCanvasPolygon* p;				// poly styles
   21.53 +    Q3CanvasLine* l;                 // line style
   21.54 +	Q3CanvasPolygon* p;				// poly styles
   21.55      int arcsegs;                    // arc: number of segments
   21.56 -    QPtrList <QCanvasLine> segment; // a part of e.g. the parabel
   21.57 -	QPointArray pa0;				// For drawing of PolyParabel and PolyLine
   21.58 -	QPointArray pa1;				// For drawing of PolyParabel 
   21.59 -	QPointArray pa2;				// For drawing of PolyParabel	
   21.60 -    QCanvasLine* bottomline;        // on bottom of BBox
   21.61 +    Q3PtrList <Q3CanvasLine> segment; // a part of e.g. the parabel
   21.62 +	Q3PointArray pa0;				// For drawing of PolyParabel and PolyLine
   21.63 +	Q3PointArray pa1;				// For drawing of PolyParabel 
   21.64 +	Q3PointArray pa2;				// For drawing of PolyParabel	
   21.65 +    Q3CanvasLine* bottomline;        // on bottom of BBox
   21.66  	bool repositionRequest;			// 
   21.67  
   21.68  	bool selected;					// Used for marking the selection
   21.69  	bool hideLinkUnselected;		// to hide links if unselected
   21.70 -	QCanvasRectangle* selbox;
   21.71 +	Q3CanvasRectangle* selbox;
   21.72  	FrameObj *frame;				// frame around object
   21.73  	int topPad, botPad,
   21.74  		leftPad, rightPad;          // padding within bbox
    22.1 --- a/main.cpp	Tue Sep 05 09:47:13 2006 +0000
    22.2 +++ b/main.cpp	Tue Sep 05 09:47:14 2006 +0000
    22.3 @@ -1,16 +1,16 @@
    22.4 -#include <qapplication.h>
    22.5 -#include <qpixmap.h>
    22.6 -#include <qtranslator.h>
    22.7 -#include <qdir.h>
    22.8 -#include <qptrlist.h>
    22.9 -#include <qtextcodec.h>
   22.10 -#include <qnetwork.h>
   22.11 -#include <qmime.h>
   22.12 +#include <QApplication>
   22.13 +#include <QPixmap>
   22.14 +#include <QTranslator>
   22.15 +#include <QDir>
   22.16 +#include <q3ptrlist.h>
   22.17 +#include <QTextCodec>
   22.18 +#include <q3network.h>
   22.19 +#include <QMenu>
   22.20 +#include <QActionGroup>
   22.21  
   22.22  #include "settings.h"
   22.23  #include "options.h"
   22.24  #include "mainwindow.h"
   22.25 -
   22.26  #include "flagrowobj.h"
   22.27  
   22.28  // Global variables
   22.29 @@ -21,6 +21,8 @@
   22.30  QString tmpVymDir;				// All temp files go there, created in mainwindow
   22.31  QString clipboardDir;			// Clipboard used in all mapEditors
   22.32  QDir vymBaseDir;				// Containing all styles, scripts, images, ...
   22.33 +QDir lastImageDir;
   22.34 +QDir lastFileDir;
   22.35  QString iconPath;				// Pointing to icons used for toolbars
   22.36  QString flagsPath;				// Pointing to flags
   22.37  bool clipboardEmpty;			
   22.38 @@ -29,7 +31,7 @@
   22.39  
   22.40  // Lists of actions
   22.41  // (QActionGroup could not be "enabled")
   22.42 -QPtrList <QAction> actionListBranches;
   22.43 +Q3PtrList <QAction> actionListBranches;
   22.44  
   22.45  // Actions which change sometimes
   22.46  QAction *actionFileSave;
   22.47 @@ -44,11 +46,13 @@
   22.48  QAction *actionEditToggleScroll;
   22.49  QAction *actionEditOpenURL;
   22.50  QAction *actionEditOpenURLTab;
   22.51 +QAction *actionEditOpenMultipleURLTabs;
   22.52  QAction *actionEditURL;
   22.53  QAction *actionEditHeading2URL;
   22.54  QAction *actionEditBugzilla2URL;
   22.55  QAction *actionEditFATE2URL;
   22.56  QAction *actionEditOpenVymLink;
   22.57 +QAction *actionEditOpenMultipleVymLinks;
   22.58  QAction *actionEditVymLink;
   22.59  QAction *actionEditToggleHideExport;
   22.60  QAction *actionEditDeleteVymLink;
   22.61 @@ -99,33 +103,36 @@
   22.62  
   22.63  QAction *actionSettingsAutoselectHeading;
   22.64  QAction *actionSettingsAutoselectText;
   22.65 -QAction *actionSettingsPasteNewHeading;
   22.66  QAction *actionSettingsAutoedit;
   22.67  QAction *actionSettingsUseDelKey;
   22.68  QAction *actionSettingsUseFlagGroups;
   22.69  QAction *actionSettingsUseHideExport;
   22.70  
   22.71 -QPopupMenu *branchContextMenu;
   22.72 -QPopupMenu *branchAddContextMenu;
   22.73 -QPopupMenu *branchRemoveContextMenu;
   22.74 -QPopupMenu *branchLinksContextMenu;
   22.75 -QPopupMenu *branchLinksContextMenuDup;
   22.76 -QPopupMenu *floatimageContextMenu;
   22.77 -QPopupMenu *saveImageFormatMenu;
   22.78 -QPopupMenu *canvasContextMenu;
   22.79 -QPopupMenu *lastMapsMenu;
   22.80 -QPopupMenu *importMenu;
   22.81 -QPopupMenu *exportMenu;
   22.82 -QPopupMenu *exportImageFormatMenu;
   22.83  
   22.84 +QMenu* branchContextMenu;
   22.85 +QMenu* branchAddContextMenu;
   22.86 +QMenu* branchRemoveContextMenu;
   22.87 +QMenu* branchLinksContextMenu;
   22.88 +QMenu* branchXLinksContextMenuEdit;
   22.89 +QMenu* branchXLinksContextMenuFollow;
   22.90 +QMenu* floatimageContextMenu;
   22.91 +QMenu* canvasContextMenu;
   22.92 +QMenu* fileLastMapsMenu;
   22.93 +QMenu* fileImportMenu;
   22.94 +QMenu* fileExportMenu;
   22.95  
   22.96 -Settings settings;
   22.97 +
   22.98 +Settings settings ("InSilmaril","vym"); // Organization, Application name
   22.99 +
  22.100  Options options;
  22.101 +ImageIO imageIO;
  22.102  
  22.103  int statusbarTime=3500;
  22.104  
  22.105  int main(int argc, char** argv)
  22.106  {
  22.107 +//FIXME	Q_INIT_RESOURCE (application);
  22.108 +
  22.109      QApplication app(argc,argv);
  22.110  
  22.111  
  22.112 @@ -144,14 +151,14 @@
  22.113  		"http://www.InSilmaril.de/vym\n");
  22.114  	if (options.parse())
  22.115  	{
  22.116 -		cout << endl << options.getHelpText()<<endl;
  22.117 +		cout << endl << options.getHelpText().ascii()<<endl;
  22.118  		return 1;
  22.119  	}
  22.120  
  22.121  	if (options.isOn ("version"))
  22.122  	{
  22.123  		cout << "vym version "<<__VYM_VERSION
  22.124 -			<<"  (c) 2004 Uwe Drechsel - "
  22.125 +			<<"  (c) 2004-2006 Uwe Drechsel - "
  22.126  			<<__BUILD_DATE<<endl;
  22.127  			
  22.128  		return 0;	
  22.129 @@ -182,22 +189,17 @@
  22.130  	iconPath=vymBaseDir.path()+"/icons/";
  22.131  	flagsPath=vymBaseDir.path()+"/flags/";
  22.132  
  22.133 +	// Some directories
  22.134 +	lastImageDir=QDir().current();
  22.135 +	lastFileDir=QDir().current();
  22.136 +
  22.137  	if (options.isOn ("help"))
  22.138  	{
  22.139 -		cout << options.getHelpText()<<endl;
  22.140 +		cout << options.getHelpText().ascii()<<endl;
  22.141  		return 0;	
  22.142  	}	
  22.143  
  22.144 -	if (options.isOn ("test"))
  22.145 -	{
  22.146 -		// FIXME testing string option only
  22.147 -		cout << "Testing: "<<options.getArg("test")<< endl;
  22.148 -	}	
  22.149 -
  22.150 -
  22.151 -    QMimeSourceFactory *factory = QMimeSourceFactory::defaultFactory();
  22.152 -    factory->setPixmap("vym-128x128", QPixmap(iconPath+"vym-128x128.png"));
  22.153 -    qInitNetworkProtocols();
  22.154 +    q3InitNetworkProtocols();
  22.155  
  22.156  
  22.157  	// Initialize translations
    23.1 --- a/mainwindow.cpp	Tue Sep 05 09:47:13 2006 +0000
    23.2 +++ b/mainwindow.cpp	Tue Sep 05 09:47:14 2006 +0000
    23.3 @@ -1,20 +1,25 @@
    23.4  #include "mainwindow.h"
    23.5  
    23.6 -#include <qstatusbar.h>
    23.7 -#include <qmessagebox.h>
    23.8 -#include <qmenubar.h>
    23.9 -#include <qapplication.h>
   23.10 -#include <qpainter.h>
   23.11 -#include <qprinter.h>
   23.12 -#include <qfile.h>
   23.13 -#include <qfiledialog.h>
   23.14 -#include <qcolor.h>
   23.15 -#include <qcolordialog.h>
   23.16 -#include <qbitmap.h>
   23.17 -#include <qinputdialog.h>
   23.18 +#include <QtGui>
   23.19 +#include <QPainter>
   23.20 +#include <QPrinter>
   23.21 +#include <QFile>
   23.22 +#include <q3filedialog.h>
   23.23 +#include <QColor>
   23.24 +#include <QColorDialog>
   23.25 +#include <QBitmap>
   23.26 +#include <QInputDialog>
   23.27 +//Added by qt3to4:
   23.28 +#include <Q3StrList>
   23.29 +#include <QPixmap>
   23.30 +#include <QCloseEvent>
   23.31 +#include <QShowEvent>
   23.32 +#include <QHideEvent>
   23.33 +#include <Q3PopupMenu>
   23.34 +#include <QActionGroup>
   23.35 +#include <Q3PtrList>
   23.36  //#include <qdatetime.h>			// for random seed
   23.37  
   23.38 -
   23.39  #include <iostream>
   23.40  #include <cstdlib>
   23.41  #include <typeinfo>
   23.42 @@ -44,7 +49,7 @@
   23.43  extern FlagRowObj* standardFlagsDefault;
   23.44  extern FlagRowObj* systemFlagsDefault;
   23.45  
   23.46 -extern QPtrList <QAction> actionListBranches;
   23.47 +extern Q3PtrList <QAction> actionListBranches;
   23.48  
   23.49  extern QAction* actionFileSave;
   23.50  extern QAction* actionFilePrint;
   23.51 @@ -58,11 +63,13 @@
   23.52  extern QAction *actionEditToggleScroll;
   23.53  extern QAction* actionEditOpenURL;
   23.54  extern QAction* actionEditOpenURLTab;
   23.55 +extern QAction* actionEditOpenMultipleURLTabs;
   23.56  extern QAction* actionEditURL;
   23.57  extern QAction* actionEditHeading2URL;
   23.58  extern QAction* actionEditBugzilla2URL;
   23.59  extern QAction* actionEditFATE2URL;
   23.60  extern QAction *actionEditOpenVymLink;
   23.61 +extern QAction *actionEditOpenMultipleVymLinks;
   23.62  extern QAction *actionEditVymLink;
   23.63  extern QAction *actionEditDeleteVymLink;
   23.64  extern QAction *actionEditToggleHideExport;
   23.65 @@ -115,36 +122,34 @@
   23.66  extern QAction* actionSettingsAutoselectHeading;
   23.67  extern QAction* actionSettingsAutoselectHeading;
   23.68  extern QAction* actionSettingsAutoselectText;
   23.69 -extern QAction* actionSettingsPasteNewHeading;
   23.70  extern QAction* actionSettingsUseDelKey;
   23.71  extern QAction* actionSettingsUseFlagGroups;
   23.72  extern QAction* actionSettingsUseHideExport;
   23.73  
   23.74 -extern QPopupMenu* branchContextMenu;
   23.75 -extern QPopupMenu* branchAddContextMenu;
   23.76 -extern QPopupMenu* branchRemoveContextMenu;
   23.77 -extern QPopupMenu* branchLinksContextMenu;
   23.78 -extern QPopupMenu* branchLinksContextMenuDup;
   23.79 -extern QPopupMenu* floatimageContextMenu;
   23.80 -extern QPopupMenu* saveImageFormatMenu;
   23.81 -extern QPopupMenu* canvasContextMenu;
   23.82 -extern QPopupMenu* lastMapsMenu;
   23.83 -extern QPopupMenu* importMenu;
   23.84 -extern QPopupMenu* exportMenu;
   23.85 -extern QPopupMenu* exportImageFormatMenu;
   23.86 +extern QMenu* branchContextMenu;
   23.87 +extern QMenu* branchAddContextMenu;
   23.88 +extern QMenu* branchRemoveContextMenu;
   23.89 +extern QMenu* branchLinksContextMenu;
   23.90 +extern QMenu* branchXLinksContextMenuEdit;
   23.91 +extern QMenu* branchXLinksContextMenuFollow;
   23.92 +extern QMenu* floatimageContextMenu;
   23.93 +extern QMenu* canvasContextMenu;
   23.94 +extern QMenu* fileLastMapsMenu;
   23.95 +extern QMenu* fileImportMenu;
   23.96 +extern QMenu* fileExportMenu;
   23.97  
   23.98  
   23.99  extern Settings settings;
  23.100  extern Options options;
  23.101 +extern ImageIO imageIO;
  23.102 +
  23.103  extern QDir vymBaseDir;
  23.104 +extern QDir lastImageDir;
  23.105 +extern QDir lastFileDir;
  23.106  extern QString iconPath;
  23.107  extern QString flagsPath;
  23.108  
  23.109 -#if defined(Q_OS_LINUX)
  23.110 -extern void qt_wait_for_window_manager( QWidget* w );
  23.111 -#endif
  23.112 -
  23.113 -Main::Main(QWidget* parent, const char* name, WFlags f) :
  23.114 +Main::Main(QWidget* parent, const char* name, Qt::WFlags f) :
  23.115      QMainWindow(parent,name,f)
  23.116  {
  23.117  	mainWindow=this;
  23.118 @@ -152,14 +157,18 @@
  23.119  	setCaption ("VYM - View Your Mind");
  23.120  
  23.121  	// Load window settings
  23.122 -	resize (settings.readNumEntry( "/vym/mainwindow/geometry/width", 800),
  23.123 -	        settings.readNumEntry( "/vym/mainwindow/geometry/height",600));
  23.124 -	move   (settings.readNumEntry( "/vym/mainwindow/geometry/posX", 100),
  23.125 -	        settings.readNumEntry( "/vym/mainwindow/geometry/posY", 100));
  23.126 +	resize (settings.value( "/mainwindow/geometry/size",QSize (800,600)).toSize());
  23.127 +	move   (settings.value( "/mainwindow/geometry/pos", QPoint(300,100)).toPoint());
  23.128  
  23.129  
  23.130  	// Create unique temporary directory
  23.131 -	tmpVymDir=makeUniqueDir ("/tmp/vym-XXXXXX");
  23.132 +	bool ok;
  23.133 +	tmpVymDir=makeUniqueDir (ok,"/tmp/vym-XXXXXX");
  23.134 +	if (!ok)
  23.135 +	{
  23.136 +		qWarning ("Mainwindow: Could not create temporary directory, failed to start vym");
  23.137 +		exit (1);
  23.138 +	}
  23.139  
  23.140  	// Create direcctory for clipboard
  23.141  	clipboardDir=tmpVymDir+"/clipboard";
  23.142 @@ -180,30 +189,30 @@
  23.143  	QString p,s;
  23.144  
  23.145  		// application to open URLs
  23.146 -		p="/vym/mainwindow/readerURL";
  23.147 +		p="/mainwindow/readerURL";
  23.148  		#if defined(Q_OS_LINUX)
  23.149 -			s=settings.readEntry (p,"konqueror");
  23.150 +			s=settings.value (p,"konqueror").toString();
  23.151  		#else
  23.152  			#if defined(Q_OS_MACX)
  23.153 -				s=settings.readEntry (p,"/usr/bin/open");
  23.154 +				s=settings.value (p,"/usr/bin/open").toString();
  23.155  			#else
  23.156 -				s=settings.readEntry (p,"mozilla");
  23.157 +				s=settings.value (p,"mozilla");
  23.158  			#endif
  23.159  		#endif
  23.160 -		settings.writeEntry( p,s);
  23.161 +		settings.setValue( p,s);
  23.162  
  23.163  		// application to open PDFs
  23.164 -		p="/vym/mainwindow/readerPDF";
  23.165 +		p="/mainwindow/readerPDF";
  23.166  		#if defined(Q_OS_LINUX)
  23.167 -			s=settings.readEntry (p,"acroread");
  23.168 +			s=settings.value (p,"acroread").toString();
  23.169  		#else
  23.170  			#if defined(Q_OS_MACX)
  23.171 -				s=settings.readEntry (p,"/usr/bin/open");
  23.172 +				s=settings.value (p,"/usr/bin/open").toString();
  23.173  			#else
  23.174 -				s=settings.readEntry (p,"acroread");
  23.175 +				s=settings.value (p,"acroread").toString();
  23.176  			#endif
  23.177  		#endif
  23.178 -		settings.writeEntry( p,s);
  23.179 +		settings.setValue( p,s);
  23.180  
  23.181  	
  23.182  	maxLastMaps=9;
  23.183 @@ -213,6 +222,9 @@
  23.184  	connect( tabWidget, SIGNAL( currentChanged( QWidget * ) ), 
  23.185  		this, SLOT( editorChanged( QWidget * ) ) );
  23.186  
  23.187 +	lineedit=new QLineEdit (this);
  23.188 +	lineedit->hide();
  23.189 +
  23.190  	setCentralWidget(tabWidget);	
  23.191  
  23.192      setupFileActions();
  23.193 @@ -223,14 +235,12 @@
  23.194  	setupFlagActions();
  23.195      setupSettingsActions();
  23.196  	setupContextMenus();
  23.197 -    if (settings.readBoolEntry( "/vym/mainwindow/showTestMenu",false)) setupTestActions();
  23.198 +    if (settings.value( "/mainwindow/showTestMenu",false).toBool()) setupTestActions();
  23.199      setupHelpActions();
  23.200      
  23.201 -	// After menu is created, we can enable some actions
  23.202 -	actionFilePrint->setEnabled (true);
  23.203 -
  23.204      statusBar();
  23.205  
  23.206 +	restoreState (settings.value("/mainwindow/state",0).toByteArray());
  23.207  
  23.208  	// Initialize Find window
  23.209  	findWindow=new FindWindow(NULL,"findwindow");
  23.210 @@ -248,31 +258,29 @@
  23.211  Main::~Main()
  23.212  {
  23.213  	// Save Settings
  23.214 -	settings.writeEntry( "/vym/mainwindow/geometry/width", width() );
  23.215 -	settings.writeEntry( "/vym/mainwindow/geometry/height", height() );
  23.216 -	settings.writeEntry( "/vym/mainwindow/geometry/posX", pos().x() );
  23.217 -	settings.writeEntry( "/vym/mainwindow/geometry/posY", pos().y() );
  23.218 -
  23.219 -	settings.writeEntry( "/vym/version/version", __VYM_VERSION );
  23.220 -	settings.writeEntry( "/vym/version/builddate", __BUILD_DATE );
  23.221 -
  23.222 -	settings.writeEntry( "/vym/mapeditor/editmode/autoselectheading",actionSettingsAutoselectHeading->isOn() );
  23.223 -	settings.writeEntry( "/vym/mapeditor/editmode/autoselecttext",actionSettingsAutoselectText->isOn() );
  23.224 -	settings.writeEntry( "/vym/mapeditor/editmode/pastenewheading",actionSettingsPasteNewHeading->isOn() );
  23.225 -	settings.writeEntry( "/vym/mapeditor/editmode/autoedit",actionSettingsAutoedit->isOn() );
  23.226 -	settings.writeEntry( "/vym/mapeditor/editmode/useDelKey",actionSettingsUseDelKey->isOn() );
  23.227 -	settings.writeEntry( "/vym/mapeditor/editmode/useFlagGroups",actionSettingsUseFlagGroups->isOn() );
  23.228 -	settings.writeEntry( "/vym/export/useHideExport",actionSettingsUseHideExport->isOn() );
  23.229 +	settings.setValue ( "/mainwindow/geometry/size", size() );
  23.230 +	settings.setValue ( "/mainwindow/geometry/pos", pos() );
  23.231 +
  23.232 +	settings.setValue ("/mainwindow/state",saveState(0));
  23.233 +
  23.234 +	settings.setValue( "/version/version", __VYM_VERSION );
  23.235 +	settings.setValue( "/version/builddate", __BUILD_DATE );
  23.236 +
  23.237 +	settings.setValue( "/mapeditor/editmode/autoSelectHeading",actionSettingsAutoselectHeading->isOn() );
  23.238 +	settings.setValue( "/mapeditor/editmode/autoSelectText",actionSettingsAutoselectText->isOn() );
  23.239 +	settings.setValue( "/mapeditor/editmode/autoEdit",actionSettingsAutoedit->isOn() );
  23.240 +	settings.setValue( "/mapeditor/editmode/useDelKey",actionSettingsUseDelKey->isOn() );
  23.241 +	settings.setValue( "/mapeditor/editmode/useFlagGroups",actionSettingsUseFlagGroups->isOn() );
  23.242 +	settings.setValue( "/export/useHideExport",actionSettingsUseHideExport->isOn() );
  23.243  
  23.244  	QString s;
  23.245  	int maps=lastMaps.count();
  23.246 -	settings.writeEntry( "/vym/lastMaps/number",maps );
  23.247 +	settings.setValue( "/lastMaps/number",maps );
  23.248  	for (int i=1;i<=maps;i++)
  23.249  	{
  23.250 -		QStringList::Iterator it = lastMaps.at(i-1);
  23.251 -		s=QString("/vym/lastMaps/map-%1").arg(i);
  23.252 +		s=QString("/lastMaps/map-%1").arg(i);
  23.253  		if (!s.isEmpty() && i<=maxLastMaps) 
  23.254 -			settings.writeEntry (s, *it);
  23.255 +			settings.setValue (s, lastMaps.at(i-1));
  23.256  	}
  23.257  
  23.258  
  23.259 @@ -315,215 +323,327 @@
  23.260  // File Actions
  23.261  void Main::setupFileActions()
  23.262  {
  23.263 -    QToolBar *tb = new QToolBar( this );
  23.264 -    tb->setLabel( "File Actions" );
  23.265 -    QPopupMenu *menu = new QPopupMenu( this );
  23.266 -    menuBar()->insertItem( tr( "&File" ), menu );
  23.267 -
  23.268 -	// Keycodes:  /usr/lib64/qt3/include/qnamespace.h
  23.269 +	QMenu *fileMenu = menuBar()->addMenu ( tr ("&Map") );
  23.270 +    QToolBar *tb = addToolBar( tr ("&Map") );
  23.271 +	tb->setObjectName ("mapTB");
  23.272  
  23.273      QAction *a;
  23.274 -    a = new QAction( tr( "New map","File menu" ), QPixmap( iconPath+"filenew.png"), tr( "&New..." ), CTRL + Key_N, this, "fileNew" );
  23.275 -    connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) );
  23.276 +    a = new QAction(QPixmap( iconPath+"filenew.png"), tr( "&New..." ),this);
  23.277 +	a->setStatusTip ( tr( "New map","File menu" ) );
  23.278 +	a->setShortcut ( Qt::CTRL + Qt::Key_N );
  23.279      a->addTo( tb );
  23.280 -    a->addTo( menu );
  23.281 +	fileMenu->addAction (a);
  23.282 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) );
  23.283  	
  23.284 -    a = new QAction( tr( "Open","File menu" ), QPixmap( iconPath+"fileopen.png"), tr( "&Open..." ), CTRL + Key_O, this, "fileOpen" );
  23.285 -    connect( a, SIGNAL( activated() ), this, SLOT( fileLoad() ) );
  23.286 +    a = new QAction( QPixmap( iconPath+"fileopen.png"), tr( "&Open..." ),this);
  23.287 +	a->setStatusTip (tr( "Open","File menu" ) );
  23.288 +	a->setShortcut ( Qt::CTRL + Qt::Key_O );
  23.289      a->addTo( tb );
  23.290 -    a->addTo( menu );
  23.291 +	fileMenu->addAction (a);
  23.292 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileLoad() ) );
  23.293  	
  23.294 -	lastMapsMenu = new QPopupMenu (this);
  23.295 -
  23.296 -    menu->insertItem (tr("Open Recent"),lastMapsMenu );
  23.297 -    menu->insertSeparator();
  23.298 +	fileLastMapsMenu = fileMenu->addMenu (tr("Open Recent"));
  23.299 +	fileMenu->addSeparator();
  23.300  	
  23.301 -    a = new QAction( tr( "Save" ), QPixmap( iconPath+"filesave.png"), tr( "&Save..." ), CTRL + Key_S, this, "fileSave" );
  23.302 -    connect( a, SIGNAL( activated() ), this, SLOT( fileSave() ) );
  23.303 +    a = new QAction( QPixmap( iconPath+"filesave.png"), tr( "&Save..." ), this);
  23.304 +	a->setStatusTip ( tr( "Save" ));
  23.305 +	a->setShortcut (Qt::CTRL + Qt::Key_S );
  23.306      a->addTo( tb );
  23.307 -    a->addTo( menu );
  23.308 +	fileMenu->addAction (a);
  23.309 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) );
  23.310  	actionFileSave=a;
  23.311  	
  23.312 -    a = new QAction( tr( "Save &As" ), QPixmap(iconPath+"filesaveas.png"), tr( "Save &As..." ), 0, this, "fileSaveAs" );
  23.313 -    connect( a, SIGNAL( activated() ), this, SLOT( fileSaveAs() ) );
  23.314 -    a->addTo( menu );
  23.315 -
  23.316 -    menu->insertSeparator();
  23.317 -
  23.318 -	importMenu = new QPopupMenu (this);
  23.319 -    menu->insertItem (tr("Import"),importMenu );
  23.320 -
  23.321 -	a = new QAction( tr( "Import")+" "+tr("KDE Bookmarks" ), QPixmap(), tr("KDE Bookmarks"), 0, this, "importKDEBookmarks" );
  23.322 -	connect( a, SIGNAL( activated() ), this, SLOT( fileImportKDEBookmarks() ) );
  23.323 -	a->addTo (importMenu);
  23.324 -
  23.325 -    if (settings.readBoolEntry( "/vym/mainwindow/showTestMenu",false)) 
  23.326 +    a = new QAction( QPixmap(iconPath+"filesaveas.png"), tr( "Save &As..." ), this);
  23.327 +	a->setStatusTip (tr( "Save &As" ) );
  23.328 +	fileMenu->addAction (a);
  23.329 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileSaveAs() ) );
  23.330 +
  23.331 +	fileMenu->addSeparator();
  23.332 +
  23.333 +	fileImportMenu = fileMenu->addMenu (tr("Import"));
  23.334 +
  23.335 +	a = new QAction(tr("KDE Bookmarks"), this);
  23.336 +	a->setStatusTip ( tr( "Import")+" "+tr("KDE Bookmarks" ));
  23.337 +	a->addTo (fileImportMenu);
  23.338 +	connect( a, SIGNAL( triggered() ), this, SLOT( fileImportKDEBookmarks() ) );
  23.339 +
  23.340 +    if (settings.value( "/mainwindow/showTestMenu",false).toBool()) 
  23.341  	{
  23.342 -		a = new QAction( tr( "Import")+" "+tr("Firefox Bookmarks" ), QPixmap(), tr("Firefox Bookmarks"), 0, this, "importFirefoxBookmarks" );
  23.343 -		connect( a, SIGNAL( activated() ), this, SLOT( fileImportFirefoxBookmarks() ) );
  23.344 -		a->addTo (importMenu);
  23.345 +		a = new QAction( QPixmap(), tr("Firefox Bookmarks"),this);
  23.346 +		a->setStatusTip (tr( "Import")+" "+tr("Firefox Bookmarks" ) );
  23.347 +		a->addTo (fileImportMenu);
  23.348 +		connect( a, SIGNAL( triggered() ), this, SLOT( fileImportFirefoxBookmarks() ) );
  23.349  	}	
  23.350  
  23.351 -	a = new QAction( tr( "Import")+" Mind Manager" , QPixmap(), "Mind Manager...", 0, this, "importMM" );
  23.352 -	connect( a, SIGNAL( activated() ), this, SLOT( fileImportMM() ) );
  23.353 -	a->addTo (importMenu);
  23.354 -
  23.355 -    a = new QAction( tr( "Import directory structure (experimental)" ), QPixmap(), tr( "Import Dir"+QString("...") ), 0, this, "export" );
  23.356 -    connect( a, SIGNAL( activated() ), this, SLOT( fileImportDir() ) );
  23.357 -    a->addTo( importMenu);
  23.358 -
  23.359 -	exportMenu = new QPopupMenu (this);
  23.360 -    menu->insertItem (tr("Export"),exportMenu );
  23.361 -
  23.362 -    menu->insertSeparator();
  23.363 -
  23.364 -
  23.365 -    a = new QAction( tr( "Print" ), QPixmap( iconPath+"fileprint.png"), tr( "&Print")+QString("..."), CTRL + Key_P, this, "filePrint" );
  23.366 -    connect( a, SIGNAL( activated() ), this, SLOT( filePrint() ) );
  23.367 +	a = new QAction("Mind Manager...",this);
  23.368 +	a->setStatusTip ( tr( "Import")+" Mind Manager"  );
  23.369 +	fileImportMenu->addAction (a);
  23.370 +	connect( a, SIGNAL( triggered() ), this, SLOT( fileImportMM() ) );
  23.371 +
  23.372 +    a = new QAction( tr( "Import Dir"+QString("...") ), this);
  23.373 +	a->setStatusTip (tr( "Import directory structure (experimental)" ) );
  23.374 +	fileImportMenu->addAction (a);
  23.375 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileImportDir() ) );
  23.376 +
  23.377 +	fileExportMenu = fileMenu->addMenu (tr("Export"));
  23.378 +
  23.379 +	a = new QAction( tr("Image")+QString("..."), this);
  23.380 +	a->setStatusTip( tr( "Export map as image" ));
  23.381 +	connect( a, SIGNAL( triggered() ), this, SLOT( fileExportImage() ) );
  23.382 +	fileExportMenu->addAction (a);
  23.383 +
  23.384 +	a = new QAction( "Open Office"+QString("..."), this);
  23.385 +	a->setStatusTip( tr( "Export in Open Document Format used e.g. in Open Office " ));
  23.386 +	connect( a, SIGNAL( triggered() ), this, SLOT( fileExportOOPresentation() ) );
  23.387 +	fileExportMenu->addAction (a);
  23.388 +
  23.389 +	a = new QAction(  "Webpage (XHTML)...",this );
  23.390 +	a->setShortcut (Qt::ALT + Qt::Key_X);
  23.391 +	a->setStatusTip ( tr( "Export as")+" webpage (XHTML)");
  23.392 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileExportXHTML() ) );
  23.393 +	fileExportMenu->addAction (a);
  23.394 +
  23.395 +    a = new QAction( "Text (ASCII)...", this);
  23.396 +	a->setStatusTip ( tr( "Export as")+" ASCII"+" "+tr("(still experimental)" ));
  23.397 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileExportASCII() ) );
  23.398 +	fileExportMenu->addAction (a);
  23.399 +
  23.400 +	a = new QAction( tr("KDE Bookmarks"), this);
  23.401 +	a->setStatusTip( tr( "Export as")+" "+tr("KDE Bookmarks" ));
  23.402 +	connect( a, SIGNAL( triggered() ), this, SLOT( fileExportKDEBookmarks() ) );
  23.403 +	fileExportMenu->addAction (a);
  23.404 +
  23.405 +    a = new QAction( "Taskjuggler...", this );
  23.406 +    a->setStatusTip( tr( "Export as")+" Taskjuggler"+" "+tr("(still experimental)" ));
  23.407 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileExportTaskjuggler() ) );
  23.408 +	fileExportMenu->addAction (a);
  23.409 +
  23.410 +    a = new QAction( "LaTeX...", this);
  23.411 +    a->setStatusTip( tr( "Export as")+" LaTeX"+" "+tr("(still experimental)" ));
  23.412 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileExportLaTeX() ) );
  23.413 +	fileExportMenu->addAction (a);
  23.414 +
  23.415 +	a = new QAction( "XML..." , this );
  23.416 +	a->setStatusTip (tr( "Export as")+" XML");
  23.417 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileExportXML() ) );
  23.418 +	fileExportMenu->addAction (a);
  23.419 +
  23.420 +	fileMenu->addSeparator();
  23.421 +
  23.422 +    a = new QAction(QPixmap( iconPath+"fileprint.png"), tr( "&Print")+QString("..."), this);
  23.423 +	a->setStatusTip ( tr( "Print" ) );
  23.424 +	a->setShortcut (Qt::CTRL + Qt::Key_P );
  23.425      a->addTo( tb );
  23.426 -    a->addTo( menu );
  23.427 +	fileMenu->addAction (a);
  23.428 +    connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) );
  23.429  	actionFilePrint=a;
  23.430  
  23.431 -    a = new QAction( tr( "Close Map" ), QPixmap(iconPath+"fileclose.png"), tr( "&Close Map" ), ALT + Key_C, this, "fileCloseMap" );
  23.432 -    connect( a, SIGNAL( activated() ), this, SLOT( fileCloseMap() ) );
  23.433 -    a->addTo( menu );
  23.434 -
  23.435 -    a = new QAction( tr( "Exit")+" "+__VYM, QPixmap(iconPath+"exit.png"), tr( "E&xit")+" "+__VYM, CTRL + Key_Q, this, "fileExitVYM" );
  23.436 -    connect( a, SIGNAL( activated() ), this, SLOT( fileExitVYM() ) );
  23.437 -    a->addTo( menu );
  23.438 +    a = new QAction( QPixmap(iconPath+"fileclose.png"), tr( "&Close Map" ), this);
  23.439 +	a->setStatusTip (tr( "Close Map" ) );
  23.440 +	a->setShortcut (Qt::ALT + Qt::Key_C );
  23.441 +	fileMenu->addAction (a);
  23.442 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileCloseMap() ) );
  23.443 +
  23.444 +    a = new QAction(QPixmap(iconPath+"exit.png"), tr( "E&xit")+" "+__VYM, this);
  23.445 +	a->setStatusTip ( tr( "Exit")+" "+__VYM );
  23.446 +	a->setShortcut (Qt::CTRL + Qt::Key_Q );
  23.447 +	fileMenu->addAction (a);
  23.448 +    connect( a, SIGNAL( triggered() ), this, SLOT( fileExitVYM() ) );
  23.449  }
  23.450  
  23.451  
  23.452  //Edit Actions
  23.453  void Main::setupEditActions()
  23.454  {
  23.455 -    QToolBar *tb = new QToolBar( this );
  23.456 +    QToolBar *tb = addToolBar( tr ("&Actions") );
  23.457      tb->setLabel( "Edit Actions" );
  23.458 -    QPopupMenu *menu = new QPopupMenu( this );
  23.459 -    menuBar()->insertItem( tr( "&Edit" ), menu );
  23.460 +	tb->setObjectName ("actionsTB");
  23.461 +    QMenu *editMenu = menuBar()->addMenu( tr("&Edit") );
  23.462  
  23.463      QAction *a;
  23.464  	QAction *alt;
  23.465 -    a = new QAction( tr( "Undo" ), QPixmap( iconPath+"undo.png"), tr( "&Undo" ), CTRL + Key_Z, this, "editUndo" );
  23.466 -    connect( a, SIGNAL( activated() ), this, SLOT( editUndo() ) );
  23.467 +    a = new QAction( QPixmap( iconPath+"undo.png"), tr( "&Undo" ),this);
  23.468 +    connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) );
  23.469 +	a->setStatusTip (tr( "Undo" ) );
  23.470 +	a->setShortcut ( Qt::CTRL + Qt::Key_Z );
  23.471  	a->setEnabled (false);
  23.472 -    a->addTo( tb );
  23.473 -    a->addTo( menu );
  23.474 +    tb->addAction (a);
  23.475 +	editMenu->addAction (a);
  23.476  	actionEditUndo=a;
  23.477      
  23.478 -    if (settings.readBoolEntry( "/vym/mainwindow/showTestMenu",false)) 
  23.479 -	{
  23.480 -		a = new QAction( tr( "Redo" ), QPixmap( iconPath+"redo.png"), tr( "&Redo" ), CTRL + Key_Y, this, "editRedo" ); 
  23.481 -		connect( a, SIGNAL( activated() ), this, SLOT( editRedo() ) );
  23.482 -		a->addTo( tb );
  23.483 -		a->addTo( menu );
  23.484 -	}
  23.485 +	a = new QAction( QPixmap( iconPath+"redo.png"), tr( "&Redo" ), this); 
  23.486 +	a->setStatusTip (tr( "Redo" ));
  23.487 +	a->setShortcut (Qt::CTRL + Qt::Key_Y );
  23.488 +    tb->addAction (a);
  23.489 +	editMenu->addAction (a);
  23.490 +	connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) );
  23.491 +	actionEditRedo=a;
  23.492     
  23.493 -    menu->insertSeparator();
  23.494 -    a = new QAction( tr( "Copy" ), QPixmap( iconPath+"editcopy.png"), tr( "&Copy" ), CTRL + Key_C, this, "editCopy" );
  23.495 -    connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) );
  23.496 +	editMenu->addSeparator();
  23.497 +    a = new QAction(QPixmap( iconPath+"editcopy.png"), tr( "&Copy" ), this);
  23.498 +	a->setStatusTip ( tr( "Copy" ) );
  23.499 +	a->setShortcut (Qt::CTRL + Qt::Key_C );
  23.500  	a->setEnabled (false);
  23.501 -    a->addTo( tb );
  23.502 -    a->addTo( menu );
  23.503 +    tb->addAction (a);
  23.504 +	editMenu->addAction (a);
  23.505 +    connect( a, SIGNAL( triggered() ), this, SLOT( editCopy() ) );
  23.506  	actionEditCopy=a;
  23.507 -    a = new QAction( tr( "Cut" ), QPixmap( iconPath+"editcut.png" ), tr( "Cu&t" ), CTRL + Key_X, this, "editCut" );
  23.508 -    connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) );
  23.509 +	
  23.510 +    a = new QAction(QPixmap( iconPath+"editcut.png" ), tr( "Cu&t" ), this);
  23.511 +	a->setStatusTip ( tr( "Cut" ) );
  23.512 +	a->setShortcut (Qt::CTRL + Qt::Key_X );
  23.513  	a->setEnabled (false);
  23.514 -    a->addTo( tb );
  23.515 -    a->addTo( menu );
  23.516 +    tb->addAction (a);
  23.517 +	editMenu->addAction (a);
  23.518  	actionEditCut=a;
  23.519 -    a = new QAction( tr( "Paste" ), QPixmap( iconPath+"editpaste.png"), tr( "&Paste" ), CTRL + Key_V, this, "editPaste" );
  23.520 -    connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) );
  23.521 +    connect( a, SIGNAL( triggered() ), this, SLOT( editCut() ) );
  23.522 +	
  23.523 +    a = new QAction(QPixmap( iconPath+"editpaste.png"), tr( "&Paste" ),this);
  23.524 +    connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) );
  23.525 +	a->setStatusTip ( tr( "Paste" ) );
  23.526 +	a->setShortcut ( Qt::CTRL + Qt::Key_V );
  23.527  	a->setEnabled (false);
  23.528 -    a->addTo( tb );
  23.529 -    a->addTo( menu );
  23.530 +    tb->addAction (a);
  23.531 +	editMenu->addAction (a);
  23.532  	actionEditPaste=a;
  23.533  
  23.534      // Shortcuts to modify heading:
  23.535 -    a = new QAction( tr( "edit Heading" ),tr( "Edit heading" ), Key_Enter, this, "editHeading" );
  23.536 -    connect( a, SIGNAL( activated() ), this, SLOT( editHeading() ) );
  23.537 +    a = new QAction(tr( "Edit heading" ),this);
  23.538 +	a->setStatusTip ( tr( "edit Heading" ));
  23.539 +	a->setShortcut ( Qt::Key_Enter);
  23.540 +//	a->setShortcutContext (Qt::WindowShortcut);
  23.541 +	addAction (a);
  23.542 +    connect( a, SIGNAL( triggered() ), this, SLOT( editHeading() ) );
  23.543  	actionListBranches.append(a);
  23.544 -    a = new QAction( tr( "edit Heading" ),tr( "Edit heading" ), Key_Return, this, "editHeading" );
  23.545 -    connect( a, SIGNAL( activated() ), this, SLOT( editHeading() ) );
  23.546 +    a = new QAction( tr( "Edit heading" ), this);
  23.547 +	a->setStatusTip (tr( "edit Heading" ));
  23.548 +	a->setShortcut (Qt::Key_Return );
  23.549 +	//a->setShortcutContext (Qt::WindowShortcut);
  23.550 +	addAction (a);
  23.551 +    connect( a, SIGNAL( triggered() ), this, SLOT( editHeading() ) );
  23.552  	actionListBranches.append(a);
  23.553 +	editMenu->addAction (a);
  23.554  	actionEditHeading=a;
  23.555 -    a = new QAction( tr( "edit Heading" ),tr( "Edit heading" ), Key_F2, this, "editHeading" );
  23.556 -    connect( a, SIGNAL( activated() ), this, SLOT( editHeading() ) );
  23.557 -	a->setEnabled (false);
  23.558 -	actionEditHeading=a;
  23.559 +    a = new QAction( tr( "Edit heading" ), this);
  23.560 +	a->setStatusTip (tr( "edit Heading" ));
  23.561 +	a->setShortcut ( Qt::Key_F2 );
  23.562 +	a->setShortcutContext (Qt::WindowShortcut);
  23.563 +	addAction (a);
  23.564 +    connect( a, SIGNAL( triggered() ), this, SLOT( editHeading() ) );
  23.565  	actionListBranches.append(a);
  23.566      
  23.567      // Shortcut to delete selection
  23.568 -    a = new QAction( tr( "Delete Selection" ),tr( "Delete Selection" ), Key_Delete, this, "deleteBranch" );
  23.569 -    connect( a, SIGNAL( activated() ), this, SLOT( editDeleteSelection() ) );
  23.570 -	a->setEnabled (false);
  23.571 +    a = new QAction( tr( "Delete Selection" ),this);
  23.572 +	a->setStatusTip (tr( "Delete Selection" ));
  23.573 +	a->setShortcut ( Qt::Key_Delete);
  23.574 +	a->setShortcutContext (Qt::WindowShortcut);
  23.575 +	addAction (a);
  23.576 +    connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteSelection() ) );
  23.577  	actionEditDelete=a;
  23.578      
  23.579      // Shortcut to add branch
  23.580 -	alt = new QAction( tr( "Add a branch as child of selection" ),QPixmap(iconPath+"newbranch.png"),tr( "Add branch as child" ), Key_A, this, "newBranch" );
  23.581 -    connect( alt, SIGNAL( activated() ), this, SLOT( editNewBranch() ) );
  23.582 -		a = new QAction( tr( "Add a branch as child of selection" ),QPixmap(iconPath+"newbranch.png"),tr( "Add branch as child" ), Key_Insert, this, "newBranch" );
  23.583 -    connect( a, SIGNAL( activated() ), this, SLOT( editNewBranch() ) );
  23.584 -	a->setEnabled (false);
  23.585 +	alt = new QAction(QPixmap(iconPath+"newbranch.png"), tr( "Add branch as child" ), this);
  23.586 +	alt->setStatusTip ( tr( "Add a branch as child of selection" ));
  23.587 +	alt->setShortcut (Qt::Key_A);
  23.588 +	alt->setShortcutContext (Qt::WindowShortcut);
  23.589 +	addAction (alt);
  23.590 +	connect( alt, SIGNAL( triggered() ), this, SLOT( editNewBranch() ) );
  23.591 +	a = new QAction(QPixmap(iconPath+"newbranch.png"), tr( "Add branch as child" ), this);
  23.592 +	a->setStatusTip ( tr( "Add a branch as child of selection" ));
  23.593 +	a->setShortcut (Qt::Key_Insert);	
  23.594 +	connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranch() ) );
  23.595  	actionListBranches.append(a);
  23.596  	#if defined (Q_OS_MACX)
  23.597 -		// In OSX show different shortcut in menues, the keys work independtly always			
  23.598 +		// In OSX show different shortcut in menues, the keys work indepently always			
  23.599  		actionEditAddBranch=alt;
  23.600  	#else	
  23.601  		actionEditAddBranch=a;
  23.602  	#endif	
  23.603 -    actionEditAddBranch->addTo( menu );
  23.604 -    actionEditAddBranch->addTo( tb );
  23.605 +	editMenu->addAction (actionEditAddBranch);
  23.606 +	tb->addAction (actionEditAddBranch);
  23.607 +
  23.608  
  23.609      // Add branch by inserting it at selection
  23.610 -	a = new QAction( tr( "Add a branch by inserting and making selection its child" ),tr( "Add branch (insert)" ), ALT + Key_Insert, this, "newBranchHere" );
  23.611 -    connect( a, SIGNAL( activated() ), this, SLOT( editNewBranchHere() ) );
  23.612 +	a = new QAction(tr( "Add branch (insert)" ), this);
  23.613 +	a->setStatusTip ( tr( "Add a branch by inserting and making selection its child" ));
  23.614 +	a->setShortcut (Qt::ALT + Qt::Key_Insert );
  23.615 +	a->setShortcutContext (Qt::WindowShortcut);
  23.616 +	addAction (a);
  23.617 +    connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchHere() ) );
  23.618  	a->setEnabled (false);
  23.619  	actionListBranches.append(a);
  23.620  	actionEditAddBranchHere=a;
  23.621 -	a = new QAction( tr( "Add a branch by inserting and making selection its child" ),tr( "Add branch (insert)" ), ALT + Key_A, this, "newBranchHere" );
  23.622 -    connect( a, SIGNAL( activated() ), this, SLOT( editNewBranchHere() ) );
  23.623 +	a = new QAction(tr( "Add branch (insert)" ),this);
  23.624 +	a->setStatusTip ( tr( "Add a branch by inserting and making selection its child" ));
  23.625 +	a->setShortcut ( Qt::ALT + Qt::Key_A );
  23.626 +	a->setShortcutContext (Qt::WindowShortcut);
  23.627 +	addAction (a);
  23.628 +    connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchHere() ) );
  23.629  	actionListBranches.append(a);
  23.630  
  23.631  	// Add branch above
  23.632 -    a = new QAction( tr( "Add a branch above selection" ),tr( "Add branch above" ), SHIFT+Key_Insert, this, "newBranch" );
  23.633 -    connect( a, SIGNAL( activated() ), this, SLOT( editNewBranchAbove() ) );
  23.634 +    a = new QAction(tr( "Add branch above" ), this);
  23.635 +	a->setStatusTip ( tr( "Add a branch above selection" ));
  23.636 +	a->setShortcut (Qt::SHIFT+Qt::Key_Insert );
  23.637 +	a->setShortcutContext (Qt::WindowShortcut);
  23.638 +	addAction (a);
  23.639 +    connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchAbove() ) );
  23.640  	a->setEnabled (false);
  23.641  	actionListBranches.append(a);
  23.642  	actionEditAddBranchAbove=a;
  23.643 -    a = new QAction( tr( "Add a branch above selection" ),tr( "Add branch above" ), SHIFT+Key_A, this, "newBranch" );
  23.644 -    connect( a, SIGNAL( activated() ), this, SLOT( editNewBranchAbove() ) );
  23.645 +    a = new QAction(tr( "Add branch above" ), this);
  23.646 +	a->setStatusTip ( tr( "Add a branch above selection" ));
  23.647 +	a->setShortcut (Qt::SHIFT+Qt::Key_A );
  23.648 +	a->setShortcutContext (Qt::WindowShortcut);
  23.649 +	addAction (a);
  23.650 +    connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchAbove() ) );
  23.651  	actionListBranches.append(a);
  23.652  
  23.653  	// Add branch below 
  23.654 -    a = new QAction( tr( "Add a branch below selection" ),tr( "Add branch below" ), CTRL +Key_Insert, this, "newBranch" );
  23.655 -    connect( a, SIGNAL( activated() ), this, SLOT( editNewBranchBelow() ) );
  23.656 +    a = new QAction(tr( "Add branch below" ), this);
  23.657 +	a->setStatusTip ( tr( "Add a branch below selection" ));
  23.658 +	a->setShortcut (Qt::CTRL +Qt::Key_Insert );
  23.659 +	a->setShortcutContext (Qt::WindowShortcut);
  23.660 +	addAction (a);
  23.661 +    connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBelow() ) );
  23.662  	a->setEnabled (false);
  23.663  	actionListBranches.append(a);
  23.664  	actionEditAddBranchBelow=a;
  23.665 -    a = new QAction( tr( "Add a branch below selection" ),tr( "Add branch below" ), CTRL +Key_A, this, "newBranch" );
  23.666 -    connect( a, SIGNAL( activated() ), this, SLOT( editNewBranchBelow() ) );
  23.667 +    a = new QAction(tr( "Add branch below" ), this);
  23.668 +	a->setStatusTip ( tr( "Add a branch below selection" ));
  23.669 +	a->setShortcut (Qt::CTRL +Qt::Key_A );
  23.670 +	a->setShortcutContext (Qt::WindowShortcut);
  23.671 +	addAction (a);
  23.672 +    connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBelow() ) );
  23.673  	actionListBranches.append(a);
  23.674  
  23.675 -    a = new QAction( tr( "Move branch up" ), QPixmap(iconPath+"up.png" ), tr( "Move up" ), Key_PageUp, this, "editMoveUp" );
  23.676 -    connect( a, SIGNAL( activated() ), this, SLOT( editMoveUp() ) );
  23.677 +    a = new QAction(QPixmap(iconPath+"up.png" ), tr( "Move up" ), this);
  23.678 +	a->setStatusTip ( tr( "Move branch up" ) );
  23.679 +	a->setShortcut (Qt::Key_PageUp );
  23.680  	a->setEnabled (false);
  23.681 -    a->addTo( tb );
  23.682 -    a->addTo( menu );
  23.683 +    tb->addAction (a);
  23.684 +	editMenu->addAction (a);
  23.685 +    connect( a, SIGNAL( triggered() ), this, SLOT( editMoveUp() ) );
  23.686  	actionEditMoveUp=a;
  23.687  
  23.688 -    a = new QAction( tr( "Move branch down" ), QPixmap( iconPath+"down.png"), tr( "Move down" ), Key_PageDown, this, "editMoveDown" );
  23.689 -    connect( a, SIGNAL( activated() ), this, SLOT( editMoveDown() ) );
  23.690 +    a = new QAction( QPixmap( iconPath+"down.png"), tr( "Move down" ),this);
  23.691 +    connect( a, SIGNAL( triggered() ), this, SLOT( editMoveDown() ) );
  23.692 +	a->setStatusTip (tr( "Move branch down" ) );
  23.693 +	a->setShortcut ( Qt::Key_PageDown );
  23.694  	a->setEnabled (false);
  23.695 -    a->addTo( tb );
  23.696 -    a->addTo( menu );
  23.697 +    tb->addAction (a);
  23.698 +	editMenu->addAction (a);
  23.699  	actionEditMoveDown=a;
  23.700  	
  23.701  
  23.702 -	a = new QAction( tr( "Scroll branch" ), QPixmap(flagsPath+"flag-scrolled-right.png"), tr( "Scroll branch" ), Key_ScrollLock, this, "scroll" );
  23.703 -    connect( a, SIGNAL( activated() ), this, SLOT( editToggleScroll() ) );
  23.704 -	alt = new QAction( tr( "Scroll branch" ), QPixmap(flagsPath+"flag-scrolled-right.png"), tr( "Scroll branch" ), Key_S, this, "scroll" );
  23.705 -    connect( alt, SIGNAL( activated() ), this, SLOT( editToggleScroll() ) );
  23.706 +	a = new QAction( QPixmap(flagsPath+"flag-scrolled-right.png"), tr( "Scroll branch" ),this);
  23.707 +	a->setShortcut ( Qt::Key_ScrollLock );
  23.708 +	a->setStatusTip (tr( "Scroll branch" ) );
  23.709 +    connect( a, SIGNAL( triggered() ), this, SLOT( editToggleScroll() ) );
  23.710 +	alt = new QAction( QPixmap(flagsPath+"flag-scrolled-right.png"), tr( "Scroll branch" ), this);
  23.711 +	alt->setShortcut ( Qt::Key_S );
  23.712 +	alt->setStatusTip (tr( "Scroll branch" )); 
  23.713 +    connect( alt, SIGNAL( triggered() ), this, SLOT( editToggleScroll() ) );
  23.714  	#if defined(Q_OS_MACX)
  23.715  		actionEditToggleScroll=alt;
  23.716  	#else	
  23.717 @@ -531,147 +651,215 @@
  23.718  	#endif	
  23.719  	actionEditToggleScroll->setEnabled (false);
  23.720  	actionEditToggleScroll->setToggleAction(true);
  23.721 -    actionEditToggleScroll->addTo( tb );
  23.722 -    actionEditToggleScroll->addTo( menu );
  23.723 +    tb->addAction (actionEditToggleScroll);
  23.724 +    editMenu->addAction ( actionEditToggleScroll);
  23.725 +	editMenu->addAction (actionEditToggleScroll);
  23.726  	actionListBranches.append(actionEditToggleScroll);
  23.727  	
  23.728 -    a = new QAction( tr( "Unscroll all" ), QPixmap(), tr( "Unscroll all scrolled branches" ), 0, this, "scroll" );
  23.729 -    connect( a, SIGNAL( activated() ), this, SLOT( editUnScrollAll() ) );
  23.730 -    a->addTo( menu );
  23.731 +    a = new QAction( tr( "Unscroll all scrolled branches" ), this);
  23.732 +	a->setStatusTip (tr( "Unscroll all" ));
  23.733 +	editMenu->addAction (a);
  23.734 +    connect( a, SIGNAL( triggered() ), this, SLOT( editUnScrollAll() ) );
  23.735  	
  23.736 -    menu->insertSeparator();
  23.737 -
  23.738 -	a = new QAction( tr( "Find" ), QPixmap(iconPath+"find.png"), tr( "Find"+QString("...") ), CTRL + Key_F, this, "find" );
  23.739 -    connect( a, SIGNAL( activated() ), this, SLOT( editOpenFindWindow() ) );
  23.740 -    a->addTo( menu );
  23.741 +	editMenu->addSeparator();
  23.742 +
  23.743 +	a = new QAction( QPixmap(iconPath+"find.png"), tr( "Find"+QString("...") ), this);
  23.744 +	a->setStatusTip (tr( "Find" ) );
  23.745 +	a->setShortcut (Qt::CTRL + Qt::Key_F );
  23.746 +	editMenu->addAction (a);
  23.747 +    connect( a, SIGNAL( triggered() ), this, SLOT( editOpenFindWindow() ) );
  23.748      
  23.749 -	menu->insertSeparator();
  23.750 -
  23.751 -	a = new QAction( tr( "Open URL" ), QPixmap(flagsPath+"flag-url.png"), tr( "Open URL" ), CTRL + Key_U, this, "url" );
  23.752 -    connect( a, SIGNAL( activated() ), this, SLOT( editOpenURL() ) );
  23.753 -    a->addTo( tb );
  23.754 -	a->setEnabled (false);
  23.755 +	editMenu->addSeparator();
  23.756 +
  23.757 +	a = new QAction( QPixmap(flagsPath+"flag-url.png"), tr( "Open URL" ), this);
  23.758 +	a->setShortcut (Qt::CTRL + Qt::Key_U );
  23.759 +	a->setShortcut (tr( "Open URL" ));
  23.760 +    tb->addAction (a);
  23.761 +	addAction(a);
  23.762 +    connect( a, SIGNAL( triggered() ), this, SLOT( editOpenURL() ) );
  23.763  	actionEditOpenURL=a;
  23.764  
  23.765 -	a = new QAction( tr( "Open URL in new tab" ), QPixmap(), tr( "Open URL in new tab" ), CTRL + Key_U, this, "urltab" );
  23.766 -    connect( a, SIGNAL( activated() ), this, SLOT( editOpenURLTab() ) );
  23.767 -	a->setEnabled (false);
  23.768 +	a = new QAction( tr( "Open URL in new tab" ), this);
  23.769 +	a->setStatusTip (tr( "Open URL in new tab" ));
  23.770 +	a->setShortcut (Qt::CTRL+Qt::Key_U );
  23.771 +	addAction(a);
  23.772 +    connect( a, SIGNAL( triggered() ), this, SLOT( editOpenURLTab() ) );
  23.773  	actionEditOpenURLTab=a;
  23.774  
  23.775 -	a = new QAction( tr( "Edit URL" ), QPixmap(), tr( "Edit URL"+QString("...") ), SHIFT + CTRL + Key_U, this, "url" );
  23.776 -    connect( a, SIGNAL( activated() ), this, SLOT( editURL() ) );
  23.777 +	a = new QAction( tr( "Open all URLs in subtree" ), this);
  23.778 +	a->setStatusTip (tr( "Open all URLs in subtree" ));
  23.779 +	addAction(a);
  23.780 +	actionListBranches.append(a);
  23.781 +    connect( a, SIGNAL( triggered() ), this, SLOT( editOpenMultipleURLTabs() ) );
  23.782 +	actionEditOpenMultipleURLTabs=a;
  23.783 +
  23.784 +	a = new QAction(QPixmap(), tr( "Edit URL"+QString("...") ), this);
  23.785 +	a->setStatusTip ( tr( "Edit URL" ) );
  23.786 +	a->setShortcut (Qt::SHIFT + Qt::CTRL + Qt::Key_U );
  23.787 +	//a->setShortcut ( Qt::Key_U );
  23.788 +	a->setShortcutContext (Qt::WindowShortcut);
  23.789 +	actionListBranches.append(a);
  23.790 +	addAction(a);
  23.791 +    connect( a, SIGNAL( triggered() ), this, SLOT( editURL() ) );
  23.792 +	actionEditURL=a;
  23.793 +	
  23.794 +	a = new QAction( tr( "Use heading for URL" ), this);
  23.795 +	a->setStatusTip ( tr( "Use heading of selected branch as URL" ));
  23.796  	a->setEnabled (false);
  23.797  	actionListBranches.append(a);
  23.798 -	actionEditURL=a;
  23.799 -	
  23.800 -	a = new QAction( tr( "Use heading of selected branch as URL" ), QPixmap(), tr( "Use heading for URL" ), 0, this, "heading2url" );
  23.801 -    connect( a, SIGNAL( activated() ), this, SLOT( editHeading2URL() ) );
  23.802 +    connect( a, SIGNAL( triggered() ), this, SLOT( editHeading2URL() ) );
  23.803 +	actionEditHeading2URL=a;
  23.804 +    
  23.805 +	a = new QAction(tr( "Create URL to Bugzilla" ), this);
  23.806 +	a->setStatusTip ( tr( "Create URL to Bugzilla" ));
  23.807  	a->setEnabled (false);
  23.808  	actionListBranches.append(a);
  23.809 -	actionEditHeading2URL=a;
  23.810 +    connect( a, SIGNAL( triggered() ), this, SLOT( editBugzilla2URL() ) );
  23.811 +	actionEditBugzilla2URL=a;
  23.812      
  23.813 -	a = new QAction( tr( "Create URL to Bugzilla" ), QPixmap(), tr( "Create URL to Bugzilla" ), 0, this, "bugzilla2url" );
  23.814 -    connect( a, SIGNAL( activated() ), this, SLOT( editBugzilla2URL() ) );
  23.815 +	a = new QAction(tr( "Create URL to FATE" ), this);
  23.816 +	a->setStatusTip ( tr( "Create URL to FATE" ));
  23.817  	a->setEnabled (false);
  23.818  	actionListBranches.append(a);
  23.819 -	actionEditBugzilla2URL=a;
  23.820 -    
  23.821 -	a = new QAction( tr( "Create URL to FATE" ), QPixmap(), tr( "Create URL to FATE" ), 0, this, "FATE2url" );
  23.822 -    connect( a, SIGNAL( activated() ), this, SLOT( editFATE2URL() ) );
  23.823 +    connect( a, SIGNAL( triggered() ), this, SLOT( editFATE2URL() ) );
  23.824 +	actionEditFATE2URL=a;
  23.825 +	
  23.826 +    a = new QAction(QPixmap(flagsPath+"flag-vymlink.png"), tr( "Open xlinked map" ), this);
  23.827 +	a->setStatusTip ( tr( "Jump to another vym map, if needed load it first" ));
  23.828 +    tb->addAction (a);
  23.829 +	a->setEnabled (false);
  23.830 +    connect( a, SIGNAL( triggered() ), this, SLOT( editOpenVymLink() ) );
  23.831 +	actionEditOpenVymLink=a;
  23.832 +	
  23.833 +    a = new QAction(QPixmap(), tr( "Open all vym links in subtree" ), this);
  23.834 +	a->setStatusTip ( tr( "Open all vym links in subtree" ));
  23.835  	a->setEnabled (false);
  23.836  	actionListBranches.append(a);
  23.837 -	actionEditFATE2URL=a;
  23.838 +    connect( a, SIGNAL( triggered() ), this, SLOT( editOpenMultipleVymLinks() ) );
  23.839 +	actionEditOpenMultipleVymLinks=a;
  23.840  	
  23.841 -    a = new QAction( tr( "Jump to another vym map, if needed load it first" ), QPixmap(flagsPath+"flag-vymlink.png"), tr( "Jump to map" ), 0, this, "jumpMap" );
  23.842 -    connect( a, SIGNAL( activated() ), this, SLOT( editOpenVymLink() ) );
  23.843 -    a->addTo( tb );
  23.844 +
  23.845 +    a = new QAction(tr( "Edit vym link"+QString("...") ), this);
  23.846  	a->setEnabled (false);
  23.847 -	actionEditOpenVymLink=a;
  23.848 -	
  23.849 -    a = new QAction( tr( "Edit link to another vym map" ), QPixmap(), tr( "Edit vym link"+QString("...") ), 0, this, "editLinkMap" );
  23.850 -    connect( a, SIGNAL( activated() ), this, SLOT( editVymLink() ) );
  23.851 -	a->setEnabled (false);
  23.852 +	a->setStatusTip ( tr( "Edit link to another vym map" ));
  23.853 +    connect( a, SIGNAL( triggered() ), this, SLOT( editVymLink() ) );
  23.854  	actionListBranches.append(a);
  23.855  	actionEditVymLink=a;
  23.856  
  23.857 -    a = new QAction( tr( "Delete link to another vym map" ), QPixmap(), tr( "Delete vym link" ), 0, this, "deleteLinkMap" );
  23.858 -    connect( a, SIGNAL( activated() ), this, SLOT( editDeleteVymLink() ) );
  23.859 +    a = new QAction(tr( "Delete vym link" ),this);
  23.860 +	a->setStatusTip ( tr( "Delete link to another vym map" ));
  23.861  	a->setEnabled (false);
  23.862 +    connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteVymLink() ) );
  23.863  	actionEditDeleteVymLink=a;
  23.864  
  23.865 -    a = new QAction( tr( "Hide object in exports" ), QPixmap(flagsPath+"flag-hideexport.png"), tr( "Hide in exports" ), Key_H, this, "hideExport" );
  23.866 -    connect( a, SIGNAL( activated() ), this, SLOT( editToggleHideExport() ) );
  23.867 +    a = new QAction(QPixmap(flagsPath+"flag-hideexport.png"), tr( "Hide in exports" ), this);
  23.868 +	a->setStatusTip ( tr( "Hide object in exports" ) );
  23.869 +	a->setShortcut (Qt::Key_H );
  23.870  	a->setToggleAction(true);
  23.871 -    a->addTo( tb );
  23.872 +    tb->addAction (a);
  23.873  	a->setEnabled (false);
  23.874 +    connect( a, SIGNAL( triggered() ), this, SLOT( editToggleHideExport() ) );
  23.875  	actionEditToggleHideExport=a;
  23.876  
  23.877 -    a = new QAction( tr( "Edit Map Info" ), QPixmap(), tr( "Edit Map Info"+QString("...") ), 0, this, "editMapInfo" );
  23.878 -    connect( a, SIGNAL( activated() ), this, SLOT( editMapInfo() ) );
  23.879 +    a = new QAction(tr( "Edit Map Info"+QString("...") ),this);
  23.880 +	a->setStatusTip ( tr( "Edit Map Info" ));
  23.881  	a->setEnabled (true);
  23.882 +    connect( a, SIGNAL( triggered() ), this, SLOT( editMapInfo() ) );
  23.883  	actionEditMapInfo=a;
  23.884  
  23.885 -	menu->insertSeparator();
  23.886 +	editMenu->addSeparator();
  23.887  
  23.888  	// Import at selection (adding to selection)
  23.889 -    a = new QAction( tr( "Add map at selection" ),tr( "Add map (insert)" ), 0, this, "importAdd" );
  23.890 -    connect( a, SIGNAL( activated() ), this, SLOT( editImportAdd() ) );
  23.891 +    a = new QAction( tr( "Add map (insert)" ),this);
  23.892 +	a->setStatusTip (tr( "Add map at selection" ));
  23.893 +    connect( a, SIGNAL( triggered() ), this, SLOT( editImportAdd() ) );
  23.894  	a->setEnabled (false);
  23.895  	actionListBranches.append(a);
  23.896  	actionEditImportAdd=a;
  23.897  
  23.898  	// Import at selection (replacing selection)
  23.899 -    a = new QAction( tr( "Replace selection with map" ),tr( "Add map (replace)" ), 0, this, "importReplace" );
  23.900 -    connect( a, SIGNAL( activated() ), this, SLOT( editImportReplace() ) );
  23.901 +    a = new QAction( tr( "Add map (replace)" ), this);
  23.902 +	a->setStatusTip (tr( "Replace selection with map" ));
  23.903 +    connect( a, SIGNAL( triggered() ), this, SLOT( editImportReplace() ) );
  23.904  	a->setEnabled (false);
  23.905  	actionListBranches.append(a);
  23.906  	actionEditImportReplace=a;
  23.907  
  23.908  	// Save selection 
  23.909 -    a = new QAction( tr( "Save selection" ),tr( "Save selection" ), 0, this, "saveSelection" );
  23.910 -    connect( a, SIGNAL( activated() ), this, SLOT( editSaveBranch() ) );
  23.911 +    a = new QAction( tr( "Save selection" ), this);
  23.912 +	a->setStatusTip (tr( "Save selection" ));
  23.913 +    connect( a, SIGNAL( triggered() ), this, SLOT( editSaveBranch() ) );
  23.914  	a->setEnabled (false);
  23.915  	actionListBranches.append(a);
  23.916  	actionEditSaveBranch=a;
  23.917  
  23.918  	// Only remove branch, not its childs
  23.919 -    a = new QAction( tr( "Remove only branch and keep its childs" ),tr( "Remove only branch " ), ALT + Key_Delete, this, "removeBranchHere" );
  23.920 -    connect( a, SIGNAL( activated() ), this, SLOT( editRemoveBranchKeepChilds() ) );
  23.921 +    a = new QAction(tr( "Remove only branch " ), this);
  23.922 +	a->setStatusTip ( tr( "Remove only branch and keep its childs" ));
  23.923 +	a->setShortcut (Qt::ALT + Qt::Key_Delete );
  23.924 +    connect( a, SIGNAL( triggered() ), this, SLOT( editRemoveBranchKeepChilds() ) );
  23.925  	a->setEnabled (false);
  23.926  	actionListBranches.append(a);
  23.927  	actionEditRemoveBranchKeepChilds=a;
  23.928  
  23.929  	// Only remove childs of a branch
  23.930 -    a = new QAction( tr( "Remove childs of branch" ),tr( "Remove childs" ), SHIFT + Key_Delete, this, "removeBranchChilds" );
  23.931 -    connect( a, SIGNAL( activated() ), this, SLOT( editRemoveChilds() ) );
  23.932 +    a = new QAction( tr( "Remove childs" ), this);
  23.933 +	a->setStatusTip (tr( "Remove childs of branch" ));
  23.934 +	a->setShortcut (Qt::SHIFT + Qt::Key_Delete );
  23.935 +    connect( a, SIGNAL( triggered() ), this, SLOT( editRemoveChilds() ) );
  23.936  	a->setEnabled (false);
  23.937  	actionListBranches.append(a);
  23.938  	actionEditRemoveChilds=a;
  23.939  
  23.940      // Shortcuts for navigating with cursor:
  23.941 -    a = new QAction( tr( "Select upper branch" ),tr( "Select upper branch" ), Key_Up, this, "upperBranch" );
  23.942 -    connect( a, SIGNAL( activated() ), this, SLOT( editUpperBranch() ) );
  23.943 -    a = new QAction( tr( "Select lower branch" ),tr( "Select lower branch" ), Key_Down, this, "lowerBranch" );
  23.944 -    connect( a, SIGNAL( activated() ), this, SLOT( editLowerBranch() ) );
  23.945 -    a = new QAction( tr( "Select left branch" ),tr( "Select left branch" ), Key_Left, this, "upperBranch" );
  23.946 -    connect( a, SIGNAL( activated() ), this, SLOT( editLeftBranch() ) );
  23.947 -    a = new QAction( tr( "Select right branch" ),tr( "Select child branch" ), Key_Right, this, "rightBranch" );
  23.948 -    connect( a, SIGNAL( activated() ), this, SLOT( editRightBranch() ) );
  23.949 -    a = new QAction( tr( "Select first branch" ),tr( "Select first branch" ), Key_Home, this, "firstBranch" );
  23.950 +    a = new QAction(tr( "Select upper branch" ), this);
  23.951 +	a->setStatusTip ( tr( "Select upper branch" ));
  23.952 +	a->setShortcut (Qt::Key_Up );
  23.953 +	a->setShortcutContext (Qt::WindowShortcut);
  23.954 +	addAction (a);
  23.955 +    connect( a, SIGNAL( triggered() ), this, SLOT( editUpperBranch() ) );
  23.956 +    a = new QAction( tr( "Select lower branch" ),this);
  23.957 +	a->setStatusTip (tr( "Select lower branch" ));
  23.958 +	a->setShortcut ( Qt::Key_Down );
  23.959 +	a->setShortcutContext (Qt::WindowShortcut);
  23.960 +	addAction (a);
  23.961 +    connect( a, SIGNAL( triggered() ), this, SLOT( editLowerBranch() ) );
  23.962 +    a = new QAction(tr( "Select left branch" ), this);
  23.963 +	a->setStatusTip ( tr( "Select left branch" ));
  23.964 +	a->setShortcut (Qt::Key_Left );
  23.965 +	a->setShortcutContext (Qt::WindowShortcut);
  23.966 +	addAction (a);
  23.967 +    connect( a, SIGNAL( triggered() ), this, SLOT( editLeftBranch() ) );
  23.968 +    a = new QAction( tr( "Select child branch" ), this);
  23.969 +	a->setStatusTip (tr( "Select right branch" ));
  23.970 +	a->setShortcut (Qt::Key_Right);
  23.971 +	a->setShortcutContext (Qt::WindowShortcut);
  23.972 +	addAction (a);
  23.973 +    connect( a, SIGNAL( triggered() ), this, SLOT( editRightBranch() ) );
  23.974 +    a = new QAction( tr( "Select first branch" ), this);
  23.975 +	a->setStatusTip (tr( "Select first branch" ));
  23.976 +	a->setShortcut (Qt::Key_Home );
  23.977 +	a->setShortcutContext (Qt::WindowShortcut);
  23.978 +	addAction (a);
  23.979  	a->setEnabled (false);
  23.980 -    a->addTo ( menu );
  23.981 +	editMenu->addAction (a);
  23.982  	actionListBranches.append(a);
  23.983  	actionEditSelectFirst=a;
  23.984 -    connect( a, SIGNAL( activated() ), this, SLOT( editFirstBranch() ) );
  23.985 -    a = new QAction( tr( "Select last branch" ),tr( "Select last branch" ), Key_End, this, "lastBranch" );
  23.986 -    connect( a, SIGNAL( activated() ), this, SLOT( editLastBranch() ) );
  23.987 +    connect( a, SIGNAL( triggered() ), this, SLOT( editFirstBranch() ) );
  23.988 +    a = new QAction( tr( "Select last branch" ),this);
  23.989 +	a->setStatusTip (tr( "Select last branch" ));
  23.990 +	a->setShortcut ( Qt::Key_End );
  23.991 +	a->setShortcutContext (Qt::WindowShortcut);
  23.992 +	addAction (a);
  23.993 +    connect( a, SIGNAL( triggered() ), this, SLOT( editLastBranch() ) );
  23.994  	a->setEnabled (false);
  23.995 -    a->addTo ( menu );
  23.996 +	editMenu->addAction (a);
  23.997  	actionListBranches.append(a);
  23.998  	actionEditSelectLast=a;
  23.999  
 23.1000 -    a = new QAction( tr( "Add Image" ),tr( "Add Image" )+QString("..."), 0, this, "loadImage" );
 23.1001 -    connect( a, SIGNAL( activated() ), this, SLOT( editLoadImage() ) );
 23.1002 +    a = new QAction( tr( "Add Image" )+QString("..."), this);
 23.1003 +	a->setStatusTip (tr( "Add Image" ));
 23.1004 +    connect( a, SIGNAL( triggered() ), this, SLOT( editLoadImage() ) );
 23.1005  	actionEditLoadImage=a;
 23.1006  
 23.1007  }
 23.1008 @@ -679,147 +867,194 @@
 23.1009  // Format Actions
 23.1010  void Main::setupFormatActions()
 23.1011  {
 23.1012 -    QPopupMenu *menu = new QPopupMenu( this );
 23.1013 -    menuBar()->insertItem( tr( "F&ormat" ), menu );
 23.1014 -
 23.1015 -    QToolBar *tb = new QToolBar( this );
 23.1016 +    QMenu *formatMenu = menuBar()->addMenu (tr ("F&ormat"));
 23.1017 +
 23.1018 +    QToolBar *tb = addToolBar( tr("Format Actions","Toolbars"));
 23.1019 +	tb->setObjectName ("formatTB");
 23.1020      QAction *a;
 23.1021      QPixmap pix( 16,16);
 23.1022 -    pix.fill (black);
 23.1023 -    actionFormatColor= new QAction( tr( "Set Color" ), pix, tr( "Set &Color" )+QString("..."), 0, this, "formatColor" );
 23.1024 -    connect( actionFormatColor, SIGNAL( activated() ), this, SLOT( formatSelectColor() ) );
 23.1025 -    actionFormatColor->addTo( tb );
 23.1026 -    actionFormatColor->addTo( menu );
 23.1027 -    a= new QAction( tr( "Pick color\nHint: You can pick a color from another branch and color using CTRL+Left Button" ), QPixmap(iconPath+"formatcolorpicker.png"), tr( "Pic&k color" ), CTRL + Key_K, this, "pickColor" );
 23.1028 -    connect( a, SIGNAL( activated() ), this, SLOT( formatPickColor() ) );
 23.1029 +    pix.fill (Qt::black);
 23.1030 +    a= new QAction(pix, tr( "Set &Color" )+QString("..."), this);
 23.1031 +	a->setStatusTip ( tr( "Set Color" ));
 23.1032 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectColor() ) );
 23.1033 +    a->addTo( tb );
 23.1034 +	formatMenu->addAction (a);
 23.1035 +	actionFormatColor=a;
 23.1036 +    a= new QAction( QPixmap(iconPath+"formatcolorpicker.png"), tr( "Pic&k color" ), this);
 23.1037 +	a->setStatusTip (tr( "Pick color\nHint: You can pick a color from another branch and color using CTRL+Left Button" ) );
 23.1038 +	a->setShortcut (Qt::CTRL + Qt::Key_K );
 23.1039 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatPickColor() ) );
 23.1040  	a->setEnabled (false);
 23.1041      a->addTo( tb );
 23.1042 -    a->addTo( menu );
 23.1043 +	formatMenu->addAction (a);
 23.1044  	actionListBranches.append(a);
 23.1045  	actionFormatPickColor=a;
 23.1046 -    a= new QAction( tr( "Color branch" ), QPixmap(iconPath+"formatcoloritem.png"), tr( "Color &branch" ), CTRL + Key_I, this, "colorItem" );
 23.1047 -    connect( a, SIGNAL( activated() ), this, SLOT( formatColorItem() ) );
 23.1048 +
 23.1049 +    a= new QAction(QPixmap(iconPath+"formatcoloritem.png"), tr( "Color &branch" ), this);
 23.1050 +	a->setStatusTip ( tr( "Color branch" ) );
 23.1051 +	a->setShortcut (Qt::CTRL + Qt::Key_I);
 23.1052 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatColorItem() ) );
 23.1053  	a->setEnabled (false);
 23.1054      a->addTo( tb );
 23.1055 -    a->addTo( menu );
 23.1056 +	formatMenu->addAction (a);
 23.1057  	actionListBranches.append(a);
 23.1058  	actionFormatColorBranch=a;
 23.1059 -    a= new QAction( tr( "Color Subtree" ), QPixmap(iconPath+"formatcolorbranch.png"), tr( "Color sub&tree" ), CTRL + Key_T, this, "colorBranch" );
 23.1060 -    connect( a, SIGNAL( activated() ), this, SLOT( formatColorBranch() ) );
 23.1061 +
 23.1062 +    a= new QAction(QPixmap(iconPath+"formatcolorbranch.png"), tr( "Color sub&tree" ), this);
 23.1063 +	a->setStatusTip ( tr( "Color Subtree" ));
 23.1064 +	a->setShortcut (Qt::CTRL + Qt::Key_T);
 23.1065 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatColorBranch() ) );
 23.1066  	a->setEnabled (false);
 23.1067 -    a->addTo( menu );
 23.1068 +	formatMenu->addAction (a);
 23.1069      a->addTo( tb );
 23.1070  	actionListBranches.append(a);
 23.1071  	actionFormatColorSubtree=a;
 23.1072  
 23.1073 -    menu->insertSeparator();
 23.1074 -	actionGroupFormatLinkStyles=new QActionGroup ( this, "formatLinkStyles");
 23.1075 +	formatMenu->addSeparator();
 23.1076 +	actionGroupFormatLinkStyles=new QActionGroup ( this);
 23.1077  	actionGroupFormatLinkStyles->setExclusive (true);
 23.1078 -    a= new QAction( tr( "Line" ), QPixmap(), tr( "Linkstyle Line" ), 0, actionGroupFormatLinkStyles, "formatLinkStyleLine" );
 23.1079 +    a= new QAction( tr( "Linkstyle Line" ), actionGroupFormatLinkStyles);
 23.1080 +	a->setStatusTip (tr( "Line" ));
 23.1081  	a->setToggleAction(true);
 23.1082 -    connect( a, SIGNAL( activated() ), this, SLOT( formatLinkStyleLine() ) );
 23.1083 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatLinkStyleLine() ) );
 23.1084 +	formatMenu->addAction (a);
 23.1085  	actionFormatLinkStyleLine=a;
 23.1086 -    a= new QAction( tr( "Line" ), QPixmap(), tr( "Linkstyle Parabel" ), 0, actionGroupFormatLinkStyles, "formatLinkStyleLine" );
 23.1087 +    a= new QAction( tr( "Linkstyle Parabel" ), actionGroupFormatLinkStyles);
 23.1088 +	a->setStatusTip (tr( "Line" ));
 23.1089  	a->setToggleAction(true);
 23.1090 -    connect( a, SIGNAL( activated() ), this, SLOT( formatLinkStyleParabel() ) );
 23.1091 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatLinkStyleParabel() ) );
 23.1092 +	formatMenu->addAction (a);
 23.1093  	actionFormatLinkStyleParabel=a;
 23.1094 -    a= new QAction( tr( "PolyLine" ), QPixmap(), tr( "Linkstyle Thick Line" ), 0, actionGroupFormatLinkStyles, "formatLinkStyleLine" );
 23.1095 +    a= new QAction( tr( "Linkstyle Thick Line" ), actionGroupFormatLinkStyles );
 23.1096 +	a->setStatusTip (tr( "PolyLine" ));
 23.1097  	a->setToggleAction(true);
 23.1098 -    connect( a, SIGNAL( activated() ), this, SLOT( formatLinkStylePolyLine() ) );
 23.1099 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatLinkStylePolyLine() ) );
 23.1100 +	formatMenu->addAction (a);
 23.1101  	actionFormatLinkStylePolyLine=a;
 23.1102 -    a= new QAction( tr( "PolyParabel" ), QPixmap(), tr( "Linkstyle Thick Parabel" ), 0, actionGroupFormatLinkStyles, "formatLinkStylePolyParabel" );
 23.1103 +    a= new QAction( tr( "Linkstyle Thick Parabel" ), actionGroupFormatLinkStyles);
 23.1104 +	a->setStatusTip (tr( "PolyParabel" ) );
 23.1105  	a->setToggleAction(true);
 23.1106 -    connect( a, SIGNAL( activated() ), this, SLOT( formatLinkStylePolyParabel() ) );
 23.1107 +	a->setChecked (true);
 23.1108 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatLinkStylePolyParabel() ) );
 23.1109 +	formatMenu->addAction (a);
 23.1110  	actionFormatLinkStylePolyParabel=a;
 23.1111 -	actionGroupFormatLinkStyles->addTo (menu);
 23.1112  	
 23.1113 -	actionGroupFormatFrameTypes=new QActionGroup ( this, "formatFrameTypes");
 23.1114 +	actionGroupFormatFrameTypes=new QActionGroup ( this);
 23.1115  	actionGroupFormatFrameTypes->setExclusive (true);
 23.1116 -    a = new QAction( tr( "No Frame" ),tr( "No Frame" ), 0, actionGroupFormatFrameTypes, "frameNone" );
 23.1117 +    a = new QAction( tr( "No Frame" ), actionGroupFormatFrameTypes );
 23.1118 +	a->setStatusTip (tr("No Frame"));
 23.1119  	a->setToggleAction(true);
 23.1120 -    connect( a, SIGNAL( activated() ), this, SLOT( formatFrameNone() ) );
 23.1121 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatFrameNone() ) );
 23.1122  	actionFormatFrameNone=a;
 23.1123 -    a = new QAction( tr( "Rectangle" ),tr( "Rectangle" ), 0, actionGroupFormatFrameTypes, "frameRectangle" );
 23.1124 +    a = new QAction( tr( "Rectangle" ), actionGroupFormatFrameTypes);
 23.1125 +	a->setStatusTip (tr( "Rectangle" ));
 23.1126  	a->setToggleAction(true);
 23.1127 -    connect( a, SIGNAL( activated() ), this, SLOT( formatFrameRectangle() ) );
 23.1128 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatFrameRectangle() ) );
 23.1129  	actionFormatFrameRectangle=a;
 23.1130  
 23.1131 -    a = new QAction( tr ("Include top and bottom position of images into branch"), tr( "Include images vertically" ), 0, actionFormatIncludeImagesVer, "includeImagesVer" );
 23.1132 +    a = new QAction( tr( "Include images vertically" ),  actionFormatIncludeImagesVer);
 23.1133 +	a->setStatusTip ( tr ("Include top and bottom position of images into branch"));
 23.1134  	a->setToggleAction(true);
 23.1135 -    connect( a, SIGNAL( activated() ), this, SLOT( formatIncludeImagesVer() ) );
 23.1136 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatIncludeImagesVer() ) );
 23.1137  	actionFormatIncludeImagesVer=a;
 23.1138  
 23.1139 -    a = new QAction( tr ("Include left and right position of images into branch"), tr( "Include images horizontally" ), 0, actionFormatIncludeImagesHor, "includeImagesHor" );
 23.1140 +    a = new QAction( tr( "Include images horizontally" ),  actionFormatIncludeImagesHor );
 23.1141 +	a->setStatusTip ( tr ("Include left and right position of images into branch"));
 23.1142  	a->setToggleAction(true);
 23.1143 -    connect( a, SIGNAL( activated() ), this, SLOT( formatIncludeImagesHor() ) );
 23.1144 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatIncludeImagesHor() ) );
 23.1145  	actionFormatIncludeImagesHor=a;
 23.1146  
 23.1147 -    a = new QAction( tr( "Hide link" ),tr( "Hide link if object is not selected" ), 0, actionFormatHideLinkUnselected, "hideLinkUnselected" );
 23.1148 +    a = new QAction( tr( "Hide link if object is not selected" ), actionFormatHideLinkUnselected);
 23.1149 +	a->setStatusTip (tr( "Hide link" ));
 23.1150  	a->setToggleAction(true);
 23.1151 -    connect( a, SIGNAL( activated() ), this, SLOT( formatHideLinkUnselected() ) );
 23.1152 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatHideLinkUnselected() ) );
 23.1153  	actionFormatHideLinkUnselected=a;
 23.1154  
 23.1155 -    menu->insertSeparator();
 23.1156 -    a= new QAction( tr( "Use same color for links and headings" ), QPixmap(), tr( "&Use color of heading for link" ), 0, this, "formatLinkColorHint" );
 23.1157 +	formatMenu->addSeparator();
 23.1158 +    a= new QAction( tr( "&Use color of heading for link" ),  this);
 23.1159 +	a->setStatusTip (tr( "Use same color for links and headings" ));
 23.1160  	a->setToggleAction(true);
 23.1161 -    connect( a, SIGNAL( activated() ), this, SLOT( formatToggleLinkColorHint() ) );
 23.1162 -	a->addTo( menu );
 23.1163 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatToggleLinkColorHint() ) );
 23.1164 +	formatMenu->addAction (a);
 23.1165  	actionFormatLinkColorHint=a;
 23.1166 -    pix.fill (white);
 23.1167 -    actionFormatLinkColor= new QAction( tr( "Set Link Color" ), pix, tr( "Set &Link Color"+QString("...") ), 0, this, "formatLinkColor" );
 23.1168 -    connect( actionFormatLinkColor, SIGNAL( activated() ), this, SLOT( formatSelectLinkColor() ) );
 23.1169 -    actionFormatLinkColor->addTo( menu );
 23.1170 -    actionFormatBackColor= new QAction( tr( "Set Background Color" ), pix, tr( "Set &Background Color" )+QString("..."), 0, this, "formatBackColor" );
 23.1171 -    connect( actionFormatBackColor, SIGNAL( activated() ), this, SLOT( formatSelectBackColor() ) );
 23.1172 -    actionFormatBackColor->addTo( menu );
 23.1173 +
 23.1174 +    pix.fill (Qt::white);
 23.1175 +    a= new QAction( pix, tr( "Set &Link Color"+QString("...") ), this  );
 23.1176 +	a->setStatusTip (tr( "Set Link Color" ));
 23.1177 +	formatMenu->addAction (a);
 23.1178 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectLinkColor() ) );
 23.1179 +    actionFormatLinkColor=a;
 23.1180 +
 23.1181 +    a= new QAction( pix, tr( "Set &Background Color" )+QString("..."), this );
 23.1182 +	a->setStatusTip (tr( "Set Background Color" ));
 23.1183 +	formatMenu->addAction (a);
 23.1184 +    connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectBackColor() ) );
 23.1185 +    actionFormatBackColor=a;
 23.1186  }
 23.1187  
 23.1188  // View Actions
 23.1189  void Main::setupViewActions()
 23.1190  {
 23.1191 -    QToolBar *tb = new QToolBar( this );
 23.1192 +    QToolBar *tb = addToolBar( tr("View Actions","Toolbars") );
 23.1193      tb->setLabel( "View Actions" );
 23.1194 -    QPopupMenu *menu = new QPopupMenu( this );
 23.1195 -    menuBar()->insertItem( tr( "&View" ), menu );
 23.1196 +	tb->setObjectName ("viewTB");
 23.1197 +    QMenu *viewMenu = menuBar()->addMenu ( tr( "&View" ));
 23.1198  
 23.1199      QAction *a;
 23.1200 -    a = new QAction( tr( "Zoom reset" ), QPixmap(iconPath+"viewmag-reset.png"), tr( "reset Zoom" ), CTRL + Key_0, this, "zoomReset" );
 23.1201 -    connect( a, SIGNAL( activated() ), this, SLOT(viewZoomReset() ) );
 23.1202 +    a = new QAction(QPixmap(iconPath+"viewmag-reset.png"), tr( "reset Zoom" ), this);
 23.1203 +	a->setStatusTip ( tr( "Zoom reset" ) );
 23.1204 +	a->setShortcut (Qt::CTRL + Qt::Key_0 );
 23.1205      a->addTo( tb );
 23.1206 -    a->addTo( menu );
 23.1207 -    a = new QAction( tr( "Zoom in" ), QPixmap(iconPath+"viewmag+.png"), tr( "Zoom in" ), CTRL + Key_Plus, this, "zoomIn" );
 23.1208 -    connect( a, SIGNAL( activated() ), this, SLOT(viewZoomIn() ) );
 23.1209 +	viewMenu->addAction (a);
 23.1210 +    connect( a, SIGNAL( triggered() ), this, SLOT(viewZoomReset() ) );
 23.1211 +	
 23.1212 +    a = new QAction( QPixmap(iconPath+"viewmag+.png"), tr( "Zoom in" ), this);
 23.1213 +	a->setStatusTip (tr( "Zoom in" ));
 23.1214 +	a->setShortcut (Qt::CTRL + Qt::Key_Plus);
 23.1215      a->addTo( tb );
 23.1216 -    a->addTo( menu );
 23.1217 -    a = new QAction( tr( "Zoom out" ), QPixmap(iconPath+"viewmag-.png"), tr( "Zoom out" ), CTRL + Key_Minus, this, "zoomOut" );
 23.1218 -    connect( a, SIGNAL( activated() ), this, SLOT( viewZoomOut() ) );
 23.1219 +	viewMenu->addAction (a);
 23.1220 +    connect( a, SIGNAL( triggered() ), this, SLOT(viewZoomIn() ) );
 23.1221 +	
 23.1222 +    a = new QAction( QPixmap(iconPath+"viewmag-.png"), tr( "Zoom out" ), this);
 23.1223 +	a->setStatusTip (tr( "Zoom out" ));
 23.1224 +	a->setShortcut (Qt::CTRL + Qt::Key_Minus );
 23.1225      a->addTo( tb );
 23.1226 -    a->addTo( menu );
 23.1227 -
 23.1228 -
 23.1229 -    a = new QAction( tr( "Show Note Editor" ), QPixmap(flagsPath+"flag-note.png"), tr( "Show Note Editor" ), CTRL + Key_E , this, "noteEditor" );
 23.1230 -    connect( a, SIGNAL( activated() ), this, SLOT(windowToggleNoteEditor() ) );
 23.1231 +	viewMenu->addAction (a);
 23.1232 +    connect( a, SIGNAL( triggered() ), this, SLOT( viewZoomOut() ) );
 23.1233 +
 23.1234 +
 23.1235 +    a = new QAction(QPixmap(flagsPath+"flag-note.png"), tr( "Show Note Editor" ),this);
 23.1236 +	a->setStatusTip ( tr( "Show Note Editor" ));
 23.1237 +	a->setShortcut ( Qt::CTRL + Qt::Key_E );
 23.1238  	a->setToggleAction(true);
 23.1239  	if (textEditor->showWithMain())
 23.1240  		a->setOn(true);
 23.1241  	else	
 23.1242  		a->setOn(false);
 23.1243      a->addTo( tb );
 23.1244 -    a->addTo( menu );
 23.1245 +	viewMenu->addAction (a);
 23.1246 +    connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleNoteEditor() ) );
 23.1247  	actionViewToggleNoteEditor=a;
 23.1248  
 23.1249 -    a = new QAction( tr( "Show history window" ), QPixmap(), tr( "Show history window" ), CTRL + Key_H , this, "historyWindow" );
 23.1250 -    connect( a, SIGNAL( activated() ), this, SLOT(windowToggleHistory() ) );
 23.1251 +    a = new QAction(  tr( "Show history window" ),this );
 23.1252 +	a->setStatusTip ( tr( "Show history window" ));
 23.1253 +	a->setShortcut ( Qt::CTRL + Qt::Key_H  );
 23.1254  	a->setToggleAction(false);
 23.1255 -    a->addTo( menu );
 23.1256 +	viewMenu->addAction (a);
 23.1257 +    connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleHistory() ) );
 23.1258  	actionViewToggleHistoryWindow=a;
 23.1259  
 23.1260 -    a = new QAction( tr( "&Next Window" ), QPixmap(), tr( "Next Window" ), ALT + Key_N , this, "nextWindow" );
 23.1261 -    connect( a, SIGNAL( activated() ), this, SLOT(windowNextEditor() ) );
 23.1262 -    a->addTo( menu );
 23.1263 -    a = new QAction( tr( "&Previous Window" ), QPixmap(), tr( "Previous Window" ), ALT + Key_P , this, "previousWindow" );
 23.1264 -    connect( a, SIGNAL( activated() ), this, SLOT(windowPreviousEditor() ) );
 23.1265 -    a->addTo( menu );
 23.1266 +    a = new QAction(tr( "Next Window" ), this);
 23.1267 +	a->setStatusTip ( tr( "&Next Window" ) );
 23.1268 +	a->setShortcut (Qt::ALT + Qt::Key_N );
 23.1269 +	viewMenu->addAction (a);
 23.1270 +    connect( a, SIGNAL( triggered() ), this, SLOT(windowNextEditor() ) );
 23.1271 +
 23.1272 +    a = new QAction (tr( "Previous Window" ), this );
 23.1273 +	a->setStatusTip (tr( "&Previous Window" ));
 23.1274 +	a->setShortcut (Qt::ALT + Qt::Key_P );
 23.1275 +	viewMenu->addAction (a);
 23.1276 +    connect( a, SIGNAL( triggered() ), this, SLOT(windowPreviousEditor() ) );
 23.1277  }
 23.1278  
 23.1279  // Mode Actions
 23.1280 @@ -828,23 +1063,29 @@
 23.1281      //QPopupMenu *menu = new QPopupMenu( this );
 23.1282      //menuBar()->insertItem( tr( "&Mode (using modifiers)" ), menu );
 23.1283  
 23.1284 -    QToolBar *tb = new QToolBar( this );
 23.1285 -    tb->setLabel( tr ("Modes when using modifiers") );
 23.1286 +    QToolBar *tb = addToolBar( tr ("Modes when using modifiers","Toolbars") );
 23.1287 +	tb->setObjectName ("modesTB");
 23.1288      QAction *a;
 23.1289 -	actionGroupModModes=new QActionGroup ( this, "formatLinkStyles");
 23.1290 +	actionGroupModModes=new QActionGroup ( this);
 23.1291  	actionGroupModModes->setExclusive (true);
 23.1292 -    a= new QAction( tr( "Use modifier to color branches" ), QPixmap(iconPath+"modecolor.png"), 0, Key_J, actionGroupModModes, "modModeColor" );
 23.1293 +    a= new QAction( QPixmap(iconPath+"modecolor.png"), tr( "Use modifier to color branches" ), actionGroupModModes);
 23.1294 +	a->setShortcut (Qt::Key_J);
 23.1295 +    a->setStatusTip ( tr( "Use modifier to color branches" ));
 23.1296  	a->setToggleAction(true);
 23.1297  	a->addTo (tb);
 23.1298  	a->setOn(true);
 23.1299  	actionModModeColor=a;
 23.1300  	
 23.1301 -    a= new QAction( tr( "Use modifier to copy" ), QPixmap(iconPath+"modecopy.png"), 0, Key_K, actionGroupModModes, "modModeCopy" );
 23.1302 +    a= new QAction( QPixmap(iconPath+"modecopy.png"), tr( "Use modifier to copy" ), actionGroupModModes );
 23.1303 +	a->setShortcut( Qt::Key_K); 
 23.1304 +    a->setStatusTip( tr( "Use modifier to copy" ));
 23.1305  	a->setToggleAction(true);
 23.1306  	a->addTo (tb);
 23.1307  	actionModModeCopy=a;
 23.1308  
 23.1309 -    a= new QAction( tr( "Use modifier to draw xLinks" ), QPixmap(iconPath+"modelink.png"), 0, Key_L, actionGroupModModes, "modModeLink" );
 23.1310 +    a= new QAction(QPixmap(iconPath+"modelink.png"), tr( "Use modifier to draw xLinks" ), actionGroupModModes );
 23.1311 +	a->setShortcut (Qt::Key_L);
 23.1312 +    a->setStatusTip( tr( "Use modifier to draw xLinks" ));
 23.1313  	a->setToggleAction(true);
 23.1314  	a->addTo (tb);
 23.1315  	actionModModeLink=a;
 23.1316 @@ -890,239 +1131,379 @@
 23.1317  	systemFlagsDefault->addFlag (fo);
 23.1318  
 23.1319  	// Create Standard Flags
 23.1320 +	QToolBar *tb=addToolBar (tr ("Standard Flags","Standard Flag Toolbar"));
 23.1321 +	tb->setObjectName ("standardFlagTB");
 23.1322 +
 23.1323  	standardFlagsDefault = new FlagRowObj ();
 23.1324  	standardFlagsDefault->setVisibility (false);
 23.1325  	standardFlagsDefault->setName ("standardFlagsDef");
 23.1326 +	standardFlagsDefault->setToolBar (tb);
 23.1327  
 23.1328  	fo->load(QPixmap(flagsPath+"flag-exclamationmark.png"));
 23.1329  	fo->setName ("exclamationmark");
 23.1330  	fo->setGroup("standard-mark");
 23.1331 -	fo->setToolTip(tr("Take care!","Standardflag"));
 23.1332 +	QAction *a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1333 +	tb->addAction (a);
 23.1334 +	fo->setAction (a);
 23.1335 +	a->setCheckable(true);
 23.1336 +	a->setObjectName(fo->getName());
 23.1337 +	a->setToolTip(tr("Take care!","Standardflag"));
 23.1338 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1339  	standardFlagsDefault->addFlag (fo);	// makes deep copy
 23.1340  	
 23.1341  	fo->load(QPixmap(flagsPath+"flag-questionmark.png"));
 23.1342  	fo->setName("questionmark");
 23.1343  	fo->setGroup("standard-mark");
 23.1344 -	fo->setToolTip(tr("Really?","Standardflag"));
 23.1345 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1346 +	tb->addAction (a);
 23.1347 +	fo->setAction (a);
 23.1348 +	a->setCheckable(true);
 23.1349 +	a->setObjectName(fo->getName());
 23.1350 +	a->setToolTip(tr("Really?","Standardflag"));
 23.1351 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1352  	standardFlagsDefault->addFlag (fo);	
 23.1353  
 23.1354  	fo->load(QPixmap(flagsPath+"flag-hook-green.png"));
 23.1355  	fo->setName("hook-green");
 23.1356  	fo->setGroup("standard-hook");
 23.1357 -	fo->setToolTip(tr("ok!","Standardflag"));
 23.1358 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1359 +	tb->addAction (a);
 23.1360 +	fo->setAction (a);
 23.1361 +	a->setCheckable(true);
 23.1362 +	a->setObjectName(fo->getName());
 23.1363 +	a->setToolTip(tr("ok!","Standardflag"));
 23.1364 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1365  	standardFlagsDefault->addFlag (fo);	
 23.1366  
 23.1367  	fo->load(QPixmap(flagsPath+"flag-cross-red.png"));
 23.1368  	fo->setName("cross-red");
 23.1369  	fo->setGroup("standard-hook");
 23.1370 -	fo->setToolTip(tr("Not ok!","Standardflag"));
 23.1371 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1372 +	tb->addAction (a);
 23.1373 +	fo->setAction (a);
 23.1374 +	a->setCheckable(true);
 23.1375 +	a->setObjectName(fo->getName());
 23.1376 +	a->setToolTip(tr("Not ok!","Standardflag"));
 23.1377 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1378  	standardFlagsDefault->addFlag (fo);	
 23.1379  
 23.1380  	fo->load(QPixmap(flagsPath+"flag-stopsign.png"));
 23.1381  	fo->setName("stopsign");
 23.1382 -	fo->setToolTip(tr("This won't work!","Standardflag"));
 23.1383 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1384 +	tb->addAction (a);
 23.1385 +	fo->setAction (a);
 23.1386 +	a->setCheckable(true);
 23.1387 +	a->setObjectName(fo->getName());
 23.1388 +	a->setToolTip(tr("This won't work!","Standardflag"));
 23.1389 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1390  	standardFlagsDefault->addFlag (fo);	
 23.1391  
 23.1392  	fo->load(QPixmap(flagsPath+"flag-smiley-good.png"));
 23.1393  	fo->setName("smiley-good");
 23.1394  	fo->setGroup("standard-smiley");
 23.1395 -	fo->setToolTip(tr("Good","Standardflag"));
 23.1396 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1397 +	tb->addAction (a);
 23.1398 +	fo->setAction (a);
 23.1399 +	a->setCheckable(true);
 23.1400 +	a->setObjectName(fo->getName());
 23.1401 +	a->setToolTip(tr("Good","Standardflag"));
 23.1402 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1403  	standardFlagsDefault->addFlag (fo);	
 23.1404  
 23.1405  	fo->load(QPixmap(flagsPath+"flag-smiley-sad.png"));
 23.1406  	fo->setName("smiley-sad");
 23.1407  	fo->setGroup("standard-smiley");
 23.1408 -	fo->setToolTip(tr("Bad","Standardflag"));
 23.1409 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1410 +	tb->addAction (a);
 23.1411 +	fo->setAction (a);
 23.1412 +	a->setCheckable(true);
 23.1413 +	a->setObjectName(fo->getName());
 23.1414 +	a->setToolTip(tr("Bad","Standardflag"));
 23.1415 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1416  	standardFlagsDefault->addFlag (fo);	
 23.1417  
 23.1418  	fo->load(QPixmap(flagsPath+"flag-smiley-omg.png"));
 23.1419  	// Original omg.png (in KDE emoticons)
 23.1420  	fo->setName("smiley-omg");
 23.1421  	fo->setGroup("standard-smiley");
 23.1422 -	fo->setToolTip(tr("Oh no!","Standardflag"));
 23.1423 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1424 +	tb->addAction (a);
 23.1425 +	fo->setAction (a);
 23.1426 +	a->setCheckable(true);
 23.1427 +	a->setObjectName(fo->getName());
 23.1428 +	a->setToolTip(tr("Oh no!","Standardflag"));
 23.1429 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1430  	standardFlagsDefault->addFlag (fo);	
 23.1431  
 23.1432  	fo->load(QPixmap(flagsPath+"flag-kalarm.png"));
 23.1433  	fo->setName("clock");
 23.1434 -	fo->setToolTip(tr("Time critical","Standardflag"));
 23.1435 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1436 +	tb->addAction (a);
 23.1437 +	fo->setAction (a);
 23.1438 +	a->setCheckable(true);
 23.1439 +	a->setObjectName(fo->getName());
 23.1440 +	a->setToolTip(tr("Time critical","Standardflag"));
 23.1441 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1442  	standardFlagsDefault->addFlag (fo);	
 23.1443  
 23.1444  	fo->load(QPixmap(flagsPath+"flag-phone.png"));
 23.1445  	fo->setName("phone");
 23.1446 -	fo->setToolTip(tr("Call...","Standardflag"));
 23.1447 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1448 +	tb->addAction (a);
 23.1449 +	fo->setAction (a);
 23.1450 +	a->setCheckable(true);
 23.1451 +	a->setObjectName(fo->getName());
 23.1452 +	a->setToolTip(tr("Call...","Standardflag"));
 23.1453 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1454  	standardFlagsDefault->addFlag (fo);	
 23.1455  
 23.1456  	fo->load(QPixmap(flagsPath+"flag-lamp.png"));
 23.1457  	fo->setName("lamp");
 23.1458 -	fo->setToolTip(tr("Idea!","Standardflag"));
 23.1459 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1460 +	tb->addAction (a);
 23.1461 +	fo->setAction (a);
 23.1462 +	a->setCheckable(true);
 23.1463 +	a->setObjectName(fo->getName());
 23.1464 +	a->setToolTip(tr("Idea!","Standardflag"));
 23.1465 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1466  	standardFlagsDefault->addFlag (fo);	
 23.1467  
 23.1468  	fo->load(QPixmap(flagsPath+"flag-arrow-up.png"));
 23.1469  	fo->setName("arrow-up");
 23.1470  	fo->setGroup("standard-arrow");
 23.1471 -	fo->setToolTip(tr("Important","Standardflag"));
 23.1472 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1473 +	tb->addAction (a);
 23.1474 +	fo->setAction (a);
 23.1475 +	a->setCheckable(true);
 23.1476 +	a->setObjectName(fo->getName());
 23.1477 +	a->setToolTip(tr("Important","Standardflag"));
 23.1478 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1479  	standardFlagsDefault->addFlag (fo);	
 23.1480  
 23.1481  	fo->load(QPixmap(flagsPath+"flag-arrow-down.png"));
 23.1482  	fo->setName("arrow-down");
 23.1483  	fo->setGroup("standard-arrow");
 23.1484 -	fo->setToolTip(tr("Unimportant","Standardflag"));
 23.1485 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1486 +	tb->addAction (a);
 23.1487 +	fo->setAction (a);
 23.1488 +	a->setCheckable(true);
 23.1489 +	a->setObjectName(fo->getName());
 23.1490 +	a->setToolTip(tr("Unimportant","Standardflag"));
 23.1491 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1492  	standardFlagsDefault->addFlag (fo);	
 23.1493  
 23.1494  	fo->load(QPixmap(flagsPath+"flag-arrow-2up.png"));
 23.1495  	fo->setName("2arrow-up");
 23.1496  	fo->setGroup("standard-arrow");
 23.1497 -	fo->setToolTip(tr("Very important!","Standardflag"));
 23.1498 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1499 +	tb->addAction (a);
 23.1500 +	fo->setAction (a);
 23.1501 +	a->setCheckable(true);
 23.1502 +	a->setObjectName(fo->getName());
 23.1503 +	a->setToolTip(tr("Very important!","Standardflag"));
 23.1504 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1505  	standardFlagsDefault->addFlag (fo);	
 23.1506  
 23.1507  	fo->load(QPixmap(flagsPath+"flag-arrow-2down.png"));
 23.1508  	fo->setName("2arrow-down");
 23.1509  	fo->setGroup("standard-arrow");
 23.1510 -	fo->setToolTip(tr("Very unimportant!","Standardflag"));
 23.1511 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1512 +	tb->addAction (a);
 23.1513 +	fo->setAction (a);
 23.1514 +	a->setCheckable(true);
 23.1515 +	a->setObjectName(fo->getName());
 23.1516 +	a->setToolTip(tr("Very unimportant!","Standardflag"));
 23.1517 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1518  	standardFlagsDefault->addFlag (fo);	
 23.1519  
 23.1520  	fo->load(QPixmap(flagsPath+"flag-thumb-up.png"));
 23.1521  	fo->setName("thumb-up");
 23.1522  	fo->setGroup("standard-thumb");
 23.1523 -	fo->setToolTip(tr("I like this","Standardflag"));
 23.1524 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1525 +	tb->addAction (a);
 23.1526 +	fo->setAction (a);
 23.1527 +	a->setCheckable(true);
 23.1528 +	a->setObjectName(fo->getName());
 23.1529 +	a->setToolTip(tr("I like this","Standardflag"));
 23.1530 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1531  	standardFlagsDefault->addFlag (fo);	
 23.1532  
 23.1533  	fo->load(QPixmap(flagsPath+"flag-thumb-down.png"));
 23.1534  	fo->setName("thumb-down");
 23.1535  	fo->setGroup("standard-thumb");
 23.1536 -	fo->setToolTip(tr("I like this","Standardflag"));
 23.1537 -	fo->setToolTip(tr("I do not like this","Standardflag"));
 23.1538 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1539 +	tb->addAction (a);
 23.1540 +	fo->setAction (a);
 23.1541 +	a->setCheckable(true);
 23.1542 +	a->setObjectName(fo->getName());
 23.1543 +	a->setToolTip(tr("I do not like this","Standardflag"));
 23.1544 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1545  	standardFlagsDefault->addFlag (fo);	
 23.1546  	
 23.1547  	fo->load(QPixmap(flagsPath+"flag-rose.png"));
 23.1548  	fo->setName("rose");
 23.1549 -	fo->setToolTip(tr("Rose","Standardflag"));
 23.1550 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1551 +	tb->addAction (a);
 23.1552 +	fo->setAction (a);
 23.1553 +	a->setCheckable(true);
 23.1554 +	a->setObjectName(fo->getName());
 23.1555 +	a->setToolTip(tr("Rose","Standardflag"));
 23.1556 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1557  	standardFlagsDefault->addFlag (fo);	
 23.1558  
 23.1559  	fo->load(QPixmap(flagsPath+"flag-heart.png"));
 23.1560  	fo->setName("heart");
 23.1561 -	fo->setToolTip(tr("I just love... ","Standardflag"));
 23.1562 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1563 +	tb->addAction (a);
 23.1564 +	a->setCheckable(true);
 23.1565 +	a->setObjectName(fo->getName());
 23.1566 +	a->setToolTip(tr("I just love... ","Standardflag"));
 23.1567 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1568  	standardFlagsDefault->addFlag (fo);	
 23.1569  
 23.1570  	fo->load(QPixmap(flagsPath+"flag-present.png"));
 23.1571  	fo->setName("present");
 23.1572 -	fo->setToolTip(tr("Surprise!","Standardflag"));
 23.1573 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1574 +	tb->addAction (a);
 23.1575 +	fo->setAction (a);
 23.1576 +	a->setCheckable(true);
 23.1577 +	a->setObjectName(fo->getName());
 23.1578 +	a->setToolTip(tr("Surprise!","Standardflag"));
 23.1579 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1580  	standardFlagsDefault->addFlag (fo);	
 23.1581  
 23.1582  	fo->load(QPixmap(flagsPath+"flag-flash.png"));
 23.1583  	fo->setName("flash");
 23.1584 -	fo->setToolTip(tr("Dangerous","Standardflag"));
 23.1585 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1586 +	tb->addAction (a);
 23.1587 +	fo->setAction (a);
 23.1588 +	a->setCheckable(true);
 23.1589 +	a->setObjectName(fo->getName());
 23.1590 +	a->setToolTip(tr("Dangerous","Standardflag"));
 23.1591 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1592  	standardFlagsDefault->addFlag (fo);	
 23.1593  	
 23.1594  	fo->load(QPixmap(flagsPath+"flag-info.png"));
 23.1595  	// Original: xsldbg_output.png
 23.1596  	fo->setName("info");
 23.1597 -	fo->setToolTip(tr("Info","Standardflag"));
 23.1598 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1599 +	tb->addAction (a);
 23.1600 +	fo->setAction (a);
 23.1601 +	a->setCheckable(true);
 23.1602 +	a->setObjectName(fo->getName());
 23.1603 +	a->setToolTip(tr("Info","Standardflag"));
 23.1604 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1605  	standardFlagsDefault->addFlag (fo);	
 23.1606  
 23.1607  	fo->load(QPixmap(flagsPath+"flag-lifebelt.png"));
 23.1608  	// Original khelpcenter.png
 23.1609  	fo->setName("lifebelt");
 23.1610 -	fo->setToolTip(tr("This will help","Standardflag"));
 23.1611 +	a=new QAction (fo->getPixmap(),fo->getName(),this);
 23.1612 +	tb->addAction (a);
 23.1613 +	fo->setAction (a);
 23.1614 +	a->setCheckable(true);
 23.1615 +	a->setObjectName(fo->getName());
 23.1616 +	a->setToolTip(tr("This will help","Standardflag"));
 23.1617 +	connect (a, SIGNAL( triggered() ), this, SLOT( standardFlagChanged() ) );
 23.1618  	standardFlagsDefault->addFlag (fo);	
 23.1619  
 23.1620  	delete (fo);
 23.1621 -
 23.1622 -	standardFlagsDefault->makeToolbar(this, "Standard Flags");
 23.1623  }
 23.1624  
 23.1625  // Settings Actions
 23.1626  void Main::setupSettingsActions()
 23.1627  {
 23.1628 -    QPopupMenu *menu = new QPopupMenu( this );
 23.1629 -    menuBar()->insertItem( tr( "&Settings" ), menu );
 23.1630 +    QMenu *settingsMenu = menuBar()->addMenu( tr( "&Settings" ));
 23.1631  
 23.1632  	QAction *a;
 23.1633  
 23.1634 -
 23.1635 -    a = new QAction( tr( "Set application to open pdf files"), QPixmap(), tr( "Set application to open pdf files  ...") , 0, this, "setPDF" );
 23.1636 -    connect( a, SIGNAL( activated() ), this, SLOT( settingsPDF() ) );
 23.1637 -    a->addTo( menu );
 23.1638 -
 23.1639 -    a = new QAction( tr( "Set application to open external links"), QPixmap(), tr( "Set application to open external links..."), 0, this, "setURL" );
 23.1640 -    connect( a, SIGNAL( activated() ), this, SLOT( settingsURL() ) );
 23.1641 -    a->addTo( menu );
 23.1642 -
 23.1643 -    menu->insertSeparator();
 23.1644 -    a = new QAction( tr( "Edit branch after adding it" ), QPixmap(), tr( "Edit branch after adding it" ), 0, this, "autoedit" );
 23.1645 +    a = new QAction( tr( "Set application to open pdf files"), this);
 23.1646 +    a->setStatusTip ( tr( "Set application to open pdf files"));
 23.1647 +    connect( a, SIGNAL( triggered() ), this, SLOT( settingsPDF() ) );
 23.1648 +	settingsMenu->addAction (a);
 23.1649 +
 23.1650 +    a = new QAction( tr( "Set application to open external links"), this);
 23.1651 +    a->setStatusTip( tr( "Set application to open external links"));
 23.1652 +    connect( a, SIGNAL( triggered() ), this, SLOT( settingsURL() ) );
 23.1653 +	settingsMenu->addAction (a);
 23.1654 +
 23.1655 +	settingsMenu->addSeparator();
 23.1656 +    a = new QAction( tr( "Edit branch after adding it" ), this );
 23.1657 +    a->setStatusTip( tr( "Edit branch after adding it" ));
 23.1658  	a->setToggleAction(true);
 23.1659 -	a->setOn ( settings.readBoolEntry ("/vym/mapeditor/editmode/autoedit",true) );
 23.1660 -    a->addTo( menu );
 23.1661 +	a->setOn ( settings.value ("/mapeditor/editmode/autoEdit",true).toBool());
 23.1662 +	settingsMenu->addAction (a);
 23.1663  	actionSettingsAutoedit=a;
 23.1664  
 23.1665 -    a= new QAction( tr( "Select branch after adding it" ), QPixmap(), tr( "Select branch after adding it" ), 0, this, "autoselectheading" );
 23.1666 +    a= new QAction( tr( "Select branch after adding it" ), this );
 23.1667 +    a->setStatusTip( tr( "Select branch after adding it" ));
 23.1668  	a->setToggleAction(true);
 23.1669 -	a->setOn ( settings.readBoolEntry ("/vym/mapeditor/editmode/autoselect",false) );
 23.1670 -    a->addTo( menu );
 23.1671 +	a->setOn ( settings.value ("/mapeditor/editmode/autoSelectHeading",false).toBool() );
 23.1672 +	settingsMenu->addAction (a);
 23.1673  	actionSettingsAutoselectHeading=a;
 23.1674  	
 23.1675 -    a= new QAction( tr( "Select heading before editing" ), QPixmap(), tr( "Select existing heading" ), 0, this, "autoselectexistingtext" );
 23.1676 +    a= new QAction(tr( "Select existing heading" ), this);
 23.1677 +    a->setStatusTip( tr( "Select heading before editing" ));
 23.1678  	a->setToggleAction(true);
 23.1679 -	a->setOn ( settings.readBoolEntry ("/vym/mapeditor/editmode/autoselectexistingtext",true) );
 23.1680 -    a->addTo( menu );
 23.1681 +	a->setOn ( settings.value ("/mapeditor/editmode/autoSelectText",true).toBool() );
 23.1682 +	settingsMenu->addAction (a);
 23.1683  	actionSettingsAutoselectText=a;
 23.1684  	
 23.1685 -    a= new QAction( tr( "Pasting into new branch" ), QPixmap(), tr( "pasting into new branch" ), 0, this, "pastenewheading" );
 23.1686 +    a= new QAction( tr( "Delete key" ), this);
 23.1687 +    a->setStatusTip( tr( "Delete key for deleting branches" ));
 23.1688  	a->setToggleAction(true);
 23.1689 -	a->setOn ( settings.readBoolEntry ("/vym/mapeditor/editmode/newheadingisempty",true) );
 23.1690 -    a->addTo( menu );
 23.1691 -	actionSettingsPasteNewHeading=a;
 23.1692 -	
 23.1693 -    a= new QAction( tr( "Delete key for deleting branches" ), QPixmap(), tr( "Delete key" ), 0, this, "delkey" );
 23.1694 +	a->setOn ( settings.value ("/mapeditor/editmode/useDelKey",false).toBool() );
 23.1695 +	settingsMenu->addAction (a);
 23.1696 +    connect( a, SIGNAL( triggered() ), this, SLOT( settingsToggleDelKey() ) );
 23.1697 +	actionSettingsUseDelKey=a;
 23.1698 +
 23.1699 +    a= new QAction( tr( "Exclusive flags" ), this);
 23.1700 +    a->setStatusTip( tr( "Use exclusive flags in flag toolbars" ));
 23.1701  	a->setToggleAction(true);
 23.1702 -	a->setOn ( settings.readBoolEntry ("/vym/mapeditor/editmode/useDelKey",false) );
 23.1703 -    a->addTo( menu );
 23.1704 -    connect( a, SIGNAL( activated() ), this, SLOT( settingsToggleDelKey() ) );
 23.1705 -	actionSettingsUseDelKey=a;
 23.1706 -
 23.1707 -    a= new QAction( tr( "Use exclusive flags in flag toolbars" ), QPixmap(), tr( "Exclusive flags" ), 0, this, "flaggroups" );
 23.1708 -	a->setToggleAction(true);
 23.1709 -	a->setOn ( settings.readBoolEntry ("/vym/mapeditor/editmode/useFlagGroups",true) );
 23.1710 -    a->addTo( menu );
 23.1711 +	a->setOn ( settings.value ("/mapeditor/editmode/useFlagGroups",true).toBool() );
 23.1712 +	settingsMenu->addAction (a);
 23.1713  	actionSettingsUseFlagGroups=a;
 23.1714  	
 23.1715 -    a= new QAction( tr( "Use hide flag during exports " ), QPixmap(), tr( "Use hide flags" ), 0, this, "hideexport" );
 23.1716 +    a= new QAction( tr( "Use hide flags" ), this);
 23.1717 +    a->setStatusTip( tr( "Use hide flag during exports " ));
 23.1718  	a->setToggleAction(true);
 23.1719 -	a->setOn ( settings.readBoolEntry ("/vym/export/useHideExport",true) );
 23.1720 -    a->addTo( menu );
 23.1721 +	a->setOn ( settings.value ("/export/useHideExport",true).toBool() );
 23.1722 +	settingsMenu->addAction (a);
 23.1723  	actionSettingsUseHideExport=a;
 23.1724  }
 23.1725  
 23.1726  // Test Actions
 23.1727  void Main::setupTestActions()
 23.1728  {
 23.1729 -    QPopupMenu *menu = new QPopupMenu( this );
 23.1730 -    menuBar()->insertItem( tr( "&Test" ), menu );
 23.1731 +    QMenu *testMenu = menuBar()->addMenu( tr( "&Test" ));
 23.1732  
 23.1733      QAction *a;
 23.1734 -    a = new QAction( tr( "Call test function" ), QPixmap(), tr( "test flag" ), 0, this, "flag" );
 23.1735 -    connect( a, SIGNAL( activated() ), this, SLOT( testFunction() ) );
 23.1736 -    a->addTo( menu );
 23.1737 +    a = new QAction( tr( "test flag" ), this);
 23.1738 +    a->setStatusTip( tr( "Call test function" ));
 23.1739 +    connect( a, SIGNAL( triggered() ), this, SLOT( testFunction() ) );
 23.1740 +	testMenu->addAction (a);
 23.1741  }
 23.1742  
 23.1743  // Help Actions
 23.1744  void Main::setupHelpActions()
 23.1745  {
 23.1746 -    QPopupMenu *menu = new QPopupMenu( this );
 23.1747 -    menuBar()->insertItem( tr( "&Help" ), menu );
 23.1748 +    QMenu *helpMenu = menuBar()->addMenu ( tr( "&Help" ));
 23.1749  
 23.1750      QAction *a;
 23.1751 -    a = new QAction( tr( "Open VYM Documentation (pdf)" ), QPixmap(), tr( "Open VYM Documentation (pdf) " ), 0, this, "about" );
 23.1752 -    connect( a, SIGNAL( activated() ), this, SLOT( helpDoc() ) );
 23.1753 -    a->addTo( menu );
 23.1754 -
 23.1755 -    a = new QAction( tr( "About VYM")+" "__VYM, QPixmap(), tr( "About VYM" ), 0, this, "about" );
 23.1756 -    connect( a, SIGNAL( activated() ), this, SLOT( helpAbout() ) );
 23.1757 -    a->addTo( menu );
 23.1758 -
 23.1759 -    a = new QAction( tr( "Information about QT toolkit" ), QPixmap(), tr( "About QT" ), 0, this, "about" );
 23.1760 -    connect( a, SIGNAL( activated() ), this, SLOT( helpAboutQT() ) );
 23.1761 -    a->addTo( menu );
 23.1762 +    a = new QAction(  tr( "Open VYM Documentation (pdf) " ), this );
 23.1763 +    a->setStatusTip( tr( "Open VYM Documentation (pdf)" ));
 23.1764 +    connect( a, SIGNAL( triggered() ), this, SLOT( helpDoc() ) );
 23.1765 +	helpMenu->addAction (a);
 23.1766 +
 23.1767 +    a = new QAction( tr( "About VYM" ), this);
 23.1768 +    a->setStatusTip( tr( "About VYM")+" "__VYM);
 23.1769 +    connect( a, SIGNAL( triggered() ), this, SLOT( helpAbout() ) );
 23.1770 +	helpMenu->addAction (a);
 23.1771 +
 23.1772 +    a = new QAction( tr( "About QT" ), this);
 23.1773 +    a->setStatusTip( tr( "Information about QT toolkit" ));
 23.1774 +    connect( a, SIGNAL( triggered() ), this, SLOT( helpAboutQT() ) );
 23.1775 +	helpMenu->addAction (a);
 23.1776  }
 23.1777  
 23.1778  // Context Menus
 23.1779 @@ -1131,130 +1512,87 @@
 23.1780  	QAction*a;
 23.1781  
 23.1782  	// Context Menu for branch or mapcenter
 23.1783 -	branchContextMenu =new QPopupMenu (this);
 23.1784 +	branchContextMenu =new QMenu (this);
 23.1785  
 23.1786  		// Submenu "Add"
 23.1787 -		branchAddContextMenu =new QPopupMenu (this);
 23.1788 -		actionEditPaste->addTo ( branchAddContextMenu );
 23.1789 -		actionEditAddBranch->addTo ( branchAddContextMenu );
 23.1790 -		actionEditAddBranchHere->addTo ( branchAddContextMenu );
 23.1791 -		actionEditAddBranchAbove->addTo ( branchAddContextMenu );
 23.1792 -		actionEditAddBranchBelow->addTo ( branchAddContextMenu );
 23.1793 -		branchAddContextMenu->insertSeparator();	
 23.1794 -		actionEditLoadImage->addTo( branchAddContextMenu );
 23.1795 -		branchAddContextMenu->insertSeparator();	
 23.1796 -		actionEditImportAdd->addTo ( branchAddContextMenu );
 23.1797 -		actionEditImportReplace->addTo ( branchAddContextMenu );
 23.1798 +		branchAddContextMenu =branchContextMenu->addMenu (tr("Add"));
 23.1799 +		branchAddContextMenu->addAction (actionEditPaste );
 23.1800 +		branchAddContextMenu->addAction ( actionEditAddBranch );
 23.1801 +		branchAddContextMenu->addAction ( actionEditAddBranchHere );
 23.1802 +		branchAddContextMenu->addAction ( actionEditAddBranchAbove);
 23.1803 +		branchAddContextMenu->addAction ( actionEditAddBranchBelow );
 23.1804 +		branchAddContextMenu->addSeparator();	
 23.1805 +		branchAddContextMenu->addAction ( actionEditLoadImage);
 23.1806 +		branchAddContextMenu->addSeparator();	
 23.1807 +		branchAddContextMenu->addAction ( actionEditImportAdd );
 23.1808 +		branchAddContextMenu->addAction ( actionEditImportReplace );
 23.1809  
 23.1810  		// Submenu "Remove"
 23.1811 -		branchRemoveContextMenu =new QPopupMenu (this);
 23.1812 -		actionEditCut->addTo ( branchRemoveContextMenu );
 23.1813 -		actionEditDelete->addTo ( branchRemoveContextMenu );
 23.1814 -		actionEditRemoveBranchKeepChilds->addTo( branchRemoveContextMenu );
 23.1815 -		actionEditRemoveChilds->addTo( branchRemoveContextMenu );
 23.1816 +		branchRemoveContextMenu =branchContextMenu->addMenu (tr ("Remove"));
 23.1817 +		branchRemoveContextMenu->addAction (actionEditCut);
 23.1818 +		branchRemoveContextMenu->addAction ( actionEditDelete );
 23.1819 +		branchRemoveContextMenu->addAction ( actionEditRemoveBranchKeepChilds );
 23.1820 +		branchRemoveContextMenu->addAction ( actionEditRemoveChilds );
 23.1821  		
 23.1822 -	branchContextMenu->insertItem (tr("Add"),branchAddContextMenu);	
 23.1823 -	branchContextMenu->insertItem (tr("Remove"),branchRemoveContextMenu);	
 23.1824  
 23.1825  	actionEditSaveBranch->addTo( branchContextMenu );
 23.1826  
 23.1827 -	branchContextMenu->insertSeparator();	
 23.1828 -	actionEditOpenURL->addTo ( branchContextMenu );
 23.1829 -	actionEditOpenURLTab->addTo ( branchContextMenu );
 23.1830 -	actionEditURL->addTo ( branchContextMenu );
 23.1831 -	actionEditHeading2URL->addTo ( branchContextMenu );
 23.1832 -	actionEditBugzilla2URL->addTo( branchContextMenu );
 23.1833 -    if (settings.readBoolEntry( "/vym/mainwindow/showTestMenu",false)) 
 23.1834 -	{
 23.1835 -		actionEditFATE2URL->addTo( branchContextMenu );
 23.1836 -	}	
 23.1837 -	branchContextMenu->insertSeparator();	
 23.1838 -	actionEditOpenVymLink->addTo ( branchContextMenu );
 23.1839 -	actionEditVymLink->addTo ( branchContextMenu );
 23.1840 -	actionEditDeleteVymLink->addTo ( branchContextMenu );
 23.1841 -	
 23.1842 -	branchContextMenu->insertSeparator();	
 23.1843 -	actionGroupFormatFrameTypes->addTo( branchContextMenu );
 23.1844 -
 23.1845 -	branchContextMenu->insertSeparator();	
 23.1846 -	actionFormatIncludeImagesVer->addTo( branchContextMenu );
 23.1847 -	actionFormatIncludeImagesHor->addTo( branchContextMenu );
 23.1848 -	actionFormatHideLinkUnselected->addTo( branchContextMenu );
 23.1849 -
 23.1850 -	// Context Menu for links in a branch menu
 23.1851 +	branchContextMenu->addSeparator();	
 23.1852 +	branchContextMenu->addAction ( actionFormatFrameNone );
 23.1853 +	branchContextMenu->addAction ( actionFormatFrameRectangle);
 23.1854 +
 23.1855 +	branchContextMenu->addSeparator();	
 23.1856 +	branchContextMenu->addAction ( actionFormatIncludeImagesVer );
 23.1857 +	branchContextMenu->addAction ( actionFormatIncludeImagesHor );
 23.1858 +	branchContextMenu->addAction ( actionFormatHideLinkUnselected );
 23.1859 +
 23.1860 +	// Submenu for Links (URLs, vymLinks)
 23.1861 +	branchLinksContextMenu =new QMenu (this);
 23.1862 +
 23.1863 +		branchContextMenu->addSeparator();	
 23.1864 +		branchLinksContextMenu=branchContextMenu->addMenu(tr("URLs and vymLinks"));	
 23.1865 +		branchLinksContextMenu->addAction ( actionEditOpenURL );
 23.1866 +		branchLinksContextMenu->addAction ( actionEditOpenURLTab );
 23.1867 +		branchLinksContextMenu->addAction ( actionEditOpenMultipleURLTabs );
 23.1868 +		branchLinksContextMenu->addAction ( actionEditURL );
 23.1869 +		branchLinksContextMenu->addAction ( actionEditHeading2URL );
 23.1870 +		branchLinksContextMenu->addAction ( actionEditBugzilla2URL );
 23.1871 +		if (settings.value( "/mainwindow/showTestMenu",true).toBool() )
 23.1872 +		{
 23.1873 +			branchLinksContextMenu->addAction ( actionEditFATE2URL );
 23.1874 +		}	
 23.1875 +		branchLinksContextMenu->addSeparator();	
 23.1876 +		branchLinksContextMenu->addAction ( actionEditOpenVymLink );
 23.1877 +		branchLinksContextMenu->addAction ( actionEditOpenMultipleVymLinks );
 23.1878 +		branchLinksContextMenu->addAction ( actionEditVymLink );
 23.1879 +		branchLinksContextMenu->addAction ( actionEditDeleteVymLink );
 23.1880 +		
 23.1881 +
 23.1882 +	// Context Menu for XLinks in a branch menu
 23.1883  	// This will be populated "on demand" in MapEditor::updateActions
 23.1884 -	branchContextMenu->insertSeparator();	
 23.1885 -	branchLinksContextMenu =new QPopupMenu (this);
 23.1886 -	branchLinksContextMenuDup =new QPopupMenu (this);
 23.1887 -	branchContextMenu->insertItem (tr("Edit XLink"),branchLinksContextMenuDup);
 23.1888 -	connect( branchLinksContextMenuDup, SIGNAL( activated(int) ), this, SLOT( editEditXLink(int ) ) );
 23.1889 -
 23.1890 -	branchContextMenu->insertItem (tr("Goto XLink"),branchLinksContextMenu);
 23.1891 -	connect( branchLinksContextMenu, SIGNAL( activated(int) ), this, SLOT( editFollowXLink(int ) ) );
 23.1892 +	branchContextMenu->addSeparator();	
 23.1893 +	branchXLinksContextMenuEdit =branchContextMenu->addMenu (tr ("Edit XLink"));
 23.1894 +	branchXLinksContextMenuFollow =branchContextMenu->addMenu (tr ("Follow XLink"));
 23.1895 +	connect( branchXLinksContextMenuFollow, SIGNAL( triggered(QAction *) ), this, SLOT( editFollowXLink(QAction * ) ) );
 23.1896 +	connect( branchXLinksContextMenuEdit, SIGNAL( triggered(QAction *) ), this, SLOT( editEditXLink(QAction * ) ) );
 23.1897 + 	
 23.1898  	
 23.1899  	// Context menu for floatimage
 23.1900 -	floatimageContextMenu =new QPopupMenu (this);
 23.1901 -	saveImageFormatMenu=new QPopupMenu (this);
 23.1902 -	exportImageFormatMenu=new QPopupMenu (this);
 23.1903 -
 23.1904 -	QStrList fmt = QImage::outputFormats();
 23.1905 -	for (const char* f = fmt.first(); f; f = fmt.next()) 
 23.1906 -	{
 23.1907 -		saveImageFormatMenu->insertItem( f );
 23.1908 -		exportImageFormatMenu->insertItem( f );
 23.1909 -	}	
 23.1910 -	connect( saveImageFormatMenu, SIGNAL( activated(int) ), this, SLOT( editSaveImage(int ) ) );
 23.1911 -	connect( exportImageFormatMenu, SIGNAL( activated(int) ), this, SLOT( fileExportImage(int ) ) );
 23.1912 -	floatimageContextMenu->insertItem( tr("Save image"),saveImageFormatMenu );
 23.1913 -	
 23.1914 -	floatimageContextMenu->insertSeparator();	
 23.1915 +	floatimageContextMenu =new QMenu (this);
 23.1916 +	a= new QAction (tr ("Save image"),this);
 23.1917 +	connect (a, SIGNAL (triggered()), this, SLOT (editSaveImage()));
 23.1918 +	floatimageContextMenu->addAction (a);
 23.1919 +
 23.1920 +	floatimageContextMenu->addSeparator();	
 23.1921  	actionEditCopy->addTo( floatimageContextMenu );
 23.1922  	actionEditCut->addTo( floatimageContextMenu );
 23.1923  
 23.1924 -/* FIXME not needed any longer
 23.1925 -	floatimageContextMenu->insertSeparator();	
 23.1926 -    a = new QAction( tr( "Use for Export" ), QPixmap(), tr( "Use for Export"), 0, this, "useForExport" );
 23.1927 -	a->setToggleAction(true);
 23.1928 -    connect( a, SIGNAL( activated() ), this, SLOT( editToggleFloatExport() ) );
 23.1929 -    a->addTo( floatimageContextMenu);
 23.1930 -	actionEditToggleFloatExport=a;
 23.1931 -	*/
 23.1932 -
 23.1933 -	floatimageContextMenu->insertSeparator();	
 23.1934 -	actionFormatHideLinkUnselected->addTo( floatimageContextMenu );
 23.1935 -
 23.1936 -	exportMenu->insertItem ( tr("Export as")+" Image",exportImageFormatMenu);
 23.1937 -
 23.1938 -	a = new QAction( tr( "Export in Open Document Format used e.g. in Open Office " ), QPixmap(), "Open Office"+QString("..."), 0, this, "exportOOPresentation" );
 23.1939 -	connect( a, SIGNAL( activated() ), this, SLOT( fileExportOOPresentation() ) );
 23.1940 -	a->addTo (exportMenu);
 23.1941 -
 23.1942 -	a = new QAction( tr( "Export as")+" webpage (XHTML)" , QPixmap(), "Webpage (XHTML)...", ALT + Key_X, this, "exportXHTML" );
 23.1943 -    connect( a, SIGNAL( activated() ), this, SLOT( fileExportXHTML() ) );
 23.1944 -    a->addTo( exportMenu );
 23.1945 -
 23.1946 -    a = new QAction( tr( "Export as")+" ASCII"+" "+tr("(still experimental)" ), QPixmap(), "Text (ASCII)...", 0, this, "exportASCII" );
 23.1947 -    connect( a, SIGNAL( activated() ), this, SLOT( fileExportASCII() ) );
 23.1948 -	a->addTo( exportMenu );
 23.1949 -
 23.1950 -	a = new QAction( tr( "Export as")+" "+tr("KDE Bookmarks" ), QPixmap(), tr("KDE Bookmarks"), 0, this, "importKDEBookmarks" );
 23.1951 -	connect( a, SIGNAL( activated() ), this, SLOT( fileExportKDEBookmarks() ) );
 23.1952 -	a->addTo (exportMenu);
 23.1953 -
 23.1954 -    a = new QAction( tr( "Export as")+" Taskjuggler"+" "+tr("(still experimental)" ), QPixmap(), "Taskjuggler...", 0, this, "exportTJ" );
 23.1955 -    connect( a, SIGNAL( activated() ), this, SLOT( fileExportTaskjuggler() ) );
 23.1956 -	a->addTo( exportMenu );
 23.1957 -
 23.1958 -    a = new QAction( tr( "Export as")+" LaTeX"+" "+tr("(still experimental)" ), QPixmap(), "LaTeX...", 0, this, "exportLaTeX" );
 23.1959 -    connect( a, SIGNAL( activated() ), this, SLOT( fileExportLaTeX() ) );
 23.1960 -	a->addTo( exportMenu );
 23.1961 -
 23.1962 -	a = new QAction( tr( "Export as")+" XML" , QPixmap(), "XML...",  0, this, "exportXML" );
 23.1963 -    connect( a, SIGNAL( activated() ), this, SLOT( fileExportXML() ) );
 23.1964 -    a->addTo( exportMenu );
 23.1965 +	floatimageContextMenu->addSeparator();	
 23.1966 +	floatimageContextMenu->addAction ( actionFormatHideLinkUnselected );
 23.1967 +
 23.1968  	
 23.1969  	// Context menu for canvas
 23.1970 -	canvasContextMenu =new QPopupMenu (this);
 23.1971 +	canvasContextMenu =new QMenu (this);
 23.1972  	actionEditMapInfo->addTo( canvasContextMenu );
 23.1973  	canvasContextMenu->insertSeparator();	
 23.1974  	actionGroupFormatLinkStyles->addTo( canvasContextMenu );
 23.1975 @@ -1266,15 +1604,15 @@
 23.1976  	// Menu for last opened files
 23.1977  	// Read settings initially
 23.1978  	QString s;
 23.1979 -	int j=settings.readNumEntry( "/vym/lastMaps/number",0);
 23.1980 +	int j=settings.readNumEntry( "/lastMaps/number",0);
 23.1981  	for (int i=1;i<=j;i++)
 23.1982  	{
 23.1983 -		s=settings.readEntry(QString("/vym/lastMaps/map-%1").arg(i),"");
 23.1984 +		s=settings.value(QString("/lastMaps/map-%1").arg(i),"").toString();
 23.1985  		if (!s.isEmpty() && j<=maxLastMaps) 
 23.1986  			lastMaps.append(s);
 23.1987  	}
 23.1988  	setupLastMapsMenu();
 23.1989 -	connect( lastMapsMenu, SIGNAL( activated(int) ), this, SLOT( fileLoadLast(int ) ) );
 23.1990 +	connect( fileLastMapsMenu, SIGNAL( triggered(QAction *) ), this, SLOT( fileLoadLast(QAction*) ) );
 23.1991  }
 23.1992  
 23.1993  void Main::setupLastMapsMenu()
 23.1994 @@ -1300,10 +1638,9 @@
 23.1995  	while ((int)(lastMaps.count()) > maxLastMaps) lastMaps.pop_back();
 23.1996  	
 23.1997  	// build Menu from lastMaps string list
 23.1998 -	lastMapsMenu->clear();
 23.1999 +	fileLastMapsMenu->clear();
 23.2000  	for (it = lastMaps.begin(); it != lastMaps.end(); ++it ) 
 23.2001 -		lastMapsMenu->insertItem (*it );
 23.2002 -		
 23.2003 +		fileLastMapsMenu->addAction (*it );
 23.2004  }
 23.2005  
 23.2006  void Main::hideEvent (QHideEvent * )
 23.2007 @@ -1347,8 +1684,8 @@
 23.2008  
 23.2009  QString Main::browseDirectory (const QString &caption)
 23.2010  {
 23.2011 -	QFileDialog fd(this,caption);
 23.2012 -	fd.setMode (QFileDialog::DirectoryOnly);
 23.2013 +	Q3FileDialog fd(this,caption);
 23.2014 +	fd.setMode (Q3FileDialog::DirectoryOnly);
 23.2015  	fd.setCaption(__VYM " - "+caption);
 23.2016  	fd.show();
 23.2017  	
 23.2018 @@ -1370,7 +1707,7 @@
 23.2019  void Main::newView() 
 23.2020  {
 23.2021      // Open a new view... have it delete when closed.
 23.2022 -    Main *m = new Main(0, 0, WDestructiveClose);
 23.2023 +    Main *m = new Main(0, 0, Qt::WDestructiveClose);
 23.2024      qApp->setMainWidget(m);
 23.2025      m->show();
 23.2026      qApp->setMainWidget(0);
 23.2027 @@ -1397,12 +1734,12 @@
 23.2028  void Main::fileNew()
 23.2029  {
 23.2030  	QString fn="unnamed";
 23.2031 -	MapEditor* medit = new MapEditor (tabWidget, true);
 23.2032 +	MapEditor* medit = new MapEditor ( NULL,true);
 23.2033  	tabWidget->addTab (medit,fn);
 23.2034  	tabWidget->showPage(medit);
 23.2035  	medit->viewport()->setFocus();
 23.2036 -		// For the very first map we do not have flagrows yet...
 23.2037 -		medit->select("mc:");
 23.2038 +	// For the very first map we do not have flagrows yet...
 23.2039 +	medit->select("mc:");
 23.2040  }
 23.2041  
 23.2042  ErrorCode Main::fileLoad(QString fn, const LoadMode &lmode)
 23.2043 @@ -1435,7 +1772,7 @@
 23.2044  					QMessageBox::Warning,
 23.2045  					QMessageBox::Yes | QMessageBox::Default,
 23.2046  					QMessageBox::Cancel | QMessageBox::Escape,
 23.2047 -					QMessageBox::QMessageBox::NoButton);
 23.2048 +					QMessageBox::NoButton);
 23.2049  				mb.setButtonText( QMessageBox::Yes, tr("Open anyway") );
 23.2050  				mb.setButtonText( QMessageBox::Cancel, tr("Cancel"));
 23.2051  				switch( mb.exec() ) 
 23.2052 @@ -1465,7 +1802,7 @@
 23.2053  		// create a new mapeditor in a new tab
 23.2054  		if ( lmode==NewMap && (!me || !me->isDefault() ) )
 23.2055  		{
 23.2056 -			me = new MapEditor (tabWidget,true);
 23.2057 +			me= new MapEditor ( NULL,true);
 23.2058  			tabWidget->addTab (me,fn);
 23.2059  			tabIndex=tabWidget->indexOf (me);
 23.2060  			tabWidget->setCurrentPage (tabIndex);
 23.2061 @@ -1480,7 +1817,7 @@
 23.2062  				QMessageBox::Question,
 23.2063  				QMessageBox::Yes ,
 23.2064  				QMessageBox::Cancel | QMessageBox::Default,
 23.2065 -				QMessageBox::QMessageBox::NoButton );
 23.2066 +				QMessageBox::NoButton );
 23.2067  
 23.2068  			mb.setButtonText( QMessageBox::Yes, tr("Create"));
 23.2069  			mb.setButtonText( QMessageBox::No, tr("Cancel"));
 23.2070 @@ -1603,10 +1940,9 @@
 23.2071  
 23.2072  void Main::fileLoad(const LoadMode &lmode)
 23.2073  {
 23.2074 -	QFileDialog *fd=new QFileDialog( this);
 23.2075 -	if (!lastFileDir.isEmpty()) 
 23.2076 -		fd->setDir (lastFileDir);
 23.2077 -	fd->setMode (QFileDialog::ExistingFiles);
 23.2078 +	Q3FileDialog *fd=new Q3FileDialog( this);
 23.2079 +	fd->setDir (lastFileDir);
 23.2080 +	fd->setMode (Q3FileDialog::ExistingFiles);
 23.2081  	fd->addFilter ("XML (*.xml)");
 23.2082  	fd->addFilter ("VYM map (*.vym *.vyp)");
 23.2083  	switch (lmode)
 23.2084 @@ -1644,9 +1980,9 @@
 23.2085  	fileLoad (NewMap);
 23.2086  }
 23.2087  
 23.2088 -void Main::fileLoadLast(int i)
 23.2089 +void Main::fileLoadLast(QAction *a)
 23.2090  {
 23.2091 -	fileLoad(*lastMaps.at(lastMapsMenu->indexOf (i) ),NewMap);			   
 23.2092 +	fileLoad(lastMaps.at(fileLastMapsMenu->actions().indexOf(a)) ,NewMap);
 23.2093  }
 23.2094  
 23.2095  void Main::fileSave(const SaveMode &savemode)
 23.2096 @@ -1770,9 +2106,9 @@
 23.2097  	if (currentMapEditor())
 23.2098  	{
 23.2099  		if (savemode==CompleteMap)
 23.2100 -			fn = QFileDialog::getSaveFileName( QString::null, "VYM map (*.vym)", this );
 23.2101 +			fn = Q3FileDialog::getSaveFileName( QString::null, "VYM map (*.vym)", this );
 23.2102  		else		
 23.2103 -			fn = QFileDialog::getSaveFileName( QString::null, "VYM part of map (*.vyp)", this );
 23.2104 +			fn = Q3FileDialog::getSaveFileName( QString::null, "VYM part of map (*.vyp)", this );
 23.2105  		if ( !fn.isEmpty() ) 
 23.2106  		{
 23.2107  			// Check for existing file
 23.2108 @@ -1783,7 +2119,7 @@
 23.2109  					QMessageBox::Warning,
 23.2110  					QMessageBox::Yes | QMessageBox::Default,
 23.2111  					QMessageBox::Cancel | QMessageBox::Escape,
 23.2112 -					QMessageBox::QMessageBox::NoButton);
 23.2113 +					QMessageBox::NoButton);
 23.2114  				mb.setButtonText( QMessageBox::Yes, tr("Overwrite") );
 23.2115  				mb.setButtonText( QMessageBox::Cancel, tr("Cancel"));
 23.2116  				switch( mb.exec() ) 
 23.2117 @@ -1842,9 +2178,9 @@
 23.2118  
 23.2119  void Main::fileImportFirefoxBookmarks()
 23.2120  {
 23.2121 -	QFileDialog *fd=new QFileDialog( this);
 23.2122 +	Q3FileDialog *fd=new Q3FileDialog( this);
 23.2123  	fd->setDir (vymBaseDir.homeDirPath()+"/.mozilla/firefox");
 23.2124 -	fd->setMode (QFileDialog::ExistingFiles);
 23.2125 +	fd->setMode (Q3FileDialog::ExistingFiles);
 23.2126  	fd->addFilter ("Firefox "+tr("Bookmarks")+" (*.html)");
 23.2127  	fd->setCaption(tr("Import")+" "+"Firefox "+tr("Bookmarks"));
 23.2128  	fd->show();
 23.2129 @@ -1871,10 +2207,9 @@
 23.2130  {
 23.2131  	ImportMM im;
 23.2132  
 23.2133 -	QFileDialog *fd=new QFileDialog( this);
 23.2134 -	if (!lastFileDir.isEmpty()) 
 23.2135 -		fd->setDir (lastFileDir);
 23.2136 -	fd->setMode (QFileDialog::ExistingFiles);
 23.2137 +	Q3FileDialog *fd=new Q3FileDialog( this);
 23.2138 +	fd->setDir (lastFileDir);
 23.2139 +	fd->setMode (Q3FileDialog::ExistingFiles);
 23.2140  	fd->addFilter ("Mind Manager (*.mmap)");
 23.2141  	fd->setCaption(tr("Import")+" "+"Mind Manager");
 23.2142  	fd->show();
 23.2143 @@ -1949,18 +2284,23 @@
 23.2144  	}	
 23.2145  }
 23.2146  
 23.2147 -void Main::fileExportImage(int item)
 23.2148 +void Main::fileExportImage()
 23.2149  {
 23.2150  	MapEditor *me=currentMapEditor();
 23.2151  	if (me)
 23.2152  	{
 23.2153 -		QString fn = QFileDialog::getSaveFileName( QString::null, "Image  (*.bmp *.jpg *.pbm *.pgm *.png *.ppm *xbm *.xpm)",
 23.2154 -							   this );
 23.2155 -		if ( !fn.isEmpty() ) 
 23.2156 -			me->exportImage(fn,item);
 23.2157 -		else 
 23.2158 -			statusBar()->message( tr("Couldn't save %1").arg(fn), statusbarTime );
 23.2159 -		
 23.2160 +		QStringList fl;
 23.2161 +		QFileDialog *fd=new QFileDialog (this);
 23.2162 +		fd->setCaption (tr("Export map as image"));
 23.2163 +		fd->setFileMode(QFileDialog::AnyFile);
 23.2164 +		fd->setFilters  (imageIO.getFilters() );
 23.2165 +		fd->setDirectory (lastImageDir);
 23.2166 +		if (fd->exec())
 23.2167 +		{
 23.2168 +			fl=fd->selectedFiles();
 23.2169 +			qWarning ("Selected "+fl.first()+"  filter: "+fd->selectedFilter());
 23.2170 +			me->exportImage (fl.first(), imageIO.getType (fd->selectedFilter() ) );
 23.2171 +		} 
 23.2172  	}
 23.2173  }
 23.2174  
 23.2175 @@ -2032,13 +2372,13 @@
 23.2176  void Main::fileExportOOPresentation()
 23.2177  {
 23.2178  	ExportOOFileDialog *fd=new ExportOOFileDialog( this,__VYM " - "+tr("Export to")+" Open Office");
 23.2179 -	// FIXME add extra info in dialog
 23.2180 +	// TODO add preview in dialog
 23.2181  	//ImagePreview *p =new ImagePreview (fd);
 23.2182  	//fd->setContentsPreviewEnabled( TRUE );
 23.2183  	//fd->setContentsPreview( p, p );
 23.2184  	//fd->setPreviewMode( QFileDialog::Contents );
 23.2185  	fd->setCaption(__VYM " - " +tr("Export to")+" Open Office");
 23.2186 -	//fd->setDir (lastImageDir);
 23.2187 +	fd->setDir (QDir().current());
 23.2188  	if (fd->foundConfig())
 23.2189  	{
 23.2190  		fd->show();
 23.2191 @@ -2046,6 +2386,9 @@
 23.2192  		if ( fd->exec() == QDialog::Accepted )
 23.2193  		{
 23.2194  			QString fn=fd->selectedFile();
 23.2195 +			if (!fn.contains (".odp"))
 23.2196 +				fn +=".odp";
 23.2197 +
 23.2198  			//lastImageDir=fn.left(fn.findRev ("/"));
 23.2199  			if (currentMapEditor())
 23.2200  				currentMapEditor()->exportOOPresentation(fn,fd->selectedConfig());	
 23.2201 @@ -2053,8 +2396,8 @@
 23.2202  	} else
 23.2203  	{
 23.2204  		QMessageBox::warning(0, 
 23.2205 -			tr("Warning"),
 23.2206 -			tr("Couldn't find configuration for export to Open Office\n"));
 23.2207 +		tr("Warning"),
 23.2208 +		tr("Couldn't find configuration for export to Open Office\n"));
 23.2209  	}
 23.2210  }
 23.2211  
 23.2212 @@ -2121,13 +2464,8 @@
 23.2213  				QMessageBox::Cancel | QMessageBox::Escape );
 23.2214  			mb.setButtonText( QMessageBox::Yes, tr("Save map") );
 23.2215  			mb.setButtonText( QMessageBox::No, tr("Discard changes") );
 23.2216 +			mb.setModal (true);
 23.2217  			mb.show();
 23.2218 -			// Call undocumented function: setActiveWindow is only
 23.2219 -			// possible, if widget is visible. This depends on
 23.2220 -			// windowmanager...
 23.2221 -#if defined(Q_OS_LINUX)
 23.2222 -			qt_wait_for_window_manager( this);
 23.2223 -#endif			
 23.2224  			mb.setActiveWindow();
 23.2225  			switch( mb.exec() ) {
 23.2226  				case QMessageBox::Yes:
 23.2227 @@ -2180,13 +2518,6 @@
 23.2228  {
 23.2229  	findWindow->popup();
 23.2230  	findWindow->raise();
 23.2231 -
 23.2232 -	// Call undocumented function: setActiveWindow is only
 23.2233 -	// possible, if widget is visible. This depends on
 23.2234 -	// windowmanager...
 23.2235 -#if defined(Q_OS_LINUX)
 23.2236 -	qt_wait_for_window_manager( this);
 23.2237 -#endif	
 23.2238  	findWindow->setActiveWindow();
 23.2239  }
 23.2240  
 23.2241 @@ -2209,20 +2540,86 @@
 23.2242  	currentMapEditor()->findReset();
 23.2243  }
 23.2244  
 23.2245 +void Main::openTabs(QStringList urls)
 23.2246 +{
 23.2247 +	if (!urls.isEmpty())
 23.2248 +	{	
 23.2249 +		bool success=true;
 23.2250 +		QStringList args;
 23.2251 +		QString browser=settings.value("/mainwindow/readerURL" ).toString();
 23.2252 +		QProcess *p;
 23.2253 +		if (!procBrowser ||  procBrowser->state()!=QProcess::Running)
 23.2254 +		{
 23.2255 +			QString u=urls.takeFirst();
 23.2256 +			procBrowser = new QProcess( this );
 23.2257 +			args<<u;
 23.2258 +			procBrowser->start(browser,args);
 23.2259 +			if ( !procBrowser->waitForStarted())
 23.2260 +			{
 23.2261 +				// try to set path to browser
 23.2262 +				QMessageBox::warning(0, 
 23.2263 +					tr("Warning"),
 23.2264 +					tr("Couldn't find a viewer to open %1.\n").arg(u)+
 23.2265 +					tr("Please use Settings->")+tr("Set application to open an URL"));
 23.2266 +				return;
 23.2267 +			}
 23.2268 +			sleep (3);
 23.2269 +		}
 23.2270 +		if (browser.contains("konqueror"))
 23.2271 +		{
 23.2272 +			for (int i=0; i<urls.size(); i++)
 23.2273 +			{
 23.2274 +				// Open new browser
 23.2275 +				// Try to open new tab in existing konqueror started previously by vym
 23.2276 +				p=new QProcess (this);
 23.2277 +				args.clear();
 23.2278 +				args<< QString("konqueror-%1").arg(procBrowser->pid())<< 
 23.2279 +					"konqueror-mainwindow#1"<< 
 23.2280 +					"newTab" << 
 23.2281 +					urls.at(i);
 23.2282 +				p->start ("dcop",args);
 23.2283 +				if ( !p->waitForStarted() ) success=false;
 23.2284 +			}
 23.2285 +			if (!success)
 23.2286 +				QMessageBox::warning(0, 
 23.2287 +					tr("Warning"),
 23.2288 +					tr("Couldn't start %1 to open a new tab in %2.").arg("dcop").arg("konqueror"));
 23.2289 +			return;		
 23.2290 +		} else if (browser.contains ("firefox") || browser.contains ("mozilla") )
 23.2291 +		{
 23.2292 +			for (int i=0; i<urls.size(); i++)
 23.2293 +			{
 23.2294 +				// Try to open new tab in firefox
 23.2295 +				p=new QProcess (this);
 23.2296 +				args<< "-remote"<< QString("openurl(%1,new-tab)").arg(urls.at(i));
 23.2297 +				p->start (browser,args);
 23.2298 +				if ( !p->waitForStarted() ) success=false;
 23.2299 +			}			
 23.2300 +			if (!success)
 23.2301 +				QMessageBox::warning(0, 
 23.2302 +					tr("Warning"),
 23.2303 +					tr("Couldn't start %1 to open a new tab").arg(browser));
 23.2304 +			return;		
 23.2305 +		}			
 23.2306 +		QMessageBox::warning(0, 
 23.2307 +			tr("Warning"),
 23.2308 +			tr("Sorry, currently only Konqueror and Mozilla support tabbed browsing."));
 23.2309 +	}	
 23.2310 +}
 23.2311 +
 23.2312  void Main::editOpenURL()
 23.2313  {
 23.2314  	// Open new browser
 23.2315  	if (currentMapEditor())
 23.2316  	{	
 23.2317  	    QString url=currentMapEditor()->getURL();
 23.2318 +		QStringList args;
 23.2319  		if (url=="") return;
 23.2320 -		QString browser=settings.readEntry("/vym/mainwindow/readerURL" );
 23.2321 +		QString browser=settings.value("/mainwindow/readerURL" ).toString();
 23.2322  		procBrowser = new QProcess( this );
 23.2323 -
 23.2324 -		procBrowser->addArgument( browser);
 23.2325 -		procBrowser->addArgument( url);
 23.2326 -
 23.2327 -		if ( !procBrowser->start() ) 
 23.2328 +		args<<url;
 23.2329 +		procBrowser->start(browser,args);
 23.2330 +		if ( !procBrowser->waitForStarted())
 23.2331  		{
 23.2332  			// try to set path to browser
 23.2333  			QMessageBox::warning(0, 
 23.2334 @@ -2237,45 +2634,21 @@
 23.2335  {
 23.2336  	if (currentMapEditor())
 23.2337  	{	
 23.2338 -	    QString url=currentMapEditor()->getURL();
 23.2339 -		if (url=="") return;
 23.2340 -		QString browser=settings.readEntry("/vym/mainwindow/readerURL" );
 23.2341 -		if (procBrowser && procBrowser->isRunning())
 23.2342 -		{
 23.2343 -			if (browser.contains("konqueror"))
 23.2344 -			{
 23.2345 -				// Try to open new tab in existing konqueror started previously by vym
 23.2346 -				QProcess *p=new QProcess (this);
 23.2347 -				p->addArgument ("dcop");
 23.2348 -				p->addArgument (QString("konqueror-%1").arg(procBrowser->processIdentifier()));
 23.2349 -				p->addArgument ("konqueror-mainwindow#1");
 23.2350 -				p->addArgument ("newTab");
 23.2351 -				p->addArgument (url);
 23.2352 -				if ( !p->start() ) 
 23.2353 -					// try to set browser
 23.2354 -					QMessageBox::warning(0, 
 23.2355 -						tr("Warning"),
 23.2356 -						tr("Couldn't start %1 to open a new tab in %2.").arg("dcop").arg("konqueror"));
 23.2357 -				return;		
 23.2358 -			} else if (browser.contains ("firefox") || browser.contains ("mozilla") )
 23.2359 -			{
 23.2360 -				// Try to open new tab in firefox
 23.2361 -				QProcess *p=new QProcess (this);
 23.2362 -				p->addArgument (browser);
 23.2363 -				p->addArgument ("-remote");
 23.2364 -				p->addArgument (QString("openurl(%1,new-tab)").arg(url));
 23.2365 -				if ( !p->start() ) 
 23.2366 -					// try to set browser
 23.2367 -					QMessageBox::warning(0, 
 23.2368 -						tr("Warning"),
 23.2369 -						tr("Couldn't start %1 to open a new tab").arg(browser));
 23.2370 -				return;		
 23.2371 -			}
 23.2372 -		}
 23.2373 -		// Open new browser
 23.2374 -		editOpenURL();
 23.2375 +	    QStringList urls;
 23.2376 +		urls.append(currentMapEditor()->getURL());
 23.2377 +		openTabs (urls);
 23.2378  	}	
 23.2379  }
 23.2380 +void Main::editOpenMultipleURLTabs()
 23.2381 +{
 23.2382 +	if (currentMapEditor())
 23.2383 +	{	
 23.2384 +	    QStringList urls;
 23.2385 +		urls=currentMapEditor()->getURLs();
 23.2386 +		openTabs (urls);
 23.2387 +	}	
 23.2388 +}
 23.2389 +
 23.2390  
 23.2391  void Main::editURL()
 23.2392  {
 23.2393 @@ -2301,13 +2674,66 @@
 23.2394  	    currentMapEditor()->editFATE2URL();
 23.2395  }
 23.2396  
 23.2397 -void Main::editOpenVymLink()
 23.2398 +void Main::editHeading()
 23.2399  {
 23.2400 -	// Get current path to map
 23.2401 -	QString currentVymLink;
 23.2402 -	if (currentMapEditor())
 23.2403 +	if (lineedit->isVisible())
 23.2404  	{
 23.2405 -		currentVymLink=currentMapEditor()->getVymLink();	
 23.2406 +		if (currentMapEditor())
 23.2407 +		{	
 23.2408 +			MapEditor *me=currentMapEditor();
 23.2409 +			QString oldSel=me->getSelectString();
 23.2410 +			if (me->select (editSel))
 23.2411 +				me->setHeading(lineedit->text());
 23.2412 +			me->select (oldSel);
 23.2413 +		}	
 23.2414 +		lineedit->releaseKeyboard();
 23.2415 +		lineedit->hide();
 23.2416 +		setFocus();
 23.2417 +	} else
 23.2418 +	{
 23.2419 +		if (currentMapEditor())
 23.2420 +		{
 23.2421 +			bool ok;
 23.2422 +			QPoint p;
 23.2423 +			QString s=currentMapEditor()->getHeading(ok,p);
 23.2424 +
 23.2425 +			if (ok)
 23.2426 +			{
 23.2427 +#if defined(Q_OS_MACX)
 23.2428 +				p = currentMapEditor()->mapToGlobal( currentMapEditor()->worldMatrix().map( p));
 23.2429 +				QDialog *d =new QDialog(NULL);
 23.2430 +				QLineEdit *le=new QLineEdit (d);
 23.2431 +				d->setWindowFlags (Qt::FramelessWindowHint);
 23.2432 +				d->setGeometry(p.x(),p.y(),200,25);
 23.2433 +				le->resize (d->size());
 23.2434 +				le->setText (s);
 23.2435 +				le->selectAll();
 23.2436 +				connect (le, SIGNAL (returnPressed()), d, SLOT (accept()));
 23.2437 +				d->activateWindow();
 23.2438 +				d->exec();
 23.2439 +				currentMapEditor()->setHeading (le->text());
 23.2440 +#else
 23.2441 +				p = currentMapEditor()->mapTo(this, currentMapEditor()->worldMatrix().map( p));
 23.2442 +				lineedit->setGeometry(p.x(),p.y(),200,25);
 23.2443 +				lineedit->setText(s);
 23.2444 +				lineedit->setCursorPosition(1);
 23.2445 +				lineedit->selectAll();
 23.2446 +				lineedit->show();
 23.2447 +				lineedit->grabKeyboard();
 23.2448 +				lineedit->setFocus();
 23.2449 +
 23.2450 +				editSel=currentMapEditor()->getSelectString();
 23.2451 +#endif
 23.2452 +
 23.2453 +			}
 23.2454 +		}
 23.2455 +	}
 23.2456 +}
 23.2457 +
 23.2458 +void Main::openVymLinks(const QStringList &vl)
 23.2459 +{
 23.2460 +	for (int j=0; j<vl.size(); j++)
 23.2461 +	{
 23.2462  		// compare path with already loaded maps
 23.2463  		int index=-1;
 23.2464  		int i;
 23.2465 @@ -2315,7 +2741,7 @@
 23.2466  		for (i=0;i<=tabWidget->count() -1;i++)
 23.2467  		{
 23.2468  			me=(MapEditor*)tabWidget->page(i);
 23.2469 -			if (currentVymLink==me->getFilePath() )
 23.2470 +			if (vl.at(j)==me->getFilePath() )
 23.2471  			{
 23.2472  				index=i;
 23.2473  				break;
 23.2474 @@ -2324,12 +2750,12 @@
 23.2475  		if (index<0)
 23.2476  		// Load map
 23.2477  		{
 23.2478 -			if (!QFile(currentVymLink).exists() )
 23.2479 +			if (!QFile(vl.at(j)).exists() )
 23.2480  				QMessageBox::critical( 0, tr( "Critical Error" ),
 23.2481 -				   tr("Couldn't open map %1").arg(currentVymLink));
 23.2482 +				   tr("Couldn't open map %1").arg(vl.at(j)));
 23.2483  			else
 23.2484  			{
 23.2485 -				fileLoad (currentVymLink, NewMap);
 23.2486 +				fileLoad (vl.at(j), NewMap);
 23.2487  				tabWidget->setCurrentPage (tabWidget->count()-1);	
 23.2488  			}
 23.2489  		} else
 23.2490 @@ -2338,6 +2764,26 @@
 23.2491  	}
 23.2492  }
 23.2493  
 23.2494 +void Main::editOpenVymLink()
 23.2495 +{
 23.2496 +	if (currentMapEditor())
 23.2497 +	{
 23.2498 +		QStringList vl;
 23.2499 +		vl.append(currentMapEditor()->getVymLink());	
 23.2500 +		openVymLinks (vl);
 23.2501 +	}
 23.2502 +}
 23.2503 +
 23.2504 +void Main::editOpenMultipleVymLinks()
 23.2505 +{
 23.2506 +	QString currentVymLink;
 23.2507 +	if (currentMapEditor())
 23.2508 +	{
 23.2509 +		QStringList vl=currentMapEditor()->getVymLinks();
 23.2510 +		openVymLinks (vl);
 23.2511 +	}
 23.2512 +}
 23.2513 +
 23.2514  void Main::editVymLink()
 23.2515  {
 23.2516  	if (currentMapEditor())
 23.2517 @@ -2390,15 +2836,10 @@
 23.2518  	}	
 23.2519  }
 23.2520  
 23.2521 -void Main::editHeading()
 23.2522 -{
 23.2523 -	if (currentMapEditor())
 23.2524 -		currentMapEditor()->editHeading();
 23.2525 -}
 23.2526 -
 23.2527  void Main::editNewBranch()
 23.2528  {
 23.2529 -	if (currentMapEditor())
 23.2530 +
 23.2531 +	if (!lineedit->isVisible() && currentMapEditor())
 23.2532  		currentMapEditor()->addNewBranch(0);
 23.2533  }
 23.2534  
 23.2535 @@ -2495,22 +2936,23 @@
 23.2536  		currentMapEditor()->loadFloatImage();
 23.2537  }
 23.2538  
 23.2539 -void Main::editSaveImage(int item)
 23.2540 +void Main::editSaveImage()
 23.2541  {
 23.2542  	if (currentMapEditor())
 23.2543 -		currentMapEditor()->saveFloatImage(item);
 23.2544 +		currentMapEditor()->saveFloatImage();
 23.2545  }
 23.2546  
 23.2547 -void Main::editFollowXLink(int item)
 23.2548 +void Main::editFollowXLink(QAction *a)
 23.2549 +{
 23.2550 +
 23.2551 +	if (currentMapEditor())
 23.2552 +		currentMapEditor()->followXLink(branchXLinksContextMenuFollow->actions().indexOf(a));
 23.2553 +}
 23.2554 +
 23.2555 +void Main::editEditXLink(QAction *a)
 23.2556  {
 23.2557  	if (currentMapEditor())
 23.2558 -		currentMapEditor()->followXLink(branchLinksContextMenu->indexOf(item));
 23.2559 -}
 23.2560 -
 23.2561 -void Main::editEditXLink(int item)
 23.2562 -{
 23.2563 -	if (currentMapEditor())
 23.2564 -		currentMapEditor()->editXLink(branchLinksContextMenuDup->indexOf(item));
 23.2565 +		currentMapEditor()->editXLink(branchXLinksContextMenuEdit->actions().indexOf(a));
 23.2566  }
 23.2567  
 23.2568  void Main::formatSelectColor()
 23.2569 @@ -2624,7 +3066,7 @@
 23.2570  {
 23.2571  	if (currentMapEditor())
 23.2572  	{
 23.2573 -		QWMatrix m;
 23.2574 +		QMatrix m;
 23.2575  		m.reset();
 23.2576  		currentMapEditor()->setWorldMatrix( m );
 23.2577  		currentMapEditor()->setViewCenter();
 23.2578 @@ -2636,7 +3078,7 @@
 23.2579  {
 23.2580  	if (currentMapEditor())
 23.2581  	{
 23.2582 -		QWMatrix m = currentMapEditor()->worldMatrix();
 23.2583 +		QMatrix m = currentMapEditor()->worldMatrix();
 23.2584  		m.scale( 1.25, 1.25 );
 23.2585  		currentMapEditor()->setWorldMatrix( m );
 23.2586  		currentMapEditor()->setViewCenter();
 23.2587 @@ -2648,7 +3090,7 @@
 23.2588  {
 23.2589  	if (currentMapEditor())
 23.2590  	{
 23.2591 -		QWMatrix m = currentMapEditor()->worldMatrix();
 23.2592 +		QMatrix m = currentMapEditor()->worldMatrix();
 23.2593  		m.scale( 0.8, 0.8 );
 23.2594  		currentMapEditor()->setWorldMatrix( m );
 23.2595  		currentMapEditor()->setViewCenter();
 23.2596 @@ -2670,9 +3112,9 @@
 23.2597  	bool ok;
 23.2598  	QString text = QInputDialog::getText(
 23.2599  		"VYM", tr("Set application to open PDF files")+":", QLineEdit::Normal,
 23.2600 -		settings.readEntry("/vym/mainwindow/readerPDF"), &ok, this );
 23.2601 +		settings.value("/mainwindow/readerPDF").toString(), &ok, this );
 23.2602  	if (ok)
 23.2603 -		settings.writeEntry ("/vym/mainwindow/readerPDF",text);
 23.2604 +		settings.setValue ("/mainwindow/readerPDF",text);
 23.2605  	return ok;
 23.2606  }
 23.2607  
 23.2608 @@ -2683,10 +3125,10 @@
 23.2609  	bool ok;
 23.2610  	QString text = QInputDialog::getText(
 23.2611  		"VYM", tr("Set application to open an URL")+":", QLineEdit::Normal,
 23.2612 -		settings.readEntry("/vym/mainwindow/readerURL")
 23.2613 +		settings.value("/mainwindow/readerURL").toString()
 23.2614  		, &ok, this );
 23.2615  	if (ok)
 23.2616 -		settings.writeEntry ("/vym/mainwindow/readerURL",text);
 23.2617 +		settings.setValue ("/mainwindow/readerURL",text);
 23.2618  	return ok;
 23.2619  }
 23.2620  
 23.2621 @@ -2694,7 +3136,7 @@
 23.2622  {
 23.2623  	if (actionSettingsUseDelKey->isOn())
 23.2624  	{
 23.2625 -		actionEditDelete->setAccel (QKeySequence (Key_Delete));
 23.2626 +		actionEditDelete->setAccel (QKeySequence (Qt::Key_Delete));
 23.2627  	} else
 23.2628  	{
 23.2629  		actionEditDelete->setAccel (QKeySequence (""));
 23.2630 @@ -2793,7 +3235,7 @@
 23.2631  	
 23.2632  	Process *pdfProc = new Process();
 23.2633  	pdfProc->clearArguments();
 23.2634 -	pdfProc->addArgument( settings.readEntry("/vym/mainwindow/readerPDF"));
 23.2635 +	pdfProc->addArgument( settings.value("/mainwindow/readerPDF").toString());
 23.2636  	pdfProc->addArgument( docpath);
 23.2637  
 23.2638  	if ( !pdfProc->start() ) 
    24.1 --- a/mainwindow.h	Tue Sep 05 09:47:13 2006 +0000
    24.2 +++ b/mainwindow.h	Tue Sep 05 09:47:14 2006 +0000
    24.3 @@ -1,16 +1,16 @@
    24.4  #ifndef MAINWINDOW_H 
    24.5  #define MAINWINDOW_H
    24.6  
    24.7 -#include <qpopupmenu.h>
    24.8 -#include <qmainwindow.h>
    24.9 -#include <qtextedit.h>
   24.10 -#include <qintdict.h>
   24.11 -#include <qcanvas.h>
   24.12 -#include <qlineedit.h>
   24.13 -#include <qaction.h>
   24.14 -#include <qcursor.h>
   24.15 -#include <qtabwidget.h>
   24.16 -#include <qmap.h>
   24.17 +#include <QAction>
   24.18 +#include <QCursor>
   24.19 +#include <QMainWindow>
   24.20 +#include <QProcess>
   24.21 +#include <QToolBar>
   24.22 +#include <QTabWidget>
   24.23 +//Added by qt3to4:
   24.24 +#include <QCloseEvent>
   24.25 +#include <QShowEvent>
   24.26 +#include <QHideEvent>
   24.27  
   24.28  #include "file.h"
   24.29  #include "findwindow.h"
   24.30 @@ -23,7 +23,7 @@
   24.31      Q_OBJECT
   24.32  
   24.33  public:
   24.34 -    Main(QWidget* parent=0, const char* name=0, WFlags f=0);
   24.35 +    Main(QWidget* parent=0, const char* name=0, Qt::WFlags f=0);
   24.36      ~Main();
   24.37  	void loadCmdLine();
   24.38  	void statusMessage (const QString &);
   24.39 @@ -60,7 +60,7 @@
   24.40      ErrorCode fileLoad(QString ,const LoadMode &);
   24.41      void fileLoad(const LoadMode &);
   24.42      void fileLoad();
   24.43 -	void fileLoadLast(int);
   24.44 +	void fileLoadLast(QAction *);
   24.45      void fileSave(const SaveMode & );
   24.46      void fileSave();
   24.47      void fileSaveAs(const SaveMode &);
   24.48 @@ -71,7 +71,7 @@
   24.49      void fileImportDir();
   24.50      void fileExportXML();
   24.51      void fileExportXHTML();
   24.52 -    void fileExportImage(int);
   24.53 +    void fileExportImage();
   24.54      void fileExportASCII();
   24.55      void fileExportLaTeX();
   24.56      void fileExportKDEBookmarks();
   24.57 @@ -89,16 +89,22 @@
   24.58      void editOpenFindWindow();
   24.59  	void editFind(QString);
   24.60  	void editFindChanged();
   24.61 +private:
   24.62 +	void openTabs(QStringList);
   24.63  public slots:
   24.64  	void editOpenURL();
   24.65  	void editOpenURLTab();
   24.66  private slots:
   24.67 +	void editOpenMultipleURLTabs();
   24.68  	void editURL();
   24.69  	void editHeading2URL();
   24.70  	void editBugzilla2URL();
   24.71  	void editFATE2URL();
   24.72 +	void openVymLinks(const QStringList &);
   24.73  	void editVymLink();
   24.74 +	void editOpenMultipleVymLinks();
   24.75  public slots:
   24.76 +    void editHeading();
   24.77  	void editOpenVymLink();
   24.78  private slots:
   24.79  	void editDeleteVymLink();
   24.80 @@ -108,7 +114,6 @@
   24.81      void editMoveDown();	
   24.82      void editToggleScroll();
   24.83      void editUnScrollAll();
   24.84 -    void editHeading();
   24.85      void editNewBranch();
   24.86      void editNewBranchHere();
   24.87      void editNewBranchAbove();
   24.88 @@ -126,9 +131,9 @@
   24.89      void editFirstBranch();
   24.90      void editLastBranch();
   24.91      void editLoadImage();
   24.92 -    void editSaveImage(int);
   24.93 -    void editFollowXLink (int);
   24.94 -    void editEditXLink (int);
   24.95 +    void editSaveImage();
   24.96 +    void editFollowXLink (QAction *);
   24.97 +    void editEditXLink (QAction *);
   24.98  
   24.99      void formatSelectColor();
  24.100      void formatPickColor();
  24.101 @@ -179,13 +184,17 @@
  24.102      void helpAboutQT();
  24.103  
  24.104  private:
  24.105 -// not needed?    QCanvas* canvas;
  24.106  	QTabWidget *tabWidget;
  24.107  	FindWindow *findWindow;
  24.108  	QStringList lastMaps;
  24.109  	int maxLastMaps;
  24.110 -	QString lastFileDir;
  24.111  	QProcess *procBrowser;
  24.112 +
  24.113 +	QStringList imageTypes;
  24.114 +
  24.115 +	QLineEdit *lineedit;	// to enter headings of branches
  24.116 +	QString editSel;
  24.117 +	
  24.118  };
  24.119  
  24.120  
    25.1 --- a/mapeditor.cpp	Tue Sep 05 09:47:13 2006 +0000
    25.2 +++ b/mapeditor.cpp	Tue Sep 05 09:47:14 2006 +0000
    25.3 @@ -1,24 +1,34 @@
    25.4  #include "mapeditor.h"
    25.5  
    25.6  #include <qstatusbar.h>
    25.7 -#include <qmessagebox.h>
    25.8 +#include <QMessageBox>
    25.9  #include <qapplication.h>
   25.10  #include <qpainter.h>
   25.11 -#include <qpopupmenu.h>
   25.12 +#include <q3popupmenu.h>
   25.13  #include <qprinter.h>
   25.14 -#include <qpaintdevicemetrics.h>
   25.15 -#include <qfile.h>
   25.16 -#include <qfiledialog.h>
   25.17 -#include <qdir.h>
   25.18 -#include <qcolor.h>
   25.19 -#include <qcolordialog.h>
   25.20 -#include <qbitmap.h>
   25.21 -#include <qprocess.h>
   25.22 +#include <q3paintdevicemetrics.h>
   25.23 +#include <QFile>
   25.24 +#include <q3filedialog.h>
   25.25 +#include <QDir>
   25.26 +#include <QColor>
   25.27 +#include <QColorDialog>
   25.28 +#include <QBitmap>
   25.29  #include <qinputdialog.h>
   25.30 -#include <qdragobject.h>
   25.31 -#include <qurloperator.h>
   25.32 -#include <qnetworkprotocol.h>
   25.33 -#include <qregexp.h>
   25.34 +#include <q3dragobject.h>
   25.35 +#include <q3urloperator.h>
   25.36 +#include <q3networkprotocol.h>
   25.37 +#include <QRegExp>
   25.38 +//Added by qt3to4:
   25.39 +#include <QResizeEvent>
   25.40 +#include <QContextMenuEvent>
   25.41 +#include <Q3StrList>
   25.42 +#include <QPixmap>
   25.43 +#include <QMouseEvent>
   25.44 +#include <QDragEnterEvent>
   25.45 +#include <QTextStream>
   25.46 +#include <QDropEvent>
   25.47 +#include <QActionGroup>
   25.48 +#include <Q3PtrList>
   25.49  
   25.50  #include <iostream>
   25.51  #include <cstdlib>
   25.52 @@ -34,7 +44,6 @@
   25.53  #include "linkablemapobj.h"
   25.54  #include "mainwindow.h"
   25.55  #include "misc.h"
   25.56 -#include "settings.h"
   25.57  #include "texteditor.h"
   25.58  #include "warningdialog.h"
   25.59  #include "xml.h"
   25.60 @@ -49,10 +58,11 @@
   25.61  extern FlagRowObj *systemFlagsDefault;
   25.62  extern FlagRowObj *standardFlagsDefault;
   25.63  
   25.64 -extern QPtrList <QAction> actionListBranches;
   25.65 +extern Q3PtrList <QAction> actionListBranches;
   25.66  
   25.67  extern QAction *actionFileSave;
   25.68  extern QAction *actionEditUndo;
   25.69 +extern QAction *actionEditRedo;
   25.70  extern QAction *actionEditCopy;
   25.71  extern QAction *actionEditCut;
   25.72  extern QAction *actionEditPaste;
   25.73 @@ -113,44 +123,51 @@
   25.74  extern QAction *actionSettingsAutoedit;
   25.75  extern QAction *actionSettingsAutoselectHeading;
   25.76  extern QAction *actionSettingsAutoselectText;
   25.77 -extern QAction *actionSettingsPasteNewHeading;
   25.78  extern QAction *actionSettingsUseFlagGroups;
   25.79  
   25.80 -extern QPopupMenu *branchContextMenu;
   25.81 -extern QPopupMenu *branchLinksContextMenu;
   25.82 -extern QPopupMenu *branchLinksContextMenuDup;
   25.83 -extern QPopupMenu *floatimageContextMenu;
   25.84 -extern QPopupMenu *saveImageFormatMenu;
   25.85 -extern QPopupMenu *exportImageFormatMenu;
   25.86 -extern QPopupMenu *canvasContextMenu;
   25.87 +extern QMenu* branchContextMenu;
   25.88 +extern QMenu* branchAddContextMenu;
   25.89 +extern QMenu* branchRemoveContextMenu;
   25.90 +extern QMenu* branchLinksContextMenu;
   25.91 +extern QMenu* branchXLinksContextMenuEdit;
   25.92 +extern QMenu* branchXLinksContextMenuFollow;
   25.93 +extern QMenu* floatimageContextMenu;
   25.94 +extern QMenu* saveImageFormatMenu;
   25.95 +extern QMenu* canvasContextMenu;
   25.96 +extern QMenu* lastMapsMenu;
   25.97 +extern QMenu* importMenu;
   25.98 +extern QMenu* exportMenu;
   25.99 +
  25.100  
  25.101  extern Settings settings;
  25.102 +extern ImageIO imageIO;
  25.103  
  25.104  extern QString iconPath;
  25.105  extern QDir vymBaseDir;
  25.106 +extern QDir lastImageDir;
  25.107  
  25.108  int MapEditor::mapNum=0;	// make instance
  25.109  
  25.110  ///////////////////////////////////////////////////////////////////////
  25.111  ///////////////////////////////////////////////////////////////////////
  25.112  MapEditor::MapEditor(
  25.113 -	QWidget* parent, bool interactive, const char* name, WFlags f) :
  25.114 -  QCanvasView(parent,name,f), urlOperator(0), imageBuffer(0)
  25.115 +	QWidget* parent, bool interactive, const char* name, Qt::WFlags f) :
  25.116 +  Q3CanvasView(parent,name,f), urlOperator(0), imageBuffer(0)
  25.117  {
  25.118  	//cout << "Constructor ME "<<this<<endl;
  25.119  	mapNum++;
  25.120  
  25.121      viewport()->setAcceptDrops(true);
  25.122  
  25.123 -    mapCanvas = new QCanvas(1000,800);
  25.124 +    mapCanvas = new Q3Canvas(width(),height());
  25.125  	mapCanvas->setAdvancePeriod(30);
  25.126 -	mapCanvas->setBackgroundColor (white);
  25.127 +	mapCanvas->setBackgroundColor (Qt::white);
  25.128  
  25.129      setCanvas (mapCanvas);
  25.130  	
  25.131  	// Always show scroll bars (automatic would flicker sometimes)
  25.132 -	setVScrollBarMode ( QScrollView::AlwaysOn );
  25.133 -	setHScrollBarMode ( QScrollView::AlwaysOn );
  25.134 +	setVScrollBarMode ( Q3ScrollView::AlwaysOn );
  25.135 +	setHScrollBarMode ( Q3ScrollView::AlwaysOn );
  25.136  
  25.137      mapCenter = new MapCenterObj(mapCanvas);
  25.138      mapCenter->setVisibility (true);
  25.139 @@ -160,24 +177,18 @@
  25.140  
  25.141      printer=NULL;
  25.142  
  25.143 -    lineedit = new QLineEdit(this, "lineedit"  );
  25.144 -    connect( lineedit, SIGNAL( returnPressed() ), SLOT( finishedLineEdit() ) );
  25.145 -    lineedit->hide();
  25.146 -
  25.147 -    actColor=black; setColor (actColor);
  25.148 +    actColor=Qt::black; setColor (actColor);
  25.149  	defLinkColor=QColor (0,0,255);
  25.150  	defXLinkColor=QColor (180,180,180);
  25.151  	linkcolorhint=DefaultColor;
  25.152  	linkstyle=StylePolyParabel;
  25.153  
  25.154 -	// Create bitmap cursors, patform dependant
  25.155 +	// Create bitmap cursors, platform dependant
  25.156  	#if defined(Q_OS_MACX)
  25.157 -		handOpenCursor=QCursor ( QPixmap(iconPath+"cursorhandopen16.png") );		
  25.158 -		// set hot spot to tip of picker			
  25.159 +		handOpenCursor=QCursor ( QPixmap(iconPath+"cursorhandopen16.png"),1,1 );		
  25.160  		pickColorCursor=QCursor ( QPixmap (iconPath+"cursorcolorpicker16.png"), 1,15 ); 
  25.161  	#else
  25.162 -		handOpenCursor=QCursor (QPixmap(iconPath+"cursorhandopen16.png"));		
  25.163 -		// set hot spot to tip of picker			
  25.164 +		handOpenCursor=QCursor (QPixmap(iconPath+"cursorhandopen.png"),1,1);		
  25.165  		pickColorCursor=QCursor ( QPixmap(iconPath+"cursorcolorpicker.png"), 5,27 ); 
  25.166  	#endif
  25.167  
  25.168 @@ -190,6 +201,8 @@
  25.169      selectionLast=NULL;
  25.170      movingObj=NULL;
  25.171  
  25.172 +	xelection.setMapCenter (mapCenter);
  25.173 +
  25.174  	defXLinkWidth=1;
  25.175  	defXLinkColor=QColor (230,230,230);
  25.176  
  25.177 @@ -202,9 +215,7 @@
  25.178  	fileName=tr("unnamed");
  25.179  	mapName="";
  25.180  
  25.181 -	undosTotal=settings.readNumEntry("/vym/mapeditor/undoLevels",50);
  25.182 -	undosAvail=0;	
  25.183 -	undoNum=0;
  25.184 +	undosTotal=settings.readNumEntry("/mapeditor/undoLevels",50);
  25.185  	
  25.186  	// Initialize find routine
  25.187  	itFind=NULL;				
  25.188 @@ -231,6 +242,8 @@
  25.189  	historyWindow->setCaption (fileName);
  25.190  
  25.191  	mapCenter->reposition();	//	for positioning heading
  25.192 +
  25.193 +
  25.194  }
  25.195  
  25.196  MapEditor::~MapEditor()
  25.197 @@ -244,7 +257,7 @@
  25.198  	//cout <<"Destructor MapEditor\n";
  25.199  
  25.200  	// Save Settings
  25.201 -	//settings.writeEntry( "/vym/mapeditor/editmode/autoselect",  );
  25.202 +	//settings.writeEntry( "/mapeditor/editmode/autoselect",  );
  25.203  
  25.204  }
  25.205  
  25.206 @@ -263,7 +276,7 @@
  25.207      return mapCenter;
  25.208  }
  25.209  
  25.210 -QCanvas* MapEditor::getCanvas()
  25.211 +Q3Canvas* MapEditor::getCanvas()
  25.212  {
  25.213      return mapCanvas;
  25.214  }
  25.215 @@ -355,12 +368,13 @@
  25.216  void MapEditor::makeTmpDirs()
  25.217  {
  25.218  	// Create unique temporary directories
  25.219 -	tmpMapDir=tmpVymDir+QString("/mapeditor-%1").arg(mapNum);
  25.220 +	tmpMapDir=QDir::convertSeparators (tmpVymDir+QString("/mapeditor-%1").arg(mapNum));
  25.221 +	histPath=QDir::convertSeparators (tmpMapDir+"/history");
  25.222  	QDir d;
  25.223  	d.mkdir (tmpMapDir,true);
  25.224  }
  25.225  
  25.226 -QString MapEditor::saveToDir(const QString &tmpdir, const QString &prefix, bool writeflags, const QPoint &offset, LinkableMapObj *saveSelection)
  25.227 +QString MapEditor::saveToDir(const QString &tmpdir, const QString &prefix, bool writeflags, const QPoint &offset, LinkableMapObj *saveSel)
  25.228  {
  25.229  	// tmpdir		temporary directory to which data will be written
  25.230  	// prefix		mapname, which will be appended to images etc.
  25.231 @@ -392,7 +406,7 @@
  25.232  		colhint=attribut("linkColorHint","HeadingColor");
  25.233  
  25.234  	QString mapAttr=attribut("version",__VYM_VERSION);
  25.235 -	if (!saveSelection)
  25.236 +	if (!saveSel)
  25.237  		mapAttr+= attribut("author",mapCenter->getAuthor()) +
  25.238  				  attribut("comment",mapCenter->getComment()) +
  25.239  			      attribut("date",mapCenter->getDate()) +
  25.240 @@ -412,25 +426,28 @@
  25.241  	FloatImageObj (mapCanvas).resetSaveCounter();
  25.242  
  25.243  	// Build xml recursivly
  25.244 -	if (!saveSelection)
  25.245 +	if (!saveSel)
  25.246 +		// Save complete map, if saveSel not set
  25.247  		s+=mapCenter->saveToDir(tmpdir,prefix,writeflags,offset);
  25.248  	else
  25.249  	{
  25.250 -		if ( typeid(*saveSelection) == typeid(BranchObj) )
  25.251 -			s+=((BranchObj*)(saveSelection))->saveToDir(tmpdir,prefix,offset);
  25.252 -		else if ( typeid(*saveSelection) == typeid(FloatImageObj) )
  25.253 -			s+=((FloatImageObj*)(saveSelection))->saveToDir(tmpdir,prefix,offset);
  25.254 +		if ( typeid(*saveSel) == typeid(BranchObj) )
  25.255 +			// Save Subtree
  25.256 +			s+=((BranchObj*)(saveSel))->saveToDir(tmpdir,prefix,offset);
  25.257 +		else if ( typeid(*saveSel) == typeid(FloatImageObj) )
  25.258 +			// Save image
  25.259 +			s+=((FloatImageObj*)(saveSel))->saveToDir(tmpdir,prefix,offset);
  25.260  			
  25.261  		else if (selection && typeid(*selection)==typeid(BranchObj))
  25.262 -				// This is used if selected branch is saved from mainwindow
  25.263 -				s+=((BranchObj*)selection)->saveToDir(tmpdir,prefix,offset);
  25.264 +			// Save selected branch is saved from mainwindow		//FIXME maybe use "subtree" above?
  25.265 +			s+=((BranchObj*)selection)->saveToDir(tmpdir,prefix,offset);
  25.266  	}
  25.267  
  25.268  	// Save local settings
  25.269  	s+=settings.getXMLData (destPath);
  25.270  
  25.271  	// Save selection
  25.272 -	if (selection && !saveSelection ) 
  25.273 +	if (selection && !saveSel ) 
  25.274  		s+=valueElement("select",selection->getSelectString());
  25.275  
  25.276  	decIndent();
  25.277 @@ -441,60 +458,112 @@
  25.278  	return s;
  25.279  }
  25.280  
  25.281 -void MapEditor::saveState(const QString &comment)
  25.282 +void MapEditor::saveStateComplete(const QString &comment)
  25.283  {
  25.284 -	// Save complete map
  25.285 -	saveState (CompleteMap,"",NULL,"",NULL, comment);
  25.286 +	// Save complete map, Undo will replace whole map
  25.287 +	saveState (CompleteMap,
  25.288 +		"", "",
  25.289 +		"", "", 
  25.290 +		comment, 
  25.291 +		mapCenter);
  25.292  }
  25.293  
  25.294 -void MapEditor::saveState(LinkableMapObj *undoSel, const QString &comment)
  25.295 +void MapEditor::saveStatePart(LinkableMapObj *undoSel, const QString &comment)
  25.296  {
  25.297 -	// save the given part of the map 
  25.298 -	saveState (PartOfMap,"",undoSel,"",NULL, comment);
  25.299 +	// save the selected part of the map, Undo will replace part of map 
  25.300 +	QString undoSelection="";
  25.301 +	if (undoSel) undoSelection=undoSel->getSelectString();
  25.302 +
  25.303 +	saveState (PartOfMap,
  25.304 +		undoSelection, "",
  25.305 +		"", "", 
  25.306 +		comment, 
  25.307 +		undoSel);
  25.308  }
  25.309  
  25.310 -void MapEditor::saveState(const QString &uc, const QString &rc, const QString &comment)
  25.311 +void MapEditor::saveStateConstSelection(const QString &uc, const QString &rc, const QString &comment)
  25.312  {
  25.313  	// selection does not change during action,
  25.314  	// so just save commands for undo and redo
  25.315 -	LinkableMapObj *unsel;
  25.316 -	if (selection)
  25.317 -		unsel=selection;
  25.318 -	else
  25.319 -		unsel=NULL;
  25.320 -	saveState (UndoCommand,uc,unsel,rc,unsel, comment);
  25.321 +	// and use current selection
  25.322 +
  25.323 +	QString sel;
  25.324 +	if (selection) sel=selection->getSelectString();
  25.325 +
  25.326 +	saveState (UndoCommand,
  25.327 +		sel, uc,
  25.328 +		sel, rc, 
  25.329 +		comment, 
  25.330 +		NULL);
  25.331  }
  25.332  
  25.333 -void MapEditor::saveState(const QString & uncom, LinkableMapObj *unsel, const QString &comment) 
  25.334 +void MapEditor::saveStateComData(LinkableMapObj *undoSel, const QString &uc, LinkableMapObj *redoSel, const QString &rc, const QString &comment, LinkableMapObj *saveSel) 
  25.335  {
  25.336 -	saveState (UndoCommand,uncom,unsel,"FIXME-redoCom",NULL, comment);
  25.337 +	QString redoSelection="";
  25.338 +	if (redoSel) redoSelection=redoSel->getSelectString();
  25.339 +	QString undoSelection="";
  25.340 +	if (undoSel) undoSelection=undoSel->getSelectString();
  25.341 +
  25.342 +	saveState (UndoCommand,
  25.343 +		undoSelection, uc,
  25.344 +		redoSelection, "FIXME-redoCom",	//FIXME
  25.345 +		comment, 
  25.346 +		saveSel);
  25.347  }
  25.348  
  25.349 -void MapEditor::saveState(const SaveMode &savemode, const QString &undoCom, LinkableMapObj *undoSel, const QString &redoCom, LinkableMapObj *redoSel, const QString &comment)
  25.350 +void MapEditor::saveState(LinkableMapObj *undoSel, const QString &uc, LinkableMapObj *redoSel, const QString &rc, const QString &comment) 
  25.351 +{
  25.352 +	// "Normal" savestate: save commands, selections and comment
  25.353 +	// so just save commands for undo and redo
  25.354 +	// and use current selection
  25.355 +
  25.356 +	QString redoSelection="";
  25.357 +	if (redoSel) redoSelection=redoSel->getSelectString();
  25.358 +	QString undoSelection="";
  25.359 +	if (undoSel) undoSelection=undoSel->getSelectString();
  25.360 +
  25.361 +	saveState (UndoCommand,
  25.362 +		undoSelection, uc,
  25.363 +		redoSelection, rc, 
  25.364 +		comment, 
  25.365 +		NULL);
  25.366 +}
  25.367 +
  25.368 +void MapEditor::saveState(const QString &undoSel, const QString &uc, const QString &redoSel, const QString &rc, const QString &comment) 
  25.369 +{
  25.370 +	// "Normal" savestate: save commands, selections and comment
  25.371 +	// so just save commands for undo and redo
  25.372 +	// and use current selection
  25.373 +	saveState (UndoCommand,
  25.374 +		undoSel, uc,
  25.375 +		redoSel, rc, 
  25.376 +		comment, 
  25.377 +		NULL);
  25.378 +}
  25.379 +
  25.380 +		
  25.381 +void MapEditor::saveState(const SaveMode &savemode, const QString &undoSelection, const QString &undoCom, const QString &redoSelection, const QString &redoCom, const QString &comment, LinkableMapObj *saveSel)
  25.382  {
  25.383  	// Main saveState
  25.384  
  25.385  	if (blockSaveState) return;
  25.386  
  25.387  	/* TODO remove after testing
  25.388 -	cout << "ME::saveState()  begin\n"<<endl;
  25.389 -	cout << "    undosTotal="<<undosTotal<<endl;
  25.390 -	cout << "    undosAvail="<<undosAvail<<endl;
  25.391 -	cout << "       undoNum="<<undoNum<<endl;
  25.392 -	cout << "    ---------------------------"<<endl;
  25.393  	*/
  25.394 -
  25.395 +	cout << "ME::saveState()  begin"<<endl;
  25.396  	historyWindow->append (comment);
  25.397  	
  25.398  	setChanged();
  25.399  
  25.400 +	int undosAvail=undoSet.readNumEntry ("/history/undosAvail",0);
  25.401 +	int curStep=undoSet.readNumEntry ("/history/curStep",0);
  25.402  	// Find out current undo directory
  25.403  	if (undosAvail<undosTotal) undosAvail++;
  25.404 -	undoNum++;
  25.405 -	if (undoNum>undosTotal) undoNum=1;
  25.406 +	curStep++;
  25.407 +	if (curStep>undosTotal) curStep=1;
  25.408  	
  25.409  	QString backupXML;
  25.410 -	QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(undoNum));
  25.411 +	QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(curStep));
  25.412  	QString bakMapPath=QDir::convertSeparators(bakMapDir+"/map.xml");
  25.413  
  25.414  	// Create bakMapDir if not available
  25.415 @@ -502,59 +571,50 @@
  25.416  	if (!d.exists()) 
  25.417  		makeSubDirs (bakMapDir);
  25.418  
  25.419 -	// Save current selection 
  25.420 -	QString redoSelection="";
  25.421 -	if (redoSel)
  25.422 -		redoSelection=redoSel->getSelectString();
  25.423 -
  25.424 -	// Save the object, which should be undone
  25.425 -	QString undoSelection="";
  25.426 -	if (undoSel)
  25.427 -		undoSelection=undoSel->getSelectString();
  25.428 +	// Save depending on how much needs to be saved	
  25.429 +	if (!saveSel)
  25.430 +		backupXML="";
  25.431 +	else 
  25.432 +		backupXML=saveToDir (bakMapDir,mapName+"-",false, QPoint (),saveSel);
  25.433  		
  25.434 -	// Save depending on how much needs to be saved	
  25.435  	QString undoCommand="";
  25.436  	if (savemode==UndoCommand)
  25.437  	{
  25.438  		undoCommand=undoCom;
  25.439 -		backupXML="";
  25.440  	}	
  25.441 -	else if (savemode==PartOfMap && undoSel)
  25.442 +	else if (savemode==PartOfMap )
  25.443  	{
  25.444  		undoCommand="undoPart (\""+ undoSelection+"\",\""+bakMapPath+"\")";
  25.445 -		backupXML=saveToDir (bakMapDir,mapName+"-",false, QPoint (),undoSel);
  25.446  	} else
  25.447  	{
  25.448  		undoCommand="undoMap (\""+bakMapPath+"\")";
  25.449 -		backupXML=saveToDir (bakMapDir,mapName+"-",false, QPoint (),NULL);
  25.450 -		undoSelection="";
  25.451  	}
  25.452  	if (!backupXML.isEmpty())
  25.453  		// Write XML Data to disk
  25.454  		saveStringToDisk (QString(bakMapPath),backupXML);
  25.455  
  25.456 -	SimpleSettings set;
  25.457 -	set.setEntry (QString("undoCommand"),undoCommand);
  25.458 -	set.setEntry (QString("undoSelection"),undoSelection);
  25.459 -	set.setEntry (QString("redoCommand"),redoCom);
  25.460 -	set.setEntry (QString("redoSelection"),redoSelection);
  25.461 -	set.setEntry (QString("comment"),comment);
  25.462 -	set.writeSettings(QString(bakMapDir+"/commands"));
  25.463 +	undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
  25.464 +	undoSet.setEntry ("/history/curStep",QString::number(curStep));
  25.465 +	undoSet.setEntry (QString("/history/step-%1/undoCommand").arg(curStep),undoCommand);
  25.466 +	undoSet.setEntry (QString("/history/step-%1/undoSelection").arg(curStep),undoSelection);
  25.467 +	undoSet.setEntry (QString("/history/step-%1/redoCommand").arg(curStep),redoCom);
  25.468 +	undoSet.setEntry (QString("/history/step-%1/redoSelection").arg(curStep),redoSelection);
  25.469 +	undoSet.setEntry (QString("/history/step-%1/comment").arg(curStep),comment);
  25.470 +	undoSet.writeSettings(histPath);
  25.471  
  25.472  	/* TODO remove after testing
  25.473 -	cout << "          into="<< bakMapDir<<endl;
  25.474 -	cout << "    undosAvail="<<undosAvail<<endl;
  25.475 -	cout << "       undoNum="<<undoNum<<endl;
  25.476 +	*/
  25.477 +	//cout << "          into="<< histPath.toStdString()<<endl;
  25.478 +	cout << "    undosTotal="<<undosTotal<<
  25.479 +	", undosAvail="<<undosAvail<<
  25.480 +	", curStep="<<curStep<<endl;
  25.481  	cout << "    ---------------------------"<<endl;
  25.482 -	cout << "    comment="<<comment<<endl;
  25.483 +	cout << "    comment="<<comment.toStdString()<<endl;
  25.484 +	cout << "    undoCom="<<undoCommand.toStdString()<<endl;
  25.485 +	cout << "    undoSel="<<undoSelection.toStdString()<<endl;
  25.486 +	cout << "    redoCom="<<redoCom.toStdString()<<endl;
  25.487 +	cout << "    redoSel="<<redoSelection.toStdString()<<endl;
  25.488  	cout << "    ---------------------------"<<endl;
  25.489 -	cout << "    undoCom="<<undoCommand<<endl;
  25.490 -	cout << "    undoSel="<<undoSelection<<endl;
  25.491 -	cout << "    ---------------------------"<<endl;
  25.492 -	cout << "    redoCom="<<redoCom<<endl;
  25.493 -	cout << "    redoSel="<<redoSelection<<endl;
  25.494 -	cout << "    ---------------------------"<<endl<<endl;
  25.495 -	*/
  25.496  }
  25.497  
  25.498  void MapEditor::parseAtom(const QString &atom)
  25.499 @@ -585,12 +645,43 @@
  25.500  			}
  25.501  		}	
  25.502  	}
  25.503 +	else if (com=="moveRel")
  25.504 +	{
  25.505 +		if (api.checkParamCount(2) && selection )
  25.506 +		{	
  25.507 +			x=api.parInt (ok,0);
  25.508 +			if (ok)
  25.509 +			{
  25.510 +				y=api.parInt (ok,1);
  25.511 +				if (ok) moveRel (x,y);
  25.512 +			}
  25.513 +		}	
  25.514 +	}
  25.515 +	else if (com=="delete")
  25.516 +	{
  25.517 +		if (api.checkParamCount(1) && selection )
  25.518 +		{	
  25.519 +			s=api.parString(ok,0);
  25.520 +			if (ok &&select (s)) deleteSelection();
  25.521 +		}	
  25.522 +	}	
  25.523 +	else if (com=="addBranch")
  25.524 +	{
  25.525 +		if (api.checkParamCount(1) && selection )
  25.526 +		{	
  25.527 +			y=api.parInt (ok,0);
  25.528 +			if (ok ) addNewBranchInt (y);
  25.529 +		}	
  25.530 +	}	
  25.531  	else if (com=="linkBranchToPos")
  25.532  	{
  25.533  		if (selection && typeid(*selection) == typeid(BranchObj) ) 
  25.534  		{
  25.535  			if (api.checkParamCount(4))
  25.536  			{
  25.537 +				// 0	selectstring of parent
  25.538 +				// 1	num in parent (for branches)
  25.539 +				// 2,3	x,y of mainbranch or mapcenter
  25.540  				s=api.parString(ok,0);
  25.541  				LinkableMapObj *dst=mapCenter->findObjBySelect (s);
  25.542  				if (dst)
  25.543 @@ -620,23 +711,56 @@
  25.544  		if (api.checkParamCount(1))
  25.545  		{
  25.546  			s=api.parString (ok,0);
  25.547 -			if (ok) setHeading (s);
  25.548 +			if (ok) 
  25.549 +				setHeading (s);
  25.550  		}	
  25.551  	} else if (com=="setURL")
  25.552  	{
  25.553  		if (api.checkParamCount(1))
  25.554  		{
  25.555  			s=api.parString (ok,0);
  25.556 -			if (ok) setURL(s);
  25.557 +			if (ok) setURLInt(s);
  25.558  		}	
  25.559  	} else if (com=="setVymLink")
  25.560  	{
  25.561  		if (api.checkParamCount(1))
  25.562  		{
  25.563  			s=api.parString (ok,0);
  25.564 -			if (ok) setVymLink(s);
  25.565 +			if (ok) setVymLinkInt(s);
  25.566  		}	
  25.567  	}
  25.568 +	else if (com=="setFlag")
  25.569 +	{
  25.570 +		if (selection && typeid(*selection) == typeid(BranchObj) ) 
  25.571 +		{
  25.572 +			if (api.checkParamCount(1) )
  25.573 +			{	
  25.574 +				s=api.parString(ok,0);
  25.575 +				if (ok) 
  25.576 +				{
  25.577 +					BranchObj* bo=(BranchObj*)selection;
  25.578 +					bo->activateStandardFlag(s);
  25.579 +					bo->updateFlagsToolbar();
  25.580 +				}	
  25.581 +			}	
  25.582 +		}
  25.583 +	}	
  25.584 +	else if (com=="unsetFlag")
  25.585 +	{
  25.586 +		if (selection && typeid(*selection) == typeid(BranchObj) ) 
  25.587 +		{
  25.588 +			if (api.checkParamCount(1) )
  25.589 +			{	
  25.590 +				s=api.parString(ok,0);
  25.591 +				if (ok) 
  25.592 +				{
  25.593 +					BranchObj* bo=(BranchObj*)selection;
  25.594 +					bo->deactivateStandardFlag(s);
  25.595 +					bo->updateFlagsToolbar();
  25.596 +				}	
  25.597 +			}	
  25.598 +		}
  25.599 +	}	
  25.600  	// Internal commands, used for undo etc.	
  25.601  	else if (com==QString("undoMap"))
  25.602  	{
  25.603 @@ -646,55 +770,32 @@
  25.604  	{
  25.605  		if (api.checkParamCount(2))
  25.606  		{
  25.607 -			s=api.parString (ok,0);
  25.608 -			t=api.parString (ok,1);
  25.609 +			s=api.parString (ok,0);	// undo selection
  25.610 +			t=api.parString (ok,1);	// backup dir
  25.611  			undoXML(s,t);	
  25.612  		}
  25.613  	} else if (com=="select")
  25.614 +	{
  25.615  		if (api.checkParamCount(1))
  25.616  		{
  25.617  			s=api.parString(ok,0);
  25.618  			if (ok) select (s);
  25.619  		}	
  25.620 +	}	
  25.621  	else
  25.622  	{
  25.623  		api.setError ("Unknown command in: "+atom);
  25.624 -		cout << "ME::parse   api should have error now...\n";
  25.625  	}
  25.626  
  25.627  	// Any errors?
  25.628  	if (api.error())
  25.629  	{
  25.630 -		cout << "MapEditor::parseAtom: Error!\n";
  25.631 -		cout << "  "<<api.errorDesc()<<endl;
  25.632 +		// TODO Error handling
  25.633 +		qWarning("MapEditor::parseAtom: Error!");
  25.634 +		qWarning(api.errorDesc());
  25.635  	}	
  25.636  }
  25.637  
  25.638 -
  25.639 -void MapEditor::finishedLineEdit()
  25.640 -{
  25.641 -	// This is called by finishedLineEdit or any MapEditor method,
  25.642 -	// which wants to assure, that lineedits finish, before e.g. a branch is 
  25.643 -	// deleted
  25.644 -    
  25.645 -	// After calling LineEdit and using the clipboard, the 
  25.646 -    // focus is not any longer on the main widget, we
  25.647 -    // have to restore it using parentWidget()->setFocus()
  25.648 -
  25.649 -    if (editingBO!=NULL) 
  25.650 -	{
  25.651 -		saveState("setHeading (\""+editingBO->getHeading()+"\")",editingBO, QString("Set heading of %1 to \"%2\"").arg(getName(editingBO)).arg(lineedit->text()) );
  25.652 -		editingBO->setHeading(lineedit->text() );
  25.653 -		editingBO=NULL;
  25.654 -		lineedit->releaseKeyboard();
  25.655 -		lineedit->hide();
  25.656 -		parentWidget()->setFocus();
  25.657 -		mapCenter->reposition();
  25.658 -		adjustCanvasSize();
  25.659 -		ensureSelectionVisible();
  25.660 -    }		
  25.661 -}
  25.662 -
  25.663  void MapEditor::toggleHistoryWindow()
  25.664  {
  25.665  	if (historyWindow->isVisible())
  25.666 @@ -731,9 +832,6 @@
  25.667  
  25.668  void MapEditor::closeMap()
  25.669  {
  25.670 -	// Finish open lineEdits
  25.671 -	if (lineedit) finishedLineEdit();
  25.672 -
  25.673  	// Unselect before disabling the toolbar actions
  25.674  	if (selection) selection->unselect();
  25.675  	selection=NULL;
  25.676 @@ -799,9 +897,6 @@
  25.677  
  25.678  ErrorCode MapEditor::load (QString fname, LoadMode lmode)
  25.679  {
  25.680 -	// Finish open lineEdits
  25.681 -	if (lineedit) finishedLineEdit();
  25.682 -
  25.683  	ErrorCode err=success;
  25.684  
  25.685  	if (lmode==NewMap)
  25.686 @@ -813,7 +908,7 @@
  25.687  		// (map state is set later at end of load...)
  25.688  	} else
  25.689  	{
  25.690 -		saveState(selection,"Load map");
  25.691 +		saveStatePart(selection,"Load map");
  25.692  	}	
  25.693  	
  25.694      
  25.695 @@ -868,9 +963,6 @@
  25.696  
  25.697  int MapEditor::save (const SaveMode &savemode)
  25.698  {
  25.699 -	// Finish open lineEdits
  25.700 -	if (lineedit) finishedLineEdit();
  25.701 -
  25.702  	int returnCode=0;
  25.703  
  25.704  	// The SaveMode UndoCommand is not supported here
  25.705 @@ -918,14 +1010,11 @@
  25.706  
  25.707  void MapEditor::print()
  25.708  {
  25.709 -	// Finish open lineEdits
  25.710 -	if (lineedit) finishedLineEdit();
  25.711 -
  25.712  	if ( !printer ) 
  25.713  	{
  25.714  		printer = new QPrinter;
  25.715  		printer->setColorMode (QPrinter::Color);
  25.716 -		printer->setPrinterName (settings.readEntry("/vym/mainwindow/printerName",printer->printerName()));
  25.717 +		printer->setPrinterName (settings.value("/mainwindow/printerName",printer->printerName()).toString());
  25.718  	}
  25.719  
  25.720  	QRect totalBBox=mapCenter->getTotalBBox();
  25.721 @@ -962,15 +1051,15 @@
  25.722  		// e.g. (0,50,700,700) is upper part on A4
  25.723  		// see also /usr/lib/qt3/doc/html/coordsys.html
  25.724  
  25.725 -		QPaintDeviceMetrics metrics (printer);
  25.726 +		Q3PaintDeviceMetrics metrics (printer);
  25.727  
  25.728  		double paperAspect = (double)metrics.width()   / (double)metrics.height();
  25.729  		double   mapAspect = (double)totalBBox.width() / (double)totalBBox.height();
  25.730  
  25.731  		QRect mapRect=totalBBox;
  25.732 -		QCanvasRectangle *frame=NULL;
  25.733 -		QCanvasText *footerFN=NULL;
  25.734 -		QCanvasText *footerDate=NULL;
  25.735 +		Q3CanvasRectangle *frame=NULL;
  25.736 +		Q3CanvasText *footerFN=NULL;
  25.737 +		Q3CanvasText *footerDate=NULL;
  25.738  		if (printFrame || printFooter)
  25.739  		{
  25.740  			
  25.741 @@ -979,9 +1068,9 @@
  25.742  				// Print frame around map
  25.743  				mapRect.setRect (totalBBox.x()-10, totalBBox.y()-10, 
  25.744  					totalBBox.width()+20, totalBBox.height()+20);
  25.745 -				frame=new QCanvasRectangle (mapRect,mapCanvas);
  25.746 -				frame->setBrush (QColor(white));
  25.747 -				frame->setPen (QColor(black));
  25.748 +				frame=new Q3CanvasRectangle (mapRect,mapCanvas);
  25.749 +				frame->setBrush (QColor(Qt::white));
  25.750 +				frame->setPen (QColor(Qt::black));
  25.751  				frame->setZ(0);
  25.752  				frame->show();    
  25.753  			}		
  25.754 @@ -998,13 +1087,13 @@
  25.755  				// Print footer below map
  25.756  				QFont font;		
  25.757  				font.setPointSize(10);
  25.758 -				footerFN=new QCanvasText (mapCanvas);
  25.759 +				footerFN=new Q3CanvasText (mapCanvas);
  25.760  				footerFN->setText ("VYM - " + fileName);
  25.761  				footerFN->setFont(font);
  25.762  				footerFN->move (mapRect.x(), mapRect.y() + mapRect.height() );
  25.763  				footerFN->setZ(Z_TEXT);
  25.764  				footerFN->show();    
  25.765 -				footerDate=new QCanvasText (mapCanvas);
  25.766 +				footerDate=new Q3CanvasText (mapCanvas);
  25.767  				footerDate->setText (QDate::currentDate().toString(Qt::TextDate));
  25.768  				footerDate->setFont(font);
  25.769  				footerDate->move (mapRect.x()+mapRect.width()-footerDate->boundingRect().width(), mapRect.y() + mapRect.height() );
  25.770 @@ -1045,7 +1134,7 @@
  25.771  		}	
  25.772  
  25.773  		// Save settings in vymrc
  25.774 -		settings.writeEntry("/vym/mainwindow/printerName",printer->printerName());
  25.775 +		settings.writeEntry("/mainwindow/printerName",printer->printerName());
  25.776  	}
  25.777  }
  25.778  
  25.779 @@ -1094,9 +1183,6 @@
  25.780  
  25.781  void MapEditor::exportImage(QString fn)
  25.782  {
  25.783 -	// Finish open lineEdits
  25.784 -	if (lineedit) finishedLineEdit();
  25.785 -
  25.786  	setExportMode (true);
  25.787  	QPixmap pix (getPixmap());
  25.788  	pix.save(fn, "PNG");
  25.789 @@ -1107,20 +1193,17 @@
  25.790  {
  25.791  	// should be called before and after exports
  25.792  	// depending on the settings
  25.793 -	if (b && settings.readEntry("/vym/export/useHideExport","yes"))
  25.794 +	if (b && settings.value("/export/useHideExport","yes")=="yes")
  25.795  		setHideTmpMode (HideExport);
  25.796  	else	
  25.797  		setHideTmpMode (HideNone);
  25.798  }
  25.799  
  25.800 -void MapEditor::exportImage(QString fn, int item)
  25.801 +void MapEditor::exportImage(QString fn, QString format)
  25.802  {
  25.803 -	// Finish open lineEdits
  25.804 -	if (lineedit) finishedLineEdit();
  25.805 -
  25.806  	setExportMode (true);
  25.807  	QPixmap pix (getPixmap());
  25.808 -	pix.save(fn, exportImageFormatMenu->text(item) );
  25.809 +	pix.save(fn, format);
  25.810  	setExportMode (false);
  25.811  }
  25.812  
  25.813 @@ -1152,7 +1235,7 @@
  25.814  	QFile file;
  25.815  
  25.816  	file.setName ( dir + "/"+mapName+".xml");
  25.817 -	if ( !file.open( IO_WriteOnly ) )
  25.818 +	if ( !file.open( QIODevice::WriteOnly ) )
  25.819  	{
  25.820  		// This should neverever happen
  25.821  		QMessageBox::critical (0,tr("Critical Export Error"),tr("MapEditor::exportXML couldn't open %1").arg(file.name()));
  25.822 @@ -1184,9 +1267,6 @@
  25.823  
  25.824  void MapEditor::copy()
  25.825  {
  25.826 -	// Finish open lineEdits
  25.827 -	if (lineedit) finishedLineEdit();
  25.828 -
  25.829  	if (selection) 
  25.830  	{
  25.831  		// write to directory
  25.832 @@ -1195,7 +1275,7 @@
  25.833  		QFile file;
  25.834  
  25.835  		file.setName ( clipboardDir + "/"+clipfile+".xml");
  25.836 -		if ( !file.open( IO_WriteOnly ) )
  25.837 +		if ( !file.open( QIODevice::WriteOnly ) )
  25.838  		{
  25.839  			// This should neverever happen
  25.840  			QMessageBox::critical (0,tr("Critical Export Error"),tr("MapEditor::exportXML couldn't open %1").arg(file.name()));
  25.841 @@ -1215,124 +1295,126 @@
  25.842  
  25.843  void MapEditor::redo()
  25.844  {
  25.845 -	// Finish open lineEdits
  25.846 -	if (lineedit) finishedLineEdit();
  25.847 -
  25.848  	blockSaveState=true;
  25.849  	
  25.850 +	// Restore variables
  25.851 +	int curStep=undoSet.readNumEntry (QString("/history/curStep"));
  25.852 +	int undosAvail=undoSet.readNumEntry (QString("/history/undosAvail"));
  25.853 +	int redosAvail=undoSet.readNumEntry (QString("/history/redosAvail"));
  25.854 +	if (redosAvail>0) redosAvail--;
  25.855 +	if (undosAvail<undosTotal) undosAvail++;
  25.856 +	curStep++;
  25.857 +	if (curStep>undosTotal) curStep=1;
  25.858 +	QString undoCommand=  undoSet.readEntry (QString("/history/step-%1/undoCommand").arg(curStep));
  25.859 +	QString undoSelection=undoSet.readEntry (QString("/history/step-%1/undoSelection").arg(curStep));
  25.860 +	QString redoCommand=  undoSet.readEntry (QString("/history/step-%1/redoCommand").arg(curStep));
  25.861 +	QString redoSelection=undoSet.readEntry (QString("/history/step-%1/redoSelection").arg(curStep));
  25.862 +	QString comment=undoSet.readEntry (QString("/history/step-%1/comment").arg(curStep));
  25.863 +
  25.864  	// Find out current undo directory
  25.865 -	QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(undoNum));
  25.866 -
  25.867 -	// Restore variables
  25.868 -	QString undoCommand;
  25.869 -	QString undoSelection;
  25.870 -	QString redoCommand;
  25.871 -	QString redoSelection;
  25.872 -	SimpleSettings set;
  25.873 -	set.readSettings(QString(bakMapDir+"/commands"));
  25.874 -	undoCommand=set.readEntry ("undoCommand");
  25.875 -	undoSelection=set.readEntry ("undoSelection");
  25.876 -	redoCommand=set.readEntry ("redoCommand");
  25.877 -	redoSelection=set.readEntry ("redoSelection");
  25.878 +	QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(curStep));
  25.879 +
  25.880 +/* TODO remove testing
  25.881 +*/
  25.882 +	cout << "ME::redo() begin\n";
  25.883 +	cout << "    undosAvail="<<undosAvail<<endl;
  25.884 +	cout << "    redosAvail="<<redosAvail<<endl;
  25.885 +	cout << "       curStep="<<curStep<<endl;
  25.886 +	cout << "    ---------------------------"<<endl;
  25.887 +	cout << "    comment="<<comment.toStdString()<<endl;
  25.888 +	cout << "    undoCom="<<undoCommand.toStdString()<<endl;
  25.889 +	cout << "    undoSel="<<undoSelection.toStdString()<<endl;
  25.890 +	cout << "    redoCom="<<redoCommand.toStdString()<<endl;
  25.891 +	cout << "    redoSel="<<redoSelection.toStdString()<<endl;
  25.892 +	cout << "    ---------------------------"<<endl<<endl;
  25.893  
  25.894  	// select  object before redo
  25.895 +	// FIXME better give up if no selection there...
  25.896  	if (!redoSelection.isEmpty())
  25.897  		select (redoSelection);
  25.898  
  25.899 -/* TODO remove testing
  25.900 -	cout << "ME::redo() begin\n";
  25.901 -	cout << "    undosTotal="<<undosTotal<<endl;
  25.902 -	cout << "    undosAvail="<<undosAvail<<endl;
  25.903 -	cout << "       undoNum="<<undoNum<<endl;
  25.904 -	cout << "    ---------------------------"<<endl;
  25.905 -	cout << "    undoCom="<<undoCommand<<endl;
  25.906 -	cout << "    undoSel="<<undoSelection<<endl;
  25.907 -	cout << "    ---------------------------"<<endl;
  25.908 -	cout << "    redoCom="<<redoCommand<<endl;
  25.909 -	cout << "    redoSel="<<redoSelection<<endl;
  25.910 -	cout << "    ---------------------------"<<endl;
  25.911 +
  25.912 +	parseAtom (redoCommand);
  25.913 +	mapCenter->reposition();
  25.914 +
  25.915 +	blockSaveState=false;
  25.916 +
  25.917 +	undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
  25.918 +	undoSet.setEntry ("/history/redosAvail",QString::number(redosAvail));
  25.919 +	undoSet.setEntry ("/history/curStep",QString::number(curStep));
  25.920 +	undoSet.writeSettings(histPath);
  25.921 +
  25.922 +	updateActions();
  25.923 +
  25.924 +	/* TODO remove testing
  25.925  */
  25.926 -	parseAtom (undoCommand);
  25.927 -	mapCenter->reposition();
  25.928 -
  25.929 -	//if (!redoSelection.isEmpty())
  25.930 -	//	select (redoSelection);
  25.931 -
  25.932 -	undosAvail--;
  25.933 -	if (undosAvail<1)
  25.934 -		// Undo not longer available now
  25.935 -		actionEditUndo->setEnabled (false);
  25.936 -	else	
  25.937 -		undoNum--; if (undoNum<1) undoNum=undosTotal;
  25.938 -
  25.939 -	blockSaveState=false;
  25.940 -/* TODO remove testing
  25.941  	cout << "ME::redo() end\n";
  25.942  	cout << "    undosAvail="<<undosAvail<<endl;
  25.943 -	cout << "       undoNum="<<undoNum<<endl;
  25.944 +	cout << "    redosAvail="<<redosAvail<<endl;
  25.945 +	cout << "       curStep="<<curStep<<endl;
  25.946  	cout << "    ---------------------------"<<endl<<endl;
  25.947 -*/	
  25.948 +
  25.949 +
  25.950  }
  25.951  
  25.952  void MapEditor::undo()
  25.953  {
  25.954 -	// Finish open lineEdits
  25.955 -	if (lineedit) finishedLineEdit();
  25.956 -
  25.957  	blockSaveState=true;
  25.958  	
  25.959 +	// Restore variables
  25.960 +	int curStep=undoSet.readNumEntry (QString("/history/curStep"));
  25.961 +	int undosAvail=undoSet.readNumEntry (QString("/history/undosAvail"));
  25.962 +	int redosAvail=undoSet.readNumEntry (QString("/history/redosAvail"));
  25.963 +	QString undoCommand=  undoSet.readEntry (QString("/history/step-%1/undoCommand").arg(curStep));
  25.964 +	QString undoSelection=undoSet.readEntry (QString("/history/step-%1/undoSelection").arg(curStep));
  25.965 +	QString redoCommand=  undoSet.readEntry (QString("/history/step-%1/redoCommand").arg(curStep));
  25.966 +	QString redoSelection=undoSet.readEntry (QString("/history/step-%1/redoSelection").arg(curStep));
  25.967 +	QString comment=undoSet.readEntry (QString("/history/step-%1/comment").arg(curStep));
  25.968 +
  25.969  	// Find out current undo directory
  25.970 -	QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(undoNum));
  25.971 -
  25.972 -	// Restore variables
  25.973 -	QString undoCommand;
  25.974 -	QString undoSelection;
  25.975 -	QString redoCommand;
  25.976 -	QString redoSelection;
  25.977 -	SimpleSettings set;
  25.978 -	set.readSettings(QString(bakMapDir+"/commands"));
  25.979 -	undoCommand=  set.readEntry ("undoCommand");
  25.980 -	undoSelection=set.readEntry ("undoSelection");
  25.981 -	redoCommand=  set.readEntry ("redoCommand");
  25.982 -	redoSelection=set.readEntry ("redoSelection");
  25.983 +	QString bakMapDir=QDir::convertSeparators (QString(tmpMapDir+"/undo-%1").arg(curStep));
  25.984  
  25.985  	// select  object before undo
  25.986  	if (!undoSelection.isEmpty())
  25.987  		select (undoSelection);
  25.988  
  25.989  /* TODO testing
  25.990 +*/	
  25.991  	cout << "ME::undo() begin\n";
  25.992 -	cout << "    undosTotal="<<undosTotal<<endl;
  25.993  	cout << "    undosAvail="<<undosAvail<<endl;
  25.994 -	cout << "       undoNum="<<undoNum<<endl;
  25.995 +	cout << "    redosAvail="<<redosAvail<<endl;
  25.996 +	cout << "       curStep="<<curStep<<endl;
  25.997  	cout << "    ---------------------------"<<endl;
  25.998 -	cout << "    undoCom="<<undoCommand<<endl;
  25.999 -	cout << "    undoSel="<<undoSelection<<endl;
 25.1000 -	cout << "    ---------------------------"<<endl;
 25.1001 -	cout << "    redoCom="<<redoCommand<<endl;
 25.1002 -	cout << "    redoSel="<<redoSelection<<endl;
 25.1003 -	cout << "    ---------------------------"<<endl;
 25.1004 -*/	
 25.1005 +	cout << "    comment="<<comment.toStdString()<<endl;
 25.1006 +	cout << "    undoCom="<<undoCommand.toStdString()<<endl;
 25.1007 +	cout << "    undoSel="<<undoSelection.toStdString()<<endl;
 25.1008 +	cout << "    redoCom="<<redoCommand.toStdString()<<endl;
 25.1009 +	cout << "    redoSel="<<redoSelection.toStdString()<<endl;
 25.1010 +	cout << "    ---------------------------"<<endl<<endl;
 25.1011  	parseAtom (undoCommand);
 25.1012  	mapCenter->reposition();
 25.1013  
 25.1014 -	//if (!redoSelection.isEmpty())
 25.1015 -	//	select (redoSelection);
 25.1016 -
 25.1017  	undosAvail--;
 25.1018 -	if (undosAvail<1)
 25.1019 -		// Undo not longer available now
 25.1020 -		actionEditUndo->setEnabled (false);
 25.1021 -	else	
 25.1022 -		undoNum--; if (undoNum<1) undoNum=undosTotal;
 25.1023 +	curStep--; 
 25.1024 +	if (curStep<1) curStep=undosTotal;
 25.1025 +
 25.1026 +	redosAvail++;
 25.1027  
 25.1028  	blockSaveState=false;
 25.1029  /* TODO remove testing
 25.1030 +*/
 25.1031  	cout << "ME::undo() end\n";
 25.1032  	cout << "    undosAvail="<<undosAvail<<endl;
 25.1033 -	cout << "       undoNum="<<undoNum<<endl;
 25.1034 +	cout << "    redosAvail="<<redosAvail<<endl;
 25.1035 +	cout << "       curStep="<<curStep<<endl;
 25.1036  	cout << "    ---------------------------"<<endl<<endl;
 25.1037 -*/
 25.1038 +
 25.1039 +	undoSet.setEntry ("/history/undosAvail",QString::number(undosAvail));
 25.1040 +	undoSet.setEntry ("/history/redosAvail",QString::number(redosAvail));
 25.1041 +	undoSet.setEntry ("/history/curStep",QString::number(curStep));
 25.1042 +	undoSet.writeSettings(histPath);
 25.1043 +
 25.1044 +	updateActions();
 25.1045  }
 25.1046  
 25.1047  void MapEditor::undoXML(const QString &undoSel, const QString &bakMapPath)
 25.1048 @@ -1383,9 +1465,6 @@
 25.1049  
 25.1050  void MapEditor::pasteNoSave()
 25.1051  {
 25.1052 -	// Finish open lineEdits
 25.1053 -	if (lineedit) finishedLineEdit();
 25.1054 -
 25.1055  	load (clipboardDir+"/part.xml",ImportAdd);
 25.1056  }
 25.1057  
 25.1058 @@ -1400,7 +1479,7 @@
 25.1059  	if (selection && (typeid(*selection) == typeid(BranchObj) ||
 25.1060  				      typeid(*selection) == typeid(MapCenterObj))) 
 25.1061  	{
 25.1062 -		saveState(selection,QString("Paste to %1").arg( getName(selection)));
 25.1063 +		saveStatePart(selection,QString("Paste to %1").arg( getName(selection)));
 25.1064  		pasteNoSave();
 25.1065  		mapCenter->reposition();
 25.1066  		adjustCanvasSize();
 25.1067 @@ -1409,7 +1488,7 @@
 25.1068  
 25.1069  void MapEditor::cut()
 25.1070  {
 25.1071 -	saveState(selection->getParObj(),QString("Cut %1").arg(getName(selection)));
 25.1072 +	saveStatePart(selection->getParObj(),QString("Cut %1").arg(getName(selection)));
 25.1073  	copy();
 25.1074  	cutNoSave();
 25.1075  	mapCenter->reposition();
 25.1076 @@ -1418,17 +1497,39 @@
 25.1077  
 25.1078  void MapEditor::move(const int &x, const int &y)
 25.1079  {
 25.1080 -	// TODO no saveState, because this is only internal at undo so far
 25.1081 -	if (selection) selection->move(x,y);
 25.1082 -	if (typeid(*selection) == typeid(FloatImageObj))
 25.1083 -		((FloatImageObj*)selection)->setRelPos();
 25.1084 +	if (selection)
 25.1085 +	{
 25.1086 +		QString ps=qpointToString (selection->getAbsPos());
 25.1087 +		QString s=selection->getSelectString();
 25.1088 +		saveState(
 25.1089 +			s, "move "+ps, 
 25.1090 +			s, "move "+qpointToString (QPoint (x,y)), 
 25.1091 +			QString("Move %1 to  %2").arg(getName(selection)).arg(ps));
 25.1092 +		selection->move(x,y);
 25.1093 +		mapCenter->reposition();
 25.1094 +		adjustCanvasSize();
 25.1095 +	}
 25.1096 +
 25.1097 +}
 25.1098 +
 25.1099 +void MapEditor::moveRel (const int &x, const int &y)
 25.1100 +{
 25.1101 +	if (selection)
 25.1102 +	{
 25.1103 +		QString ps=qpointToString (selection->getRelPos());
 25.1104 +		QString s=selection->getSelectString();
 25.1105 +		saveState(
 25.1106 +			s, "moveRel "+ps, 
 25.1107 +			s, "moveRel "+qpointToString (QPoint (x,y)), 
 25.1108 +			QString("Move %1 to relativ position %2").arg(getName(selection)).arg(ps));
 25.1109 +		selection->setRelPos (QPoint(x,y));
 25.1110 +		mapCenter->reposition();
 25.1111 +		adjustCanvasSize();
 25.1112 +	}
 25.1113  }
 25.1114  
 25.1115  void MapEditor::moveBranchUp()
 25.1116  {
 25.1117 -	// Finish open lineEdits
 25.1118 -	if (lineedit) finishedLineEdit();
 25.1119 -
 25.1120  	BranchObj* bo;
 25.1121  	BranchObj* par;
 25.1122  	if (typeid(*selection) == typeid(BranchObj)  ) 
 25.1123 @@ -1437,9 +1538,9 @@
 25.1124  		if (!bo->canMoveBranchUp()) return;
 25.1125  		par=(BranchObj*)(bo->getParObj());
 25.1126  		selection->unselect();
 25.1127 -		selection=par->moveBranchUp (bo);
 25.1128 +		bo=par->moveBranchUp (bo);	// bo will be the one below selection
 25.1129  		selection->select();
 25.1130 -		saveState("moveBranchDown ()",bo,QString("Move up %1").arg(getName(bo)));
 25.1131 +		saveState (selection,"moveBranchDown ()",bo,"moveBranchUp ()",QString("Move up %1").arg(getName(bo)));
 25.1132  		mapCenter->reposition();
 25.1133  		ensureSelectionVisible();
 25.1134  	}
 25.1135 @@ -1447,9 +1548,6 @@
 25.1136  
 25.1137  void MapEditor::moveBranchDown()
 25.1138  {
 25.1139 -	// Finish open lineEdits
 25.1140 -	if (lineedit) finishedLineEdit();
 25.1141 -
 25.1142  	BranchObj* bo;
 25.1143  	BranchObj* par;
 25.1144  	if (typeid(*selection) == typeid(BranchObj)  ) 
 25.1145 @@ -1458,54 +1556,51 @@
 25.1146  		if (!bo->canMoveBranchDown()) return;
 25.1147  		par=(BranchObj*)(bo->getParObj());
 25.1148  		selection->unselect(); 
 25.1149 -		selection=par->moveBranchDown(bo);
 25.1150 +		bo=par->moveBranchDown(bo);	// bo will be the one above selection
 25.1151  		selection->select();
 25.1152 -		saveState("moveBranchUp ()",bo,QString("Move down %1").arg(getName(bo)));
 25.1153 +		saveState(selection,"moveBranchUp ()",bo,"moveBranchDown ()",QString("Move down %1").arg(getName(bo)));
 25.1154  		mapCenter->reposition();
 25.1155  		ensureSelectionVisible();
 25.1156  	}	
 25.1157  }
 25.1158  
 25.1159 -void MapEditor::editHeading()
 25.1160 +QString MapEditor::getHeading(bool &ok, QPoint &p)
 25.1161  {
 25.1162 -	// Finish open lineEdits
 25.1163 -	if (lineedit) finishedLineEdit();
 25.1164 -
 25.1165 +	if (selection  &&  
 25.1166 +		 (typeid(*selection) == typeid(BranchObj) || 
 25.1167 +		  typeid(*selection) == typeid(MapCenterObj) ) ) 
 25.1168 +	{
 25.1169 +		ok=true;
 25.1170 +		ensureSelectionVisible();
 25.1171 +		p = ((BranchObj*)selection)->getAbsPos();
 25.1172 +		p.setX (p.x() - contentsX());
 25.1173 +		p.setY (p.y() - contentsY() + ((BranchObj*)selection)->height()/2);
 25.1174 +		return ((BranchObj*)selection)->getHeading();
 25.1175 +	}
 25.1176 +	ok=false;
 25.1177 +	return QString();
 25.1178 +}
 25.1179 +
 25.1180 +void MapEditor::setHeading(const QString &s)
 25.1181 +{
 25.1182  	if (selection  &&  
 25.1183  		 (typeid(*selection) == typeid(BranchObj) || 
 25.1184  		  typeid(*selection) == typeid(MapCenterObj) ) ) 
 25.1185  	{
 25.1186  		editingBO=(BranchObj*)selection;
 25.1187 -
 25.1188 -		ensureSelectionVisible();
 25.1189 -		QPoint p = worldMatrix().map(QPoint (editingBO->x(),editingBO->y()));
 25.1190 -		lineedit->setGeometry(p.x()-contentsX(),p.y()-contentsY(),200,25);
 25.1191 -		QString s=editingBO->getHeading();
 25.1192 -		lineedit->setText(s);
 25.1193 -		lineedit->setCursorPosition(1);
 25.1194 -		if (actionSettingsAutoselectText->isOn() && !s.isEmpty() && actionSettingsPasteNewHeading->isOn() )
 25.1195 -			lineedit->selectAll();
 25.1196 -		lineedit->show();
 25.1197 -		lineedit->grabKeyboard();
 25.1198 -		lineedit->setFocus();
 25.1199 -	}				
 25.1200 -}
 25.1201 -
 25.1202 -void MapEditor::setHeading(const QString &s)
 25.1203 -{
 25.1204 -	// Internal function, no saveState needed
 25.1205 -	if (selection  &&  
 25.1206 -		 (typeid(*selection) == typeid(BranchObj) || 
 25.1207 -		  typeid(*selection) == typeid(MapCenterObj) ) ) 
 25.1208 -	{
 25.1209 -		((BranchObj*)selection)->setHeading(s);
 25.1210 +		saveStateConstSelection(
 25.1211 +			"setHeading (\""+editingBO->getHeading()+"\")", 
 25.1212 +			"setHeading (\""+s+"\")", 
 25.1213 +			QString("Set heading of %1 to \"%2\"").arg(getName(editingBO)).arg(s) );
 25.1214 +		editingBO->setHeading(s );
 25.1215 +		editingBO=NULL;
 25.1216  		mapCenter->reposition();
 25.1217  		adjustCanvasSize();
 25.1218  		ensureSelectionVisible();
 25.1219  	}
 25.1220  }
 25.1221  
 25.1222 -void MapEditor::setURL (const QString &s)
 25.1223 +void MapEditor::setURLInt (const QString &s)
 25.1224  {
 25.1225  	// Internal function, no saveState needed
 25.1226  	if (selection  &&  
 25.1227 @@ -1519,7 +1614,20 @@
 25.1228  	}
 25.1229  }
 25.1230  
 25.1231 -void MapEditor::setVymLink (const QString &s)
 25.1232 +void MapEditor::setHeadingInt(const QString &s)
 25.1233 +{
 25.1234 +	if (selection  &&  
 25.1235 +		 (typeid(*selection) == typeid(BranchObj) || 
 25.1236 +		  typeid(*selection) == typeid(MapCenterObj) ) ) 
 25.1237 +	{
 25.1238 +		((BranchObj*)selection)->setHeading(s);
 25.1239 +		mapCenter->reposition();
 25.1240 +		adjustCanvasSize();
 25.1241 +		ensureSelectionVisible();
 25.1242 +	}
 25.1243 +}
 25.1244 +
 25.1245 +void MapEditor::setVymLinkInt (const QString &s)
 25.1246  {
 25.1247  	// Internal function, no saveState needed
 25.1248  	if (selection  &&  
 25.1249 @@ -1533,44 +1641,107 @@
 25.1250  	}
 25.1251  }
 25.1252  
 25.1253 -void MapEditor::addNewBranch(int pos)
 25.1254 +BranchObj* MapEditor::addNewBranchInt(int num)
 25.1255  {
 25.1256 -	// Finish open lineEdits
 25.1257 -	if (lineedit) finishedLineEdit();
 25.1258 -
 25.1259 +	// Depending on pos:
 25.1260 +	// -3		insert in childs of parent  above selection 
 25.1261 +	// -2		add branch to selection 
 25.1262 +	// -1		insert in childs of parent below selection 
 25.1263 +	// 0..n		insert in childs of parent at pos
 25.1264 +	BranchObj *newbo=NULL;
 25.1265  	if (selection  &&  
 25.1266  		 (typeid(*selection) == typeid(BranchObj) || 
 25.1267  		  typeid(*selection) == typeid(MapCenterObj) ) ) 
 25.1268  	{
 25.1269 -		BranchObj* bo1 = (BranchObj*) selection;
 25.1270 -		saveState(selection, QString("Add new branch to %1").arg(getName(bo1)));	//TODO undoCommand
 25.1271 -
 25.1272 -		bool wasScrolled=false;
 25.1273 -		BranchObj *newbo=NULL;
 25.1274 -		if (pos==0)
 25.1275 +		BranchObj* bo = (BranchObj*) selection;
 25.1276 +		if (num==-2)
 25.1277  		{
 25.1278  			// save scroll state. If scrolled, automatically select
 25.1279  			// new branch in order to tmp unscroll parent...
 25.1280 -			wasScrolled=bo1->isScrolled();
 25.1281 -			newbo=bo1->addBranch();
 25.1282 -		}	else 
 25.1283 +			return bo->addBranch();
 25.1284 +			
 25.1285 +		}else if (num==-1)
 25.1286  		{
 25.1287 -			BranchObj *parbo=(BranchObj*)(selection->getParObj());
 25.1288 -			if (parbo)
 25.1289 +			num=bo->getNum()+1;
 25.1290 +			bo=(BranchObj*)bo->getParObj();
 25.1291 +		}else if (num==-3)
 25.1292 +		{
 25.1293 +			num=bo->getNum();
 25.1294 +			bo=(BranchObj*)bo->getParObj();
 25.1295 +		}
 25.1296 +		if (!bo) return bo;
 25.1297 +		newbo=bo->insertBranch(num);
 25.1298 +	}	
 25.1299 +	return newbo;
 25.1300 +}	
 25.1301 +
 25.1302 +void MapEditor::addNewBranch(int pos)
 25.1303 +{
 25.1304 +	// Different meaning than num in addNewBranchInt!
 25.1305 +	// -1	add above
 25.1306 +	//  0	add as child
 25.1307 +	// +1	add below
 25.1308 +	if (selection  &&  
 25.1309 +		 (typeid(*selection) == typeid(BranchObj) || 
 25.1310 +		  typeid(*selection) == typeid(MapCenterObj) ) ) 
 25.1311 +	{
 25.1312 +		BranchObj *bo = (BranchObj*) selection;
 25.1313 +		BranchObj *newbo;
 25.1314 +		newbo=addNewBranchInt (pos-2);
 25.1315 +
 25.1316 +		if (newbo)
 25.1317 +		{
 25.1318 +			saveStateConstSelection (
 25.1319 +				QString ("delete (\"%1\")").arg(newbo->getSelectString()),
 25.1320 +				QString ("addBranch (%1)").arg(pos-2),
 25.1321 +				QString ("Add new branch to %1").arg(getName(bo)));	//TODO undoCommand
 25.1322 +
 25.1323 +			LinkableMapObj *oldselection=selection;
 25.1324 +
 25.1325 +			mapCenter->reposition();
 25.1326 +			adjustCanvasSize();
 25.1327 +
 25.1328 +
 25.1329 +			if (actionSettingsAutoedit->isOn() ||
 25.1330 +				actionSettingsAutoselectHeading->isOn() )
 25.1331  			{
 25.1332 -				if (pos<0)
 25.1333 -					// add above selection
 25.1334 -					newbo=parbo->insertBranch(bo1->getNum());
 25.1335 -				else
 25.1336 -					// add below selection
 25.1337 -					newbo=parbo->insertBranch(bo1->getNum()+1);
 25.1338 -			} else
 25.1339 -				// This should not happen...
 25.1340 -				return;
 25.1341 -			
 25.1342 -		}	
 25.1343 +				selection->unselect();
 25.1344 +				selection=newbo;
 25.1345 +				selection->select();
 25.1346 +				if (actionSettingsAutoedit->isOn() )
 25.1347 +					mainWindow->editHeading();
 25.1348 +				if (!actionSettingsAutoselectHeading->isOn()
 25.1349 +					)//&& !wasScrolled)  //FIXME wasScrolled was moved to addNewBranchInt
 25.1350 +				{
 25.1351 +					selection->unselect();
 25.1352 +					selection=oldselection;
 25.1353 +					selection->select();
 25.1354 +				}
 25.1355 +			}	
 25.1356 +		}
 25.1357 +	}	
 25.1358 +}
 25.1359 +
 25.1360 +
 25.1361 +void MapEditor::addNewBranchHere()
 25.1362 +{
 25.1363 +	if (selection  &&  
 25.1364 +		 (typeid(*selection) == typeid(BranchObj) ) )
 25.1365 +	{
 25.1366 +		BranchObj* bo1 = (BranchObj*) selection;
 25.1367 +		saveStatePart(selection, QString("Add new branch here").arg(getName(bo1)));
 25.1368 +
 25.1369 +		bool wasScrolled=false;
 25.1370 +		BranchObj *newbo=NULL;
 25.1371 +		BranchObj *parbo=(BranchObj*)(selection->getParObj());
 25.1372 +		if (parbo)
 25.1373 +		{
 25.1374 +			// add below selection
 25.1375 +			newbo=parbo->insertBranch(bo1->getNum()+1);
 25.1376 +		} 
 25.1377  
 25.1378  		LinkableMapObj *oldselection=selection;
 25.1379 +		((BranchObj*)selection)->moveBranchTo (newbo,-1);
 25.1380  
 25.1381  		mapCenter->reposition();
 25.1382  		adjustCanvasSize();
 25.1383 @@ -1580,13 +1751,8 @@
 25.1384  			selection->unselect();
 25.1385  			selection=newbo;
 25.1386  			selection->select();
 25.1387 -			if (actionSettingsPasteNewHeading->isOn() )
 25.1388 -			{
 25.1389 -				BranchObj *bo2= (BranchObj*)selection;
 25.1390 -				bo2->setHeading("");
 25.1391 -			}	
 25.1392  			if (actionSettingsAutoedit->isOn() )
 25.1393 -				editHeading();
 25.1394 +				mainWindow->editHeading();
 25.1395  			if (!actionSettingsAutoselectHeading->isOn()
 25.1396  				&& !wasScrolled)
 25.1397  			{
 25.1398 @@ -1598,74 +1764,22 @@
 25.1399  	}	
 25.1400  }
 25.1401  
 25.1402 -
 25.1403 -void MapEditor::addNewBranchHere()
 25.1404 -{
 25.1405 -	// Finish open lineEdits
 25.1406 -	if (lineedit) finishedLineEdit();
 25.1407 -
 25.1408 -	if (selection  &&  
 25.1409 -		 (typeid(*selection) == typeid(BranchObj) ) )
 25.1410 -	{
 25.1411 -		BranchObj* bo1 = (BranchObj*) selection;
 25.1412 -		saveState(selection, QString("Add new branch here").arg(getName(bo1)));
 25.1413 -
 25.1414 -		bool wasScrolled=false;
 25.1415 -		BranchObj *newbo=NULL;
 25.1416 -		BranchObj *parbo=(BranchObj*)(selection->getParObj());
 25.1417 -		if (parbo)
 25.1418 -		{
 25.1419 -			// add below selection
 25.1420 -			newbo=parbo->insertBranch(bo1->getNum()+1);
 25.1421 -		} 
 25.1422 -
 25.1423 -		LinkableMapObj *oldselection=selection;
 25.1424 -		((BranchObj*)selection)->moveBranchTo (newbo,-1);
 25.1425 -
 25.1426 -		mapCenter->reposition();
 25.1427 -		adjustCanvasSize();
 25.1428 -		if (actionSettingsAutoedit->isOn() ||
 25.1429 -			actionSettingsAutoselectHeading->isOn() )
 25.1430 -		{
 25.1431 -			selection->unselect();
 25.1432 -			selection=newbo;
 25.1433 -			selection->select();
 25.1434 -			if (actionSettingsPasteNewHeading->isOn() )
 25.1435 -			{
 25.1436 -				BranchObj *bo2= (BranchObj*)selection;
 25.1437 -				bo2->setHeading("");
 25.1438 -			}	
 25.1439 -			if (actionSettingsAutoedit->isOn() )
 25.1440 -				editHeading();
 25.1441 -			if (!actionSettingsAutoselectHeading->isOn()
 25.1442 -				&& !wasScrolled)
 25.1443 -			{
 25.1444 -				selection->unselect();
 25.1445 -				selection=oldselection;
 25.1446 -				selection->select();
 25.1447 -			}
 25.1448 -		}	
 25.1449 -	}	
 25.1450 -}
 25.1451 -
 25.1452  void MapEditor::deleteSelection()
 25.1453  {
 25.1454 -	// Finish open lineEdits
 25.1455 -	if (lineedit) finishedLineEdit();
 25.1456 -
 25.1457  	if (selection  && typeid(*selection) ==typeid(BranchObj) ) 
 25.1458  	{
 25.1459 -		BranchObj* bo=dynamic_cast <BranchObj*> (selection);
 25.1460 +		BranchObj* bo=(BranchObj*)selection;
 25.1461  		BranchObj* par=(BranchObj*)(bo->getParObj());
 25.1462  		bo->unselect();
 25.1463  		if (selection->getDepth()>1)
 25.1464  			// Normal branch, save parent with childs
 25.1465 -			saveState(par,QString("Delete %1").arg(getName(bo)));
 25.1466 +			saveStatePart(par,QString("Delete %1").arg(getName(bo)));
 25.1467 +		//	naveState (UndoCom, par, QString("insertBranchAt (%1)", bo, "", QString ("Delete %1").arg(getName(bo))));
 25.1468  		else
 25.1469  			// Mainbranch, save whole map
 25.1470  			// TODO Better would be to insert mainbranch again at pos
 25.1471  			// But undoCommand is missing right now
 25.1472 -			saveState(QString("Delete %1").arg(getName(bo)));
 25.1473 +			saveStateComplete(QString("Delete %1").arg(getName(bo)));
 25.1474  		selection=NULL;
 25.1475  		par->removeBranch(bo);
 25.1476  		selection=par;
 25.1477 @@ -1676,9 +1790,9 @@
 25.1478  	}
 25.1479  	if (selection  && typeid(*selection) ==typeid(FloatImageObj) ) 
 25.1480  	{
 25.1481 -		FloatImageObj* fio=dynamic_cast <FloatImageObj*> (selection);
 25.1482 +		FloatImageObj* fio=(FloatImageObj*)selection;
 25.1483  		BranchObj* par=(BranchObj*)(fio->getParObj());
 25.1484 -		saveState(par, QString("Delete %1").arg(getName(fio)));
 25.1485 +		saveStatePart(par, QString("Delete %1").arg(getName(fio)));
 25.1486  		fio->unselect();
 25.1487  		selection=NULL;
 25.1488  		par->removeFloatImage(fio);
 25.1489 @@ -1732,7 +1846,13 @@
 25.1490  	return false;
 25.1491  }
 25.1492  
 25.1493 -void MapEditor::select (LinkableMapObj *lmo)
 25.1494 +QString MapEditor::getSelectString()
 25.1495 +{
 25.1496 +	if (selection) return selection->getSelectString();
 25.1497 +	return QString();
 25.1498 +}
 25.1499 +
 25.1500 +void MapEditor::selectInt (LinkableMapObj *lmo)
 25.1501  {
 25.1502  	if (lmo && selection != lmo)
 25.1503  	{
 25.1504 @@ -1743,10 +1863,9 @@
 25.1505  			
 25.1506  		adjustCanvasSize();
 25.1507  	}
 25.1508 -
 25.1509  }
 25.1510  
 25.1511 -void MapEditor::selectNextBranch()
 25.1512 +void MapEditor::selectNextBranchInt()
 25.1513  {
 25.1514  	// Increase number of branch
 25.1515  	if (selection)
 25.1516 @@ -1826,7 +1945,7 @@
 25.1517  	}	
 25.1518  }
 25.1519  
 25.1520 -void MapEditor::selectPrevBranch()
 25.1521 +void MapEditor::selectPrevBranchInt()
 25.1522  {
 25.1523  	// Decrease number of branch
 25.1524  	if (selection)
 25.1525 @@ -1907,40 +2026,34 @@
 25.1526  
 25.1527  void MapEditor::selectUpperBranch()
 25.1528  {
 25.1529 -	// Finish open lineEdits
 25.1530 -	if (lineedit) finishedLineEdit();
 25.1531 -
 25.1532  	if (selection) 
 25.1533  	{
 25.1534  		if (typeid(*selection) == typeid(BranchObj))
 25.1535  		{
 25.1536  			if (selection->getOrientation()==OrientRightOfCenter)
 25.1537 -				selectPrevBranch();
 25.1538 +				selectPrevBranchInt();
 25.1539  			else
 25.1540  				if (selection->getDepth()==1)
 25.1541 -					selectNextBranch();
 25.1542 +					selectNextBranchInt();
 25.1543  				else
 25.1544 -					selectPrevBranch();
 25.1545 +					selectPrevBranchInt();
 25.1546  		}		
 25.1547  	}
 25.1548  }
 25.1549  
 25.1550  void MapEditor::selectLowerBranch()
 25.1551  {
 25.1552 -	// Finish open lineEdits
 25.1553 -	if (lineedit) finishedLineEdit();
 25.1554 -
 25.1555  	if (selection) 
 25.1556  	{
 25.1557  		if (typeid(*selection) == typeid(BranchObj))
 25.1558  		{
 25.1559  			if (selection->getOrientation()==OrientRightOfCenter)
 25.1560 -				selectNextBranch();
 25.1561 +				selectNextBranchInt();
 25.1562  			else
 25.1563  				if (selection->getDepth()==1)
 25.1564 -					selectPrevBranch();
 25.1565 +					selectPrevBranchInt();
 25.1566  				else
 25.1567 -					selectNextBranch();
 25.1568 +					selectNextBranchInt();
 25.1569  		}		
 25.1570  	}
 25.1571  }
 25.1572 @@ -1948,9 +2061,6 @@
 25.1573  
 25.1574  void MapEditor::selectLeftBranch()
 25.1575  {
 25.1576 -	// Finish open lineEdits
 25.1577 -	if (lineedit) finishedLineEdit();
 25.1578 -
 25.1579  	BranchObj* bo;
 25.1580  	BranchObj* par;
 25.1581  	if (selection) 
 25.1582 @@ -2010,9 +2120,6 @@
 25.1583  
 25.1584  void MapEditor::selectRightBranch()
 25.1585  {
 25.1586 -	// Finish open lineEdits
 25.1587 -	if (lineedit) finishedLineEdit();
 25.1588 -
 25.1589  	BranchObj* bo;
 25.1590  	BranchObj* par;
 25.1591  
 25.1592 @@ -2024,7 +2131,7 @@
 25.1593  			bo=par->getLastSelectedBranch();
 25.1594  			if (bo)
 25.1595  			{
 25.1596 -				// Workaround for relecting on left and right side
 25.1597 +				// Workaround for reselecting on left and right side
 25.1598  				if (bo->getOrientation()==OrientLeftOfCenter)
 25.1599  					bo=par->getFirstBranch();
 25.1600  				if (bo)
 25.1601 @@ -2070,9 +2177,6 @@
 25.1602  
 25.1603  void MapEditor::selectFirstBranch()
 25.1604  {
 25.1605 -	// Finish open lineEdits
 25.1606 -	if (lineedit) finishedLineEdit();
 25.1607 -
 25.1608  	BranchObj *bo1;
 25.1609  	BranchObj *bo2;
 25.1610  	BranchObj* par;
 25.1611 @@ -2095,9 +2199,6 @@
 25.1612  
 25.1613  void MapEditor::selectLastBranch()
 25.1614  {
 25.1615 -	// Finish open lineEdits
 25.1616 -	if (lineedit) finishedLineEdit();
 25.1617 -
 25.1618  	BranchObj *bo1;
 25.1619  	BranchObj *bo2;
 25.1620  	BranchObj* par;
 25.1621 @@ -2125,13 +2226,11 @@
 25.1622  
 25.1623  void MapEditor::selectBackgroundColor()
 25.1624  {
 25.1625 -	// Finish open lineEdits
 25.1626 -	if (lineedit) finishedLineEdit();
 25.1627 -
 25.1628  	QColor col = QColorDialog::getColor( mapCanvas->backgroundColor(), this );
 25.1629  	if ( !col.isValid() ) return;
 25.1630  	setBackgroundColor( col );
 25.1631 -	saveState(QString("Set background color of map to %1").arg(col.name()));
 25.1632 +	//TODO undocomm
 25.1633 +	saveStateComplete(QString("Set background color of map to %1").arg(col.name()));
 25.1634  }
 25.1635  
 25.1636  void MapEditor::setBackgroundColor(QColor c)
 25.1637 @@ -2161,7 +2260,7 @@
 25.1638  			typeid(*selection) == typeid(MapCenterObj))
 25.1639  		{
 25.1640  			BranchObj *bo=(BranchObj*)selection;
 25.1641 -			saveState(selection, QString("Set color of %1 to %2").arg(getName(bo)).arg(actColor.name()));	//TODO undoCommand
 25.1642 +			saveStatePart(selection, QString("Set color of %1 to %2").arg(getName(bo)).arg(actColor.name()));	//TODO undoCommand
 25.1643  			bo->setColor(actColor); // color branch
 25.1644  		}    
 25.1645  	}
 25.1646 @@ -2175,7 +2274,7 @@
 25.1647  			typeid(*selection) == typeid(MapCenterObj))
 25.1648  		{
 25.1649  			BranchObj *bo=(BranchObj*)selection;
 25.1650 -			saveState(selection, QString ("Set color of %1 and childs to %2").arg(getName(bo)).arg(actColor.name()));	//TODO undoCommand
 25.1651 +			saveStatePart(selection, QString ("Set color of %1 and childs to %2").arg(getName(bo)).arg(actColor.name()));	//TODO undoCommand
 25.1652  			bo->setColorChilds(actColor); // color links, color childs
 25.1653  		}    
 25.1654  	}
 25.1655 @@ -2186,15 +2285,27 @@
 25.1656  {
 25.1657  	if (selection)
 25.1658  	{
 25.1659 -		BranchObj *bo=(BranchObj*)selection;
 25.1660 -		QString s;
 25.1661 -		if (bo->isSetStandardFlag(f))
 25.1662 -			s="Unset";
 25.1663 -		else
 25.1664 -			s="Set";
 25.1665 -		saveState(selection, QString("%1 standard flag \"%2\" of %3").arg(s).arg(f).arg(getName(bo)));// TODO undoCommand	
 25.1666 -		bo->toggleStandardFlag (f,actionSettingsUseFlagGroups->isOn());
 25.1667 -		adjustCanvasSize();
 25.1668 +		if (typeid(*selection) == typeid(BranchObj) ||
 25.1669 +			typeid(*selection) == typeid(MapCenterObj))
 25.1670 +		{
 25.1671 +			BranchObj *bo=(BranchObj*)selection;
 25.1672 +			QString u,r;
 25.1673 +			if (bo->isSetStandardFlag(f))
 25.1674 +			{
 25.1675 +				r="unsetFlag";
 25.1676 +				u="setFlag";
 25.1677 +			}	
 25.1678 +			else
 25.1679 +			{
 25.1680 +				u="unsetFlag";
 25.1681 +				r="setFlag";
 25.1682 +			}	
 25.1683 +			saveStateConstSelection(QString("%1 (\"%2\")").arg(u).arg(f), 
 25.1684 +				QString("%1 (\"%2\")").arg(r).arg(f),
 25.1685 +				QString("Toggling standard flag \"%1\" of %2").arg(f).arg(getName(bo)));
 25.1686 +			bo->toggleStandardFlag (f,actionSettingsUseFlagGroups->isOn());
 25.1687 +			adjustCanvasSize();
 25.1688 +		}
 25.1689  	}	
 25.1690  }
 25.1691  
 25.1692 @@ -2208,6 +2319,9 @@
 25.1693  
 25.1694  BranchObj* MapEditor::findText (QString s, bool cs)
 25.1695  {
 25.1696 +	QTextDocument::FindFlags flags=0;
 25.1697 +	if (cs) flags=QTextDocument::FindCaseSensitively;
 25.1698 +
 25.1699  	if (!itFind) 
 25.1700  	{	// Nothing found or new find process
 25.1701  		if (EOFind)
 25.1702 @@ -2232,7 +2346,7 @@
 25.1703  					adjustCanvasSize();
 25.1704  					ensureSelectionVisible();
 25.1705  				}
 25.1706 -				if (textEditor->findText(s,cs)) 
 25.1707 +				if (textEditor->findText(s,flags)) 
 25.1708  				{
 25.1709  					searching=false;
 25.1710  					foundNote=true;
 25.1711 @@ -2282,7 +2396,7 @@
 25.1712  		if ( ok) 
 25.1713  		{
 25.1714  			// user entered something and pressed OK
 25.1715 -			saveState("setURL (\""+bo->getURL()+"\")","setURL (\""+text+"\")", QString("Set URL of %1 to %21").arg(getName(bo)).arg(text));	
 25.1716 +			saveStateConstSelection("setURL (\""+bo->getURL()+"\")","setURL (\""+text+"\")", QString("Set URL of %1 to %21").arg(getName(bo)).arg(text));	
 25.1717  			bo->setURL (text);
 25.1718  			updateActions();
 25.1719  		}	
 25.1720 @@ -2298,13 +2412,31 @@
 25.1721  		return "";
 25.1722  }
 25.1723  
 25.1724 +QStringList MapEditor::getURLs()
 25.1725 +{
 25.1726 +	QStringList urls;
 25.1727 +	if (selection && (typeid(*selection) == typeid(BranchObj) ||
 25.1728 +			typeid(*selection) == typeid(MapCenterObj)) )
 25.1729 +	{		
 25.1730 +		BranchObj *bo=(BranchObj*)selection;
 25.1731 +		bo=bo->first();	
 25.1732 +		while (bo) 
 25.1733 +		{
 25.1734 +			if (!bo->getURL().isEmpty()) urls.append( bo->getURL());
 25.1735 +			bo=bo->next();
 25.1736 +		}	
 25.1737 +	}	
 25.1738 +	return urls;
 25.1739 +}
 25.1740 +
 25.1741 +
 25.1742  void MapEditor::editHeading2URL()
 25.1743  {
 25.1744  	if (selection && (typeid(*selection) == typeid(BranchObj) ||
 25.1745  			typeid(*selection) == typeid(MapCenterObj)) )
 25.1746  	{		
 25.1747  		BranchObj *bo=(BranchObj*)selection;
 25.1748 -		saveState("setURL (\""+bo->getURL()+"\")","setURL (\""+bo->getHeading()+"\")",QString("Copy heading of %1 to URL").arg(getName(bo)));	
 25.1749 +		saveStateConstSelection("setURL (\""+bo->getURL()+"\")","setURL (\""+bo->getHeading()+"\")",QString("Copy heading of %1 to URL").arg(getName(bo)));	
 25.1750  		bo->setURL (bo->getHeading());
 25.1751  		updateActions();
 25.1752  	}
 25.1753 @@ -2317,7 +2449,7 @@
 25.1754  	{		
 25.1755  		BranchObj *bo=(BranchObj*)selection;
 25.1756  		QString url= "https://bugzilla.novell.com/show_bug.cgi?id="+bo->getHeading();
 25.1757 -		saveState("setURL (\""+bo->getURL()+"\")","setURL (\""+url+"\")",QString("Use heading of %1 as link to Novell Bugzilla").arg(getName(bo)));	
 25.1758 +		saveStateConstSelection("setURL (\""+bo->getURL()+"\")","setURL (\""+url+"\")",QString("Use heading of %1 as link to Novell Bugzilla").arg(getName(bo)));	
 25.1759  		bo->setURL (url);
 25.1760  		updateActions();
 25.1761  	}
 25.1762 @@ -2330,7 +2462,7 @@
 25.1763  	{		
 25.1764  		BranchObj *bo=(BranchObj*)selection;
 25.1765  		QString url= "http://keeper.suse.de:8080/webfate/match/id?value=ID"+bo->getHeading();
 25.1766 -		saveState("setURL (\""+bo->getURL()+"\")","setURL (\""+url+"\")",QString("Use heading of %1 as link to FATE").arg(getName(bo)));	
 25.1767 +		saveStateConstSelection("setURL (\""+bo->getURL()+"\")","setURL (\""+url+"\")",QString("Use heading of %1 as link to FATE").arg(getName(bo)));	
 25.1768  		bo->setURL (url);
 25.1769  		updateActions();
 25.1770  	}
 25.1771 @@ -2342,7 +2474,7 @@
 25.1772  			typeid(*selection) == typeid(MapCenterObj)) )
 25.1773  	{		
 25.1774  		BranchObj *bo=(BranchObj*)selection;
 25.1775 -		QFileDialog *fd=new QFileDialog( this,__VYM " - " +tr("Link to another map"));
 25.1776 +		Q3FileDialog *fd=new Q3FileDialog( this,__VYM " - " +tr("Link to another map"));
 25.1777  		fd->addFilter (QString (tr("vym map") + " (*.vym)"));
 25.1778  		fd->setCaption(__VYM " - " +tr("Link to another map"));
 25.1779  		if (! bo->getVymLink().isEmpty() )
 25.1780 @@ -2352,7 +2484,7 @@
 25.1781  		QString fn;
 25.1782  		if ( fd->exec() == QDialog::Accepted )
 25.1783  		{
 25.1784 -			saveState("setVymLink (\""+bo->getVymLink()+"\")","setVymLink (\""+fd->selectedFile()+"\")",QString("Set vymlink of %1 to %2").arg(getName(bo)).arg(fd->selectedFile()));	
 25.1785 +			saveStateConstSelection("setVymLink (\""+bo->getVymLink()+"\")","setVymLink (\""+fd->selectedFile()+"\")",QString("Set vymlink of %1 to %2").arg(getName(bo)).arg(fd->selectedFile()));	
 25.1786  			bo->setVymLink (fd->selectedFile() );
 25.1787  			updateActions();
 25.1788  			mapCenter->reposition();
 25.1789 @@ -2368,7 +2500,7 @@
 25.1790  			typeid(*selection) == typeid(MapCenterObj)) )
 25.1791  	{		
 25.1792  		BranchObj *bo=(BranchObj*)selection;
 25.1793 -		saveState("setVymLink (\""+bo->getVymLink()+"\")","setVymLink (\"\")",QString("Unset vymlink of %1").arg(getName(bo)));	
 25.1794 +		saveStateConstSelection("setVymLink (\""+bo->getVymLink()+"\")","setVymLink (\"\")",QString("Unset vymlink of %1").arg(getName(bo)));	
 25.1795  		bo->setVymLink ("" );
 25.1796  		updateActions();
 25.1797  		mapCenter->reposition();
 25.1798 @@ -2396,7 +2528,7 @@
 25.1799  			oo->setHideInExport(true);
 25.1800  			s="Set";
 25.1801  		}	
 25.1802 -		saveState(QString ("%1 hide export flag of %2").arg(s).arg(getName(selection)));	//TODO undoCommand
 25.1803 +		saveStateComplete(QString ("%1 hide export flag of %2").arg(s).arg(getName(selection)));	//TODO undoCommand
 25.1804  		actionEditToggleHideExport->setOn (oo->hideInExport());	
 25.1805  		updateActions();
 25.1806  		mapCenter->reposition();
 25.1807 @@ -2416,6 +2548,24 @@
 25.1808  	
 25.1809  }
 25.1810  
 25.1811 +QStringList MapEditor::getVymLinks()
 25.1812 +{
 25.1813 +	QStringList links;
 25.1814 +	if (selection && (typeid(*selection) == typeid(BranchObj) ||
 25.1815 +			typeid(*selection) == typeid(MapCenterObj)) )
 25.1816 +	{		
 25.1817 +		BranchObj *bo=(BranchObj*)selection;
 25.1818 +		bo=bo->first();	
 25.1819 +		while (bo) 
 25.1820 +		{
 25.1821 +			if (!bo->getVymLink().isEmpty()) links.append( bo->getVymLink());
 25.1822 +			bo=bo->next();
 25.1823 +		}	
 25.1824 +	}	
 25.1825 +	return links;
 25.1826 +}
 25.1827 +
 25.1828 +
 25.1829  void MapEditor::removeBranchKeepChilds()
 25.1830  {
 25.1831  	if (selection && (typeid(*selection) == typeid(BranchObj) ))
 25.1832 @@ -2424,9 +2574,9 @@
 25.1833  		BranchObj* par=(BranchObj*)(bo->getParObj());
 25.1834  		QString s=QString("Remove %1 and keep its childs").arg(getName(bo));
 25.1835  		if (bo->getDepth()==1)
 25.1836 -			saveState(s);
 25.1837 +			saveStateComplete(s);
 25.1838  		else	
 25.1839 -			saveState(selection->getParObj(),s);	// TODO undoCommand
 25.1840 +			saveStatePart(selection->getParObj(),s);	// TODO undoCommand
 25.1841  		QString sel=selection->getSelectString();
 25.1842  		unselect();
 25.1843  		par->removeBranchHere(bo);
 25.1844 @@ -2439,7 +2589,7 @@
 25.1845  {
 25.1846  	if (selection && (typeid(*selection) == typeid(BranchObj) ))
 25.1847  	{		
 25.1848 -		saveState(selection->getParObj(), QString("Remove childs of branch %1").arg(getName(selection)));
 25.1849 +		saveStatePart(selection->getParObj(), QString("Remove childs of branch %1").arg(getName(selection)));
 25.1850  		((BranchObj*)selection)->removeChilds();
 25.1851  		mapCenter->reposition();
 25.1852  	}	
 25.1853 @@ -2455,8 +2605,8 @@
 25.1854  	// Calc some stats
 25.1855  	QString stats;
 25.1856      int i=0;
 25.1857 -    QCanvasItemList l=canvas()->allItems();
 25.1858 -    for (QCanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) 
 25.1859 +    Q3CanvasItemList l=canvas()->allItems();
 25.1860 +    for (Q3CanvasItemList::Iterator it=l.begin(); it!=l.end(); ++it) 
 25.1861          i++;
 25.1862      stats+=QString ("%1 items on canvas\n").arg (i,6);
 25.1863  
 25.1864 @@ -2483,7 +2633,7 @@
 25.1865  	// Finally show dialog
 25.1866  	if (dia.exec() == QDialog::Accepted)
 25.1867  	{
 25.1868 -		saveState("Edit info about map");	//TODO undoCommand
 25.1869 +		saveStateComplete("Edit info about map");	//TODO undoCommand
 25.1870  		mapCenter->setAuthor (dia.getAuthor() );
 25.1871  		mapCenter->setComment (dia.getComment() );
 25.1872  	}
 25.1873 @@ -2521,8 +2671,16 @@
 25.1874      pix.fill( defLinkColor );
 25.1875      actionFormatLinkColor->setIconSet( pix );
 25.1876  
 25.1877 -	actionEditUndo->setEnabled( mapChanged );
 25.1878  	actionFileSave->setEnabled( mapUnsaved );
 25.1879 +	if (undoSet.readNumEntry("/history/undosAvail",0)>0)
 25.1880 +		actionEditUndo->setEnabled( true);
 25.1881 +	else	
 25.1882 +		actionEditUndo->setEnabled( false);
 25.1883 +
 25.1884 +	if (undoSet.readNumEntry("/history/redosAvail",0)>0)
 25.1885 +		actionEditRedo->setEnabled( true);
 25.1886 +	else	
 25.1887 +		actionEditRedo->setEnabled( false);
 25.1888  
 25.1889  	if (selection)
 25.1890  	{
 25.1891 @@ -2533,17 +2691,14 @@
 25.1892  			// Take care of links
 25.1893  			if (bo->countXLinks()==0)
 25.1894  			{
 25.1895 -				branchLinksContextMenu->clear();
 25.1896 -				branchLinksContextMenu->insertItem ("No xLink available");
 25.1897 -				branchLinksContextMenuDup->clear();
 25.1898 -				branchLinksContextMenuDup->insertItem ("No xLink available");
 25.1899 -				
 25.1900 +				branchXLinksContextMenuEdit->clear();
 25.1901 +				branchXLinksContextMenuFollow->clear();
 25.1902  			} else
 25.1903  			{
 25.1904  				BranchObj *bot;
 25.1905  				QString s;
 25.1906 -				branchLinksContextMenu->clear();
 25.1907 -				branchLinksContextMenuDup->clear();
 25.1908 +				branchXLinksContextMenuEdit->clear();
 25.1909 +				branchXLinksContextMenuFollow->clear();
 25.1910  				for (int i=0; i<=bo->countXLinks();i++)
 25.1911  				{
 25.1912  					bot=bo->XLinkTargetAt(i);
 25.1913 @@ -2552,8 +2707,8 @@
 25.1914  						s=bot->getHeading();
 25.1915  						if (s.length()>25)
 25.1916  							s=s.left(25)+"...";
 25.1917 -						branchLinksContextMenu->insertItem (s);
 25.1918 -						branchLinksContextMenuDup->insertItem (s);
 25.1919 +						branchXLinksContextMenuFollow->addAction (s);
 25.1920 +						branchXLinksContextMenuEdit->addAction (s);
 25.1921  					}	
 25.1922  				}
 25.1923  			}
 25.1924 @@ -2629,7 +2784,7 @@
 25.1925  		if ( (typeid(*selection) == typeid(FloatImageObj)) )
 25.1926  		{
 25.1927  			FloatObj *fo=(FloatImageObj*)selection;
 25.1928 -			standardFlagsDefault->setEnabled (false);
 25.1929 +//FIXME do this in mainwindow					standardFlagsDefault->setEnabled (false);
 25.1930  
 25.1931  			actionEditOpenURL->setEnabled (false);
 25.1932  			actionEditOpenVymLink->setEnabled (false);
 25.1933 @@ -2652,7 +2807,7 @@
 25.1934  
 25.1935  	} else
 25.1936  	{
 25.1937 -		standardFlagsDefault->setEnabled (false);
 25.1938 +//FIXME do this in mainwindow				standardFlagsDefault->setEnabled (false);
 25.1939  
 25.1940  		actionEditCopy->setEnabled (false);	
 25.1941  		actionEditCut->setEnabled (false);	
 25.1942 @@ -2684,7 +2839,7 @@
 25.1943  {
 25.1944  	linkstyle=ls;
 25.1945  
 25.1946 -	saveState("Set link style");	// TODO undoCommand
 25.1947 +	saveStateComplete("Set link style");	// TODO undoCommand
 25.1948  	BranchObj *bo;
 25.1949  	bo=mapCenter->first();
 25.1950  	bo=bo->next();
 25.1951 @@ -2772,13 +2927,10 @@
 25.1952  
 25.1953  void MapEditor::selectLinkColor()
 25.1954  {
 25.1955 -	// Finish open lineEdits
 25.1956 -	if (lineedit) finishedLineEdit();
 25.1957 -
 25.1958  	QColor col = QColorDialog::getColor( defLinkColor, this );
 25.1959  	if ( !col.isValid() ) return;
 25.1960  	setLinkColor( col );
 25.1961 -	saveState(QString("Set link color to %1").arg(col.name()));	//TODO undoCommand
 25.1962 +	saveStateComplete(QString("Set link color to %1").arg(col.name()));	//TODO undoCommand
 25.1963  
 25.1964  }
 25.1965  
 25.1966 @@ -2794,7 +2946,7 @@
 25.1967  			s="Unscroll";
 25.1968  		else	
 25.1969  			s="Scroll";
 25.1970 -		saveState(selection, QString ("%1 %2").arg(s).arg(getName(bo)));
 25.1971 +		saveStatePart(selection, QString ("%1 %2").arg(s).arg(getName(bo)));
 25.1972  		bo->toggleScroll();
 25.1973  		adjustCanvasSize();
 25.1974  		canvas()->update();
 25.1975 @@ -2820,13 +2972,13 @@
 25.1976  	{
 25.1977  		BranchObj *bo=((BranchObj*)selection);
 25.1978  
 25.1979 -		QFileDialog *fd=new QFileDialog( this);
 25.1980 -		fd->setMode (QFileDialog::ExistingFiles);
 25.1981 +		Q3FileDialog *fd=new Q3FileDialog( this);
 25.1982 +		fd->setMode (Q3FileDialog::ExistingFiles);
 25.1983  		fd->addFilter (QString (tr("Images") + " (*.png *.bmp *.xbm *.jpg *.png *.xpm *.gif *.pnm)"));
 25.1984  		ImagePreview *p =new ImagePreview (fd);
 25.1985  		fd->setContentsPreviewEnabled( TRUE );
 25.1986  		fd->setContentsPreview( p, p );
 25.1987 -		fd->setPreviewMode( QFileDialog::Contents );
 25.1988 +		fd->setPreviewMode( Q3FileDialog::Contents );
 25.1989  		fd->setCaption(__VYM " - " +tr("Load image"));
 25.1990  		fd->setDir (lastImageDir);
 25.1991  		fd->show();
 25.1992 @@ -2834,8 +2986,9 @@
 25.1993  		QString fn;
 25.1994  		if ( fd->exec() == QDialog::Accepted )
 25.1995  		{
 25.1996 -			saveState(selection, QString("Add floatimage to %1").arg(getName(selection)));
 25.1997 -			lastImageDir=fn.left(fn.findRev ("/"));
 25.1998 +			saveStatePart(selection, QString("Add floatimage to %1").arg(getName(selection)));
 25.1999 +			// FIXME in QT4 use:	lastImageDir=fd->directory();
 25.2000 +			lastImageDir=QDir (fd->dirPath());
 25.2001  			QStringList flist = fd->selectedFiles();
 25.2002  			QStringList::Iterator it = flist.begin();
 25.2003  			while( it != flist.end() ) 
 25.2004 @@ -2857,26 +3010,18 @@
 25.2005  	}
 25.2006  }
 25.2007  
 25.2008 -void MapEditor::saveFloatImage (int item)
 25.2009 +void MapEditor::saveFloatImage ()
 25.2010  {
 25.2011  	if (selection && 
 25.2012  		(typeid(*selection) == typeid(FloatImageObj)) )
 25.2013  	{
 25.2014  		FloatImageObj *fio=((FloatImageObj*)selection);
 25.2015 -		const char* fmt = saveImageFormatMenu->text(item);
 25.2016 -
 25.2017 -		QFileDialog *fd=new QFileDialog( this, tr("vym - save image as") + fmt);
 25.2018 -		fd->addFilter ("PNG (*.png)");
 25.2019 -		fd->addFilter ("BMP (*.bmp)");
 25.2020 -		fd->addFilter ("XBM (*.xbm)");
 25.2021 -		fd->addFilter ("JPG (*.jpg)");
 25.2022 -		fd->addFilter ("XPM (*.xpm)");
 25.2023 -		fd->addFilter ("GIF (*.gif)");
 25.2024 -		fd->addFilter ("PNM (*.pnm)");
 25.2025 -		fd->addFilter (QString (tr("Images") + " (*.png *.bmp *.xbm *.jpg *.png *.xpm *.gif *.pnm)"));
 25.2026 -		fd->setCaption(__VYM " - " +tr("Save image as %1").arg(fmt));
 25.2027 -		fd->setMode( QFileDialog::AnyFile );
 25.2028 -		fd->setSelection (fio->getOriginalFilename());
 25.2029 +		QFileDialog *fd=new QFileDialog( this);
 25.2030 +		fd->setFilters (imageIO.getFilters());
 25.2031 +		fd->setCaption(__VYM " - " +tr("Save image"));
 25.2032 +		fd->setFileMode( QFileDialog::AnyFile );
 25.2033 +		fd->setDirectory (lastImageDir);
 25.2034 +//		fd->setSelection (fio->getOriginalFilename());
 25.2035  		fd->show();
 25.2036  
 25.2037  		QString fn;
 25.2038 @@ -2905,7 +3050,7 @@
 25.2039  						break;
 25.2040  				}
 25.2041  			}
 25.2042 -			fio->save (fd->selectedFile(),fmt);
 25.2043 +			fio->save (fd->selectedFile(),imageIO.getType (fd->selectedFilter() ) );
 25.2044  		}
 25.2045  	}
 25.2046  }
 25.2047 @@ -2949,7 +3094,7 @@
 25.2048  		selection->setHideLinkUnselected(b);
 25.2049  }
 25.2050  
 25.2051 -void MapEditor::importDir(BranchObj *dst, QDir d)
 25.2052 +void MapEditor::importDirInt(BranchObj *dst, QDir d)
 25.2053  {
 25.2054  	if (selection && 
 25.2055  		(typeid(*selection) == typeid(BranchObj)) || 
 25.2056 @@ -2959,45 +3104,42 @@
 25.2057  		
 25.2058  		// Traverse directories
 25.2059  		d.setFilter( QDir::Dirs| QDir::Hidden | QDir::NoSymLinks );
 25.2060 -		const QFileInfoList *dirlist = d.entryInfoList();
 25.2061 -		QFileInfoListIterator itdir( *dirlist );
 25.2062 -		QFileInfo *fi;
 25.2063 -
 25.2064 -		while ( (fi = itdir.current()) != 0 ) 
 25.2065 +		QFileInfoList list = d.entryInfoList();
 25.2066 +		QFileInfo fi;
 25.2067 +
 25.2068 +		for (int i = 0; i < list.size(); ++i) 
 25.2069  		{
 25.2070 -			if (fi->fileName() != "." && fi->fileName() != ".." )
 25.2071 +			fi=list.at(i);
 25.2072 +			if (fi.fileName() != "." && fi.fileName() != ".." )
 25.2073  			{
 25.2074  				dst->addBranch();
 25.2075  				bo=dst->getLastBranch();
 25.2076 -				bo->setHeading (fi->fileName() );
 25.2077 +				bo->setHeading (fi.fileName() );
 25.2078  				bo->setColor (QColor("blue"));
 25.2079  				bo->toggleScroll();
 25.2080 -				if ( !d.cd(fi->fileName()) ) 
 25.2081 -					QMessageBox::critical (0,tr("Critical Import Error"),tr("Cannot find the directory %1").arg(fi->fileName()));
 25.2082 +				if ( !d.cd(fi.fileName()) ) 
 25.2083 +					QMessageBox::critical (0,tr("Critical Import Error"),tr("Cannot find the directory %1").arg(fi.fileName()));
 25.2084  				else 
 25.2085  				{
 25.2086  					// Recursively add subdirs
 25.2087 -					importDir (bo,d);
 25.2088 +					importDirInt (bo,d);
 25.2089  					d.cdUp();
 25.2090  				}
 25.2091  			}	
 25.2092 -			++itdir;
 25.2093  		}		
 25.2094  		// Traverse files
 25.2095  		d.setFilter( QDir::Files| QDir::Hidden | QDir::NoSymLinks );
 25.2096 -		const QFileInfoList *filelist = d.entryInfoList();
 25.2097 -		QFileInfoListIterator itfile( *filelist );
 25.2098 -
 25.2099 -		while ( (fi = itfile.current()) != 0 ) 
 25.2100 +		list = d.entryInfoList();
 25.2101 +
 25.2102 +		for (int i = 0; i < list.size(); ++i) 
 25.2103  		{
 25.2104 +			fi=list.at(i);
 25.2105  			dst->addBranch();
 25.2106  			bo=dst->getLastBranch();
 25.2107 -			bo->setHeading (fi->fileName() );
 25.2108 +			bo->setHeading (fi.fileName() );
 25.2109  			bo->setColor (QColor("black"));
 25.2110 -			if (fi->fileName().right(4) == ".vym" )
 25.2111 -				bo->setVymLink (fi->filePath());
 25.2112 -
 25.2113 -			++itfile;
 25.2114 +			if (fi.fileName().right(4) == ".vym" )
 25.2115 +				bo->setVymLink (fi.filePath());
 25.2116  		}	
 25.2117  	}		
 25.2118  }
 25.2119 @@ -3008,8 +3150,8 @@
 25.2120  		(typeid(*selection) == typeid(BranchObj)) || 
 25.2121  		(typeid(*selection) == typeid(MapCenterObj))  )
 25.2122  	{
 25.2123 -		QFileDialog *fd=new QFileDialog( this,__VYM " - " +tr("Choose directory structure to import"));
 25.2124 -		fd->setMode (QFileDialog::DirectoryOnly);
 25.2125 +		Q3FileDialog *fd=new Q3FileDialog( this,__VYM " - " +tr("Choose directory structure to import"));
 25.2126 +		fd->setMode (Q3FileDialog::DirectoryOnly);
 25.2127  		fd->addFilter (QString (tr("vym map") + " (*.vym)"));
 25.2128  		fd->setCaption(__VYM " - " +tr("Choose directory structure to import"));
 25.2129  		fd->show();
 25.2130 @@ -3018,7 +3160,7 @@
 25.2131  		if ( fd->exec() == QDialog::Accepted )
 25.2132  		{
 25.2133  			BranchObj *bo=((BranchObj*)selection);
 25.2134 -			importDir (bo,QDir(fd->selectedFile()) );
 25.2135 +			importDirInt (bo,QDir(fd->selectedFile()) );
 25.2136  			mapCenter->reposition();
 25.2137  			adjustCanvasSize();
 25.2138  			canvas()->update();
 25.2139 @@ -3045,6 +3187,7 @@
 25.2140  
 25.2141  void MapEditor::editXLink(int i)
 25.2142  {
 25.2143 +	qDebug ("ko.");  //FIXME Huh?
 25.2144  	if (selection && 
 25.2145  		(typeid(*selection) == typeid(BranchObj)) || 
 25.2146  		(typeid(*selection) == typeid(MapCenterObj))  )
 25.2147 @@ -3064,7 +3207,7 @@
 25.2148  				}
 25.2149  				if (dia.deleteXLink())
 25.2150  					((BranchObj*)selection)->deleteXLinkAt(i);
 25.2151 -				saveState("Edit xLink");	//TODO undoCommand
 25.2152 +				saveStateComplete("Edit xLink");	//TODO undoCommand
 25.2153  			}
 25.2154  		}	
 25.2155  	}
 25.2156 @@ -3074,33 +3217,44 @@
 25.2157  {
 25.2158  	cout << "MapEditor::testFunction() called\n";
 25.2159  
 25.2160 -	mapCenter->positionBBox();
 25.2161 +/*
 25.2162 +	bool ok;
 25.2163 +	QString text = QInputDialog::getText(
 25.2164 +		this, 
 25.2165 +		tr("QInputDialog::getText()"),
 25.2166 +		 tr("User name:"), QLineEdit::Normal,
 25.2167 +		 QDir::home().dirName(), &ok, Qt::FramelessWindowHint);
 25.2168 +*/
 25.2169 +
 25.2170 +	QDialog *d =new QDialog(NULL);
 25.2171 +	QLineEdit *le=new QLineEdit (d);
 25.2172 +//	d->setModal (true);
 25.2173 +	d->setWindowFlags (Qt::FramelessWindowHint);
 25.2174 +	le->setFocus();
 25.2175 +	le->setText ("Foo");
 25.2176 +	le->selectAll();
 25.2177 +	connect (le, SIGNAL (returnPressed()), d, SLOT (accept()));
 25.2178 +	d->exec();
 25.2179 +	qWarning( le->text());
 25.2180  	return;
 25.2181 -
 25.2182 +	
 25.2183 +
 25.2184 +
 25.2185 +/*
 25.2186  	WarningDialog dia;
 25.2187  	dia.setCancelButton (true);
 25.2188  	dia.setText("This is a longer \nWarning");
 25.2189  	dia.setCaption("Warning: Flux problem");
 25.2190 -	dia.setShowAgainName("/vym/warnings/mapeditor");
 25.2191 +	dia.setShowAgainName("/warnings/mapeditor");
 25.2192 +	dia.setWindowFlags (Qt::FramelessWindowHint);
 25.2193  	if (dia.exec()==QDialog::Accepted)
 25.2194  		cout << "accepted!\n";
 25.2195  	else	
 25.2196  		cout << "canceled!\n";
 25.2197  	return;
 25.2198 -
 25.2199 -	QString ub=vymBaseDir.path()+"/scripts/update-bookmarks";
 25.2200 -	QProcess *proc = new QProcess( this );
 25.2201 -	proc->addArgument(ub);
 25.2202 -
 25.2203 -	if ( !proc->start() ) 
 25.2204 -	{
 25.2205 -		QMessageBox::warning(0, 
 25.2206 -			tr("Warning"),
 25.2207 -			tr("Couldn't find script %1\nto notifiy Browsers of changed bookmarks.").arg(ub));
 25.2208 -	}	
 25.2209 -
 25.2210 -	
 25.2211 -/*
 25.2212 +*/
 25.2213 +
 25.2214 +/* Hide hidden stuff temporary, maybe add this as regular function somewhere
 25.2215  	if (hidemode==HideNone)
 25.2216  	{
 25.2217  		setHideTmpMode (HideExport);
 25.2218 @@ -3199,15 +3353,12 @@
 25.2219  void MapEditor::contentsMousePressEvent(QMouseEvent* e)
 25.2220  {
 25.2221  	// Ignore right clicks, these will go to context menus
 25.2222 -	if (e->button() == QMouseEvent::RightButton )
 25.2223 +	if (e->button() == Qt::RightButton )
 25.2224  	{
 25.2225  		e->ignore();
 25.2226  		return;
 25.2227  	}
 25.2228  
 25.2229 -	// Finish open lineEdits
 25.2230 -	if (lineedit) finishedLineEdit();
 25.2231 -	
 25.2232      QPoint p = inverseWorldMatrix().map(e->pos());
 25.2233      LinkableMapObj* lmo=mapCenter->findMapObj(p, NULL);
 25.2234  	
 25.2235 @@ -3222,10 +3373,10 @@
 25.2236  		if (!foname.isEmpty())
 25.2237  		{
 25.2238  			// systemFlag clicked
 25.2239 -			select (lmo);
 25.2240 +			selectInt (lmo);
 25.2241  			if (foname=="url") 
 25.2242  			{
 25.2243 -				if (e->state() & QMouseEvent::ControlButton)
 25.2244 +				if (e->state() & Qt::ControlModifier)
 25.2245  					mainWindow->editOpenURLTab();
 25.2246  				else	
 25.2247  					mainWindow->editOpenURL();
 25.2248 @@ -3245,7 +3396,7 @@
 25.2249  	// No system flag clicked, take care of modmodes
 25.2250  
 25.2251  	// Special case: CTRL is pressed
 25.2252 -	if (e->state() & QMouseEvent::ControlButton)
 25.2253 +	if (e->state() & Qt::ControlModifier)
 25.2254  	{
 25.2255  		if (actionModModeColor->isOn())
 25.2256  		{
 25.2257 @@ -3280,19 +3431,20 @@
 25.2258  	}
 25.2259      if (lmo) 
 25.2260  	{	
 25.2261 -		select (lmo);
 25.2262 +		selectInt (lmo);
 25.2263  		// Left Button	    Move Branches
 25.2264 -		if (e->button() == QMouseEvent::LeftButton )
 25.2265 +		if (e->button() == Qt::LeftButton )
 25.2266  		{
 25.2267  			movingObj_start.setX( p.x() - selection->x() );	
 25.2268  			movingObj_start.setY( p.y() - selection->y() );	
 25.2269  			movingObj_orgPos.setX (lmo->x() );
 25.2270  			movingObj_orgPos.setY (lmo->y() );
 25.2271 +			movingObj_orgRelPos=lmo->getRelPos();
 25.2272  
 25.2273  			// If modMode==copy, then we want to "move" the _new_ object around
 25.2274  			// then we need the offset from p to the _old_ selection, because of tmp
 25.2275  			if (actionModModeCopy->isOn() &&
 25.2276 -				e->state() & QMouseEvent::ControlButton)
 25.2277 +				e->state() & Qt::ControlModifier)
 25.2278  			{
 25.2279  				if (typeid(*selection)==typeid(BranchObj) )
 25.2280  				{
 25.2281 @@ -3309,13 +3461,13 @@
 25.2282  			// Middle Button    Toggle Scroll
 25.2283  			// (On Mac OS X this won't work, but we still have 
 25.2284  			// a button in the toolbar)
 25.2285 -			if (e->button() == QMouseEvent::MidButton )
 25.2286 +			if (e->button() == Qt::MidButton )
 25.2287  				toggleScroll();
 25.2288  		updateActions();
 25.2289  	} else 
 25.2290  	{ // No MapObj found, we are on the Canvas itself
 25.2291  		// Left Button	    move Pos of CanvasView
 25.2292 -		if (e->button() == QMouseEvent::LeftButton )
 25.2293 +		if (e->button() == Qt::LeftButton )
 25.2294  		{
 25.2295  			movingObj=NULL;	// move Content not Obj
 25.2296  			movingObj_start=e->globalPos();
 25.2297 @@ -3353,16 +3505,13 @@
 25.2298  		if (typeid(*selection) == typeid(FloatImageObj))
 25.2299  		{
 25.2300  			FloatObj *fo=(FloatObj*)selection;
 25.2301 -			saveState(
 25.2302 -				"move "+qpointToString(movingObj_orgPos),fo->getSelectString() ,
 25.2303 -				QString("Move %1").arg(getName(selection)));
 25.2304  			fo->move   (p.x() -movingObj_start.x(), p.y()-movingObj_start.y() );		
 25.2305  			fo->setRelPos();
 25.2306  			fo->reposition();
 25.2307  
 25.2308  			// Relink float to new mapcenter or branch, if shift is pressed	
 25.2309  			// Only relink, if selection really has a new parent
 25.2310 -			if ( (e->state() & QMouseEvent::ShiftButton) && lmo &&
 25.2311 +			if ( (e->state() & Qt::ShiftModifier) && lmo &&
 25.2312  				( (typeid(*lmo)==typeid(BranchObj)) ||
 25.2313  				  (typeid(*lmo)==typeid(MapCenterObj)) ) &&
 25.2314  				( lmo != fo->getParObj())  
 25.2315 @@ -3370,7 +3519,8 @@
 25.2316  			{
 25.2317  				if (typeid(*fo) == typeid(FloatImageObj)) 
 25.2318  				{
 25.2319 -					saveState(QString("Relink %1 to %2").arg(getName(fo)).arg(getName(lmo) ) );
 25.2320 +					//TODO undocom
 25.2321 +					saveStateComplete(QString("Relink %1 to %2").arg(getName(fo)).arg(getName(lmo) ) );
 25.2322  					FloatImageObj *fio=(FloatImageObj*)(fo);
 25.2323  					((BranchObj*)(lmo))->addFloatImage (fio);
 25.2324  					fio->unselect();
 25.2325 @@ -3387,7 +3537,7 @@
 25.2326  		{
 25.2327  			if (lmosel->getDepth()==0)
 25.2328  			{
 25.2329 -				if (e->state() == (LeftButton | !ShiftButton)) 
 25.2330 +				if (e->state() == Qt::LeftButton && e->modifiers()==Qt::ShiftModifier) 
 25.2331  					// If mapCenter is moved, move all the rest by default, too.
 25.2332  					mapCenter->moveAll(p.x() -movingObj_start.x(), p.y()-movingObj_start.y() );		
 25.2333  				else	
 25.2334 @@ -3417,12 +3567,12 @@
 25.2335  					(typeid(*lmo) == typeid(MapCenterObj) )
 25.2336  					) )
 25.2337  				{
 25.2338 -					if (e->state() & QMouseEvent::ControlButton)
 25.2339 +					if (e->state() & Qt::ControlModifier)
 25.2340  					{
 25.2341  						// Special case: CTRL to link below lmo
 25.2342  						lmosel->setParObjTmp (lmo,p,+1);
 25.2343  					}
 25.2344 -					else if (e->state() & QMouseEvent::ShiftButton)
 25.2345 +					else if (e->state() & Qt::ShiftModifier)
 25.2346  						lmosel->setParObjTmp (lmo,p,-1);
 25.2347  					else
 25.2348  						lmosel->setParObjTmp (lmo,p,0);
 25.2349 @@ -3466,12 +3616,12 @@
 25.2350  	if (pickingColor)
 25.2351  	{
 25.2352  		pickingColor=false;
 25.2353 -		setCursor (ArrowCursor);
 25.2354 +		setCursor (Qt::ArrowCursor);
 25.2355  		// Check if we are over another branch
 25.2356  		dst=mapCenter->findMapObj(inverseWorldMatrix().map(e->pos() ), NULL);
 25.2357  		if (dst && selection) 
 25.2358  		{	
 25.2359 -			if (e->state() & QMouseEvent::ShiftButton)
 25.2360 +			if (e->state() & Qt::ShiftModifier)
 25.2361  			{
 25.2362  				((BranchObj*)selection)->setColor (((BranchObj*)(dst))->getColor());
 25.2363  				((BranchObj*)selection)->setLinkColor ();
 25.2364 @@ -3496,7 +3646,7 @@
 25.2365  			tmpXLink->setEnd ( ((BranchObj*)(dst)) );
 25.2366  			tmpXLink->updateXLink();
 25.2367  			tmpXLink->activate();
 25.2368 -			saveState(QString("Activate xLink from %1 to %2").arg(getName(tmpXLink->getBegin())).arg(getName(tmpXLink->getEnd())) );	//TODO undoCommand
 25.2369 +			saveStateComplete(QString("Activate xLink from %1 to %2").arg(getName(tmpXLink->getBegin())).arg(getName(tmpXLink->getEnd())) );	//TODO undoCommand
 25.2370  		} else
 25.2371  		{
 25.2372  			delete(tmpXLink);
 25.2373 @@ -3511,6 +3661,14 @@
 25.2374  		// Moved FloatObj? Maybe we need to reposition
 25.2375  		if(typeid(*selection)==typeid (FloatImageObj))
 25.2376  		{
 25.2377 +			FloatImageObj *fo=(FloatImageObj*)selection;
 25.2378 +		    QString pold=qpointToString(movingObj_orgRelPos);
 25.2379 +		    QString pnow=qpointToString(fo->getRelPos());
 25.2380 +			saveStateConstSelection(
 25.2381 +				"moveRel "+pold,
 25.2382 +				"moveRel "+pnow,
 25.2383 +				QString("Move %1 to relativ position %2").arg(getName(selection)).arg(pnow));
 25.2384 +
 25.2385  			selection->getParObj()->requestReposition();
 25.2386  			mapCenter->reposition();
 25.2387  		}	
 25.2388 @@ -3532,41 +3690,64 @@
 25.2389  			// Reset the temporary drawn link to the original one
 25.2390  			((LinkableMapObj*)selection)->unsetParObjTmp();
 25.2391  
 25.2392 +			// For Redo we may need to save original selection
 25.2393 +			QString preSelStr=selection->getSelectString();
 25.2394  
 25.2395  			copyingObj=false;	
 25.2396  			if (dst ) 
 25.2397  			{
 25.2398 -				BranchObj* bs=((BranchObj*)selection);
 25.2399 +				BranchObj* bsel=(BranchObj*)selection;
 25.2400 +				BranchObj* bdst=(BranchObj*)dst;
 25.2401 +
 25.2402 +				QString preParStr=(bsel->getParObj())->getSelectString();
 25.2403 +				QString preNum=QString::number (bsel->getNum(),10);
 25.2404 +				QString preDstParStr;
 25.2405 +
 25.2406 +				if (e->state() & Qt::ShiftModifier && dst->getParObj())
 25.2407 +				{	// Link above dst
 25.2408 +					preDstParStr=dst->getParObj()->getSelectString();
 25.2409 +					bsel->moveBranchTo ( (BranchObj*)(bdst->getParObj()), bdst->getNum());
 25.2410 +				} else 
 25.2411 +				if (e->state() & Qt::ControlModifier && dst->getParObj())
 25.2412 +				{
 25.2413 +					// Link below dst
 25.2414 +					preDstParStr=dst->getParObj()->getSelectString();
 25.2415 +					bsel->moveBranchTo ( (BranchObj*)(bdst->getParObj()), bdst->getNum()+1);
 25.2416 +				} else	
 25.2417 +				{	// Append to dst
 25.2418 +					preDstParStr=dst->getSelectString();
 25.2419 +					bsel->moveBranchTo (bdst,-1);
 25.2420 +					if (dst->getDepth()==0) bsel->move (savePos);
 25.2421 +				} 
 25.2422 +				QString postSelStr=selection->getSelectString();
 25.2423 +				QString postNum=QString::number (bsel->getNum(),10);
 25.2424 +
 25.2425  				QString undoCom="linkBranchToPos (\""+ 
 25.2426 -					(bs->getParObj())->getSelectString()+
 25.2427 -					"\","+
 25.2428 -					QString("%1").arg(bs->getNum())+
 25.2429 -					","+
 25.2430 -					QString ("%1,%2").arg(movingObj_orgPos.x()).arg(movingObj_orgPos.y())+
 25.2431 -					")";
 25.2432 -				// TODO we also could check, if dest and src are on same branch,
 25.2433 -				// then it would be sufficient to saveState of this branch
 25.2434 -
 25.2435 -				// Modifiers allow to insert above/below dst
 25.2436 -				if (e->state() & QMouseEvent::ShiftButton)
 25.2437 -				{
 25.2438 -					bs->moveBranchTo ( (BranchObj*)(dst->getParObj()), ((BranchObj*)(dst))->getNum());
 25.2439 -				} else 
 25.2440 -				if (e->state() & QMouseEvent::ControlButton)
 25.2441 -			{
 25.2442 -					bs->moveBranchTo ( (BranchObj*)(dst->getParObj()), ((BranchObj*)(dst))->getNum()+1);
 25.2443 -				} else	
 25.2444 -				{
 25.2445 -					bs->moveBranchTo ((BranchObj*)(dst),-1);
 25.2446 -					if (dst->getDepth()==0) 
 25.2447 -						bs->move (savePos);
 25.2448 -				} 
 25.2449 -				saveState (undoCom,bs->getSelectString(),QString("Relink %1 to %2").arg(getName(bs)).arg(getName(dst)) );
 25.2450 +					preParStr+ "\"," + preNum  +"," + 
 25.2451 +					QString ("%1,%2").arg(movingObj_orgPos.x()).arg(movingObj_orgPos.y())+ ")";
 25.2452 +
 25.2453 +				QString redoCom="linkBranchToPos (\""+ 
 25.2454 +					preDstParStr + "\"," + postNum + "," +
 25.2455 +					QString ("%1,%2").arg(savePos.x()).arg(savePos.y())+ ")";
 25.2456 +
 25.2457 +				saveState (
 25.2458 +					postSelStr,undoCom,
 25.2459 +					preSelStr, redoCom,
 25.2460 +					QString("Relink %1 to %2").arg(getName(bsel)).arg(getName(dst)) );
 25.2461  			} else
 25.2462  				if (selection->getDepth()==1)
 25.2463 -					// If we have moved mainbranch only save endposition
 25.2464 -					saveState("move "+qpointToString(movingObj_orgPos), selection->getSelectString(), QString("Move %1 to %2").arg(getName(selection)).arg(qpointToString(movingObj_orgPos)));
 25.2465 +				{
 25.2466 +					// The select string might be different _after_ moving around.
 25.2467 +					// Therefor reposition and then use string of old selection, too
 25.2468 +					mapCenter->reposition();
 25.2469 +
 25.2470 +					QString ps=qpointToString ( ((BranchObj*)selection)->getRelPos() );
 25.2471 +					saveState(
 25.2472 +						selection->getSelectString(), "moveRel "+qpointToString(movingObj_orgRelPos), 
 25.2473 +						preSelStr, "moveRel "+ps, 
 25.2474 +						QString("Move %1 to relative position %2").arg(getName(selection)).arg(ps));
 25.2475  			
 25.2476 +				}
 25.2477  			// Draw the original link, before selection was moved around
 25.2478  			mapCenter->reposition();
 25.2479  		}
 25.2480 @@ -3574,18 +3755,18 @@
 25.2481  		adjustCanvasSize();
 25.2482  		canvas()->update();
 25.2483  		movingObj=NULL;		
 25.2484 +
 25.2485 +		// Just make sure, that actions are still ok,e.g. the move branch up/down buttons...
 25.2486 +		updateActions();
 25.2487  	} else 
 25.2488  		// maybe we moved View: set old cursor
 25.2489 -		setCursor (ArrowCursor);
 25.2490 +		setCursor (Qt::ArrowCursor);
 25.2491      
 25.2492  }
 25.2493  
 25.2494  void MapEditor::contentsMouseDoubleClickEvent(QMouseEvent* e)
 25.2495  {
 25.2496 -	// Finish open lineEdits
 25.2497 -	if (lineedit) finishedLineEdit();
 25.2498 -	
 25.2499 -	if (e->button() == QMouseEvent::LeftButton )
 25.2500 +	if (e->button() == Qt::LeftButton )
 25.2501  	{
 25.2502  		QPoint p = inverseWorldMatrix().map(e->pos());
 25.2503  		LinkableMapObj *lmo=mapCenter->findMapObj(p, NULL);
 25.2504 @@ -3594,14 +3775,14 @@
 25.2505  			if (selection) selection->unselect();
 25.2506  			selection=lmo;
 25.2507  			selection->select();
 25.2508 -			editHeading();
 25.2509 +			mainWindow->editHeading();
 25.2510  		}
 25.2511  	}
 25.2512  }
 25.2513  
 25.2514  void MapEditor::resizeEvent (QResizeEvent* e)
 25.2515  {
 25.2516 -	QCanvasView::resizeEvent( e );
 25.2517 +	Q3CanvasView::resizeEvent( e );
 25.2518  	adjustCanvasSize();
 25.2519  }
 25.2520  
 25.2521 @@ -3616,7 +3797,7 @@
 25.2522        (typeid(*selection) == typeid(MapCenterObj))) {
 25.2523      
 25.2524      // If QImageDrag can decode mime type 
 25.2525 -    if (QImageDrag::canDecode(event)) {
 25.2526 +    if (Q3ImageDrag::canDecode(event)) {
 25.2527        event->accept();
 25.2528        return;
 25.2529      }
 25.2530 @@ -3629,7 +3810,7 @@
 25.2531      }
 25.2532  
 25.2533      // If QUriDrag can decode mime type 
 25.2534 -    if (QUriDrag::canDecode(event)) {
 25.2535 +    if (Q3UriDrag::canDecode(event)) {
 25.2536        event->accept();
 25.2537        return;
 25.2538      }
 25.2539 @@ -3641,7 +3822,7 @@
 25.2540      }
 25.2541  
 25.2542      // If QTextDrag can decode mime type
 25.2543 -    if (QTextDrag::canDecode(event)) {
 25.2544 +    if (Q3TextDrag::canDecode(event)) {
 25.2545        event->accept();
 25.2546        return;
 25.2547      }
 25.2548 @@ -3667,12 +3848,12 @@
 25.2549        (typeid(*selection) == typeid(MapCenterObj))) 
 25.2550  	{
 25.2551  		bool update=false;
 25.2552 -		QStrList uris;
 25.2553 +		Q3StrList uris;
 25.2554  		QString heading;
 25.2555  		if (event->provides("image/png")) 
 25.2556  		{
 25.2557  			QPixmap pix;
 25.2558 -			if (QImageDrag::decode(event, pix)) 
 25.2559 +			if (Q3ImageDrag::decode(event, pix)) 
 25.2560  			{
 25.2561  				addFloatImage(pix);
 25.2562  				event->accept();
 25.2563 @@ -3691,7 +3872,7 @@
 25.2564  			update=true;
 25.2565  		} else if (event->provides ("text/uri-list"))
 25.2566  		{	// Uris provided e.g. by konqueror
 25.2567 -			QUriDrag::decode (event,uris);
 25.2568 +			Q3UriDrag::decode (event,uris);
 25.2569  		} else if (event->provides ("_NETSCAPE_URL"))
 25.2570  		{	// Uris provided by Mozilla
 25.2571  		  QStringList l = QStringList::split("\n", event->encodedData("_NETSCAPE_URL"));
 25.2572 @@ -3737,8 +3918,9 @@
 25.2573  				bo=((BranchObj*)selection)->addBranch();
 25.2574  				if (bo)
 25.2575  				{
 25.2576 -					s=QUriDrag::uriToLocalFile(u);
 25.2577 -					if (s) {
 25.2578 +					s=Q3UriDrag::uriToLocalFile(u);
 25.2579 +					if (!s.isEmpty()) 
 25.2580 +					{
 25.2581                         QString file = QDir::convertSeparators(s);
 25.2582                         heading = QFileInfo(file).baseName();
 25.2583                         files.append(file);
 25.2584 @@ -3746,12 +3928,13 @@
 25.2585                             bo->setVymLink(file);
 25.2586                         else
 25.2587                             bo->setURL(u);
 25.2588 -                   } else {
 25.2589 +                   } else 
 25.2590 +				   {
 25.2591                         urls.append (u);
 25.2592                         bo->setURL(u);
 25.2593                     }
 25.2594  
 25.2595 -                   if (heading)
 25.2596 +                   if (!heading.isEmpty())
 25.2597                         bo->setHeading(heading);
 25.2598                     else
 25.2599                         bo->setHeading(u);
 25.2600 @@ -3763,7 +3946,7 @@
 25.2601  		if (update) 
 25.2602  		{
 25.2603  			//FIXME saveState has to be called earlier for each of the drops...
 25.2604 -			saveState("Drop Event");	//TODO undo Command
 25.2605 +			saveStateComplete("Drop Event");	//TODO undo Command
 25.2606  			mapCenter->reposition();
 25.2607  			adjustCanvasSize();
 25.2608  			canvas()->update();
 25.2609 @@ -3778,7 +3961,7 @@
 25.2610        (typeid(*selection) == typeid(MapCenterObj))  )
 25.2611    {
 25.2612      BranchObj *bo=((BranchObj*)selection);
 25.2613 -    saveState(selection,QString("Add floatimage to %1").arg(getName(bo)));
 25.2614 +    saveStatePart(selection,QString("Add floatimage to %1").arg(getName(bo)));
 25.2615      //QString fn=fd->selectedFile();
 25.2616      //lastImageDir=fn.left(fn.findRev ("/"));
 25.2617      bo->addFloatImage();
 25.2618 @@ -3792,19 +3975,19 @@
 25.2619  }
 25.2620  
 25.2621  
 25.2622 -void MapEditor::imageDataFetched(const QByteArray &a, QNetworkOperation */*nop*/) 
 25.2623 +void MapEditor::imageDataFetched(const QByteArray &a, Q3NetworkOperation */*nop*/) 
 25.2624  {
 25.2625    if (!imageBuffer) imageBuffer = new QBuffer();
 25.2626    if (!imageBuffer->isOpen()) {
 25.2627 -    imageBuffer->open(IO_WriteOnly | IO_Append);
 25.2628 +    imageBuffer->open(QIODevice::WriteOnly | QIODevice::Append);
 25.2629    }
 25.2630    imageBuffer->at(imageBuffer->at()+imageBuffer->writeBlock(a));
 25.2631  }
 25.2632  
 25.2633  
 25.2634 -void MapEditor::imageDataFinished(QNetworkOperation *nop) 
 25.2635 +void MapEditor::imageDataFinished(Q3NetworkOperation *nop) 
 25.2636  {
 25.2637 -	if (nop->state()==QNetworkProtocol::StDone) {
 25.2638 +	if (nop->state()==Q3NetworkProtocol::StDone) {
 25.2639  		QPixmap img(imageBuffer->buffer());
 25.2640  		addFloatImage(img);
 25.2641  	}
 25.2642 @@ -3827,11 +4010,11 @@
 25.2643      delete urlOperator;
 25.2644    }
 25.2645    
 25.2646 -  urlOperator = new QUrlOperator(url);
 25.2647 -  connect(urlOperator, SIGNAL(finished(QNetworkOperation *)), 
 25.2648 -	  this, SLOT(imageDataFinished(QNetworkOperation*)));
 25.2649 -
 25.2650 -  connect(urlOperator, SIGNAL(data(const QByteArray &, QNetworkOperation *)),
 25.2651 -	  this, SLOT(imageDataFetched(const QByteArray &, QNetworkOperation *)));
 25.2652 +  urlOperator = new Q3UrlOperator(url);
 25.2653 +  connect(urlOperator, SIGNAL(finished(Q3NetworkOperation *)), 
 25.2654 +	  this, SLOT(imageDataFinished(Q3NetworkOperation*)));
 25.2655 +
 25.2656 +  connect(urlOperator, SIGNAL(data(const QByteArray &, Q3NetworkOperation *)),
 25.2657 +	  this, SLOT(imageDataFetched(const QByteArray &, Q3NetworkOperation *)));
 25.2658    urlOperator->get();
 25.2659  }
    26.1 --- a/mapeditor.h	Tue Sep 05 09:47:13 2006 +0000
    26.2 +++ b/mapeditor.h	Tue Sep 05 09:47:14 2006 +0000
    26.3 @@ -1,32 +1,40 @@
    26.4  #ifndef MAPEDITOR_H
    26.5  #define MAPEDITOR_H
    26.6  
    26.7 -#include <qcanvas.h>
    26.8 -#include <qlineedit.h>
    26.9 -#include <qcursor.h>
   26.10 -#include <qfiledialog.h>
   26.11 -#include <qevent.h>
   26.12 -#include <qprocess.h>
   26.13 -#include <qbuffer.h>
   26.14 +#include <q3canvas.h>
   26.15 +//#include <q3filedialog.h>
   26.16 +//#include <q3process.h>
   26.17 +#include <QBuffer>
   26.18 +#include <QContextMenuEvent>
   26.19 +#include <QCursor>
   26.20 +#include <QDragEnterEvent>
   26.21 +#include <QDropEvent>
   26.22 +#include <QEvent>
   26.23 +#include <QLineEdit>
   26.24 +#include <QMouseEvent>
   26.25 +#include <QPixmap>
   26.26 +#include <QResizeEvent>
   26.27  
   26.28  #include "mapcenterobj.h"
   26.29  #include "file.h"
   26.30  #include "misc.h"
   26.31 +#include "selection.h"
   26.32 +#include "settings.h"
   26.33  #include "showtextdialog.h"
   26.34  
   26.35 -class QNetworkOperation;
   26.36 -class QUrlOperator;
   26.37 +class Q3NetworkOperation;
   26.38 +class Q3UrlOperator;
   26.39  
   26.40 -class MapEditor : public QCanvasView , public xmlObj {
   26.41 +class MapEditor : public Q3CanvasView , public xmlObj {
   26.42      Q_OBJECT
   26.43  
   26.44  public:
   26.45 -    MapEditor(QWidget* parent=0, bool interactive=false, const char* name=0, WFlags f=0);
   26.46 +    MapEditor(QWidget* parent=0, bool interactive=false, const char* name=0, Qt::WFlags f=0);
   26.47  	~MapEditor();
   26.48      QColor color();
   26.49      QColor backgroundColor();
   26.50      MapCenterObj* getMapCenter();
   26.51 -	QCanvas* getCanvas();
   26.52 +	Q3Canvas* getCanvas();
   26.53  	void adjustCanvasSize();// adjust canvas size to map and scrollview
   26.54  	bool isRepositionBlocked(); // block while load or undo
   26.55  	
   26.56 @@ -34,20 +42,21 @@
   26.57  	QString getName(LinkableMapObj*);	// Get e.g. heading or filename
   26.58  	void makeTmpDirs();		// create temporary directories
   26.59      QString saveToDir(const QString&,const QString &,bool, const QPoint &,LinkableMapObj*);
   26.60 -    void saveState(const QString &);	// save actual state to backup
   26.61 -    void saveState(LinkableMapObj *, const QString &);
   26.62 -    void saveState(const QString &, const QString &, const QString &);
   26.63 -    void saveState(const QString &, LinkableMapObj *, const QString &);
   26.64 -    void saveState(const SaveMode&, const QString &, LinkableMapObj *, const QString &, LinkableMapObj *, const QString &);
   26.65 +    void saveStateComplete       (const QString &);					
   26.66 +    void saveStatePart           (LinkableMapObj *, const QString &);
   26.67 +    void saveStateConstSelection (const QString &, const QString &, const QString &);
   26.68 +    void saveStateComData		 (LinkableMapObj *, const QString &, LinkableMapObj *, const QString &, const QString &, LinkableMapObj *);
   26.69 +    void saveState(LinkableMapObj *, const QString &, LinkableMapObj *, const QString &, const QString &);
   26.70 +    void saveState(const QString &, const QString &, const QString &, const QString &, const QString &);
   26.71 +    void saveState(const SaveMode&, const QString &, const QString &, const QString &, const QString &, const QString &, LinkableMapObj *);
   26.72      void parseAtom(const QString &);	
   26.73  
   26.74      void addFloatImage(const QPixmap &img);
   26.75  
   26.76    private slots:
   26.77 -    void finishedLineEdit();
   26.78      void fetchImage(const QString &img);
   26.79 -    void imageDataFetched(const QByteArray &, QNetworkOperation *);
   26.80 -    void imageDataFinished(QNetworkOperation *);
   26.81 +    void imageDataFetched(const QByteArray &, Q3NetworkOperation *);
   26.82 +    void imageDataFinished(Q3NetworkOperation *);
   26.83  
   26.84  public:
   26.85  	void toggleHistoryWindow();
   26.86 @@ -74,8 +83,8 @@
   26.87  	HideTmpMode getHideTmpMode();		// temporary hide stuff
   26.88  public:
   26.89  	void setExportMode (bool);			// temporary hide stuff during export
   26.90 -    void exportImage (QString fn);		// export as PNG	
   26.91 -    void exportImage (QString fn, int);	// export in given format
   26.92 +    void exportImage (QString fn);			// export as PNG	
   26.93 +    void exportImage (QString fn, QString);	// export in given format
   26.94      void exportOOPresentation(const QString &,const QString &);
   26.95      void exportXML(const QString&);		// export to directory
   26.96      void clear();		// clear map
   26.97 @@ -89,14 +98,17 @@
   26.98  public:	
   26.99      void paste();		// paste clipboard to branch and backup
  26.100      void cut();			// cut to clipboard and backup
  26.101 -    void move(const int &,const int&);
  26.102 +    void move    (const int &,const int&);
  26.103 +    void moveRel (const int &,const int&);
  26.104      void moveBranchUp();
  26.105      void moveBranchDown();
  26.106 -    void editHeading();					// Start editing heading 
  26.107 +	QString getHeading (bool &,QPoint &);	// Get heading, ok if selection is branch
  26.108 +	void setHeading(const QString &);
  26.109  private:
  26.110 -	void setHeading(const QString &);	// Just set the heading for selection
  26.111 -	void setURL(const QString &);		// Just set the URL for selection
  26.112 -	void setVymLink(const QString &);	// Set vymLink for selection
  26.113 +	void setHeadingInt(const QString &);
  26.114 +	void setURLInt(const QString &);		// Just set the URL for selection
  26.115 +	void setVymLinkInt(const QString &);	// Set vymLink for selection
  26.116 +    BranchObj* addNewBranchInt(int);		// pos allows to add above/below selection
  26.117  public:	
  26.118      void addNewBranch(int);			// pos allows to add above/below selection
  26.119      void addNewBranchHere();		// insert and make selection its
  26.120 @@ -104,11 +116,12 @@
  26.121  	LinkableMapObj* getSelection();	// returns selection
  26.122  	void unselect();				// before changing current noteedit
  26.123  	void reselect();				// after  changing current noteedit
  26.124 -	bool select(const QString &);	// Select 
  26.125 +	bool select(const QString &);	// Select by string
  26.126 +	QString getSelectString();
  26.127  private:	
  26.128 -	void select(LinkableMapObj*);	
  26.129 -	void selectNextBranch();		// Increment number of branch
  26.130 -	void selectPrevBranch();		// Decrement number of branch
  26.131 +	void selectInt(LinkableMapObj*);	
  26.132 +	void selectNextBranchInt();		// Increment number of branch
  26.133 +	void selectPrevBranchInt();		// Decrement number of branch
  26.134  public:	
  26.135      void selectUpperBranch();
  26.136      void selectLowerBranch();
  26.137 @@ -128,12 +141,14 @@
  26.138      void findReset();						// Reset Find 
  26.139  	void editURL();							// edit the URL
  26.140  	QString getURL();						// returns URL of selection or ""
  26.141 +	QStringList getURLs();					// returns URLs of subtree
  26.142  	void editHeading2URL();					// copy heading to URL
  26.143  	void editBugzilla2URL();				// create URL to Bugzilla
  26.144  	void editFATE2URL();					// create URL to FATE
  26.145  	void editVymLink();						// edit link to another map
  26.146  	void deleteVymLink();					// delete link to another map
  26.147  	QString getVymLink();					// return path to map
  26.148 +	QStringList getVymLinks();				// return paths in subtree
  26.149  	void toggleHideExport();				// toggle the export flag
  26.150  	void removeBranchKeepChilds();			// remove but keep childs
  26.151  	void removeChilds();					// remove childs
  26.152 @@ -156,19 +171,20 @@
  26.153      void toggleScroll();
  26.154      void unScrollAll();
  26.155  	void loadFloatImage ();
  26.156 -	void saveFloatImage (int);
  26.157 +	void saveFloatImage ();
  26.158  	void setFrame(const FrameType &);
  26.159  	void setIncludeImagesVer(bool);
  26.160  	void setIncludeImagesHor(bool);
  26.161  	void setHideLinkUnselected (bool);
  26.162  	bool getHideLinkUnselected ();
  26.163  private:	
  26.164 -    void importDir(BranchObj *,QDir);
  26.165 +    void importDirInt(BranchObj *,QDir);
  26.166  public:	
  26.167      void importDir();
  26.168  	void followXLink (int);
  26.169  	void editXLink (int);
  26.170 -    void testFunction();				// FIXME just testing
  26.171 +    void testFunction();					// just testing new stuff
  26.172 +											// set /mainwindo/showTestMenu=true...
  26.173  
  26.174  protected:
  26.175  	void ensureSelectionVisible();		
  26.176 @@ -182,12 +198,11 @@
  26.177      virtual void contentsDragEnterEvent(QDragEnterEvent *event);
  26.178      virtual void contentsDropEvent(QDropEvent *event);
  26.179  private:
  26.180 -    QCanvas* mapCanvas;
  26.181 +    Q3Canvas* mapCanvas;
  26.182      MapCenterObj* mapCenter;
  26.183  
  26.184  	bool adjustCanvasRequested;	// collect requests until end of user event
  26.185  	BranchObj *editingBO;		// entering Text into BO
  26.186 -    QLineEdit* lineedit;
  26.187  
  26.188      QColor actColor;			// actual color
  26.189  	QColor defLinkColor;		// default color for links
  26.190 @@ -202,12 +217,14 @@
  26.191  	bool drawingLink;			// true while creating a link
  26.192  	bool copyingObj;			// true while creating a link
  26.193  	XLinkObj* tmpXLink;
  26.194 -	
  26.195 +
  26.196 +	Selection xelection;
  26.197      LinkableMapObj* selection;		// select a LinkableMapObj
  26.198      LinkableMapObj* selectionLast;	// last selection 
  26.199      MapObj* movingObj;				// moving a MapObj
  26.200  	MapObj* linkingObj_src;			// part of a link
  26.201      QPoint movingObj_orgPos;		// org. pos of mouse before move
  26.202 +    QPoint movingObj_orgRelPos;		// org. relative pos of mouse before move
  26.203      QPoint movingObj_start;			// rel. pos of mouse to absPos 
  26.204      QPoint movingCont_start;		// inital pos of moving Content or
  26.205      QPoint movingVec;				// how far has Content moved
  26.206 @@ -228,13 +245,12 @@
  26.207  	QString fileDir;			// dir where file is saved
  26.208  	QString destPath;			// path to .vym file (needed for vymlinks)
  26.209  	QString mapName;			// fileName without ".vym"
  26.210 -	QString lastImageDir;		// save dir for adding images
  26.211  
  26.212  	bool isInteractive;			// non interactive don't need tmpdirs
  26.213  	QString tmpMapDir;			// tmp directory with data for undo/redo
  26.214 +	QString histPath;			// Path to history file
  26.215  	int undosTotal;				// total number of undos 
  26.216 -	int undoNum;				// current number of bakMapDir to be used 
  26.217 -	int undosAvail;				// how many actions can currently be undone
  26.218 +	SimpleSettings undoSet;		// undo/redo commands
  26.219  	bool blockReposition;		// block while load or undo
  26.220  	bool blockSaveState;		// block while load or undo
  26.221  
  26.222 @@ -246,7 +262,7 @@
  26.223  	
  26.224      void resizeEvent( QResizeEvent * );
  26.225  
  26.226 -  QUrlOperator *urlOperator;
  26.227 +  Q3UrlOperator *urlOperator;
  26.228    QDataStream *imageData;
  26.229    QBuffer *imageBuffer;
  26.230  
    27.1 --- a/mapobj.cpp	Tue Sep 05 09:47:13 2006 +0000
    27.2 +++ b/mapobj.cpp	Tue Sep 05 09:47:14 2006 +0000
    27.3 @@ -11,7 +11,7 @@
    27.4      init ();
    27.5  }
    27.6  
    27.7 -MapObj::MapObj (QCanvas* c)
    27.8 +MapObj::MapObj (Q3Canvas* c)
    27.9  {
   27.10  //  cout << "Const MapObj\n";
   27.11      canvas=c;
   27.12 @@ -45,7 +45,7 @@
   27.13  	bbox.setSize (QSize(other->bbox.width(), other->bbox.height() ) );
   27.14  }
   27.15  
   27.16 -QCanvas* MapObj::getCanvas()
   27.17 +Q3Canvas* MapObj::getCanvas()
   27.18  {
   27.19  	return canvas;
   27.20  }
    28.1 --- a/mapobj.h	Tue Sep 05 09:47:13 2006 +0000
    28.2 +++ b/mapobj.h	Tue Sep 05 09:47:14 2006 +0000
    28.3 @@ -1,7 +1,7 @@
    28.4  #ifndef MAPOBJ_H
    28.5  #define MAPOBJ_H
    28.6  
    28.7 -#include <qcanvas.h>
    28.8 +#include <q3canvas.h>
    28.9  #include <iostream>
   28.10  
   28.11  #include "misc.h"
   28.12 @@ -20,12 +20,12 @@
   28.13  class MapObj:public xmlObj {
   28.14  public:
   28.15      MapObj ();
   28.16 -    MapObj (QCanvas*);
   28.17 +    MapObj (Q3Canvas*);
   28.18      MapObj (MapObj*);
   28.19      virtual ~MapObj ();
   28.20      virtual void init ();
   28.21      virtual void copy (MapObj*);
   28.22 -	virtual QCanvas* getCanvas();
   28.23 +	virtual Q3Canvas* getCanvas();
   28.24      virtual int x();
   28.25      virtual int y();
   28.26  	virtual int width();
   28.27 @@ -43,7 +43,7 @@
   28.28      virtual void positionBBox()=0;       
   28.29  	virtual void calcBBoxSize()=0;
   28.30  protected:  
   28.31 -    QCanvas* canvas;
   28.32 +    Q3Canvas* canvas;
   28.33      QRect bbox;									// bounding box of MO itself
   28.34  	QRect clickBox;								// area where mouseclicks are found
   28.35      QPoint absPos;							    // Position on canvas
    29.1 --- a/misc.cpp	Tue Sep 05 09:47:13 2006 +0000
    29.2 +++ b/misc.cpp	Tue Sep 05 09:47:14 2006 +0000
    29.3 @@ -13,7 +13,8 @@
    29.4  
    29.5  ostream &operator<< (ostream &stream, QPoint const &p)
    29.6  { 
    29.7 -    return (stream << qpointToString(p) );
    29.8 +	stream << "("<<p.x()<<","<<p.y()<<")";
    29.9 +	return stream;
   29.10  }
   29.11  
   29.12  float getAngle(const QPoint &p)
    30.1 --- a/options.cpp	Tue Sep 05 09:47:13 2006 +0000
    30.2 +++ b/options.cpp	Tue Sep 05 09:47:14 2006 +0000
    30.3 @@ -86,7 +86,7 @@
    30.4  			}
    30.5  			if (isFile)
    30.6  			{
    30.7 -				cout << "Error: Unknown argument "<<*itarg<<endl;
    30.8 +				qWarning("Error: Unknown argument ");
    30.9  				return 1;
   30.10  			}
   30.11  		} else
    31.1 --- a/options.h	Tue Sep 05 09:47:13 2006 +0000
    31.2 +++ b/options.h	Tue Sep 05 09:47:14 2006 +0000
    31.3 @@ -3,6 +3,8 @@
    31.4  
    31.5  #include <qstring.h>
    31.6  #include <qstringlist.h>
    31.7 +//Added by qt3to4:
    31.8 +#include <Q3ValueList>
    31.9  
   31.10  enum OptionType  {SwitchOption,StringOption};
   31.11  
   31.12 @@ -30,7 +32,7 @@
   31.13  
   31.14  
   31.15  
   31.16 -typedef QValueList <Option> OptionList;
   31.17 +typedef Q3ValueList <Option> OptionList;
   31.18  
   31.19  class Options
   31.20  {
    32.1 --- a/ornamentedobj.cpp	Tue Sep 05 09:47:13 2006 +0000
    32.2 +++ b/ornamentedobj.cpp	Tue Sep 05 09:47:14 2006 +0000
    32.3 @@ -18,7 +18,7 @@
    32.4      init ();
    32.5  }
    32.6  
    32.7 -OrnamentedObj::OrnamentedObj(QCanvas* c) :LinkableMapObj(c)
    32.8 +OrnamentedObj::OrnamentedObj(Q3Canvas* c) :LinkableMapObj(c)
    32.9  {
   32.10  //    cout << "Const OrnamentedObj\n";
   32.11      init ();
   32.12 @@ -159,8 +159,7 @@
   32.13  
   32.14  void OrnamentedObj::move2RelPos(double x, double y)
   32.15  {
   32.16 -	if (!parObj) return;
   32.17 -	move (parObj->getChildPos().x()+x, parObj->getChildPos().y()+y);
   32.18 +	setRelPos (QPoint(x,y));
   32.19  }
   32.20  
   32.21  void OrnamentedObj::move2RelPos(QPoint p)
   32.22 @@ -281,6 +280,15 @@
   32.23  	forceReposition();
   32.24  }
   32.25  
   32.26 +void OrnamentedObj::deactivateStandardFlag(QString f)
   32.27 +{
   32.28 +	standardFlags->deactivate(f);
   32.29 +	calcBBoxSize();
   32.30 +	positionBBox();
   32.31 +	move (absPos.x(), absPos.y() );
   32.32 +	forceReposition();
   32.33 +}
   32.34 +
   32.35  bool OrnamentedObj::isSetStandardFlag (QString f)
   32.36  {
   32.37  	return standardFlags->isActive(f);
   32.38 @@ -312,6 +320,11 @@
   32.39  	}	
   32.40  }
   32.41  
   32.42 +void OrnamentedObj::updateFlagsToolbar()
   32.43 +{
   32.44 +	standardFlags->updateToolbar();
   32.45 +}
   32.46 +
   32.47  void OrnamentedObj::setHideInExport(bool b)
   32.48  {
   32.49  	if (parObj)
    33.1 --- a/ornamentedobj.h	Tue Sep 05 09:47:13 2006 +0000
    33.2 +++ b/ornamentedobj.h	Tue Sep 05 09:47:14 2006 +0000
    33.3 @@ -6,7 +6,7 @@
    33.4  class OrnamentedObj:public LinkableMapObj {
    33.5  public:	
    33.6      OrnamentedObj ();
    33.7 -    OrnamentedObj (QCanvas*);
    33.8 +    OrnamentedObj (Q3Canvas*);
    33.9      OrnamentedObj (OrnamentedObj*);
   33.10      ~OrnamentedObj ();
   33.11      virtual void init ();
   33.12 @@ -35,10 +35,12 @@
   33.13  
   33.14  	virtual void toggleStandardFlag(QString, bool);
   33.15  	virtual void activateStandardFlag(QString);
   33.16 +	virtual void deactivateStandardFlag(QString);
   33.17  	virtual bool isSetStandardFlag(QString);
   33.18  	virtual QString getSystemFlagName (const QPoint &p);
   33.19  	virtual bool isActiveFlag(const QString&);	// check if flag is set
   33.20  	virtual void updateNoteFlag();
   33.21 +	virtual void updateFlagsToolbar();
   33.22  	virtual void setHideInExport(bool);		// set export of object (and childs)
   33.23  	virtual bool hideInExport();
   33.24  	virtual bool isHidden ();
    34.1 --- a/process.h	Tue Sep 05 09:47:13 2006 +0000
    34.2 +++ b/process.h	Tue Sep 05 09:47:14 2006 +0000
    34.3 @@ -1,13 +1,13 @@
    34.4  #ifndef PROCESS_H
    34.5  #define PROCESS_H
    34.6  
    34.7 -#include <qprocess.h>
    34.8 +#include <q3process.h>
    34.9  #include <qstring.h>
   34.10  
   34.11  
   34.12  using namespace std;
   34.13  
   34.14 -class Process:public QProcess
   34.15 +class Process:public Q3Process
   34.16  {
   34.17  	Q_OBJECT
   34.18  public:
    35.1 --- a/settings.cpp	Tue Sep 05 09:47:13 2006 +0000
    35.2 +++ b/settings.cpp	Tue Sep 05 09:47:14 2006 +0000
    35.3 @@ -61,6 +61,7 @@
    35.4  		qWarning ("SimpleSettings::writeSettings() Couldn't write "+path);
    35.5  }
    35.6  
    35.7 +/*
    35.8  QString SimpleSettings::readEntry (const QString &key)
    35.9  {
   35.10  	QStringList::Iterator itk=keylist.begin();
   35.11 @@ -77,6 +78,46 @@
   35.12  	qWarning ("SimpleSettings::readEntry()  Couldn't find key "+key);
   35.13  	return "";
   35.14  }
   35.15 +*/
   35.16 +
   35.17 +QString SimpleSettings::readEntry (const QString &key, const QString &def)
   35.18 +{
   35.19 +	QStringList::Iterator itk=keylist.begin();
   35.20 +	QStringList::Iterator itv=valuelist.begin();
   35.21 +
   35.22 +	// First search for value in settings saved in map
   35.23 +	while (itk !=keylist.end() )
   35.24 +	{
   35.25 +		if (*itk == key)
   35.26 +			return *itv;
   35.27 +		itk++;
   35.28 +		itv++;
   35.29 +	}
   35.30 +	return def;
   35.31 +}
   35.32 +
   35.33 +int SimpleSettings::readNumEntry (const QString &key, int def)
   35.34 +{
   35.35 +	QStringList::Iterator itk=keylist.begin();
   35.36 +	QStringList::Iterator itv=valuelist.begin();
   35.37 +
   35.38 +	// First search for value in settings saved in map
   35.39 +	while (itk !=keylist.end() )
   35.40 +	{
   35.41 +		if (*itk == key)
   35.42 +		{
   35.43 +			bool ok;
   35.44 +			int i=(*itv).toInt(&ok,10);
   35.45 +			if (ok)
   35.46 +				return i;
   35.47 +			else
   35.48 +				return def;
   35.49 +		}	
   35.50 +		itk++;
   35.51 +		itv++;
   35.52 +	}
   35.53 +	return def;
   35.54 +}
   35.55  
   35.56  void SimpleSettings::setEntry (const QString &key, const QString &value)
   35.57  {
   35.58 @@ -117,6 +158,11 @@
   35.59  	clear();		 
   35.60  }
   35.61  
   35.62 +Settings::Settings(const QString & organization, const QString & application ):QSettings (organization,application)
   35.63 +{
   35.64 +	clear();		 
   35.65 +}
   35.66 +
   35.67  Settings::~Settings()
   35.68  {
   35.69  }
    36.1 --- a/settings.h	Tue Sep 05 09:47:13 2006 +0000
    36.2 +++ b/settings.h	Tue Sep 05 09:47:14 2006 +0000
    36.3 @@ -18,7 +18,8 @@
    36.4  	void clear();
    36.5  	void readSettings(const QString &);
    36.6  	void writeSettings(const QString &);
    36.7 -	QString readEntry (const QString &);
    36.8 +	QString readEntry (const QString &key, const QString &def=QString());
    36.9 +	int readNumEntry (const QString &, int=0);
   36.10  	void setEntry (const QString &,const QString &);
   36.11  private:	
   36.12  	QStringList keylist;
   36.13 @@ -32,6 +33,7 @@
   36.14  {
   36.15  public:
   36.16      Settings ();
   36.17 +    Settings (const QString & , const QString &);
   36.18  	~Settings ();
   36.19  	void clear();
   36.20  	void clearLocal (const QString &);
    37.1 --- a/texteditor.cpp	Tue Sep 05 09:47:13 2006 +0000
    37.2 +++ b/texteditor.cpp	Tue Sep 05 09:47:14 2006 +0000
    37.3 @@ -1,28 +1,19 @@
    37.4  #include "texteditor.h"
    37.5  
    37.6 -#include <qcanvas.h>
    37.7 -#include <qstatusbar.h>
    37.8 -#include <qmessagebox.h>
    37.9 -#include <qaction.h>
   37.10 -#include <qapplication.h>
   37.11 -#include <qpainter.h>
   37.12 -#include <qprinter.h>
   37.13 -#include <qfile.h>
   37.14 -#include <qfiledialog.h>
   37.15 -#include <qtoolbar.h>
   37.16 -#include <qpopupmenu.h>
   37.17 +#include <QPainter>
   37.18 +#include <QPrinter>
   37.19 +#include <QFile>
   37.20 +#include <QFileDialog>
   37.21  #include <qmenubar.h>
   37.22 -#include <qtextedit.h>
   37.23 -#include <qaccel.h>
   37.24  #include <qtextstream.h>
   37.25 -#include <qpaintdevicemetrics.h>
   37.26 -#include <qsettings.h>
   37.27 -#include <qfontdialog.h>
   37.28 -#include <qmessagebox.h>
   37.29 -#include <qcolordialog.h>
   37.30 -#include <qregexp.h>
   37.31 -#include <qlineedit.h>
   37.32 -#include <qsimplerichtext.h>
   37.33 +#include <QSettings>
   37.34 +#include <QFontDialog>
   37.35 +#include <QMessageBox>
   37.36 +#include <QColorDialog>
   37.37 +#include <QRegExp>
   37.38 +#include <QList>
   37.39 +#include <QPixmap>
   37.40 +#include <QCloseEvent>
   37.41  
   37.42  #include <iostream>
   37.43  #include <cstdlib>
   37.44 @@ -31,7 +22,6 @@
   37.45  #include "noteobj.h"
   37.46  #include "version.h"
   37.47  
   37.48 -extern QCanvas* actCanvas;
   37.49  extern int statusbarTime;
   37.50  extern QSettings settings;
   37.51  
   37.52 @@ -49,15 +39,16 @@
   37.53  TextEditor::TextEditor()
   37.54  {
   37.55      printer = new QPrinter( QPrinter::HighResolution );
   37.56 -	printer->setPrinterName (settings.readEntry("/vym/mainwindow/printerName",printer->printerName()));
   37.57 +	printer->setPrinterName (settings.value("/mainwindow/printerName",printer->printerName()).toString());
   37.58  
   37.59  	// Editor (use MyTextEdit to wrap verticalAlignmentChanged to 
   37.60  	//         int argument. see header file)
   37.61      e = new MyTextEdit( this, "editor" );
   37.62      e->setFocus();
   37.63 -	e->setTextFormat(RichText);		// default
   37.64 +	e->setTextFormat(Qt::RichText);		// default
   37.65  	e->setTabStopWidth (20);		// unit is pixel
   37.66 -	e->setColor (black);
   37.67 +	e->setColor (Qt::black);
   37.68 +	e->setAutoFillBackground (true);
   37.69  	connect (e, SIGNAL( textChanged() ), this, SLOT( editorChanged() ) );
   37.70      setCentralWidget( e );
   37.71      statusBar()->message( "Ready", statusbarTime);
   37.72 @@ -70,31 +61,26 @@
   37.73  	setupSettingsActions();
   37.74  	
   37.75  	// Various states
   37.76 -	emptyPaper   = QBrush(gray);
   37.77 -	filledPaper  = QBrush(white);
   37.78 -	inactivePaper= QBrush(black);
   37.79  	setInactive();
   37.80  
   37.81  	// Load Settings
   37.82 -	resize (settings.readNumEntry( "/vym/noteeditor/geometry/width", 450),
   37.83 -	        settings.readNumEntry( "/vym/noteeditor/geometry/height",600));
   37.84 -	move   (settings.readNumEntry( "/vym/noteeditor/geometry/posX", 150),
   37.85 -	        settings.readNumEntry( "/vym/noteeditor/geometry/posY",  50));
   37.86 +	resize (settings.value ( "/noteeditor/geometry/size", QSize(450,600)).toSize());
   37.87 +	move   (settings.value ( "/noteeditor/geometry/pos", QPoint (250,50)).toPoint());
   37.88  	
   37.89 -	if (settings.readEntry( "/vym/noteeditor/showWithMain","yes") =="yes")
   37.90 +	if (settings.value ( "/noteeditor/showWithMain",true).toBool())
   37.91  		setShowWithMain(true);
   37.92  	else	
   37.93  		setShowWithMain(false);
   37.94  
   37.95 -	varFont.fromString( settings.readEntry 
   37.96 -		("/vym/noteeditor/fonts/varFont",
   37.97 -		"Nimbus Sans l,14,-1,5,48,0,0,0,0,0") 
   37.98 +	varFont.fromString( settings.value
   37.99 +		("/noteeditor/fonts/varFont",
  37.100 +		"Nimbus Sans l,14,-1,5,48,0,0,0,0,0").toString() 
  37.101  	);
  37.102 -	fixedFont.fromString (settings.readEntry (
  37.103 -		"/vym/noteeditor/fonts/fixedFont",
  37.104 -		"Courier,14,-1,5,48,0,0,0,1,0") 
  37.105 +	fixedFont.fromString (settings.value(
  37.106 +		"/noteeditor/fonts/fixedFont",
  37.107 +		"Courier,14,-1,5,48,0,0,0,1,0").toString() 
  37.108  	);
  37.109 -	QString s=settings.readEntry ("/vym/noteeditor/fonts/fonthintDefault","variable");
  37.110 +	QString s=settings.value ("/noteeditor/fonts/fonthintDefault","variable").toString();
  37.111  	if (s == "fixed")
  37.112  	{	
  37.113  		actionSettingsFonthintDefault->setOn (true);
  37.114 @@ -107,7 +93,7 @@
  37.115  	filenameHint="";
  37.116  
  37.117  	// Save settings in vymrc
  37.118 -	settings.writeEntry("/vym/mainwindow/printerName",printer->printerName());
  37.119 +	settings.setValue("/mainwindow/printerName",printer->printerName());
  37.120  }
  37.121  
  37.122  
  37.123 @@ -115,31 +101,24 @@
  37.124  {
  37.125      if (printer) delete printer;
  37.126  	// Save Settings
  37.127 -	settings.writeEntry( "/vym/noteeditor/geometry/width", width() );
  37.128 -	settings.writeEntry( "/vym/noteeditor/geometry/height", height() );
  37.129 -	settings.writeEntry( "/vym/noteeditor/geometry/posX", pos().x() );
  37.130 -	settings.writeEntry( "/vym/noteeditor/geometry/posY", pos().y() );
  37.131 +	settings.setValue( "/noteeditor/geometry/size", size() );
  37.132 +	settings.setValue( "/noteeditor/geometry/pos", pos() );
  37.133  	
  37.134 -	if (showWithMain())
  37.135 -		settings.writeEntry( "/vym/noteeditor/showWithMain","yes");
  37.136 -	else	
  37.137 -		settings.writeEntry( "/vym/noteeditor/showWithMain","no");
  37.138 +	settings.setValue( "/noteeditor/showWithMain",showWithMain());
  37.139  
  37.140  	QString s;
  37.141  	if (actionSettingsFonthintDefault->isOn() )
  37.142  		s="fixed";
  37.143  	else	
  37.144  		s="variable";
  37.145 -	settings.writeEntry( "/vym/noteeditor/fonts/fonthintDefault",s );
  37.146 -	settings.writeEntry ("/vym/noteeditor/fonts/varFont",
  37.147 -		varFont.toString() );
  37.148 -	settings.writeEntry ("/vym/noteeditor/fonts/fixedFont",
  37.149 -		fixedFont.toString() );
  37.150 +	settings.setValue( "/noteeditor/fonts/fonthintDefault",s );
  37.151 +	settings.setValue("/noteeditor/fonts/varFont", varFont.toString() );
  37.152 +	settings.setValue("/noteeditor/fonts/fixedFont", fixedFont.toString() );
  37.153  }
  37.154  
  37.155  bool TextEditor::isEmpty()
  37.156  {
  37.157 -	if (e->text().length())
  37.158 +	if (e->toPlainText().length()>0)
  37.159  		return false;
  37.160  	else
  37.161  		return true;
  37.162 @@ -210,10 +189,9 @@
  37.163  	return filenameHint;
  37.164  }
  37.165  
  37.166 -bool TextEditor::findText(const QString &t, const bool &cs)
  37.167 +bool TextEditor::findText(const QString &t, const QTextDocument::FindFlags &flags)
  37.168  {
  37.169 -	bool wo=false;	// word matches
  37.170 -	if (e->find (t, cs, wo, true, 0, 0 ))
  37.171 +	if (e->find (t,flags))
  37.172  		return true;
  37.173  	else	
  37.174  		return false;
  37.175 @@ -221,229 +199,285 @@
  37.176  
  37.177  void TextEditor::setupFileActions()
  37.178  {
  37.179 -    QToolBar *tb = new QToolBar( this );
  37.180 -    tb->setLabel( "File Actions" );
  37.181 -    QPopupMenu *menu = new QPopupMenu( this );
  37.182 -    menuBar()->insertItem( tr( "&File" ), menu );
  37.183 +    QToolBar *tb = addToolBar ( tr("Note Actions") );
  37.184 +    QMenu *fileMenu = menuBar()->addMenu( tr( "&Note" ));
  37.185  
  37.186      QAction *a;
  37.187 -    a = new QAction( tr( "Import" ), QPixmap( iconPath+"fileopen.png"), tr( "&Import..." ), CTRL + Key_O, this, "fileImport" );
  37.188 +    a = new QAction( QPixmap( iconPath+"fileopen.png"), tr( "&Import..." ),this);
  37.189 +	a->setStatusTip (tr( "Import" ) );
  37.190 +	a->setShortcut( Qt::CTRL + Qt::Key_O );
  37.191      connect( a, SIGNAL( activated() ), this, SLOT( textLoad() ) );
  37.192 -	a->setEnabled(false);
  37.193 -    a->addTo( tb );
  37.194 -    a->addTo( menu );
  37.195 +	tb->addAction (a);
  37.196 +	fileMenu->addAction (a);
  37.197  	actionFileLoad=a;
  37.198  
  37.199 -    menu->insertSeparator();
  37.200 -    a = new QAction( tr( "Export Note (HTML)" ), QPixmap(iconPath+"filesave.png" ), tr( "&Export..." ), CTRL + Key_S, this, "fileSave" );
  37.201 +    fileMenu->addSeparator();
  37.202 +    a = new QAction( QPixmap(iconPath+"filesave.png" ), tr( "&Export..." ),this);
  37.203 +	a->setStatusTip (tr( "Export Note (HTML)" ) );
  37.204 +	a->setShortcut( Qt::CTRL + Qt::Key_S );
  37.205      connect( a, SIGNAL( activated() ), this, SLOT( textSave() ) );
  37.206 -    a->addTo( tb );
  37.207 -    a->addTo( menu );
  37.208 +	tb->addAction (a);
  37.209 +	fileMenu->addAction (a);
  37.210  	actionFileSave=a;
  37.211  	
  37.212 -    a = new QAction( tr( "Export Note As (HTML) " ), QPixmap(), tr( "Export &As... (HTML)" ), 0, this, "exportHTML" );
  37.213 +    a = new QAction(  QPixmap(), tr( "Export &As... (HTML)" ), this);
  37.214 +	a->setStatusTip (tr( "Export Note As (HTML) " ));
  37.215      connect( a, SIGNAL( activated() ), this, SLOT( textSaveAs() ) );
  37.216 -    a->addTo( menu );
  37.217 +	fileMenu->addAction (a);
  37.218  	actionFileSaveAs=a;
  37.219  
  37.220 -    a = new QAction( tr( "Export Note As (ASCII) " ), QPixmap(), tr( "Export &As...(ASCII)" ), ALT + Key_X, this, "exportASCII" );
  37.221 +    a = new QAction(QPixmap(), tr( "Export &As...(ASCII)" ), this);
  37.222 +	a->setStatusTip ( tr( "Export Note As (ASCII) " ) );
  37.223 +	a->setShortcut(Qt::ALT + Qt::Key_X );
  37.224      connect( a, SIGNAL( activated() ), this, SLOT( textExportAsASCII() ) );
  37.225 -    a->addTo( menu );
  37.226 +	fileMenu->addAction (a);
  37.227  	actionFileSaveAs=a;
  37.228  
  37.229 -    menu->insertSeparator();
  37.230 -    a = new QAction( tr( "Print Note" ), QPixmap(iconPath+"fileprint.png" ), tr( "&Print..." ), CTRL + Key_P, this, "filePrint" );
  37.231 +    fileMenu->addSeparator();
  37.232 +    a = new QAction( QPixmap(iconPath+"fileprint.png" ), tr( "&Print..." ),this);
  37.233 +	a->setStatusTip (tr( "Print Note" ) );
  37.234 +	a->setShortcut( Qt::CTRL + Qt::Key_P );
  37.235      connect( a, SIGNAL( activated() ), this, SLOT( textPrint() ) );
  37.236 -    a->addTo( tb );
  37.237 -    a->addTo( menu );
  37.238 +	tb->addAction (a);
  37.239 +	fileMenu->addAction (a);
  37.240  	actionFilePrint=a;
  37.241  }
  37.242  
  37.243  void TextEditor::setupEditActions()
  37.244  {
  37.245 -    QToolBar *tb = new QToolBar( this );
  37.246 -    tb->setLabel( "Edit Actions" );
  37.247 -    QPopupMenu *menu = new QPopupMenu( this );
  37.248 -    menuBar()->insertItem( tr( "&Edit" ), menu );
  37.249 +    QToolBar *tb = addToolBar ( tr( "Edit Actions" ));
  37.250 +    QMenu *editMenu = menuBar()->addMenu ( tr( "&Edit" ));
  37.251  
  37.252      QAction *a;
  37.253 -    a = new QAction( tr( "Undo" ), QPixmap(iconPath+"undo.png"), tr( "&Undo" ), CTRL + Key_Z, this, "undoEvent" );
  37.254 +    a = new QAction(QPixmap(iconPath+"undo.png"), tr( "&Undo" ), this );
  37.255 +	a->setStatusTip ( tr( "Undo" ) );
  37.256 +	a->setShortcut(Qt::CTRL + Qt::Key_Z );
  37.257      connect( a, SIGNAL( activated() ), e, SLOT( undo() ) );
  37.258 -    a->addTo( menu );
  37.259 -    a->addTo( tb);
  37.260 +	editMenu->addAction (a);
  37.261 +	tb->addAction (a);
  37.262  	actionEditUndo=a;
  37.263  	
  37.264 -    a = new QAction( tr( "Redo" ), QPixmap(iconPath+"redo.png" ), tr( "&Redo" ), CTRL + Key_Y, this, "editRedo" ); 
  37.265 +    a = new QAction(QPixmap(iconPath+"redo.png" ), tr( "&Redo" ),this); 
  37.266 +	a->setStatusTip ( tr( "Redo" ) );
  37.267 +	a->setShortcut( Qt::CTRL + Qt::Key_Y );
  37.268      connect( a, SIGNAL( activated() ), e, SLOT( redo() ) );
  37.269 -    a->addTo( tb );
  37.270 -    a->addTo( menu );
  37.271 +	editMenu->addAction (a);
  37.272 +	tb->addAction (a);
  37.273  	actionEditRedo=a;
  37.274  
  37.275 -    menu->insertSeparator();
  37.276 -    a = new QAction( tr( "Select and copy all" ), QPixmap(), tr( "Select and copy &all" ), CTRL + Key_A, this, "editcopyall" ); 
  37.277 +    editMenu->addSeparator();
  37.278 +    a = new QAction(QPixmap(), tr( "Select and copy &all" ),this); 
  37.279 +	a->setStatusTip ( tr( "Select and copy all" ) );
  37.280 +	a->setShortcut( Qt::CTRL + Qt::Key_A );
  37.281      connect( a, SIGNAL( activated() ), this, SLOT( editCopyAll() ) );
  37.282 -    a->addTo( menu );
  37.283 +	editMenu->addAction (a);
  37.284  
  37.285 -    menu->insertSeparator();
  37.286 -    a = new QAction( tr( "Copy" ), QPixmap(iconPath+"editcopy.png" ), tr( "&Copy" ), CTRL + Key_C, this, "editCopy" );
  37.287 +    editMenu->addSeparator();
  37.288 +    a = new QAction(QPixmap(iconPath+"editcopy.png" ), tr( "&Copy" ),this);
  37.289 +	a->setStatusTip ( tr( "Copy" ) );
  37.290 +	a->setShortcut( Qt::CTRL + Qt::Key_C );
  37.291      connect( a, SIGNAL( activated() ), e, SLOT( copy() ) );
  37.292 -    a->addTo( tb );
  37.293 -    a->addTo( menu );
  37.294 +	editMenu->addAction (a);
  37.295 +	tb->addAction (a);
  37.296  	actionEditCopy=a;
  37.297  	
  37.298 -    a = new QAction( tr( "Cut" ), QPixmap(iconPath+"editcut.png" ), tr( "Cu&t" ), CTRL + Key_X, this, "editCut" );
  37.299 +    a = new QAction(QPixmap(iconPath+"editcut.png" ), tr( "Cu&t" ),this);
  37.300 +	a->setStatusTip ( tr( "Cut" ) );
  37.301 +	a->setShortcut( Qt::CTRL + Qt::Key_X );
  37.302      connect( a, SIGNAL( activated() ), e, SLOT( cut() ) );
  37.303 -    a->addTo( tb );
  37.304 -    a->addTo( menu );
  37.305 +	editMenu->addAction (a);
  37.306 +	tb->addAction (a);
  37.307  	actionEditCut=a;
  37.308  
  37.309 -    a = new QAction( tr( "Paste" ), QPixmap(iconPath+"editpaste.png" ), tr( "&Paste" ), CTRL + Key_V, this, "editPaste" );
  37.310 +    a = new QAction(QPixmap(iconPath+"editpaste.png" ), tr( "&Paste" ),this);
  37.311 +	a->setStatusTip ( tr( "Paste" ) );
  37.312 +	a->setShortcut( Qt::CTRL + Qt::Key_V );
  37.313      connect( a, SIGNAL( activated() ), e, SLOT( paste() ) );
  37.314 -    a->addTo( tb );
  37.315 -    a->addTo( menu );
  37.316 +	editMenu->addAction (a);
  37.317 +	tb->addAction (a);
  37.318  	actionEditPaste=a;
  37.319  	
  37.320 -    a = new QAction( tr( "Delete all" ), QPixmap( iconPath+"edittrash.png"), tr( "&Delete All" ), 0, this, "editDeleteAll" );
  37.321 +    a = new QAction( QPixmap( iconPath+"edittrash.png"), tr( "&Delete All" ), this);
  37.322 +	a->setStatusTip (tr( "Delete all" ) );
  37.323      connect( a, SIGNAL( activated() ), e, SLOT( clear() ) );
  37.324 -    a->addTo( tb );
  37.325 -    a->addTo( menu );
  37.326 +	editMenu->addAction (a);
  37.327 +	tb->addAction (a);
  37.328  	actionEditDeleteAll=a;
  37.329  
  37.330 -	a = new QAction( tr( "Convert paragraphs to linebreaks" ), QPixmap(), tr( "&Convert Paragraphs" ), ALT + Key_P, this, "editConvertPar" );
  37.331 +	a = new QAction(QPixmap(), tr( "&Convert Paragraphs" ),this);
  37.332 +	/* TODO not needed any longer? remove also from docu...
  37.333 +	a->setStatusTip(tr( "Convert paragraphs to linebreaks" )); 
  37.334 +	a->setShortcut( Qt::ALT + Qt::Key_P );
  37.335      connect( a, SIGNAL( activated() ), this, SLOT( textConvertPar() ) );
  37.336 -    a->addTo( menu );
  37.337 +	editMenu->addAction (a);
  37.338 +	*/
  37.339  	actionEditConvertPar=a;
  37.340  
  37.341 -	a = new QAction( tr( "Join all lines of a paragraph" ), QPixmap(), tr( "&Join lines" ), ALT + Key_J, this, "editJoinLines" );
  37.342 +	a = new QAction( QPixmap(), tr( "&Join lines" ), this);
  37.343 +	/* TODO not needed any longer? remove also from docu...
  37.344 +	a->setStatusTip(tr( "Join all lines of a paragraph" ) ); 
  37.345 +	a->setShortcut(Qt::ALT + Qt::Key_J );
  37.346      connect( a, SIGNAL( activated() ), this, SLOT( textJoinLines() ) );
  37.347 -    a->addTo( menu );
  37.348 +	editMenu->addAction (a);
  37.349 +	*/
  37.350  	actionEditJoinLines=a;
  37.351  }
  37.352  
  37.353  void TextEditor::setupFormatActions()
  37.354  {
  37.355 -    QToolBar *tb = new QToolBar( this );
  37.356 -    tb->setLabel( "Format Actions" );
  37.357 -    QPopupMenu *menu = new QPopupMenu( this );
  37.358 -    menuBar()->insertItem( tr( "F&ormat" ), menu );
  37.359 +    QToolBar *tb = addToolBar ( tr("Format Actions" ));
  37.360 +    QMenu *formatMenu = menuBar()->addMenu ( tr( "F&ormat" ));
  37.361  
  37.362      QAction *a;
  37.363  
  37.364 -    a = new QAction( tr( "Toggle font hint for the whole text" ), QPixmap(iconPath+"formatfixedfont.png"), tr( "&Font hint" ), ALT + Key_I, this, "fontHint" );
  37.365 +    a = new QAction( QPixmap(iconPath+"formatfixedfont.png"), tr( "&Font hint" ), Qt::ALT + Qt::Key_I, this, "fontHint" );
  37.366 +	a->setStatusTip (tr( "Toggle font hint for the whole text" ) );
  37.367  	a->setToggleAction (true);
  37.368 -	a->setOn (settings.readBoolEntry ("/vym/noteeditor/fonts/useFixedByDefault",false) );
  37.369 +	a->setOn (settings.value("/noteeditor/fonts/useFixedByDefault",false).toBool() );
  37.370      connect( a, SIGNAL( activated() ), this, SLOT( toggleFonthint() ) );
  37.371 -    a->addTo( menu );
  37.372 -    a->addTo( tb );
  37.373 +	formatMenu->addAction (a);
  37.374 +	tb->addAction (a);
  37.375  	actionFormatUseFixedFont=a;
  37.376  
  37.377 -	menu->insertSeparator();
  37.378 -
  37.379 -    comboFont = new QComboBox( true, tb );
  37.380 -    QFontDatabase db;
  37.381 -    comboFont->insertStringList( db.families() );
  37.382 +//    comboFont = new QComboBox( true, tb );
  37.383 +    comboFont = new QComboBox;
  37.384 +	tb->addWidget (comboFont);
  37.385 +    QFontDatabase fontDB;
  37.386 +    comboFont->insertStringList( fontDB.families() );
  37.387      connect( comboFont, SIGNAL( activated( const QString & ) ),
  37.388  	     this, SLOT( textFamily( const QString & ) ) );
  37.389 -    comboFont->lineEdit()->setText( QApplication::font().family() );
  37.390 -
  37.391 -    comboSize = new QComboBox( true, tb );
  37.392 -    QValueList<int> sizes = db.standardSizes();
  37.393 -    QValueList<int>::Iterator it = sizes.begin();
  37.394 -    for ( ; it != sizes.end(); ++it )
  37.395 -	comboSize->insertItem( QString::number( *it ) );
  37.396 +    comboFont->addItem( QApplication::font().family() );
  37.397 +    comboSize = new QComboBox;
  37.398 +	tb->addWidget (comboSize);
  37.399 +	QList<int> sizes=fontDB.standardSizes();
  37.400 +	QList<int>::iterator i = sizes.begin();
  37.401 +	while (i != sizes.end()) 
  37.402 +	{
  37.403 +		++i; // increment i before using it
  37.404 +		comboSize->insertItem ( QString::number(*i));
  37.405 +	}	
  37.406      connect( comboSize, SIGNAL( activated( const QString & ) ),
  37.407  	     this, SLOT( textSize( const QString & ) ) );
  37.408 -    comboSize->lineEdit()->setText( QString::number( QApplication::font().pointSize() ) );
  37.409 +    comboSize->addItem ( QString::number( QApplication::font().pointSize() ) );
  37.410  
  37.411 -    menu->insertSeparator();
  37.412 +    formatMenu->addSeparator();
  37.413  
  37.414      QPixmap pix( 16, 16 );
  37.415      pix.fill( e->color());
  37.416 -    actionTextColor = new QAction( pix, tr( "&Color..." ), 0, this, "textColor" );
  37.417 -    connect( actionTextColor, SIGNAL( activated() ), this, SLOT( textColor() ) );
  37.418 -    actionTextColor->addTo( tb );
  37.419 -    actionTextColor->addTo( menu );
  37.420 +    a = new QAction( pix, tr( "&Color..." ), this);
  37.421 +	formatMenu->addAction (a);
  37.422 +	tb->addAction (a);
  37.423 +    connect( a, SIGNAL( activated() ), this, SLOT( textColor() ) );
  37.424 +    actionTextColor=a;
  37.425  
  37.426 -    actionTextBold = new QAction( QPixmap (iconPath+"text_bold.png"), tr( "&Bold" ), CTRL + Key_B, this, "textBold" );
  37.427 -    connect( actionTextBold, SIGNAL( activated() ), this, SLOT( textBold() ) );
  37.428 -    actionTextBold->addTo( tb );
  37.429 -    actionTextBold->addTo( menu );
  37.430 -    actionTextBold->setToggleAction( true );
  37.431 -    actionTextItalic = new QAction( QPixmap(iconPath+"text_italic.png"), tr( "&Italic" ), CTRL + Key_I, this, "textItalic" );
  37.432 -    connect( actionTextItalic, SIGNAL( activated() ), this, SLOT( textItalic() ) );
  37.433 -    actionTextItalic->addTo( tb );
  37.434 -    actionTextItalic->addTo( menu );
  37.435 -    actionTextItalic->setToggleAction( true );
  37.436 -    actionTextUnderline = new QAction( QPixmap (iconPath+"text_under.png"), tr( "&Underline" ), CTRL + Key_U, this, "textUnderline" );
  37.437 -    connect( actionTextUnderline, SIGNAL( activated() ), this, SLOT( textUnderline() ) );
  37.438 -    actionTextUnderline->addTo( tb );
  37.439 -    actionTextUnderline->addTo( menu );
  37.440 -    actionTextUnderline->setToggleAction( true );
  37.441 -    menu->insertSeparator();
  37.442 +    a = new QAction( QPixmap (iconPath+"text_bold.png"), tr( "&Bold" ), this);
  37.443 +	a->setShortcut(Qt::CTRL + Qt::Key_B );
  37.444 +    connect( a, SIGNAL( activated() ), this, SLOT( textBold() ) );
  37.445 +	tb->addAction (a);
  37.446 +	formatMenu->addAction (a);
  37.447 +    a->setToggleAction( true );
  37.448 +    actionTextBold=a;
  37.449 +	
  37.450 +    a = new QAction( QPixmap(iconPath+"text_italic.png"), tr( "&Italic" ),  this);
  37.451 +	a->setShortcut(Qt::CTRL + Qt::Key_I);
  37.452 +    connect( a, SIGNAL( activated() ), this, SLOT( textItalic() ) );
  37.453 +	tb->addAction (a);
  37.454 +	formatMenu->addAction (a);
  37.455 +    a->setToggleAction( true );
  37.456 +    actionTextItalic=a;
  37.457 +	
  37.458 +    a = new QAction( QPixmap (iconPath+"text_under.png"), tr( "&Underline" ), this);
  37.459 +	a->setShortcut(Qt::CTRL + Qt::Key_U );
  37.460 +    connect( a, SIGNAL( activated() ), this, SLOT( textUnderline() ) );
  37.461 +	tb->addAction (a);
  37.462 +	formatMenu->addAction (a);
  37.463 +    a->setToggleAction( true );
  37.464 +    actionTextUnderline=a;
  37.465 +    formatMenu->addSeparator();
  37.466  
  37.467      QActionGroup *grp = new QActionGroup( this );
  37.468      connect( grp, SIGNAL( selected( QAction* ) ), this, SLOT( textAlign( QAction* ) ) );
  37.469  
  37.470 -    actionAlignLeft = new QAction( QPixmap (iconPath+"text_left.png"), tr( "&Left" ), CTRL + Key_L, grp, "textLeft" );
  37.471 -    actionAlignLeft->setToggleAction( true );
  37.472 -    actionAlignCenter = new QAction( QPixmap (iconPath+"text_center.png"), tr( "C&enter" ), CTRL + Key_E, grp, "textCenter" );
  37.473 -    actionAlignCenter->setToggleAction( true );
  37.474 -    actionAlignRight = new QAction( QPixmap (iconPath+"text_right.png" ), tr( "&Right" ), CTRL + Key_R, grp, "textRight" );
  37.475 -    actionAlignRight->setToggleAction( true );
  37.476 -    actionAlignJustify = new QAction( QPixmap ( iconPath+"text_block.png"), tr( "&Justify" ), CTRL + Key_J, grp, "textjustify" );
  37.477 -    actionAlignJustify->setToggleAction( true );
  37.478 -
  37.479 -    grp->addTo( tb );
  37.480 -    grp->addTo( menu );
  37.481 +    a = new QAction( QPixmap (iconPath+"text_left.png"), tr( "&Left" ),grp );
  37.482 +	a->setShortcut( Qt::CTRL+Qt::Key_L );
  37.483 +    a->setToggleAction( true );
  37.484 +	tb->addAction (a);
  37.485 +	formatMenu->addAction (a);
  37.486 +    actionAlignLeft=a;
  37.487 +    a = new QAction( QPixmap (iconPath+"text_center.png"), tr( "C&enter" ),grp);
  37.488 +    a->setShortcut(  Qt::CTRL + Qt::Key_E);
  37.489 +    a->setToggleAction( true );
  37.490 +	tb->addAction (a);
  37.491 +	formatMenu->addAction (a);
  37.492 +    actionAlignCenter=a;
  37.493 +    a = new QAction( QPixmap (iconPath+"text_right.png" ), tr( "&Right" ), grp);
  37.494 +	a->setShortcut(Qt::CTRL + Qt::Key_R );
  37.495 +    a->setToggleAction( true );
  37.496 +	tb->addAction (a);
  37.497 +	formatMenu->addAction (a);
  37.498 +    actionAlignRight=a;
  37.499 +    a = new QAction( QPixmap ( iconPath+"text_block.png"), tr( "&Justify" ), grp );
  37.500 +	a->setShortcut(Qt::CTRL + Qt::Key_J );
  37.501 +    a->setToggleAction( true );
  37.502 +	tb->addAction (a);
  37.503 +	formatMenu->addAction (a);
  37.504 +    actionAlignJustify=a;
  37.505  
  37.506      QActionGroup *grp2 = new QActionGroup( this );
  37.507 -    grp2->setExclusive(false);
  37.508 -    actionAlignSubScript = new QAction( QPixmap (iconPath+"text_sub.png"), tr( "Subs&cript" ), CTRL + SHIFT + Key_B, grp2, "textSubscript" );
  37.509 +    grp2->setExclusive(true);
  37.510 +    a = new QAction( QPixmap (iconPath+"text_sub.png"), tr( "Subs&cript" ),grp2 );
  37.511 +	a->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_B );
  37.512 +    a->setToggleAction( true );
  37.513 +	tb->addAction (a);
  37.514 +	formatMenu->addAction (a);
  37.515 +    connect(a, SIGNAL(activated()), this, SLOT(textVAlign()));
  37.516 +    actionAlignSubScript=a;
  37.517  
  37.518 -    actionAlignSubScript->setToggleAction( true );
  37.519 -    connect(actionAlignSubScript, SIGNAL(activated()), this, SLOT(textVAlign()));
  37.520 +    a = new QAction( QPixmap (iconPath+"text_super.png"), tr( "Su&perscript" ),grp2  );
  37.521 +	a->setShortcut( Qt::CTRL + Qt::SHIFT + Qt::Key_P );
  37.522 +    a->setToggleAction( true );
  37.523 +	tb->addAction (a);
  37.524 +	formatMenu->addAction (a);
  37.525 +    connect(a, SIGNAL(activated()), this, SLOT(textVAlign()));
  37.526 +    actionAlignSuperScript=a;
  37.527  
  37.528 -    actionAlignSuperScript = new QAction( QPixmap (iconPath+"text_super.png"), tr( "Su&perscript" ), CTRL + SHIFT + Key_P, grp2, "textSuperscript" );
  37.529 -
  37.530 -    actionAlignSuperScript->setToggleAction( true );
  37.531 -    connect(actionAlignSuperScript, SIGNAL(activated()), this, SLOT(textVAlign()));
  37.532 -
  37.533 -    menu->insertSeparator();
  37.534 +    formatMenu->addSeparator();
  37.535      
  37.536 -    grp2->addTo(tb);
  37.537 -    grp2->addTo(menu);
  37.538 -
  37.539      connect( e, SIGNAL( currentFontChanged( const QFont & ) ),
  37.540  	     this, SLOT( fontChanged( const QFont & ) ) );
  37.541      connect( e, SIGNAL( currentColorChanged( const QColor & ) ),
  37.542  	     this, SLOT( colorChanged( const QColor & ) ) );
  37.543 +		 /*
  37.544      connect( e, SIGNAL( currentAlignmentChanged( int ) ),
  37.545  	     this, SLOT( alignmentChanged( int ) ) );
  37.546      connect( e, SIGNAL( currentVerticalAlignmentChanged(int)),
  37.547  	     this, SLOT( verticalAlignmentChanged(int)));
  37.548 +		 */
  37.549  
  37.550  }
  37.551  
  37.552  void TextEditor::setupSettingsActions()
  37.553  {
  37.554 -    QPopupMenu *menu = new QPopupMenu( this );
  37.555 -    menuBar()->insertItem( tr( "&Settings" ), menu );
  37.556 +    QMenu *settingsMenu = menuBar()->addMenu ( tr( "&Settings" ));
  37.557  
  37.558      QAction *a;
  37.559 -    a = new QAction( tr( "Set fixed font" ), QPixmap(), tr( "Set &fixed font" ), 0, this, "setFixedFont" );
  37.560 +    a = new QAction(tr( "Set &fixed font" ), this);
  37.561 +	a->setStatusTip ( tr( "Set fixed font" ));
  37.562      connect( a, SIGNAL( activated() ), this, SLOT( setFixedFont() ) );
  37.563 -    a->addTo( menu );
  37.564 +	settingsMenu->addAction (a);
  37.565  	actionSettingsFixedFont=a;
  37.566  
  37.567 -    a = new QAction( tr( "Set variable font" ), QPixmap(), tr( "Set &variable font" ), 0, this, "setvariableFont" );
  37.568 +    a = new QAction(tr( "Set &variable font" ), this);
  37.569 +	a->setStatusTip ( tr( "Set variable font" ) );
  37.570      connect( a, SIGNAL( activated() ), this, SLOT( setVarFont() ) );
  37.571 -    a->addTo( menu );
  37.572 +	settingsMenu->addAction (a);
  37.573  	actionSettingsVarFont=a;
  37.574  
  37.575 -    a = new QAction( tr( "Used fixed font by default" ), QPixmap(), tr( "&fixed font is default" ), 0, this, "fonthintDefault" );
  37.576 +    a = new QAction(tr( "&fixed font is default" ),  this);
  37.577 +	a->setStatusTip (tr( "Used fixed font by default" ) );
  37.578  	a->setToggleAction (true);
  37.579  	// set state later in constructor...
  37.580 -    a->addTo( menu );
  37.581 +	settingsMenu->addAction (a);
  37.582  	actionSettingsFonthintDefault=a;
  37.583  }
  37.584  
  37.585 @@ -451,7 +485,7 @@
  37.586  {
  37.587  	if (state!=inactiveEditor)
  37.588  	{
  37.589 -		if (e->length()) 
  37.590 +		if (e->text().length()) 
  37.591  		{
  37.592  			QMessageBox mb( __VYM " - " +tr("Note Editor"),
  37.593  				"Loading will overwrite the existing note",
  37.594 @@ -468,8 +502,12 @@
  37.595  		} 
  37.596  		// Load note
  37.597  		QFileDialog *fd=new QFileDialog( this);
  37.598 -		fd->addFilter ("ASCII texts (*.txt)");
  37.599 -		fd->addFilter ("VYM notes (*.html)");
  37.600 +		QStringList types;
  37.601 +		types<< "VYM notes (*.html)" <<
  37.602 +			"ASCII texts (*.txt)" <<
  37.603 +			"All filed (*)";
  37.604 +		fd->setFilters (types);
  37.605 +		fd->setDirectory (QDir().current());
  37.606  		fd->show();
  37.607  		QString fn;
  37.608  		if ( fd->exec() == QDialog::Accepted )
  37.609 @@ -478,7 +516,7 @@
  37.610  		if ( !fn.isEmpty() )
  37.611  		{
  37.612  			QFile f( fn );
  37.613 -			if ( !f.open( IO_ReadOnly ) )
  37.614 +			if ( !f.open( QIODevice::ReadOnly ) )
  37.615  			return;
  37.616  
  37.617  			QTextStream ts( &f );
  37.618 @@ -498,7 +536,10 @@
  37.619  
  37.620  QString TextEditor::getText()
  37.621  {
  37.622 -	return e->text();
  37.623 +	if (e->toPlainText().isEmpty())
  37.624 +		return "";
  37.625 +	else	
  37.626 +		return e->text();
  37.627  }
  37.628  
  37.629  void TextEditor::editorChanged()
  37.630 @@ -509,9 +550,9 @@
  37.631  		state=filledEditor;
  37.632  
  37.633  		if (state==emptyEditor)
  37.634 -			e->setPaper (emptyPaper);
  37.635 +			setState (emptyEditor);
  37.636  		else
  37.637 -			e->setPaper (filledPaper);
  37.638 +			setState (filledEditor);
  37.639  	// SLOT is LinkableMapObj, which will update systemFlag
  37.640  	emit (textHasChanged() );
  37.641  }
  37.642 @@ -519,12 +560,8 @@
  37.643  
  37.644  void TextEditor::setText(QString t)
  37.645  {
  37.646 -	if ( !QStyleSheet::mightBeRichText( t ) )
  37.647 -		t = QStyleSheet::convertFromPlainText( t, QStyleSheetItem::WhiteSpaceNormal );
  37.648  	e->setReadOnly(false);
  37.649  	e->setText(t);
  37.650 -//	editorChanged();	//not called automagically  FIXME or is it?
  37.651 -
  37.652  	enableActions();
  37.653  }
  37.654  
  37.655 @@ -532,7 +569,7 @@
  37.656  {
  37.657  	state=inactiveEditor;
  37.658  	setText("");
  37.659 -	e->setPaper (inactivePaper);
  37.660 +	setState (inactiveEditor);
  37.661  	e->setReadOnly (true);
  37.662  
  37.663  	disableActions();
  37.664 @@ -561,7 +598,7 @@
  37.665  			QMessageBox::Warning,
  37.666  			QMessageBox::Yes | QMessageBox::Default,
  37.667  			QMessageBox::Cancel | QMessageBox::Escape,
  37.668 -			QMessageBox::NoButton );
  37.669 +			Qt::NoButton );
  37.670  			mb.setButtonText( QMessageBox::Yes, tr("Overwrite") );
  37.671  			mb.setButtonText( QMessageBox::No, tr("Cancel"));
  37.672  			switch( mb.exec() ) {
  37.673 @@ -595,7 +632,7 @@
  37.674  
  37.675      QString text = e->text();
  37.676      QFile f( filename );
  37.677 -    if ( !f.open( IO_WriteOnly ) ) 
  37.678 +    if ( !f.open( QIODevice::WriteOnly ) ) 
  37.679  	{
  37.680  		statusBar()->message( QString("Could not write to %1").arg(filename),
  37.681  					  statusbarTime );
  37.682 @@ -616,9 +653,18 @@
  37.683  	// In X11 a copy&paste generates paragraphs, 
  37.684  	// which is not always wanted
  37.685  	// This function replaces paragraphs by linebreaks.
  37.686 +
  37.687 +	QString t;
  37.688 +	t=e->text();
  37.689 +	QRegExp re("<p.*>");
  37.690 +	re.setMinimal(true);
  37.691 +	t.replace (re,"");
  37.692 +	t.replace ("</p>","<br />");
  37.693 +	e->setText(t);
  37.694 +
  37.695 +	/* TODO QT3 use seletion ()
  37.696  	int parFrom, parTo, indFrom, indTo;
  37.697  	e->getSelection (&parFrom,&indFrom,&parTo,&indTo);
  37.698 -	QString t;
  37.699  	if (parFrom>-1)
  37.700  		t=e->selectedText();
  37.701  	else
  37.702 @@ -641,10 +687,12 @@
  37.703  		e->setText (e->text().replace(marker,t));
  37.704  	} else
  37.705  		e->setText(t);
  37.706 +	*/	
  37.707  }
  37.708  
  37.709  void TextEditor::textJoinLines()
  37.710  {
  37.711 +/* TODO  QT3
  37.712  	int parFrom, parTo, indFrom, indTo;
  37.713  	e->getSelection (&parFrom,&indFrom,&parTo,&indTo);
  37.714  	QString t;
  37.715 @@ -675,6 +723,7 @@
  37.716  		e->setText (e->text().replace(marker,t));
  37.717  	} else
  37.718  		e->setText(t);
  37.719 +*/		
  37.720  }
  37.721  
  37.722  void TextEditor::textExportAsASCII()
  37.723 @@ -704,7 +753,7 @@
  37.724  			QMessageBox::Warning,
  37.725  			QMessageBox::Yes | QMessageBox::Default,
  37.726  			QMessageBox::Cancel | QMessageBox::Escape,
  37.727 -			QMessageBox::NoButton );
  37.728 +			Qt::NoButton );
  37.729  			mb.setButtonText( QMessageBox::Yes, tr("Overwrite") );
  37.730  			mb.setButtonText( QMessageBox::No, tr("Cancel"));
  37.731  			ret=mb.exec();
  37.732 @@ -713,7 +762,7 @@
  37.733  			return;
  37.734  			
  37.735  		// save 
  37.736 -		if ( !file.open( IO_WriteOnly ) ) 
  37.737 +		if ( !file.open( QIODevice::WriteOnly ) ) 
  37.738  			statusBar()->message( QString("Could not write to %1").arg(filename),
  37.739  						  statusbarTime );
  37.740  		else
  37.741 @@ -730,41 +779,16 @@
  37.742  
  37.743  void TextEditor::textPrint()
  37.744  {
  37.745 -    printer->setFullPage(TRUE);
  37.746 -    if ( printer->setup( this ) ) 
  37.747 -	{
  37.748 -		QPainter p( printer );
  37.749 -		// Check that there is a valid device to print to.
  37.750 -		if ( !p.device() ) return;
  37.751 -		QPaintDeviceMetrics metrics( p.device() );
  37.752 -		int dpiy = metrics.logicalDpiY();
  37.753 -		int margin = (int) ( (2/2.54)*dpiy ); // 2 cm margins
  37.754 -		QRect body( margin, margin, metrics.width() - 2*margin, metrics.height() - 2*margin );
  37.755 -		QFont font( e->currentFont() );
  37.756 -		font.setPointSize( 10 ); // we define 10pt to be a nice base size for printing
  37.757  
  37.758 -		QSimpleRichText richText( e->text(), font,
  37.759 -					  e->context(),
  37.760 -					  e->styleSheet(),
  37.761 -					  e->mimeSourceFactory(),
  37.762 -					  body.height() );
  37.763 -		richText.setWidth( &p, body.width() );
  37.764 -		QRect view( body );
  37.765 -		int page = 1;
  37.766 -		do 
  37.767 -		{
  37.768 -			richText.draw( &p, body.left(), body.top(), view, colorGroup() );
  37.769 -			view.moveBy( 0, body.height() );
  37.770 -			p.translate( 0 , -body.height() );
  37.771 -			p.setFont( font );
  37.772 -			p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ),
  37.773 -				view.bottom() + p.fontMetrics().ascent() + 5, QString::number( page ) );
  37.774 -			if ( view.top()  >= richText.height() )
  37.775 -			break;
  37.776 -			printer->newPage();
  37.777 -			page++;
  37.778 -		} while (TRUE);
  37.779 -    }
  37.780 +    QTextDocument *document = e->document();
  37.781 +    QPrinter printer;
  37.782 +
  37.783 +    QPrintDialog *dialog = new QPrintDialog(&printer, this);
  37.784 +    dialog->setWindowTitle(tr("Print Document"));
  37.785 +    if (dialog->exec() != QDialog::Accepted)
  37.786 +        return;
  37.787 +
  37.788 +    document->print(&printer);
  37.789  }
  37.790  
  37.791  void TextEditor::textEditUndo()
  37.792 @@ -774,12 +798,12 @@
  37.793  void TextEditor::toggleFonthint()
  37.794  {
  37.795  	setUpdatesEnabled (false);
  37.796 -	e->selectAll (true);
  37.797 +	e->selectAll ();
  37.798  	if (!actionFormatUseFixedFont->isOn() ) 
  37.799  		e->setCurrentFont (varFont);
  37.800  	else	
  37.801  		e->setCurrentFont (fixedFont);
  37.802 -	e->selectAll (false);
  37.803 +	e->selectAll ();
  37.804  	setUpdatesEnabled (true);
  37.805  	repaint();
  37.806  }
  37.807 @@ -837,24 +861,25 @@
  37.808  	return;
  37.809      e->setColor( col );
  37.810      QPixmap pix( 16, 16 );
  37.811 -    pix.fill( black );
  37.812 +    pix.fill( Qt::black );
  37.813      actionTextColor->setIconSet( pix );
  37.814  }
  37.815  
  37.816  void TextEditor::textAlign( QAction *a )
  37.817  {
  37.818      if ( a == actionAlignLeft )
  37.819 -	e->setAlignment( AlignLeft );
  37.820 +	e->setAlignment( Qt::AlignLeft );
  37.821      else if ( a == actionAlignCenter )
  37.822 -	e->setAlignment( AlignHCenter );
  37.823 +	e->setAlignment( Qt::AlignHCenter );
  37.824      else if ( a == actionAlignRight )
  37.825 -	e->setAlignment( AlignRight );
  37.826 +	e->setAlignment( Qt::AlignRight );
  37.827      else if ( a == actionAlignJustify )
  37.828 -	e->setAlignment( AlignJustify );
  37.829 +	e->setAlignment( Qt::AlignJustify );
  37.830  }
  37.831  
  37.832  void TextEditor::textVAlign()
  37.833  {
  37.834 +/* FIXME QT3 alignment
  37.835      if ( sender() == actionAlignSuperScript && actionAlignSuperScript->isOn()) {
  37.836  	e->setVerticalAlignment( QTextEdit::AlignSuperScript);
  37.837      } else if (sender() == actionAlignSubScript && actionAlignSubScript->isOn()) {
  37.838 @@ -862,13 +887,16 @@
  37.839      } else {
  37.840  	e->setVerticalAlignment( QTextEdit::AlignNormal);
  37.841      }
  37.842 +*/	
  37.843  }
  37.844  
  37.845  
  37.846  void TextEditor::fontChanged( const QFont &f )
  37.847  {
  37.848 +/*
  37.849      comboFont->lineEdit()->setText( f.family() );
  37.850      comboSize->lineEdit()->setText( QString::number( f.pointSize() ) );
  37.851 +*/	
  37.852      actionTextBold->setOn( f.bold() );
  37.853      actionTextItalic->setOn( f.italic() );
  37.854      actionTextUnderline->setOn( f.underline() );
  37.855 @@ -883,18 +911,19 @@
  37.856  
  37.857  void TextEditor::alignmentChanged( int a )
  37.858  {
  37.859 -    if ( ( a == AlignAuto ) || ( a & AlignLeft ))
  37.860 +    if ( ( a == Qt::AlignLeft ) || ( a & Qt::AlignLeft ))
  37.861  	actionAlignLeft->setOn( true );
  37.862 -    else if ( ( a & AlignHCenter ) )
  37.863 +    else if ( ( a & Qt::AlignHCenter ) )
  37.864  	actionAlignCenter->setOn( true );
  37.865 -    else if ( ( a & AlignRight ) )
  37.866 +    else if ( ( a & Qt::AlignRight ) )
  37.867  	actionAlignRight->setOn( true );
  37.868 -    else if ( ( a & AlignJustify ) )
  37.869 +    else if ( ( a & Qt::AlignJustify ) )
  37.870  	actionAlignJustify->setOn( true );
  37.871  }
  37.872  
  37.873  void TextEditor::verticalAlignmentChanged(int a) 
  37.874  {
  37.875 +	/* FIXME QT3 alignment
  37.876      if (a == QTextEdit::AlignSuperScript ) {
  37.877  	actionAlignSuperScript->setOn(true);
  37.878  	actionAlignSubScript->setOn(false);
  37.879 @@ -905,6 +934,7 @@
  37.880  	actionAlignSuperScript->setOn(false);
  37.881  	actionAlignSubScript->setOn(false);
  37.882      }
  37.883 +	*/
  37.884  }
  37.885  
  37.886  
  37.887 @@ -943,4 +973,20 @@
  37.888  	actionFormatUseFixedFont->setEnabled(false);
  37.889  }
  37.890  
  37.891 +void TextEditor::setState (EditorState s)
  37.892 +{
  37.893 +	
  37.894 +	QPalette p=palette();
  37.895 +	QColor c;
  37.896 +	switch (s)
  37.897 +	{
  37.898 +		case emptyEditor:    c=QColor (150,150,150); break;
  37.899 +		case filledEditor:   c=QColor (255,255,255); break;
  37.900 +		case inactiveEditor: c=QColor (0,0,0);
  37.901 +	}
  37.902 +    p.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(9), c);
  37.903 +    p.setColor(QPalette::Inactive, static_cast<QPalette::ColorRole>(9), c);
  37.904 +    e->setPalette(p);
  37.905 +}
  37.906  
  37.907 +
    38.1 --- a/texteditor.h	Tue Sep 05 09:47:13 2006 +0000
    38.2 +++ b/texteditor.h	Tue Sep 05 09:47:14 2006 +0000
    38.3 @@ -1,12 +1,11 @@
    38.4 -/* emacs: -*- Mode: C; c-style: "bsd"; c-basic-offset: 4; c-recognize-knr-p: nil; -*- */
    38.5  #ifndef TEXTEDITOR_H 
    38.6  #define TEXTEDITOR_H
    38.7  
    38.8 -#include <qmainwindow.h>
    38.9 -#include <qtextedit.h>
   38.10 -#include <qaction.h>
   38.11 -#include <qfontdatabase.h>
   38.12 -#include <qcombobox.h>
   38.13 +#include <QtGui>
   38.14 +#include <QTextEdit>
   38.15 +#include <QFontDatabase>
   38.16 +#include <QComboBox>
   38.17 +#include <QCloseEvent>
   38.18  
   38.19  
   38.20  enum EditorState {inactiveEditor,emptyEditor,filledEditor};
   38.21 @@ -29,7 +28,7 @@
   38.22  	QString getFilename ();
   38.23  	void setFilenameHint (const QString&);
   38.24  	QString getFilenameHint ();
   38.25 -	bool findText(const QString &, const bool &); // find Text 
   38.26 +	bool findText(const QString &, const QTextDocument::FindFlags &); // find Text 
   38.27  
   38.28  protected:
   38.29  	void setupFileActions();
   38.30 @@ -79,6 +78,7 @@
   38.31      void verticalAlignmentChanged(int a);
   38.32  	void enableActions();
   38.33  	void disableActions();
   38.34 +	void setState (EditorState);
   38.35  
   38.36  private:
   38.37      QPrinter *printer;
   38.38 @@ -127,7 +127,7 @@
   38.39  	*actionAlignSuperScript;
   38.40  };
   38.41  
   38.42 -/* Wraps currentVerticalAlignmentChanged(VerticalAlignment)
   38.43 +/* FIXME Wraps currentVerticalAlignmentChanged(VerticalAlignment)
   38.44   * to currentVerticalAlignmentChanged(int) 
   38.45   * this way the signal can be used without use of the internal 
   38.46   * VerticalAlignment enum of QTextEdit 
   38.47 @@ -139,22 +139,27 @@
   38.48  {
   38.49      Q_OBJECT;
   38.50   public:
   38.51 -    MyTextEdit(QWidget *parent, const char *name) : QTextEdit(parent, name) {
   38.52 -	connect(this, 
   38.53 -		SIGNAL(currentVerticalAlignmentChanged(VerticalAlignment)),
   38.54 -		this, 
   38.55 -		SLOT(verticalAlignmentChanged(VerticalAlignment)));
   38.56 +    MyTextEdit(QWidget *parent, const char *name) : QTextEdit(parent, name) 
   38.57 +	{
   38.58 +	/*
   38.59 +		connect(
   38.60 +			this, SIGNAL(currentVerticalAlignmentChanged(VerticalAlignment)), 
   38.61 +			this, SLOT(verticalAlignmentChanged(VerticalAlignment)));
   38.62 +	*/		
   38.63      }
   38.64 -    int verticalAlignment() const { return m_verticalAlignment; } 
   38.65 +//    int verticalAlignment() const { return m_verticalAlignment; } 
   38.66   signals:
   38.67 -    void currentVerticalAlignmentChanged(int a);
   38.68 +//    void currentVerticalAlignmentChanged(int a);
   38.69   public slots:
   38.70 -    void verticalAlignmentChanged(VerticalAlignment a) {
   38.71 -     m_verticalAlignment = a;
   38.72 -	emit currentVerticalAlignmentChanged((int)a);
   38.73 + /*
   38.74 +    void verticalAlignmentChanged(VerticalAlignment a) 
   38.75 +	{
   38.76 +		m_verticalAlignment = a;
   38.77 +		emit currentVerticalAlignmentChanged((int)a);
   38.78      }
   38.79 +*/	
   38.80   private: 
   38.81 - int m_verticalAlignment;
   38.82 +//	 int m_verticalAlignment;
   38.83  };
   38.84  
   38.85  #endif
    39.1 --- a/version.h	Tue Sep 05 09:47:13 2006 +0000
    39.2 +++ b/version.h	Tue Sep 05 09:47:14 2006 +0000
    39.3 @@ -2,7 +2,7 @@
    39.4  #define VERSION_H
    39.5  
    39.6  #define __VYM "VYM"
    39.7 -#define __VYM_VERSION "1.8.1"
    39.8 -#define __BUILD_DATE "July 31 2006"
    39.9 +#define __VYM_VERSION "1.8.54"
   39.10 +#define __BUILD_DATE "September 5, 2006"
   39.11  
   39.12  #endif
    40.1 --- a/vym.pro	Tue Sep 05 09:47:13 2006 +0000
    40.2 +++ b/vym.pro	Tue Sep 05 09:47:14 2006 +0000
    40.3 @@ -2,6 +2,7 @@
    40.4  LANGUAGE	= C++
    40.5  
    40.6  CONFIG	+= qt warn_on release
    40.7 +QT += qt3support
    40.8  
    40.9  HEADERS	+= aboutdialog.h \
   40.10  	api.h \
   40.11 @@ -69,12 +70,18 @@
   40.12  	settings.cpp \
   40.13  	options.cpp
   40.14  
   40.15 -FORMS	= exportxhtmldialog.ui \
   40.16 +#The following line was inserted by qt3to4, use "FORMS" later
   40.17 +FORMS3	= exportxhtmldialog.ui \
   40.18  	showtextdialog.ui \
   40.19  	extrainfodialog.ui \
   40.20  	editxlinkdialog.ui \
   40.21  	warningdialog.ui
   40.22  
   40.23 +#The following line was inserted by qt3to4
   40.24 +QT += xml  
   40.25 +#The following line was inserted by qt3to4
   40.26 +CONFIG += uic3
   40.27 +
   40.28  TARGET  = vym
   40.29  TRANSLATIONS += lang/vym_de.ts
   40.30  TRANSLATIONS += lang/vym_en.ts
   40.31 @@ -82,15 +89,15 @@
   40.32  TRANSLATIONS += lang/vym_it.ts
   40.33  
   40.34  count( INSTALLDIR, 0 ) {
   40.35 -	INSTALLDIR = /usr/local/bin
   40.36 +	INSTALLDIR = /usr/local
   40.37  }
   40.38  
   40.39  message( "Installation directory" )
   40.40  message( $$INSTALLDIR )
   40.41  
   40.42  
   40.43 -target.path = $$INSTALLDIR
   40.44 -INSTALLS += target
   40.45 +#target.path = $$INSTALLDIR
   40.46 +#INSTALLS += target
   40.47  
   40.48  
   40.49  target.path = $${INSTALLDIR}/bin
    41.1 --- a/warningdialog.ui.h	Tue Sep 05 09:47:13 2006 +0000
    41.2 +++ b/warningdialog.ui.h	Tue Sep 05 09:47:14 2006 +0000
    41.3 @@ -1,3 +1,5 @@
    41.4 +//Added by qt3to4:
    41.5 +#include <QPixmap>
    41.6  /****************************************************************************
    41.7  ** ui.h extension file, included from the uic-generated form implementation.
    41.8  **
    42.1 --- a/xlinkobj.cpp	Tue Sep 05 09:47:13 2006 +0000
    42.2 +++ b/xlinkobj.cpp	Tue Sep 05 09:47:14 2006 +0000
    42.3 @@ -1,6 +1,8 @@
    42.4  #include "xlinkobj.h"
    42.5  #include "branchobj.h"
    42.6  #include "mapeditor.h"
    42.7 +//Added by qt3to4:
    42.8 +#include <Q3PointArray>
    42.9  
   42.10  
   42.11  /////////////////////////////////////////////////////////////////
   42.12 @@ -15,7 +17,7 @@
   42.13  	init();
   42.14  }
   42.15  
   42.16 -XLinkObj::XLinkObj (QCanvas* c):MapObj(c)
   42.17 +XLinkObj::XLinkObj (Q3Canvas* c):MapObj(c)
   42.18  {
   42.19  	//	cout << "Const XLinkObj (c)  called from MapCenterObj (c)\n";
   42.20  	init();
   42.21 @@ -40,12 +42,12 @@
   42.22  	xLinkState=undefinedXLink;
   42.23  
   42.24  	color=QColor (180,180,180);
   42.25 -	line=new QCanvasLine (canvas);
   42.26 +	line=new Q3CanvasLine (canvas);
   42.27  	width=1;
   42.28  	line->setPen (QPen(color, width));
   42.29  	line->setZ (Z_XLINK);
   42.30  
   42.31 -	poly=new QCanvasPolygon (canvas);
   42.32 +	poly=new Q3CanvasPolygon (canvas);
   42.33  	poly->setBrush( color );
   42.34  	poly->setZ (Z_XLINK);
   42.35  
   42.36 @@ -159,7 +161,7 @@
   42.37  void XLinkObj::updateXLink()
   42.38  {
   42.39  	QPoint a,b;
   42.40 -	QPointArray pa (3);
   42.41 +	Q3PointArray pa (3);
   42.42  	if (visBranch)
   42.43  	{
   42.44  		// Only one of the linked branches is visible
    43.1 --- a/xlinkobj.h	Tue Sep 05 09:47:13 2006 +0000
    43.2 +++ b/xlinkobj.h	Tue Sep 05 09:47:14 2006 +0000
    43.3 @@ -9,7 +9,7 @@
    43.4  class XLinkObj:public MapObj {
    43.5  public:
    43.6      XLinkObj ();
    43.7 -    XLinkObj (QCanvas*);
    43.8 +    XLinkObj (Q3Canvas*);
    43.9      ~XLinkObj ();
   43.10      virtual void init ();
   43.11      virtual void copy (XLinkObj*);
   43.12 @@ -37,8 +37,8 @@
   43.13  	static int arrowSize;
   43.14  	QColor color;
   43.15  	int width;
   43.16 -	QCanvasLine *line;
   43.17 -	QCanvasPolygon *poly;
   43.18 +	Q3CanvasLine *line;
   43.19 +	Q3CanvasPolygon *poly;
   43.20  	BranchObj *beginBranch;
   43.21  	BranchObj *endBranch;
   43.22  	BranchObj *visBranch;	// the "visible" part of a partially scrolled link
    44.1 --- a/xml.cpp	Tue Sep 05 09:47:13 2006 +0000
    44.2 +++ b/xml.cpp	Tue Sep 05 09:47:14 2006 +0000
    44.3 @@ -2,7 +2,9 @@
    44.4  
    44.5  #include <qmessagebox.h>
    44.6  #include <qcolor.h>
    44.7 -#include <qstylesheet.h>
    44.8 +#include <q3stylesheet.h>
    44.9 +//Added by qt3to4:
   44.10 +#include <QTextStream>
   44.11  #include <iostream>
   44.12  
   44.13  #include "misc.h"
   44.14 @@ -503,26 +505,26 @@
   44.15  		QFile file (fn);
   44.16  		QString s;						// Reading a note
   44.17  
   44.18 -		if ( !file.open( IO_ReadOnly) )
   44.19 +		if ( !file.open( QIODevice::ReadOnly) )
   44.20  		{
   44.21  			qWarning ("mapBuilderHandler::readNoteAttr:  Couldn't load "+fn);
   44.22  			return false;
   44.23  		}	
   44.24  		QTextStream stream( &file );
   44.25  		QString lines;
   44.26 -		while ( !stream.eof() ) {
   44.27 +		while ( !stream.atEnd() ) {
   44.28  			lines += stream.readLine()+"\n"; 
   44.29  		}
   44.30  		file.close();
   44.31  		// Convert to richtext
   44.32 -		if ( !QStyleSheet::mightBeRichText( lines ) )
   44.33 +		if ( !Q3StyleSheet::mightBeRichText( lines ) )
   44.34  		{
   44.35  			// Here we are workarounding the QT conversion method:
   44.36  			// convertFromPlainText does not generate valid xml, needed
   44.37  			// for the parser, but just <p> and <br> without closing tags.
   44.38  			// So we have to add those by ourselves
   44.39  			//lines=quotemeta (lines);
   44.40 -			lines = QStyleSheet::convertFromPlainText( lines, QStyleSheetItem::WhiteSpaceNormal );
   44.41 +			lines = Q3StyleSheet::convertFromPlainText( lines, Q3StyleSheetItem::WhiteSpaceNormal );
   44.42  			lines.replace ("<br>","<br />");
   44.43  		}	
   44.44