# HG changeset patch
# User insilmaril
# Date 1163671631 0
# Node ID d42881c25fb69339047064abe6367f767f021fd5
# Parent  39aa64b24375b453c03e295712ffd5ece28fc444
Version 1.8.59: More fixes in undo/redo area

diff -r 39aa64b24375 -r d42881c25fb6 branchobj.cpp
--- a/branchobj.cpp	Mon Oct 30 12:39:37 2006 +0000
+++ b/branchobj.cpp	Thu Nov 16 10:07:11 2006 +0000
@@ -389,7 +389,7 @@
 	// BranchObj can use color of heading
 
 	if (mapEditor)
-		if (mapEditor->getLinkColorHint()==HeadingColor)
+		if (mapEditor->getMapLinkColorHint()==HeadingColor)
 			LinkableMapObj::setLinkColor (heading->getColor() );
 		else	
 			LinkableMapObj::setLinkColor ();
diff -r 39aa64b24375 -r d42881c25fb6 demos/todo.vym
Binary file demos/todo.vym has changed
diff -r 39aa64b24375 -r d42881c25fb6 icons/cursor.xcf
Binary file icons/cursor.xcf has changed
diff -r 39aa64b24375 -r d42881c25fb6 lang/vym_de.ts
--- a/lang/vym_de.ts	Mon Oct 30 12:39:37 2006 +0000
+++ b/lang/vym_de.ts	Thu Nov 16 10:07:11 2006 +0000
@@ -420,7 +420,7 @@
     <message>
         <source>Current state</source>
         <comment>Current bar in history hwindow</comment>
-        <translation>Aktuelle Zustand</translation>
+        <translation>Aktueller Zustand</translation>
     </message>
 </context>
 <context>
diff -r 39aa64b24375 -r d42881c25fb6 linkablemapobj.cpp
--- a/linkablemapobj.cpp	Mon Oct 30 12:39:37 2006 +0000
+++ b/linkablemapobj.cpp	Thu Nov 16 10:07:11 2006 +0000
@@ -201,7 +201,7 @@
 {
 	if (!mapEditor) return StyleUndef;
 
-	LinkStyle ls=mapEditor->getLinkStyle();
+	LinkStyle ls=mapEditor->getMapLinkStyle();
 	switch (ls)
 	{
 		case StyleLine: 
@@ -354,7 +354,7 @@
 	// Overloaded in BranchObj and childs
 	// here only set default color
 	if (mapEditor)
-		setLinkColor (mapEditor->getDefLinkColor());
+		setLinkColor (mapEditor->getMapDefLinkColor());
 }
 
 void LinkableMapObj::setLinkColor(QColor col)
diff -r 39aa64b24375 -r d42881c25fb6 main.cpp
--- a/main.cpp	Mon Oct 30 12:39:37 2006 +0000
+++ b/main.cpp	Thu Nov 16 10:07:11 2006 +0000
@@ -1,10 +1,5 @@
 #include <QApplication>
-//#include <QPixmap>
-//#include <QTranslator>
-//#include <QDir>
-//#include <QTextCodec>
 #include <q3network.h>
-//#include <QActionGroup>
 
 #include "settings.h"
 #include "options.h"
diff -r 39aa64b24375 -r d42881c25fb6 mainwindow.cpp
--- a/mainwindow.cpp	Mon Oct 30 12:39:37 2006 +0000
+++ b/mainwindow.cpp	Thu Nov 16 10:07:11 2006 +0000
@@ -1447,8 +1447,6 @@
 		branchAddContextMenu->addAction ( actionEditAddBranchAbove);
 		branchAddContextMenu->addAction ( actionEditAddBranchBelow );
 		branchAddContextMenu->addSeparator();	
-		branchAddContextMenu->addAction ( actionEditLoadImage);
-		branchAddContextMenu->addSeparator();	
 		branchAddContextMenu->addAction ( actionEditImportAdd );
 		branchAddContextMenu->addAction ( actionEditImportReplace );
 
@@ -1465,11 +1463,12 @@
 	branchContextMenu->addSeparator();	
 	branchContextMenu->addAction ( actionFormatFrameNone );
 	branchContextMenu->addAction ( actionFormatFrameRectangle);
+	branchContextMenu->addAction ( actionFormatHideLinkUnselected );
 
 	branchContextMenu->addSeparator();	
+	branchContextMenu->addAction ( actionEditLoadImage);
 	branchContextMenu->addAction ( actionFormatIncludeImagesVer );
 	branchContextMenu->addAction ( actionFormatIncludeImagesHor );
-	branchContextMenu->addAction ( actionFormatHideLinkUnselected );
 
 	// Submenu for Links (URLs, vymLinks)
 	branchLinksContextMenu =new QMenu (this);
@@ -3003,42 +3002,42 @@
 void Main::formatLinkStyleLine()
 {
 	if (currentMapEditor())
-		currentMapEditor()->setLinkStyle(StyleLine);
+		currentMapEditor()->setMapLinkStyle("StyleLine");
 }
 
 void Main::formatLinkStyleParabel()
 {
 	if (currentMapEditor())
-		currentMapEditor()->setLinkStyle(StyleParabel);
+		currentMapEditor()->setMapLinkStyle("StyleParabel");
 }
 
 void Main::formatLinkStylePolyLine()
 {
 	if (currentMapEditor())
-		currentMapEditor()->setLinkStyle(StylePolyLine);
+		currentMapEditor()->setMapLinkStyle("StylePolyLine");
 }
 
 void Main::formatLinkStylePolyParabel()
 {
 	if (currentMapEditor())
-		currentMapEditor()->setLinkStyle(StylePolyParabel);
+		currentMapEditor()->setMapLinkStyle("StylePolyParabel");
 }
 
 void Main::formatSelectBackColor()
 {
 	if (currentMapEditor())
-		currentMapEditor()->selectBackgroundColor();
+		currentMapEditor()->selectMapBackgroundColor();
 }
 
 void Main::formatSelectLinkColor()
 {
 	if (currentMapEditor())
-		currentMapEditor()->selectLinkColor();
+		currentMapEditor()->selectMapLinkColor();
 }
 
 void Main::formatToggleLinkColorHint()
 {
-	currentMapEditor()->toggleLinkColorHint();
+	currentMapEditor()->toggleMapLinkColorHint();
 }
 
 void Main::formatFrameNone()
@@ -3173,12 +3172,12 @@
 	actionViewToggleNoteEditor->setOn (textEditor->showWithMain());
 
 	QAction *a;
-	if (me->getLinkColorHint()==HeadingColor) 
+	if (me->getMapLinkColorHint()==HeadingColor) 
 		actionFormatLinkColorHint->setOn(true);
 	else	
 		actionFormatLinkColorHint->setOn(false);
 
-	switch (me->getLinkStyle())
+	switch (me->getMapLinkStyle())
 	{
 		case StyleLine: 
 			actionFormatLinkStyleLine->setOn(true);
@@ -3197,9 +3196,9 @@
 	}	
 
 	QPixmap pix( 16, 16 );
-    pix.fill( me->getBackgroundColor() );
+    pix.fill( me->getMapBackgroundColor() );
     actionFormatBackColor->setIconSet( pix );
-    pix.fill( me->getDefLinkColor() );
+    pix.fill( me->getMapDefLinkColor() );
     actionFormatLinkColor->setIconSet( pix );
 
 	actionFileSave->setEnabled( me->isUnsaved() );
@@ -3415,7 +3414,6 @@
 {
 	if (!currentMapEditor()) return;
 	currentMapEditor()->testFunction();
-	
 }
 
 void Main::testCommand()
diff -r 39aa64b24375 -r d42881c25fb6 mapeditor.cpp
--- a/mapeditor.cpp	Mon Oct 30 12:39:37 2006 +0000
+++ b/mapeditor.cpp	Thu Nov 16 10:07:11 2006 +0000
@@ -91,13 +91,18 @@
 	linkstyle=StylePolyParabel;
 
 	// Create bitmap cursors, platform dependant
-	#if defined(Q_OS_MACX)
-		handOpenCursor=QCursor ( QPixmap(iconPath+"cursorhandopen16.png"),1,1 );		
-		pickColorCursor=QCursor ( QPixmap (iconPath+"cursorcolorpicker16.png"), 1,15 ); 
-	#else
-		handOpenCursor=QCursor (QPixmap(iconPath+"cursorhandopen.png"),1,1);		
-		pickColorCursor=QCursor ( QPixmap(iconPath+"cursorcolorpicker.png"), 5,27 ); 
-	#endif
+	// FIXME should now work also on Mac...
+	//#if defined(Q_OS_MACX)
+	//	HandOpenCursor=QCursor ( QPixmap(iconPath+"cursorhandopen16.png"),1,1 );		
+	//	PickColorCursor=QCursor ( QPixmap (iconPath+"cursorcolorpicker16.png"), 1,15 ); 
+	//#else
+		HandOpenCursor=QCursor (QPixmap(iconPath+"cursorhandopen.png"),1,1);		
+		PickColorCursor=QCursor ( QPixmap(iconPath+"cursorcolorpicker.png"), 5,27 ); 
+		CopyCursor=QCursor ( QPixmap(iconPath+"cursorcopy.png"), 5,5 ); 
+		XLinkCursor=QCursor ( QPixmap(iconPath+"cursorxlink.png"), 5,27 ); 
+	//#endif
+
+	setFocusPolicy (Qt::StrongFocus);
 
 	pickingColor=false;
 	drawingLink=false;
@@ -122,7 +127,7 @@
 	fileName=tr("unnamed");
 	mapName="";
 
-	stepsTotal=settings.readNumEntry("/mapeditor/stepsTotal",50);
+	stepsTotal=settings.readNumEntry("/mapeditor/stepsTotal",100);
 	undoSet.setEntry ("/history/stepsTotal",QString::number(stepsTotal));
 	
 	// Initialize find routine
@@ -162,11 +167,6 @@
 	//cout <<"Destructor MapEditor\n";
 }
 
-QColor MapEditor::getBackgroundColor()
-{
-    return mapCanvas->backgroundColor();
-}
-
 MapCenterObj* MapEditor::getMapCenter()
 {
     return mapCenter;
@@ -304,7 +304,7 @@
 		colhint=attribut("linkColorHint","HeadingColor");
 
 	QString mapAttr=attribut("version",__VYM_VERSION);
-	if (!saveSel)
+	if (!saveSel || saveSel==mapCenter)
 		mapAttr+= attribut("author",mapCenter->getAuthor()) +
 				  attribut("comment",mapCenter->getComment()) +
 			      attribut("date",mapCenter->getDate()) +
@@ -324,7 +324,7 @@
 	FloatImageObj (mapCanvas).resetSaveCounter();
 
 	// Build xml recursivly
-	if (!saveSel)
+	if (!saveSel || typeid (*saveSel) == typeid (MapCenterObj))
 		// Save complete map, if saveSel not set
 		s+=mapCenter->saveToDir(tmpdir,prefix,writeflags,offset);
 	else
@@ -338,6 +338,7 @@
 			
 		else if (selection && typeid(*selection)==typeid(BranchObj))
 			// Save selected branch is saved from mainwindow		//FIXME maybe use "subtree" above?
+			// FIXME is this possible at all? BO is already above...
 			s+=((BranchObj*)selection)->saveToDir(tmpdir,prefix,offset);
 	}
 
@@ -356,16 +357,6 @@
 	return s;
 }
 
-void MapEditor::saveStateComplete(const QString &comment)
-{
-	// Save complete map, Undo will replace whole map
-	saveState (CompleteMap,
-		"", "",
-		"", "", 
-		comment, 
-		mapCenter);
-}
-
 void MapEditor::saveStateChangingPart(LinkableMapObj *undoSel, LinkableMapObj* redoSel, const QString &rc, const QString &comment)
 {
 	// save the selected part of the map, Undo will replace part of map 
@@ -382,7 +373,7 @@
 		
 
 	saveState (PartOfMap,
-		undoSelection, "",
+		undoSelection, "addMapReplace (\"PATH\")",
 		redoSelection, rc, 
 		comment, 
 		undoSel);
@@ -397,7 +388,7 @@
 	}
 	QString undoSelection=redoSel->getParObj()->getSelectString();
 	QString redoSelection=redoSel->getSelectString();
-	if (typeid(*redoSel) == typeid(BranchObj) && redoSel->getDepth()>1 ) 
+	if (typeid(*redoSel) == typeid(BranchObj)  ) 
 	{
 		// save the selected branch of the map, Undo will insert part of map 
 		saveState (PartOfMap,
@@ -405,15 +396,6 @@
 			redoSelection, "delete ()", 
 			comment, 
 			redoSel);
-	} else if (typeid(*redoSel) == typeid(BranchObj) )
-	{
-		// save the selected mainbranch of the map, Undo will insert part of map 
-		saveState (PartOfMap,
-			undoSelection, QString("addMapInsert (\"PATH\",%1)").arg(((BranchObj*)redoSel)->getNum()),
-			redoSelection, "delete ()", 
-			comment, 
-			redoSel);
-		
 	}
 }
 
@@ -467,7 +449,7 @@
 	curStep++;
 	if (curStep>stepsTotal) curStep=1;
 	
-	QString backupXML;
+	QString backupXML="";
 	QString bakMapName=QDir::convertSeparators (QString("history-%1").arg(curStep));
 	QString bakMapDir=QDir::convertSeparators (tmpMapDir +"/"+bakMapName);
 	QString bakMapPath=QDir::convertSeparators(bakMapDir+"/map.xml");
@@ -478,9 +460,7 @@
 		makeSubDirs (bakMapDir);
 
 	// Save depending on how much needs to be saved	
-	if (!saveSel)
-		backupXML="";
-	else 
+	if (saveSel)
 		backupXML=saveToDir (bakMapDir,mapName+"-",false, QPoint (),saveSel);
 		
 	QString undoCommand="";
@@ -492,10 +472,8 @@
 	{
 		undoCommand=undoCom;
 		undoCommand.replace ("PATH",bakMapPath);
-	} else
-	{
-		undoCommand="undoMap (\""+bakMapPath+"\")";
 	}
+
 	if (!backupXML.isEmpty())
 		// Write XML Data to disk
 		saveStringToDisk (QString(bakMapPath),backupXML);
@@ -529,6 +507,7 @@
 	cout << "    undoSel="<<undoSelection.toStdString()<<endl;
 	cout << "    redoCom="<<redoCom.toStdString()<<endl;
 	cout << "    redoSel="<<redoSelection.toStdString()<<endl;
+	if (saveSel) cout << "    saveSel="<<saveSel->getSelectString().ascii()<<endl;
 	cout << "    ---------------------------"<<endl;
 
 	historyWindow.update (undoSet);
@@ -597,12 +576,12 @@
 					 typeid(*selection) != typeid(MapCenterObj)) )
 		{				  
 			api.setError (Aborted,"Type of selection is not a branch");
-		} else if (api.checkParamCount(2))
+		} else if (api.checkParamCount(1))
 		{
-			s=api.parString (ok,0);	// selection
-			t=api.parString (ok,1);	// path to map
+			//s=api.parString (ok,0);	// selection
+			t=api.parString (ok,0);	// path to map
 			if (QDir::isRelativePath(t)) t=QDir::convertSeparators (tmpMapDir + "/"+t);
-			addMapReplaceInt(s,t);	
+			addMapReplaceInt(selection->getSelectString(),t);	
 		}
 	} else if (com==QString("addMapInsert"))
 	{
@@ -818,6 +797,62 @@
 		{	
 			paste();
 		}	
+	} else if (com=="select")
+	{
+		if (api.checkParamCount(1))
+		{
+			s=api.parString(ok,0);
+			if (ok) select (s);
+		}	
+	} else if (com=="setMapAuthor")
+	{
+		if (api.checkParamCount(1))
+		{
+			s=api.parString(ok,0);
+			if (ok) setMapAuthor (s);
+		}	
+	} else if (com=="setMapComment")
+	{
+		if (api.checkParamCount(1))
+		{
+			s=api.parString(ok,0);
+			if (ok) setMapComment(s);
+		}	
+	} else if (com=="setMapBackgroundColor")
+	{
+		if (!selection)
+		{
+			api.setError (Aborted,"Nothing selected");
+		} else if ( (typeid(*selection) != typeid(BranchObj) && 
+					 typeid(*selection) != typeid(MapCenterObj)) )
+		{				  
+			api.setError (Aborted,"Type of selection is not a branch");
+		} else if (api.checkParamCount(1))
+		{
+			QColor c=api.parColor (ok,0);
+			if (ok) setMapBackgroundColor (c);
+		}	
+	} else if (com=="setMapDefLinkColor")
+	{
+		if (!selection)
+		{
+			api.setError (Aborted,"Nothing selected");
+		} else if ( (typeid(*selection) != typeid(BranchObj) && 
+					 typeid(*selection) != typeid(MapCenterObj)) )
+		{				  
+			api.setError (Aborted,"Type of selection is not a branch");
+		} else if (api.checkParamCount(1))
+		{
+			QColor c=api.parColor (ok,0);
+			if (ok) setMapDefLinkColor (c);
+		}	
+	} else if (com=="setMapLinkStyle")
+	{
+		if (api.checkParamCount(1))
+		{
+			s=api.parString (ok,0);
+			if (ok) setMapLinkStyle(s);
+		}	
 	} else if (com=="setHeading")
 	{
 		if (!selection)
@@ -915,20 +950,7 @@
 				bo->updateFlagsToolbar();
 			}	
 		}
-	// Internal commands
-	} else if (com==QString("undoMap"))
-	{
-		if (api.checkParamCount(1))
-			addMapReplaceInt("",api.parString (ok,0));
-	} else if (com=="select")
-	{
-		if (api.checkParamCount(1))
-		{
-			s=api.parString(ok,0);
-			if (ok) select (s);
-		}	
-	}	
-	else
+	} else
 	{
 		api.setError (Aborted,"Unknown command");
 	}
@@ -1126,9 +1148,6 @@
 {
 	int returnCode=0;
 
-	// The SaveMode UndoCommand is not supported here
-	if (savemode==UndoCommand) return 1;
-
 	// Create mapName and fileDir
 	makeSubDirs (fileDir);
 	QString fname;
@@ -2454,18 +2473,29 @@
 	}
 }
 
-void MapEditor::selectBackgroundColor()
+void MapEditor::selectMapBackgroundColor()
 {
 	QColor col = QColorDialog::getColor( mapCanvas->backgroundColor(), this );
 	if ( !col.isValid() ) return;
 	setBackgroundColor( col );
-	//TODO undocomm
-	saveStateComplete(QString("Set background color of map to %1").arg(col.name()));
 }
 
-void MapEditor::setBackgroundColor(QColor c)
+
+void MapEditor::setMapBackgroundColor(QColor col)
 {
-	mapCanvas->setBackgroundColor (c);
+	QColor oldcol=mapCanvas->backgroundColor();
+	saveState(
+		selection,
+		QString ("setMapBackgroundColor (%1)").arg(oldcol.name()),
+		selection,
+		QString ("setMapBackgroundColor (%1)").arg(col.name()),
+		QString("Set background color of map to %1").arg(col.name()));
+	mapCanvas->setBackgroundColor (col);
+}
+
+QColor MapEditor::getMapBackgroundColor()
+{
+    return mapCanvas->backgroundColor();
 }
 
 QColor MapEditor::getCurrentHeadingColor()
@@ -2492,12 +2522,13 @@
 			typeid(*selection) == typeid(MapCenterObj))
 		{
 			BranchObj *bo=(BranchObj*)selection;
-			saveStateChangingPart(
+			saveState(
 				selection, 
+				QString ("colorItem (%1)").arg(bo->getColor().name()),
 				selection,
 				QString ("colorItem (%1)").arg(c.name()),
 				QString("Set color of %1 to %2").arg(getName(bo)).arg(c.name())
-			);	//TODO with complete API: undoCommand
+			);	
 			bo->setColor(c); // color branch
 		}    
 	}
@@ -2918,9 +2949,8 @@
 	// Finally show dialog
 	if (dia.exec() == QDialog::Accepted)
 	{
-		saveStateComplete("Edit info about map");	//TODO undoCommand
-		mapCenter->setAuthor (dia.getAuthor() );
-		mapCenter->setComment (dia.getComment() );
+		setMapAuthor (dia.getAuthor() );
+		setMapComment (dia.getComment() );
 	}
 }
 
@@ -2938,11 +2968,48 @@
 			((BranchObj*)selection)->updateNoteFlag();
 }
 
-void MapEditor::setLinkStyle (LinkStyle ls)
+void MapEditor::setMapAuthor (const QString &s)
 {
-	linkstyle=ls;
-
-	saveStateComplete("Set link style");	// TODO undoCommand
+	saveState (
+		selection,
+		QString ("setMapAuthor (\"%1\")").arg(mapCenter->getAuthor()),
+		selection,
+		QString ("setMapAuthor (\"%1\")").arg(s),
+		QString ("Set author of map to \"%1\"").arg(s)
+	);
+	mapCenter->setAuthor (s);
+}
+
+void MapEditor::setMapComment (const QString &s)
+{
+	saveState (
+		selection,
+		QString ("setMapComment (\"%1\")").arg(mapCenter->getComment()),
+		selection,
+		QString ("setMapComment (\"%1\")").arg(s),
+		QString ("Set comment of map")
+	);
+	mapCenter->setComment (s);
+}
+
+void MapEditor::setMapLinkStyle (const QString & s)
+{
+	saveStateChangingPart (
+		mapCenter,
+		mapCenter,
+		QString("setMapLinkStyle (\"%1\")").arg(s),
+		QString("Set map link style (\"%1\")").arg(s)
+	);	
+
+	if (s=="StyleLine")
+		linkstyle=StyleLine;
+	else if (s=="StyleParabel")
+		linkstyle=StyleParabel;
+	else if (s=="StylePolyLine")
+		linkstyle=StylePolyLine;
+	else	
+		linkstyle=StylePolyParabel;
+
 	BranchObj *bo;
 	bo=mapCenter->first();
 	bo=bo->next();
@@ -2954,20 +3021,20 @@
 	mapCenter->reposition();
 }
 
-LinkStyle MapEditor::getLinkStyle ()
+LinkStyle MapEditor::getMapLinkStyle ()
 {
 	return linkstyle;
 }	
 
-void MapEditor::setLinkColor(QColor c)
+void MapEditor::setMapDefLinkColor(QColor c)
 {
 	defLinkColor=c;
 	updateActions();
 }
 
-void MapEditor::setLinkColorHint()
+void MapEditor::setMapLinkColorHintInt()
 {
-	// called from setLinkColorHint(lch) or at end of parse
+	// called from setMapLinkColorHint(lch) or at end of parse
 	BranchObj *bo;
 	bo=mapCenter->first();
 	while (bo) 
@@ -2977,13 +3044,13 @@
 	}
 }
 
-void MapEditor::setLinkColorHint(LinkColorHint lch)
+void MapEditor::setMapLinkColorHint(LinkColorHint lch)
 {
 	linkcolorhint=lch;
-	setLinkColorHint();
+	setMapLinkColorHintInt();
 }
 
-void MapEditor::toggleLinkColorHint()
+void MapEditor::toggleMapLinkColorHint()
 {
 	if (linkcolorhint==HeadingColor)
 		linkcolorhint=DefaultColor;
@@ -2998,42 +3065,48 @@
 	}
 }
 
-LinkColorHint MapEditor::getLinkColorHint()
+LinkColorHint MapEditor::getMapLinkColorHint()
 {
 	return linkcolorhint;
 }
 
-QColor MapEditor::getDefLinkColor()
+QColor MapEditor::getMapDefLinkColor()
 {
 	return defLinkColor;
 }
 
-void MapEditor::setDefXLinkColor(QColor col)
+void MapEditor::setMapDefXLinkColor(QColor col)
 {
 	defXLinkColor=col;
 }
 
-QColor MapEditor::getDefXLinkColor()
+QColor MapEditor::getMapDefXLinkColor()
 {
 	return defXLinkColor;
 }
 
-void MapEditor::setDefXLinkWidth (int w)
+void MapEditor::setMapDefXLinkWidth (int w)
 {
 	defXLinkWidth=w;
 }
 
-int MapEditor::getDefXLinkWidth()
+int MapEditor::getMapDefXLinkWidth()
 {
 	return defXLinkWidth;
 }
 
-void MapEditor::selectLinkColor()
+void MapEditor::selectMapLinkColor()
 {
 	QColor col = QColorDialog::getColor( defLinkColor, this );
 	if ( !col.isValid() ) return;
-	setLinkColor( col );
-	saveStateComplete(QString("Set link color to %1").arg(col.name()));	//TODO undoCommand
+	saveState (
+		selection,
+		QString("setMapDefLinkColor (\"%1\")").arg(getMapDefLinkColor().name()),
+		selection,
+		QString("setMapDefLinkColor (\"%1\")").arg(col.name()),
+		QString("Set link color to %1").arg(col.name())
+	);
+	setMapDefLinkColor( col );
 
 }
 
@@ -3326,12 +3399,12 @@
 			{
 				if (dia.useSettingsGlobal() )
 				{
-					setDefXLinkColor (xlo->getColor() );
-					setDefXLinkWidth (xlo->getWidth() );
+					setMapDefXLinkColor (xlo->getColor() );
+					setMapDefXLinkWidth (xlo->getWidth() );
 				}
 				if (dia.deleteXLink())
 					((BranchObj*)selection)->deleteXLinkAt(i);
-				saveStateComplete("Edit xLink");	//TODO undoCommand
+				//saveStateComplete("Edit xLink");	//FIXME undoCommand
 			}
 		}	
 	}
@@ -3459,6 +3532,34 @@
 	e->accept();
 }
 
+void MapEditor::keyPressEvent(QKeyEvent* e)
+{
+	if (e->modifiers() && Qt::ControlModifier)
+	{
+		switch (mainWindow->getModMode())
+		{
+			case ModModeColor: 
+				setCursor (PickColorCursor);
+				break;
+			case ModModeCopy: 
+				setCursor (CopyCursor);
+				break;
+			case ModModeXLink: 
+				setCursor (XLinkCursor);
+				break;
+			default :
+				setCursor (Qt::ArrowCursor);
+				break;
+		} 
+	}	
+}
+
+void MapEditor::keyReleaseEvent(QKeyEvent* e)
+{
+	if (!(e->modifiers() && Qt::ControlModifier))
+		setCursor (Qt::ArrowCursor);
+}
+
 void MapEditor::contentsMousePressEvent(QMouseEvent* e)
 {
 	// Ignore right clicks, these will go to context menus
@@ -3510,7 +3611,7 @@
 		if (mainWindow->getModMode()==ModModeColor)
 		{
 				pickingColor=true;
-				setCursor (pickColorCursor);
+				setCursor (PickColorCursor);
 				return;
 		} 
 		if (mainWindow->getModMode()==ModModeXLink)
@@ -3582,7 +3683,7 @@
 			movingObj_start=e->globalPos();
 			movingCont_start=QPoint (contentsX(), contentsY() );
 			movingVec=QPoint(0,0);
-			setCursor(handOpenCursor);
+			setCursor(HandOpenCursor);
 		} 
     } 
 }
@@ -3629,7 +3730,7 @@
 				if (typeid(*fo) == typeid(FloatImageObj)) 
 				{
 					//TODO undocom
-					saveStateComplete(QString("Relink %1 to %2").arg(getName(fo)).arg(getName(lmo) ) );
+					//saveStateComplete(QString("Relink %1 to %2").arg(getName(fo)).arg(getName(lmo) ) );
 					FloatImageObj *fio=(FloatImageObj*)(fo);
 					((BranchObj*)(lmo))->addFloatImage (fio);
 					fio->unselect();
@@ -3756,7 +3857,7 @@
 			tmpXLink->setEnd ( ((BranchObj*)(dst)) );
 			tmpXLink->updateXLink();
 			tmpXLink->activate();
-			saveStateComplete(QString("Activate xLink from %1 to %2").arg(getName(tmpXLink->getBegin())).arg(getName(tmpXLink->getEnd())) );	//TODO undoCommand
+			//saveStateComplete(QString("Activate xLink from %1 to %2").arg(getName(tmpXLink->getBegin())).arg(getName(tmpXLink->getEnd())) );	//FIXME undoCommand
 		} else
 		{
 			delete(tmpXLink);
@@ -4064,7 +4165,7 @@
 		if (update) 
 		{
 			//FIXME saveState has to be called earlier for each of the drops...
-			saveStateComplete("Drop Event");	//TODO undo Command
+			//saveStateComplete("Drop Event");	//TODO undo Command
 			mapCenter->reposition();
 			adjustCanvasSize();
 			canvas()->update();
diff -r 39aa64b24375 -r d42881c25fb6 mapeditor.h
--- a/mapeditor.h	Mon Oct 30 12:39:37 2006 +0000
+++ b/mapeditor.h	Thu Nov 16 10:07:11 2006 +0000
@@ -20,7 +20,6 @@
 public:
     MapEditor(QWidget* parent=0,  const char* name=0, Qt::WFlags f=0);
 	~MapEditor();
-    QColor getBackgroundColor();
     MapCenterObj* getMapCenter();
 	Q3Canvas* getCanvas();
 	void adjustCanvasSize();// adjust canvas size to map and scrollview
@@ -30,7 +29,6 @@
 	QString getName(LinkableMapObj*);	// Get e.g. heading or filename
 	void makeTmpDirs();		// create temporary directories
     QString saveToDir(const QString&,const QString &,bool, const QPoint &,LinkableMapObj*);
-    void saveStateComplete       (const QString &);					
     void saveStateChangingPart (LinkableMapObj *, LinkableMapObj *, const QString &, const QString &);
     void saveStateRemovingPart (LinkableMapObj *, const QString &);
     void saveState(LinkableMapObj *, const QString &, LinkableMapObj *, const QString &, const QString &);
@@ -121,8 +119,9 @@
     void selectRightBranch();
     void selectFirstBranch();
     void selectLastBranch();
-    void selectBackgroundColor();
-    void setBackgroundColor(QColor);
+    void selectMapBackgroundColor();
+    void setMapBackgroundColor(QColor);
+    QColor getMapBackgroundColor();
     QColor getCurrentHeadingColor();
     void colorItem(QColor);
     void colorBranch(QColor);
@@ -148,19 +147,21 @@
 	void editMapInfo();						// dialog to enter author, ...
 	void updateActions();					// update e.g. format buttons
 	void updateNoteFlag();					// when TextEditor changes
-	void setLinkStyle (LinkStyle);			// Set style of link
-	LinkStyle getLinkStyle ();				// requested in LMO
-	void setLinkColor(QColor);				// default color of links
-	void setLinkColorHint();				// color of links
-	void setLinkColorHint(LinkColorHint);	// color of links
-	LinkColorHint getLinkColorHint();
-	QColor getDefLinkColor();
-	void setDefXLinkColor(QColor);
-	QColor getDefXLinkColor();
-	void setDefXLinkWidth (int);
-	int getDefXLinkWidth();
-	void toggleLinkColorHint();				// after changing linkStyles
-    void selectLinkColor();
+	void setMapAuthor (const QString &);
+	void setMapComment(const QString &);
+	void setMapLinkStyle (const QString &);	// Set style of link
+	LinkStyle getMapLinkStyle ();			// requested in LMO
+	void setMapDefLinkColor(QColor);		// default color of links
+	void setMapLinkColorHintInt();			// color of links
+	void setMapLinkColorHint(LinkColorHint);// color of links
+	LinkColorHint getMapLinkColorHint();
+	QColor getMapDefLinkColor();
+	void setMapDefXLinkColor(QColor);
+	QColor getMapDefXLinkColor();
+	void setMapDefXLinkWidth (int);
+	int getMapDefXLinkWidth();
+	void toggleMapLinkColorHint();			// after changing linkStyles
+    void selectMapLinkColor();
     void toggleScroll();
     void unScrollAll();
 	void loadFloatImage ();
@@ -183,6 +184,8 @@
 	void ensureSelectionVisible();		
 	virtual void updateViewCenter();	// needed for zooming
 	virtual void contentsContextMenuEvent ( QContextMenuEvent *e );
+    virtual void keyPressEvent(QKeyEvent*);
+    virtual void keyReleaseEvent(QKeyEvent*);
     virtual void contentsMousePressEvent(QMouseEvent*);
     virtual void contentsMouseReleaseEvent(QMouseEvent*);
     virtual void contentsMouseDoubleClickEvent(QMouseEvent*);
@@ -203,8 +206,10 @@
 	LinkColorHint linkcolorhint;// use heading color or own color
 	LinkStyle linkstyle;		// default style for links
 
-    QCursor handOpenCursor;		// cursor while moving canvas view
-	QCursor pickColorCursor;	// cursor while picking color 
+    QCursor HandOpenCursor;		// cursor while moving canvas view
+	QCursor PickColorCursor;	// cursor while picking color 
+	QCursor CopyCursor;			// cursor while picking color 
+	QCursor XLinkCursor;		// cursor while picking color 
 	bool pickingColor;
 	bool drawingLink;			// true while creating a link
 	bool copyingObj;			// true while creating a link
diff -r 39aa64b24375 -r d42881c25fb6 ornamentedobj.cpp
--- a/ornamentedobj.cpp	Mon Oct 30 12:39:37 2006 +0000
+++ b/ornamentedobj.cpp	Thu Nov 16 10:07:11 2006 +0000
@@ -86,10 +86,10 @@
 
 void OrnamentedObj::setLinkColor()
 {
-	if (mapEditor->getLinkColorHint()==HeadingColor)
+	if (mapEditor->getMapLinkColorHint()==HeadingColor)
 		LinkableMapObj::setLinkColor (heading->getColor());
 	else	
-		LinkableMapObj::setLinkColor (mapEditor->getDefLinkColor());
+		LinkableMapObj::setLinkColor (mapEditor->getMapDefLinkColor());
 }
 
 void OrnamentedObj::setColor (QColor col)
diff -r 39aa64b24375 -r d42881c25fb6 version.h
--- a/version.h	Mon Oct 30 12:39:37 2006 +0000
+++ b/version.h	Thu Nov 16 10:07:11 2006 +0000
@@ -4,8 +4,8 @@
 #include <QString>
 
 #define __VYM "VYM"
-#define __VYM_VERSION "1.8.58"
-#define __BUILD_DATE "October 25, 2006"
+#define __VYM_VERSION "1.8.59"
+#define __BUILD_DATE "November 14, 2006"
 
 
 bool checkVersion(const QString &);
diff -r 39aa64b24375 -r d42881c25fb6 vym.pro
--- a/vym.pro	Mon Oct 30 12:39:37 2006 +0000
+++ b/vym.pro	Thu Nov 16 10:07:11 2006 +0000
@@ -100,6 +100,7 @@
 QT += xml  
 
 TARGET  = vym
+
 TRANSLATIONS += lang/vym_de.ts
 TRANSLATIONS += lang/vym_en.ts
 TRANSLATIONS += lang/vym_es.ts
diff -r 39aa64b24375 -r d42881c25fb6 xml.cpp
--- a/xml.cpp	Mon Oct 30 12:39:37 2006 +0000
+++ b/xml.cpp	Thu Nov 16 10:07:11 2006 +0000
@@ -74,7 +74,8 @@
 				mc->setVersion(atts.value( "version" ));
 
 		}
-		if (loadMode==NewMap)
+		if (loadMode==NewMap || 
+			(loadMode==ImportReplace && me->getSelection()==mc))
 		{
 			if (!atts.value( "author").isEmpty() )
 			{
@@ -92,37 +93,27 @@
 			if (!atts.value( "linkColorHint").isEmpty() ) 
 			{
 				if (atts.value("linkColorHint")=="HeadingColor")
-					me->setLinkColorHint(HeadingColor);
+					me->setMapLinkColorHint(HeadingColor);
 				else
-					me->setLinkColorHint(DefaultColor);
+					me->setMapLinkColorHint(DefaultColor);
 			}
 			if (!atts.value( "linkStyle").isEmpty() ) 
 			{
-				QString s=atts.value("linkStyle");
-				if (s=="StyleLine")
-					me->setLinkStyle(StyleLine);
-				else	
-					if (s=="StyleParabel")
-						me->setLinkStyle(StyleParabel);
-					else	
-						if (s=="StylePolyLine")
-							me->setLinkStyle(StylePolyLine);
-						else	
-							me->setLinkStyle(StylePolyParabel);
+				me->setMapLinkStyle(atts.value("linkStyle"));
 			}	
 			if (!atts.value( "linkColor").isEmpty() ) 
 			{
 				col.setNamedColor(atts.value("linkColor"));
-				me->setLinkColor(col);
+				me->setMapDefLinkColor(col);
 			}	
 			if (!atts.value( "defXLinkColor").isEmpty() ) 
 			{
 				col.setNamedColor(atts.value("defXLinkColor"));
-				me->setDefXLinkColor(col);
+				me->setMapDefXLinkColor(col);
 			}	
 			if (!atts.value( "defXLinkWidth").isEmpty() ) 
 			{
-				me->setDefXLinkWidth(atts.value("defXLinkWidth").toInt ());
+				me->setMapDefXLinkWidth(atts.value("defXLinkWidth").toInt ());
 			}	
 		}	
 	} else if ( eName == "select" && state == StateMap )