# HG changeset patch
# User insilmaril
# Date 1175333307 0
# Node ID dfbc371b72801179577417559d39e0067d19f977
# Parent  658ad3bc0c8ab16fe2d1fb5e5461cbd3b7ce7d0f
1.8.70 Fixes in property window

diff -r 658ad3bc0c8a -r dfbc371b7280 floatobj.cpp
--- a/floatobj.cpp	Sat Mar 31 09:28:27 2007 +0000
+++ b/floatobj.cpp	Sat Mar 31 09:28:27 2007 +0000
@@ -73,14 +73,11 @@
 void FloatObj::move (double x, double y)
 {
 	MapObj::move(x,y);
-	//selbox->setPos(x,y);
-	selbox->rect().moveTo (QPointF (x,y));
 }
 
 void FloatObj::move (QPointF p)
 {
 	MapObj::move (p);
-	selbox->rect().moveTo (p);
 }
 
 void FloatObj::setDockPos()
diff -r 658ad3bc0c8a -r dfbc371b7280 frameobj.cpp
--- a/frameobj.cpp	Sat Mar 31 09:28:27 2007 +0000
+++ b/frameobj.cpp	Sat Mar 31 09:28:27 2007 +0000
@@ -26,6 +26,8 @@
 {
     type=NoFrame;
     border=0;
+	penColor=QColor (Qt::black);
+	brushColor=QColor (Qt::white);
 }
 
 void FrameObj::clear()
@@ -129,17 +131,19 @@
 				break;
 			case Rectangle:
 				border=10;
-				rectFrame = scene->addRect(QRectF(0,0,0,0), QPen(QColor("black") ), QColor("white"));
+				rectFrame = scene->addRect(QRectF(0,0,0,0), QPen(penColor), brushColor);
 				rectFrame->setZValue(Z_FRAME);
+				rectFrame->show();
 				break;
 			case Ellipse:
 				border=10;
-				ellipseFrame = scene->addEllipse(QRectF(0,0,0,0), QPen(QColor("black") ), QColor("white"));
+				ellipseFrame = scene->addEllipse(QRectF(0,0,0,0), QPen(penColor), brushColor);
 				ellipseFrame->setZValue(Z_FRAME);
+				ellipseFrame->show();
 				break;
 		}
-		setVisibility (visible);
 	}
+	setVisibility (visible);
 }
 
 void FrameObj::setFrameType(const QString &t)
@@ -152,6 +156,46 @@
 		FrameObj::setFrameType (NoFrame);
 }
 
+void FrameObj::setPenColor (QColor col)
+{
+	penColor=col;
+	repaint();
+}
+
+QColor FrameObj::getPenColor ()
+{
+	return penColor;
+}
+
+void FrameObj::setBrushColor (QColor col)
+{
+	brushColor=col;
+	repaint();
+}
+
+QColor FrameObj::getBrushColor ()
+{
+	return brushColor;
+}
+
+void FrameObj::repaint()
+{
+	switch (type)
+	{
+		case Rectangle:
+			rectFrame->setPen   (penColor);
+			rectFrame->setBrush (brushColor);
+			break;
+		case Ellipse:
+			ellipseFrame->setPen   (penColor);
+			ellipseFrame->setBrush (brushColor);
+			break;
+		default:
+			break;
+	}
+}
+
+
 void FrameObj::setVisibility (bool v)
 {
     MapObj::setVisibility(v);
@@ -177,6 +221,8 @@
 QString FrameObj::saveToDir ()
 {
 	QString	frameTypeAttr=attribut ("frameType",getFrameTypeName());
-	return singleElement ("frame",frameTypeAttr);
+	QString	penColAttr=attribut ("penColor",penColor.name() );
+	QString	brushColAttr=attribut ("brushColor",brushColor.name() );
+	return singleElement ("frame",frameTypeAttr + penColAttr + brushColAttr);
 }
 
diff -r 658ad3bc0c8a -r dfbc371b7280 frameobj.h
--- a/frameobj.h	Sat Mar 31 09:28:27 2007 +0000
+++ b/frameobj.h	Sat Mar 31 09:28:27 2007 +0000
@@ -22,14 +22,21 @@
     QString getFrameTypeName ();
     void setFrameType (const FrameType &);
     void setFrameType (const QString &);
+	void setPenColor (QColor);
+	QColor getPenColor ();
+	void setBrushColor (QColor);
+	QColor getBrushColor ();
+	void repaint();
     void setVisibility(bool);
 	QString saveToDir ();
 
-protected:
+private:
     FrameType type;
     QGraphicsRectItem * rectFrame;
     QGraphicsEllipseItem * ellipseFrame;
     int border;									// distance text - frame
+	QColor penColor;
+	QColor brushColor;
 };
 #endif
 
diff -r 658ad3bc0c8a -r dfbc371b7280 historywindow.cpp
--- a/historywindow.cpp	Sat Mar 31 09:28:27 2007 +0000
+++ b/historywindow.cpp	Sat Mar 31 09:28:27 2007 +0000
@@ -158,6 +158,15 @@
 	showwithmain=v;
 }
 
+void HistoryWindow::closeEvent( QCloseEvent* ce )
+{
+    ce->accept();	// TextEditor can be reopened with show()
+    showwithmain=false;
+	emit (windowClosed() );
+    return;
+}
+
+
 bool HistoryWindow::showWithMain()
 {
 	return showwithmain;
diff -r 658ad3bc0c8a -r dfbc371b7280 historywindow.h
--- a/historywindow.h	Sat Mar 31 09:28:27 2007 +0000
+++ b/historywindow.h	Sat Mar 31 09:28:27 2007 +0000
@@ -18,11 +18,17 @@
 	void setShowWithMain (bool);
 	bool showWithMain ();
 
+protected:
+    void closeEvent( QCloseEvent* );
+
 private slots:	
 	void undo();
 	void redo();
 	void select();
 
+signals:
+	void windowClosed();
+
 private:
 	void clearRow (int);
 	void updateRow (int, int, SimpleSettings &);
diff -r 658ad3bc0c8a -r dfbc371b7280 linkablemapobj.cpp
--- a/linkablemapobj.cpp	Sat Mar 31 09:28:27 2007 +0000
+++ b/linkablemapobj.cpp	Sat Mar 31 09:28:27 2007 +0000
@@ -28,8 +28,6 @@
 LinkableMapObj::~LinkableMapObj()
 {
     delete (bottomline);
-    delete (selbox);
-	delete (frame);
 	delLink();
 }
 
@@ -81,18 +79,12 @@
     bottomline->show();
 
     // Prepare showing the selection of a MapObj
-    selbox = scene->addRect(QRectF(0,0,0,0), QPen(QColor(255,255,0) ), QColor(255,255,0));
-    selbox->setZValue(Z_SELBOX);
-    selbox->hide();
     selected=false;
 
 	hideLinkUnselected=false;
 
 	topPad=botPad=leftPad=rightPad=0;
 
-	// initialize frame
-	frame = new FrameObj (scene);
-	
 	repositionRequest=false;
 
 	// Rel Positions
@@ -347,27 +339,6 @@
 	return linkcolor;
 }
 
-FrameType LinkableMapObj::getFrameType()
-{
-	return frame->getFrameType();
-}
-
-void LinkableMapObj::setFrameType(const FrameType &t)
-{
-	frame->setFrameType(t);
-	calcBBoxSize();
-	positionBBox();
-	requestReposition();
-}
-
-void LinkableMapObj::setFrameType(const QString &t)
-{
-	frame->setFrameType(t);
-	calcBBoxSize();
-	positionBBox();
-	requestReposition();
-}
-
 void LinkableMapObj::setVisibility (bool v)
 {
 	MapObj::setVisibility (v);
@@ -465,16 +436,12 @@
 	// have parents yet...
 	if (style==StyleUndef) return;	
 
-	if (frame->getFrameType() == NoFrame)
-		linkpos=LinkBottom;
-	else	
-		linkpos=LinkMiddle;
 	switch (linkpos)
 	{
 		case LinkMiddle:
-			bottomlineY=bbox.top()+bbox.height() /2;	// draw link to middle (of frame)
+			bottomlineY=bbox.top() + bbox.height()/2;	// draw link to middle (of frame)
 			break;
-		default :
+		case LinkBottom:
 			bottomlineY=bbox.bottom()-1;	// draw link to bottom of box
 			break;
 	}
@@ -687,17 +654,9 @@
 }
 
 
-void LinkableMapObj::setSelBox()
-{
-	//selbox->prepareGeometryChange();
-	selbox->setRect (clickBox);
-}
-
 void LinkableMapObj::select()
 {
-	setSelBox();
     selected=true;
-    selbox->show();
 	setVisibility (visible);
 }
 
@@ -705,7 +664,6 @@
 void LinkableMapObj::unselect()
 {
     selected=false;
-    selbox->hide();
 	// Maybe we have to hide the link:
 	setVisibility (visible);
 }
diff -r 658ad3bc0c8a -r dfbc371b7280 linkablemapobj.h
--- a/linkablemapobj.h	Sat Mar 31 09:28:27 2007 +0000
+++ b/linkablemapobj.h	Sat Mar 31 09:28:27 2007 +0000
@@ -1,7 +1,6 @@
 #ifndef LINKABLEMAPOBJ_H
 #define LINKABLEMAPOBJ_H
 
-#include "frameobj.h"
 #include "noteobj.h"
 #include "headingobj.h"
 #include "flagrowobj.h"
@@ -57,9 +56,6 @@
 	virtual void setLinkColor();					// sets color according to colorhint, overloaded
 	virtual void setLinkColor(QColor);
 	QColor getLinkColor();
-	virtual FrameType getFrameType ();
-	virtual void setFrameType (const FrameType &);
-	virtual void setFrameType (const QString &);
 	virtual void setVisibility (bool);
 	virtual void setOrientation();
     virtual void updateLink();				// update parPos and childPos
@@ -88,7 +84,6 @@
 	//virtual QRectF getBBoxSizeWithChilds();// return size of BBox including childs  
 	virtual void calcBBoxSizeWithChilds()=0;// calc size of  BBox including childs recursivly
 
-	virtual void setSelBox();
     virtual void select();
     virtual void unselect();
 	virtual	QString getSelectString()=0;
@@ -101,7 +96,9 @@
     QPointF childPos;
     QPointF parPos;
 	bool link2ParPos;				// While moving around, sometimes link to parent
-	MapEditor* mapEditor;			// for updateNoteFlag() and toggleScroll()
+	MapEditor* mapEditor;			// for and toggleScroll(), get default styles
+									// and mapEditor->updateActions()
+									// and mapEditor->updateSelection()
     LinkOrient orientation;     
     qreal linkwidth;				// width of a link
     int depth;						// depth: undef=-1 mapCenter=0 branch=1..n
@@ -129,8 +126,6 @@
 
 	bool selected;					// Used for marking the selection
 	bool hideLinkUnselected;		// to hide links if unselected
-	QGraphicsRectItem* selbox;
-	FrameObj *frame;				// frame around object
 	qreal topPad, botPad,
 		leftPad, rightPad;          // padding within bbox
 
diff -r 658ad3bc0c8a -r dfbc371b7280 mainwindow.cpp
--- a/mainwindow.cpp	Sat Mar 31 09:28:27 2007 +0000
+++ b/mainwindow.cpp	Sat Mar 31 09:28:27 2007 +0000
@@ -19,6 +19,7 @@
 #include "process.h"
 #include "settings.h"
 #include "texteditor.h"
+#include "warningdialog.h"
 
 extern TextEditor *textEditor;
 extern Main *mainWindow;
@@ -160,6 +161,8 @@
 
 	restoreState (settings.value("/mainwindow/state",0).toByteArray());
 
+	// Satellite windows //////////////////////////////////////////
+
 	// Initialize Find window
 	findWindow=new FindWindow(NULL);
 	findWindow->move (x(),y()+70);
@@ -170,7 +173,10 @@
 
 	// Connect TextEditor, so that we can update flags if text changes
 	connect (textEditor, SIGNAL (textHasChanged() ), this, SLOT (updateNoteFlag()));
-	connect (textEditor, SIGNAL (textEditorClosed() ), this, SLOT (updateActions()));
+	connect (textEditor, SIGNAL (windowClosed() ), this, SLOT (updateActions()));
+
+	// Connect HistoryWindow, so that we can update flags
+	connect (historyWindow, SIGNAL (windowClosed() ), this, SLOT (updateActions()));
 
 	updateGeometry();
 }
@@ -198,7 +204,7 @@
 	//FIXME save scriptEditor settings
 
 	// call the destructors
-	delete (textEditor);
+	delete textEditor;
 	delete historyWindow;
 
 	// Remove temporary directory
@@ -244,25 +250,24 @@
     QAction *a;
     a = new QAction(QPixmap( iconPath+"filenew.png"), tr( "&New...","File menu" ),this);
 	a->setStatusTip ( tr( "New map","Status tip File menu" ) );
-	a->setShortcut ( Qt::CTRL + Qt::Key_N );
+	a->setShortcut ( Qt::CTRL + Qt::Key_N );		//New map
     a->addTo( tb );
 	fileMenu->addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( fileNew() ) );
 	
     a = new QAction( QPixmap( iconPath+"fileopen.png"), tr( "&Open..." ,"File menu"),this);
 	a->setStatusTip (tr( "Open","Status tip File menu" ) );
-	a->setShortcut ( Qt::CTRL + Qt::Key_O );
+	a->setShortcut ( Qt::CTRL + Qt::Key_O );		//Open map
     a->addTo( tb );
 	fileMenu->addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( fileLoad() ) );
 	
 	fileLastMapsMenu = fileMenu->addMenu (tr("Open Recent","File menu"));
-	fileLastMapsMenu->menuAction()->setShortcut ( Qt::CTRL + +Qt::SHIFT + Qt::Key_O );
 	fileMenu->addSeparator();
 	
     a = new QAction( QPixmap( iconPath+"filesave.png"), tr( "&Save...","File menu" ), this);
 	a->setStatusTip ( tr( "Save","Status tip file menu" ));
-	a->setShortcut (Qt::CTRL + Qt::Key_S );
+	a->setShortcut (Qt::CTRL + Qt::Key_S );			//Save map
     a->addTo( tb );
 	fileMenu->addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( fileSave() ) );
@@ -313,7 +318,7 @@
 	fileExportMenu->addAction (a);
 
 	a = new QAction(  "Webpage (XHTML)...",this );
-	a->setShortcut (Qt::ALT + Qt::Key_X);
+	a->setShortcut (Qt::ALT + Qt::Key_X);			//Export XHTML
 	a->setStatusTip ( tr( "Export as %1","status tip file menu").arg(tr(" webpage (XHTML)","status tip file menu")));
     connect( a, SIGNAL( triggered() ), this, SLOT( fileExportXHTML() ) );
 	fileExportMenu->addAction (a);
@@ -347,7 +352,7 @@
 
     a = new QAction(QPixmap( iconPath+"fileprint.png"), tr( "&Print")+QString("..."), this);
 	a->setStatusTip ( tr( "Print" ,"File menu") );
-	a->setShortcut (Qt::CTRL + Qt::Key_P );
+	a->setShortcut (Qt::CTRL + Qt::Key_P );			//Print map
     a->addTo( tb );
 	fileMenu->addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( filePrint() ) );
@@ -355,13 +360,13 @@
 
     a = new QAction( QPixmap(iconPath+"fileclose.png"), tr( "&Close Map","File menu" ), this);
 	a->setStatusTip (tr( "Close Map" ) );
-	a->setShortcut (Qt::ALT + Qt::Key_C );
+	a->setShortcut (Qt::ALT + Qt::Key_C );			//Close map
 	fileMenu->addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( fileCloseMap() ) );
 
     a = new QAction(QPixmap(iconPath+"exit.png"), tr( "E&xit","File menu")+" "+vymName, this);
 	a->setStatusTip ( tr( "Exit")+" "+vymName );
-	a->setShortcut (Qt::CTRL + Qt::Key_Q );
+	a->setShortcut (Qt::CTRL + Qt::Key_Q );			//Quit vym
 	fileMenu->addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( fileExitVYM() ) );
 }
@@ -380,7 +385,7 @@
     a = new QAction( QPixmap( iconPath+"undo.png"), tr( "&Undo","Edit menu" ),this);
     connect( a, SIGNAL( triggered() ), this, SLOT( editUndo() ) );
 	a->setStatusTip (tr( "Undo" ) );
-	a->setShortcut ( Qt::CTRL + Qt::Key_Z );
+	a->setShortcut ( Qt::CTRL + Qt::Key_Z );		//Undo last action
 	a->setEnabled (false);
     tb->addAction (a);
 	editMenu->addAction (a);
@@ -388,7 +393,7 @@
     
 	a = new QAction( QPixmap( iconPath+"redo.png"), tr( "&Redo","Edit menu" ), this); 
 	a->setStatusTip (tr( "Redo" ));
-	a->setShortcut (Qt::CTRL + Qt::Key_Y );
+	a->setShortcut (Qt::CTRL + Qt::Key_Y );			//Redo last action
     tb->addAction (a);
 	editMenu->addAction (a);
 	connect( a, SIGNAL( triggered() ), this, SLOT( editRedo() ) );
@@ -397,7 +402,7 @@
 	editMenu->addSeparator();
     a = new QAction(QPixmap( iconPath+"editcopy.png"), tr( "&Copy","Edit menu" ), this);
 	a->setStatusTip ( tr( "Copy" ) );
-	a->setShortcut (Qt::CTRL + Qt::Key_C );
+	a->setShortcut (Qt::CTRL + Qt::Key_C );			//Copy
 	a->setEnabled (false);
     tb->addAction (a);
 	editMenu->addAction (a);
@@ -406,7 +411,7 @@
 	
     a = new QAction(QPixmap( iconPath+"editcut.png" ), tr( "Cu&t","Edit menu" ), this);
 	a->setStatusTip ( tr( "Cut" ) );
-	a->setShortcut (Qt::CTRL + Qt::Key_X );
+	a->setShortcut (Qt::CTRL + Qt::Key_X );			//Cut
 	a->setEnabled (false);
     tb->addAction (a);
 	editMenu->addAction (a);
@@ -416,7 +421,7 @@
     a = new QAction(QPixmap( iconPath+"editpaste.png"), tr( "&Paste","Edit menu" ),this);
     connect( a, SIGNAL( triggered() ), this, SLOT( editPaste() ) );
 	a->setStatusTip ( tr( "Paste" ) );
-	a->setShortcut ( Qt::CTRL + Qt::Key_V );
+	a->setShortcut ( Qt::CTRL + Qt::Key_V );		//Paste
 	a->setEnabled (false);
     tb->addAction (a);
 	editMenu->addAction (a);
@@ -425,14 +430,14 @@
     // Shortcuts to modify heading:
     a = new QAction(tr( "Edit heading","Edit menu" ),this);
 	a->setStatusTip ( tr( "edit Heading" ));
-	a->setShortcut ( Qt::Key_Enter);
+	a->setShortcut ( Qt::Key_Enter);				//Edit heading
 //	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editHeading() ) );
 	actionListBranches.append(a);
     a = new QAction( tr( "Edit heading","Edit menu" ), this);
 	a->setStatusTip (tr( "edit Heading" ));
-	a->setShortcut (Qt::Key_Return );
+	a->setShortcut (Qt::Key_Return );				//Edit heading
 	//a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editHeading() ) );
@@ -441,7 +446,7 @@
 	actionEditHeading=a;
     a = new QAction( tr( "Edit heading","Edit menu" ), this);
 	a->setStatusTip (tr( "edit Heading" ));
-	a->setShortcut ( Qt::Key_F2 );
+	a->setShortcut ( Qt::Key_F2 );					//Edit heading
 	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editHeading() ) );
@@ -450,7 +455,7 @@
     // Shortcut to delete selection
     a = new QAction( tr( "Delete Selection","Edit menu" ),this);
 	a->setStatusTip (tr( "Delete Selection" ));
-	a->setShortcut ( Qt::Key_Delete);
+	a->setShortcut ( Qt::Key_Delete);				//Delete selection
 	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editDeleteSelection() ) );
@@ -459,13 +464,13 @@
     // Shortcut to add branch
 	alt = new QAction(QPixmap(iconPath+"newbranch.png"), tr( "Add branch as child","Edit menu" ), this);
 	alt->setStatusTip ( tr( "Add a branch as child of selection" ));
-	alt->setShortcut (Qt::Key_A);
+	alt->setShortcut (Qt::Key_A);					//Add branch
 	alt->setShortcutContext (Qt::WindowShortcut);
 	addAction (alt);
 	connect( alt, SIGNAL( triggered() ), this, SLOT( editNewBranch() ) );
 	a = new QAction(QPixmap(iconPath+"newbranch.png"), tr( "Add branch as child","Edit menu" ), this);
 	a->setStatusTip ( tr( "Add a branch as child of selection" ));
-	a->setShortcut (Qt::Key_Insert);	
+	a->setShortcut (Qt::Key_Insert);				//Add branch
 	connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranch() ) );
 	actionListBranches.append(a);
 	#if defined (Q_OS_MACX)
@@ -481,7 +486,7 @@
     // Add branch by inserting it at selection
 	a = new QAction(tr( "Add branch (insert)","Edit menu" ), this);
 	a->setStatusTip ( tr( "Add a branch by inserting and making selection its child" ));
-	a->setShortcut (Qt::ALT + Qt::Key_Insert );
+	a->setShortcut (Qt::ALT + Qt::Key_Insert );		//Insert branch
 	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBefore() ) );
@@ -490,7 +495,7 @@
 	actionEditAddBranchBefore=a;
 	a = new QAction(tr( "Add branch (insert)","Edit menu" ),this);
 	a->setStatusTip ( tr( "Add a branch by inserting and making selection its child" ));
-	a->setShortcut ( Qt::ALT + Qt::Key_A );
+	a->setShortcut ( Qt::ALT + Qt::Key_A );			//Insert branch
 	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBefore() ) );
@@ -499,7 +504,7 @@
 	// Add branch above
     a = new QAction(tr( "Add branch above","Edit menu" ), this);
 	a->setStatusTip ( tr( "Add a branch above selection" ));
-	a->setShortcut (Qt::SHIFT+Qt::Key_Insert );
+	a->setShortcut (Qt::SHIFT+Qt::Key_Insert );		//Add branch above
 	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchAbove() ) );
@@ -508,7 +513,7 @@
 	actionEditAddBranchAbove=a;
     a = new QAction(tr( "Add branch above","Edit menu" ), this);
 	a->setStatusTip ( tr( "Add a branch above selection" ));
-	a->setShortcut (Qt::SHIFT+Qt::Key_A );
+	a->setShortcut (Qt::SHIFT+Qt::Key_A );			//Add branch above
 	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchAbove() ) );
@@ -517,7 +522,7 @@
 	// Add branch below 
     a = new QAction(tr( "Add branch below","Edit menu" ), this);
 	a->setStatusTip ( tr( "Add a branch below selection" ));
-	a->setShortcut (Qt::CTRL +Qt::Key_Insert );
+	a->setShortcut (Qt::CTRL +Qt::Key_Insert );		//Add branch below
 	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBelow() ) );
@@ -526,7 +531,7 @@
 	actionEditAddBranchBelow=a;
     a = new QAction(tr( "Add branch below","Edit menu" ), this);
 	a->setStatusTip ( tr( "Add a branch below selection" ));
-	a->setShortcut (Qt::CTRL +Qt::Key_A );
+	a->setShortcut (Qt::CTRL +Qt::Key_A );			// Add branch below
 	a->setShortcutContext (Qt::WindowShortcut);
 	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editNewBranchBelow() ) );
@@ -534,7 +539,7 @@
 
     a = new QAction(QPixmap(iconPath+"up.png" ), tr( "Move up","Edit menu" ), this);
 	a->setStatusTip ( tr( "Move branch up" ) );
-	a->setShortcut (Qt::Key_PageUp );
+	a->setShortcut (Qt::Key_PageUp );				// Move branch up
 	a->setEnabled (false);
     tb->addAction (a);
 	editMenu->addAction (a);
@@ -544,7 +549,7 @@
     a = new QAction( QPixmap( iconPath+"down.png"), tr( "Move down","Edit menu" ),this);
     connect( a, SIGNAL( triggered() ), this, SLOT( editMoveDown() ) );
 	a->setStatusTip (tr( "Move branch down" ) );
-	a->setShortcut ( Qt::Key_PageDown );
+	a->setShortcut ( Qt::Key_PageDown );			// Move branch down
 	a->setEnabled (false);
     tb->addAction (a);
 	editMenu->addAction (a);
@@ -557,7 +562,7 @@
     connect( a, SIGNAL( triggered() ), this, SLOT( editToggleScroll() ) );
 
 	alt = new QAction( QPixmap(flagsPath+"flag-scrolled-right.png"), tr( "Scroll branch","Edit menu" ), this);
-	alt->setShortcut ( Qt::Key_S );
+	alt->setShortcut ( Qt::Key_S );					// Scroll branch
 	alt->setStatusTip (tr( "Scroll branch" )); 
     connect( alt, SIGNAL( triggered() ), this, SLOT( editToggleScroll() ) );
 	#if defined(Q_OS_MACX)
@@ -583,7 +588,7 @@
 
 	a = new QAction( QPixmap(iconPath+"find.png"), tr( "Find...","Edit menu"), this);
 	a->setStatusTip (tr( "Find" ) );
-	a->setShortcut (Qt::CTRL + Qt::Key_F );
+	a->setShortcut (Qt::CTRL + Qt::Key_F );				//Find
 	editMenu->addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( editOpenFindWindow() ) );
     
@@ -779,10 +784,13 @@
     connect( a, SIGNAL( triggered() ), this, SLOT( editLoadImage() ) );
 	actionEditLoadImage=a;
 
-    a = new QAction( tr( "Properties","Context menu for images and branches" )+QString ("..."), this);
-	a->setStatusTip (tr( "Set properties for object" ));
+    a = new QAction( tr( "Property Dialog","Dialog to edit properties of selection" )+QString ("..."), this);
+	a->setStatusTip (tr( "Set properties for selection" ));
+	a->setShortcut ( Qt::CTRL + Qt::Key_I );		//Property window
+	a->setShortcutContext (Qt::WindowShortcut);
+	addAction (a);
     connect( a, SIGNAL( triggered() ), this, SLOT( showPropertyDialog() ) );
-	actionOpenPropertyDialog=a;
+	actionTogglePropertyDialog=a;
 }
 
 // Format Actions
@@ -813,7 +821,7 @@
 
     a= new QAction(QPixmap(iconPath+"formatcolorbranch.png"), tr( "Color &branch","Edit menu" ), this);
 	a->setStatusTip ( tr( "Color branch" ) );
-	a->setShortcut (Qt::CTRL + Qt::Key_I);
+	a->setShortcut (Qt::CTRL + Qt::Key_B);
     connect( a, SIGNAL( triggered() ), this, SLOT( formatColorBranch() ) );
 	a->setEnabled (false);
     a->addTo( tb );
@@ -893,6 +901,12 @@
     connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectLinkColor() ) );
     actionFormatLinkColor=a;
 
+    a= new QAction( pix, tr( "Set &Selection Color"+QString("...") ), this  );
+	a->setStatusTip (tr( "Set Selection Color" ));
+	formatMenu->addAction (a);
+    connect( a, SIGNAL( triggered() ), this, SLOT( formatSelectSelectionColor() ) );
+    actionFormatSelectionColor=a;
+
     a= new QAction( pix, tr( "Set &Background Color" )+QString("..."), this );
 	a->setStatusTip (tr( "Set Background Color" ));
 	formatMenu->addAction (a);
@@ -950,8 +964,8 @@
     connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleNoteEditor() ) );
 	actionViewToggleNoteEditor=a;
 
-    a = new QAction(QPixmap(iconPath+"history.png"),  tr( "Show history window","View action" ),this );
-	a->setStatusTip ( tr( "Show history window" ));
+    a = new QAction(QPixmap(iconPath+"history.png"),  tr( "History Window","View action" ),this );
+	a->setStatusTip ( tr( "Show History Window" ));
 	a->setShortcut ( Qt::CTRL + Qt::Key_H  );
 	a->setToggleAction(true);
     a->addTo( tb );
@@ -959,6 +973,8 @@
     connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleHistory() ) );
 	actionViewToggleHistoryWindow=a;
 
+	viewMenu->addAction (actionTogglePropertyDialog );
+
     a = new QAction(tr( "Antialiasing","View action" ),this );
 	a->setStatusTip ( tr( "Antialiasing" ));
 	a->setToggleAction(true);
@@ -1450,8 +1466,7 @@
 
 	// Context Menu for branch or mapcenter
 	branchContextMenu =new QMenu (this);
-
-	actionOpenPropertyDialog->addTo (branchContextMenu);
+	branchContextMenu->addAction (actionTogglePropertyDialog);
 	branchContextMenu->addSeparator();	
 
 		// Submenu "Add"
@@ -1533,6 +1548,7 @@
 	canvasContextMenu->insertSeparator();	
 	actionFormatLinkColorHint->addTo( canvasContextMenu );
 	actionFormatLinkColor->addTo( canvasContextMenu );
+	actionFormatSelectionColor->addTo( canvasContextMenu );
 	actionFormatBackColor->addTo( canvasContextMenu );
 	actionFormatBackImage->addTo( canvasContextMenu );
 
@@ -2215,13 +2231,14 @@
 			QString dir=dia.getDir();
 			// Check, if warnings should be used before overwriting
 			// the output directory
-			bool ok;
-			if (dia.warnings()) 
-				ok=reallyWriteDirectory(dir);
-			else
-				ok=true;
-
-			if (ok)
+			WarningDialog warn;
+			warn.showCancelButton (true);
+			warn.setText(QString(
+				"The directory %1 is not empty.\n"
+				"Do you risk to overwrite some of its contents?").arg(dir));
+			warn.setCaption("Warning: Directory not empty");
+			warn.setShowAgainName("mainwindow/overwrite-dir-xhtml");
+			if (warn.exec()==QDialog::Accepted)
 			{
 				me->exportXML (dia.getDir() );
 				dia.doExport(me->getMapName() );
@@ -3067,6 +3084,12 @@
 		currentMapEditor()->selectMapLinkColor();
 }
 
+void Main::formatSelectSelectionColor()
+{
+	if (currentMapEditor())
+		currentMapEditor()->selectMapSelectionColor();
+}
+
 void Main::formatToggleLinkColorHint()
 {
 	currentMapEditor()->toggleMapLinkColorHint();
@@ -3211,6 +3234,11 @@
 		currentMapEditor()->updateNoteFlag();
 }
 
+void Main::updateSatellites(MapEditor *me)
+{
+	branchPropertyWindow->setMapEditor (me);
+}
+
 void Main::updateActions()
 {
 	MapEditor *me=currentMapEditor();
@@ -3220,6 +3248,7 @@
 
 	// updateActions is also called when NoteEditor is closed
 	actionViewToggleNoteEditor->setOn (textEditor->showWithMain());
+	actionViewToggleHistoryWindow->setOn (historyWindow->showWithMain());
 
 	if (me->getMapLinkColorHint()==HeadingColor) 
 		actionFormatLinkColorHint->setOn(true);
@@ -3244,12 +3273,16 @@
 			break;
 	}	
 
+	// Update colors
 	QPixmap pix( 16, 16 );
     pix.fill( me->getMapBackgroundColor() );
     actionFormatBackColor->setIconSet( pix );
+    pix.fill( me->getSelectionColor() );
+    actionFormatSelectionColor->setIconSet( pix );
     pix.fill( me->getMapDefLinkColor() );
     actionFormatLinkColor->setIconSet( pix );
 
+
 	actionFileSave->setEnabled( me->isUnsaved() );
 	if (me->isUndoAvailable())
 		actionEditUndo->setEnabled( true);
diff -r 658ad3bc0c8a -r dfbc371b7280 mainwindow.h
--- a/mainwindow.h	Sat Mar 31 09:28:27 2007 +0000
+++ b/mainwindow.h	Sat Mar 31 09:28:27 2007 +0000
@@ -147,6 +147,7 @@
     void formatSelectBackColor();
     void formatSelectBackImage();
     void formatSelectLinkColor();
+    void formatSelectSelectionColor();
     void formatToggleLinkColorHint();
 	void formatIncludeImagesVer();
 	void formatIncludeImagesHor();
@@ -167,6 +168,7 @@
 	void windowToggleAntiAlias();
 	void windowToggleSmoothPixmap();
 	void updateNoteFlag();
+	void updateSatellites(MapEditor *);
 	void updateActions();
 	ModMode getModMode();
 	bool autoEdit();
@@ -260,6 +262,7 @@
 	QAction* actionFormatBackColor;
 	QAction* actionFormatBackImage;
 	QAction* actionFormatLinkColor;
+	QAction* actionFormatSelectionColor;
 	QAction *actionFormatIncludeImagesVer;
 	QAction *actionFormatIncludeImagesHor;
 
@@ -270,7 +273,7 @@
 
 	QActionGroup *actionGroupFormatFrameTypes;
 
-	QAction *actionOpenPropertyDialog;
+	QAction *actionTogglePropertyDialog;
 
 	QActionGroup *actionGroupFormatLinkStyles;
 	QAction *actionFormatLinkStyleLine;
diff -r 658ad3bc0c8a -r dfbc371b7280 mapeditor.cpp
--- a/mapeditor.cpp	Sat Mar 31 09:28:27 2007 +0000
+++ b/mapeditor.cpp	Sat Mar 31 09:28:27 2007 +0000
@@ -97,7 +97,7 @@
     editingBO=NULL;
     movingObj=NULL;
 
-	xelection.setMapCenter (mapCenter);
+	xelection.setMapEditor (this);
 	xelection.unselect();
 
 	defXLinkWidth=1;
@@ -222,6 +222,7 @@
 				  attribut("comment",mapCenter->getComment()) +
 			      attribut("date",mapCenter->getDate()) +
 		          attribut("backgroundColor", mapScene->backgroundBrush().color().name() ) +
+		          attribut("selectionColor", xelection.getColor().name() ) +
 		          attribut("linkStyle", ls ) +
 		          attribut("linkColor", defLinkColor.name() ) +
 		          attribut("defXLinkColor", defXLinkColor.name() ) +
@@ -890,6 +891,13 @@
 			b=parser.parBool(ok,0);
 			if (ok) setIncludeImagesVer(b);
 		}
+	} else if (com=="setSelectionColor")
+	{
+		if (parser.checkParamCount(1))
+		{
+			QColor c=parser.parColor (ok,0);
+			if (ok) setSelectionColorInt (c);
+		}	
 	} else if (com=="setURL")
 	{
 		if (xelection.isEmpty() )
@@ -1147,6 +1155,7 @@
 		if ( ok ) 
 		{
 			mapCenter->reposition();
+			xelection.update();
 			if (lmode==NewMap)
 			{
 				mapDefault=false;
@@ -1221,8 +1230,6 @@
 		printer->setOutputFileName(settings.value("/mainwindow/printerFileName",printer->outputFileName()).toString());
 	}
 
-	// FIXME testing cout << "ME::print  printProgram="<<printer->printProgram().ascii()<<endl;
-
 	QRectF totalBBox=mapCenter->getTotalBBox();
 
 	// Try to set orientation automagically
@@ -1319,7 +1326,6 @@
 {
 	QRectF mapRect=mapCenter->getTotalBBox();
 	QPixmap pix((int)mapRect.width(),(int)mapRect.height());
-	cout << "w.h="<<(int)mapRect.width()<<","<<(int)mapRect.height()<<endl;
 	QPainter pp (&pix);
 	
 	pp.setRenderHints(renderHints());
@@ -1611,6 +1617,7 @@
 
 	mainWindow->updateHistory (undoSet);
 	updateActions();
+	xelection.update();
 	ensureSelectionVisible();
 }
 
@@ -1777,6 +1784,7 @@
 			QString("Move %1 to  %2").arg(getName(sel)).arg(ps));
 		sel->move(x,y);	// FIXME	xelection not moved automagically...
 		mapCenter->reposition();
+		xelection.update();
 	}
 
 }
@@ -1795,6 +1803,7 @@
 		((OrnamentedObj*)sel)->move2RelPos (x,y);
 		mapCenter->reposition();
 		sel->updateLink();
+		xelection.update();
 	}
 }
 
@@ -1813,6 +1822,7 @@
 		saveState (bo,"moveBranchDown ()",bo,"moveBranchUp ()",QString("Move up %1").arg(getName(bo)));
 		mapCenter->reposition();
 		scene()->update();
+		xelection.update();
 		ensureSelectionVisible();
 	}
 }
@@ -1832,6 +1842,7 @@
 		saveState(bo,"moveBranchUp ()",bo,"moveBranchDown ()",QString("Move down %1").arg(getName(bo)));
 		mapCenter->reposition();
 		scene()->update();
+		xelection.update();
 		ensureSelectionVisible();
 	}	
 }
@@ -1892,6 +1903,7 @@
 			QString("Set heading of %1 to \"%2\"").arg(getName(sel)).arg(s) );
 		sel->setHeading(s );
 		mapCenter->reposition();
+		xelection.update();
 		ensureSelectionVisible();
 	}
 }
@@ -1904,6 +1916,7 @@
 	{
 		bo->setURL(s);
 		mapCenter->reposition();
+		xelection.update();
 		ensureSelectionVisible();
 	}
 }
@@ -1915,6 +1928,7 @@
 	{
 		bo->setHeading(s);
 		mapCenter->reposition();
+		xelection.update();
 		ensureSelectionVisible();
 	}
 }
@@ -1927,6 +1941,7 @@
 	{
 		bo->setVymLink(s);
 		mapCenter->reposition();
+		xelection.update();
 		ensureSelectionVisible();
 	}
 }
@@ -1988,6 +2003,7 @@
 				QString ("Add new branch to %1").arg(getName(bo)));	
 
 			mapCenter->reposition();
+			xelection.update();
 		}
 	}	
 	return newbo;
@@ -2019,6 +2035,7 @@
 				QString ("Add branch before %1").arg(getName(bo)));
 
 			mapCenter->reposition();
+			xelection.update();
 		}
 	}	
 	return newbo;
@@ -2036,7 +2053,8 @@
 		xelection.select (par);
 		ensureSelectionVisible();
 		mapCenter->reposition();
-		mapScene->update();
+		xelection.update();
+		xelection.update();
 		return;
 	}
 	FloatImageObj *fio=xelection.getFloatImage();
@@ -2052,9 +2070,9 @@
 		xelection.unselect();
 		par->removeFloatImage(fio);
 		xelection.select (par);
+		mapCenter->reposition();
+		xelection.update();
 		ensureSelectionVisible();
-		mapCenter->reposition();
-		mapScene->update();
 		return;
 	}
 }
@@ -2064,6 +2082,16 @@
 	return xelection.single();
 }
 
+BranchObj* MapEditor::getSelectedBranch()
+{
+	return xelection.getBranch();
+}
+
+FloatImageObj* MapEditor::getSelectedFloatImage()
+{
+	return xelection.getFloatImage();
+}
+
 void MapEditor::unselect()
 {
 	xelection.unselect();
@@ -2083,6 +2111,7 @@
 	{
 		xelection.unselect();
 		xelection.select(lmo);
+		xelection.update();
 		ensureSelectionVisible();
 		return true;
 	} 
@@ -2097,7 +2126,10 @@
 void MapEditor::selectInt (LinkableMapObj *lmo)
 {
 	if (lmo && xelection.single()!= lmo)
+	{
 		xelection.select(lmo);
+		xelection.update();
+	}	
 }
 
 void MapEditor::selectNextBranchInt()
@@ -2311,6 +2343,7 @@
 				{
 					bo=par->getLastBranch();
 					xelection.select(bo);
+					xelection.update();
 					ensureSelectionVisible();
 				}
 			}	
@@ -2323,6 +2356,7 @@
 					xelection.type() == FloatImage)
 				{
 					xelection.select(par);
+					xelection.update();
 					ensureSelectionVisible();
 				}
 			} else
@@ -2333,6 +2367,7 @@
 					if (bo) 
 					{
 						xelection.select(bo);
+						xelection.update();
 						ensureSelectionVisible();
 					}
 				}
@@ -2360,6 +2395,7 @@
 				if (bo)
 				{
 					xelection.select(bo);
+					xelection.update();
 					ensureSelectionVisible();
 				}
 			}
@@ -2372,6 +2408,7 @@
 					xelection.type() == FloatImage)
 				{
 					xelection.select(par);
+					xelection.update();
 					ensureSelectionVisible();
 				}
 			} else
@@ -2382,6 +2419,7 @@
 					if (bo) 
 					{
 						xelection.select(bo);
+						xelection.update();
 						ensureSelectionVisible();
 					}
 				}
@@ -2401,6 +2439,7 @@
 		bo2=par->getFirstBranch();
 		if (bo2) {
 			xelection.select(bo2);
+			xelection.update();
 			ensureSelectionVisible();
 		}
 	}		
@@ -2418,6 +2457,7 @@
 		if (bo2) 
 		{
 			xelection.select(bo2);
+			xelection.update();
 			ensureSelectionVisible();
 		}
 	}		
@@ -2444,7 +2484,7 @@
 	}
 }	
 
-void MapEditor::setMapBackgroundImage (const QString &fn)
+void MapEditor::setMapBackgroundImage (const QString &fn)	//FIXME missing savestate
 {
 	QColor oldcol=mapScene->backgroundBrush().color();
 	/*
@@ -2455,7 +2495,6 @@
 		QString ("setMapBackgroundImage (%1)").arg(col.name()),
 		QString("Set background color of map to %1").arg(col.name()));
 	*/	
-	cout << "Trying to load "<<fn.ascii()<<endl;//FIXME
 	QBrush brush;
 	brush.setTextureImage (QPixmap (fn));
 	mapScene->setBackgroundBrush(brush);
@@ -2550,6 +2589,7 @@
 			QString("%1 (\"%2\")").arg(r).arg(f),
 			QString("Toggling standard flag \"%1\" of %2").arg(f).arg(getName(bo)));
 		bo->toggleStandardFlag (f,mainWindow->useFlagGroups());
+		xelection.update();
 	}
 }
 
@@ -2715,6 +2755,7 @@
 		QFileDialog *fd=new QFileDialog( this,vymName+" - " +tr("Link to another map"));
 		fd->setFilters (filters);
 		fd->setCaption(vymName+" - " +tr("Link to another map"));
+		fd->setDirectory (lastFileDir);
 		if (! bo->getVymLink().isEmpty() )
 			fd->selectFile( bo->getVymLink() );
 		fd->show();
@@ -2722,6 +2763,7 @@
 		QString fn;
 		if ( fd->exec() == QDialog::Accepted )
 		{
+			lastFileDir=QDir (fd->directory().path());
 			saveState(
 				bo,
 				"setVymLink (\""+bo->getVymLink()+"\")",
@@ -2892,8 +2934,22 @@
 	}
 }
 
+void MapEditor::ensureSelectionVisible()
+{
+	LinkableMapObj *lmo=xelection.single();
+	if (lmo) ensureVisible (lmo->getBBox() );
+	
+}
+
+void MapEditor::updateSelection()
+{
+	// Tell selection to update geometries
+	xelection.update();
+}
+
 void MapEditor::updateActions()
 {
+	// Tell mainwindow to update states of actions
 	mainWindow->updateActions();
 	// TODO maybe don't update if blockReposition is set
 }
@@ -3048,7 +3104,36 @@
 		QString("Set link color to %1").arg(col.name())
 	);
 	setMapDefLinkColor( col );
-
+}
+
+void MapEditor::selectMapSelectionColor()
+{
+	QColor col = QColorDialog::getColor( defLinkColor, this );
+	setSelectionColor (col);
+}
+
+void MapEditor::setSelectionColorInt (QColor col)
+{
+	if ( !col.isValid() ) return;
+	xelection.setColor (col);
+}
+
+void MapEditor::setSelectionColor(QColor col)
+{
+	if ( !col.isValid() ) return;
+	saveState (
+		mapCenter,
+		QString("setSelectionColor (%1)").arg(xelection.getColor().name()),
+		mapCenter,
+		QString("setSelectionColor (%1)").arg(col.name()),
+		QString("Set color of selection box to %1").arg(col.name())
+	);
+	setSelectionColorInt (col);
+}
+
+QColor MapEditor::getSelectionColor()
+{
+	return xelection.getColor();
 }
 
 bool MapEditor::scrollBranch()
@@ -3240,7 +3325,7 @@
 	}
 }
 
-void MapEditor::setFrame(const FrameType &t)	// FIXME missing saveState
+void MapEditor::setFrameType(const FrameType &t)	// FIXME missing saveState
 {
 	BranchObj *bo=xelection.getBranch();
 	if (bo)
@@ -3251,6 +3336,20 @@
 	}
 }
 
+void MapEditor::setFramePenColor(const QColor &c)	// FIXME missing saveState
+{
+	BranchObj *bo=xelection.getBranch();
+	if (bo)
+		bo->setFramePenColor (c);
+}
+
+void MapEditor::setFrameBrushColor(const QColor &c)	// FIXME missing saveState
+{
+	BranchObj *bo=xelection.getBranch();
+	if (bo)
+		bo->setFrameBrushColor (c);
+}
+
 void MapEditor::setIncludeImagesVer(bool b)	
 {
 	BranchObj *bo=xelection.getBranch();
@@ -3455,12 +3554,6 @@
 	*/
 }
 
-void MapEditor::ensureSelectionVisible()
-{
-	LinkableMapObj *lmo=xelection.single();
-	if (lmo) ensureVisible (lmo->getBBox() );
-}
-
 void MapEditor::contextMenuEvent ( QContextMenuEvent * e )
 {
 	// Lineedits are already closed by preceding
@@ -3542,7 +3635,7 @@
 	
 	e->accept();
 
-	//Take care of clickdesystem flags _or_ modifier modes
+	//Take care of  system flags _or_ modifier modes
 	//
 	if (lmo && (typeid(*lmo)==typeid(BranchObj) ||
 		typeid(*lmo)==typeid(MapCenterObj) ))
@@ -3568,12 +3661,12 @@
 				mainWindow->windowToggleNoteEditor();
 			else if (foname=="hideInExport")		
 				toggleHideExport();
+			xelection.update();	
 			return;	
 		} 
 	} 
-	// No system flag clicked, take care of modmodes
-
-	// Special case: CTRL is pressed
+
+	// No system flag clicked, take care of modmodes (CTRL-Click)
 	if (e->state() & Qt::ControlModifier)
 	{
 		if (mainWindow->getModMode()==ModModeColor)
@@ -3604,10 +3697,13 @@
 				return;
 			} 
 		}
-	}
+	}	// End of modmodes
+
     if (lmo) 
 	{	
+		// Select the clicked object
 		selectInt (lmo);
+
 		// Left Button	    Move Branches
 		if (e->button() == Qt::LeftButton )
 		{
@@ -3642,6 +3738,7 @@
 			if (e->button() == Qt::MidButton )
 				toggleScroll();
 		updateActions();
+		xelection.update();
 	} else 
 	{ // No MapObj found, we are on the scene itself
 		// Left Button	    move Pos of sceneView
@@ -3690,6 +3787,7 @@
 			fio->move   (p.x() -movingObj_start.x(), p.y()-movingObj_start.y() );		
 			fio->setRelPos();
 			fio->updateLink(); //no need for reposition, if we update link here
+			xelection.update();
 
 			// Relink float to new mapcenter or branch, if shift is pressed	
 			// Only relink, if selection really has a new parent
@@ -3716,12 +3814,9 @@
 					fio->getParObj()->requestReposition();
 					mapCenter->reposition();
 
-					cout << "current relPos="<<movingObj_orgRelPos<<endl;	// FIXME testing
 					linkTo (lmo->getSelectString());
-					cout << "setting movingObj\n";
-					movingObj=lmosel;
-					movingObj_orgRelPos=lmosel->getRelPos();	
-					cout <<"ok 0\n";
+					//movingObj=lmosel;
+					//movingObj_orgRelPos=lmosel->getRelPos();	
 
 					mapCenter->reposition();
 				}	
@@ -3777,6 +3872,7 @@
 				lmosel->reposition();	
 			} // depth>0
 
+			xelection.update();
 		} // no FloatImageObj
 
 		scene()->update();
@@ -3945,6 +4041,7 @@
 			// Draw the original link, before selection was moved around
 			mapCenter->reposition();
 		}
+		xelection.update();
 		// Finally resize scene, if needed
 		scene()->update();
 		movingObj=NULL;		
diff -r 658ad3bc0c8a -r dfbc371b7280 mapeditor.h
--- a/mapeditor.h	Sat Mar 31 09:28:27 2007 +0000
+++ b/mapeditor.h	Sat Mar 31 09:28:27 2007 +0000
@@ -1,7 +1,7 @@
 #ifndef MAPEDITOR_H
 #define MAPEDITOR_H
 
-#include <QBuffer>
+//#include <QBuffer>
 #include <QGraphicsView>
 
 #include "mapcenterobj.h"
@@ -100,10 +100,12 @@
     BranchObj* addNewBranch(int);			// pos allows to add above/below selection
     BranchObj* addNewBranchBefore();		// insert and make selection its
     void deleteSelection();
-	LinkableMapObj* getSelection();	// returns selection
-	void unselect();				// before changing current noteedit
-	void reselect();				// after  changing current noteedit
-	bool select(const QString &);	// Select by string
+	LinkableMapObj* getSelection();			// returns selection
+	BranchObj* getSelectedBranch();			// returns selected branch or NULL
+	FloatImageObj* getSelectedFloatImage();	// returns selected branch or NULL
+	void unselect();						// before changing current noteedit
+	void reselect();						// after  changing current noteedit
+	bool select(const QString &);			// Select by string
 	QString getSelectString();
 private:	
 	void selectInt(LinkableMapObj*);	
@@ -143,6 +145,8 @@
 	void deleteKeepChilds();				// remove but keep childs
 	void deleteChilds();					// remove childs
 	void editMapInfo();						// dialog to enter author, ...
+	void ensureSelectionVisible();		
+	void updateSelection();					// update geometry of selection
 	void updateActions();					// update e.g. format buttons
 	void updateNoteFlag();					// when TextEditor changes
 	void setMapAuthor (const QString &);
@@ -160,6 +164,12 @@
 	int getMapDefXLinkWidth();
 	void toggleMapLinkColorHint();			// after changing linkStyles
     void selectMapLinkColor();
+    void selectMapSelectionColor();
+private:	
+    void setSelectionColorInt(QColor);
+public:	
+    void setSelectionColor(QColor);
+    QColor getSelectionColor();
 	bool scrollBranch();
 	bool unscrollBranch();
     void toggleScroll();
@@ -172,7 +182,9 @@
 	void saveFloatImageInt (FloatImageObj*, const QString &, const QString &);
 public:	
 	void saveFloatImage ();
-	void setFrame(const FrameType &);
+	void setFrameType(const FrameType &);
+	void setFramePenColor (const QColor &);
+	void setFrameBrushColor (const QColor &);
 	void setIncludeImagesVer(bool);
 	void setIncludeImagesHor(bool);
 	void setHideLinkUnselected (bool);
@@ -187,7 +199,6 @@
 											// set /mainwindo/showTestMenu=true...
 
 protected:
-	void ensureSelectionVisible();		
 	virtual void contextMenuEvent ( QContextMenuEvent *e );
     virtual void keyPressEvent(QKeyEvent*);
     virtual void keyReleaseEvent(QKeyEvent*);
diff -r 658ad3bc0c8a -r dfbc371b7280 ornamentedobj.cpp
--- a/ornamentedobj.cpp	Sat Mar 31 09:28:27 2007 +0000
+++ b/ornamentedobj.cpp	Sat Mar 31 09:28:27 2007 +0000
@@ -31,9 +31,10 @@
 
 OrnamentedObj::~OrnamentedObj()
 {
-    delete (heading);
-	delete (systemFlags);
-	delete (standardFlags);
+    delete heading;
+	delete systemFlags;
+	delete standardFlags;
+	delete frame;
 }
 
 
@@ -54,6 +55,8 @@
 	standardFlags->clone(standardFlagsDefault);
 	standardFlags->setName ("standardFlags");
 
+	frame = new FrameObj (scene);
+
 	hideExport=false;
 	hidden=false;
 
@@ -103,6 +106,56 @@
     return heading->getColor();
 }
 
+FrameType OrnamentedObj::getFrameType()
+{
+	return frame->getFrameType();
+}
+
+void OrnamentedObj::setFrameType(const FrameType &t)
+{
+	frame->setFrameType(t);
+	if (t == NoFrame)
+		linkpos=LinkBottom;
+	else	
+		linkpos=LinkMiddle;
+
+	calcBBoxSize();
+	positionBBox();
+	requestReposition();
+}
+
+void OrnamentedObj::setFrameType(const QString &t)
+{
+	frame->setFrameType(t);
+	if (frame->getFrameType() == NoFrame)
+		linkpos=LinkBottom;
+	else	
+		linkpos=LinkMiddle;
+
+	calcBBoxSize();
+	positionBBox();
+	requestReposition();
+}
+
+void OrnamentedObj::setFramePenColor(QColor col)
+{
+	frame->setPenColor (col);
+}
+
+QColor OrnamentedObj::getFramePenColor()
+{
+	return frame->getPenColor ();
+}
+
+void OrnamentedObj::setFrameBrushColor(QColor col)
+{
+	frame->setBrushColor (col);
+}
+
+QColor OrnamentedObj::getFrameBrushColor()
+{
+	return frame->getBrushColor ();
+}
 
 void OrnamentedObj::positionContents()
 {
diff -r 658ad3bc0c8a -r dfbc371b7280 ornamentedobj.h
--- a/ornamentedobj.h	Sat Mar 31 09:28:27 2007 +0000
+++ b/ornamentedobj.h	Sat Mar 31 09:28:27 2007 +0000
@@ -1,6 +1,7 @@
 #ifndef ORNAMENTEDOBJ_H
 #define ORNAMENTEDOBJ_H
 
+#include "frameobj.h"
 #include "linkablemapobj.h"
 
 class OrnamentedObj:public LinkableMapObj {
@@ -16,6 +17,15 @@
 	virtual void setLinkColor();			// sets color according to colorhint, overloaded
 	virtual void setColor(QColor);			// set the color of text and link
 	QColor getColor ();						// get color of heading
+
+	virtual FrameType getFrameType ();
+	virtual void setFrameType (const FrameType &);
+	virtual void setFrameType (const QString &);
+	virtual void setFramePenColor (QColor);
+	virtual QColor getFramePenColor ();
+	virtual void setFrameBrushColor (QColor);
+	virtual QColor getFrameBrushColor ();
+
     virtual void positionContents();
     virtual void move   (double,double);
     virtual void move   (QPointF);
@@ -53,6 +63,7 @@
 	bool isNoteInEditor;			// true if TextEditor has this note
 	FlagRowObj *systemFlags;		// System Flags
 	FlagRowObj *standardFlags;		// Standard Flags
+	FrameObj *frame;				// frame around object
 	QRectF ornamentsBBox;			// bbox of flags and heading
 	QString url;					// url to external doc
 	QString vymLink;				// path to another map
diff -r 658ad3bc0c8a -r dfbc371b7280 texteditor.cpp
--- a/texteditor.cpp	Sat Mar 31 09:28:27 2007 +0000
+++ b/texteditor.cpp	Sat Mar 31 09:28:27 2007 +0000
@@ -500,7 +500,7 @@
 {
     ce->accept();	// TextEditor can be reopened with show()
     showwithmain=false;
-	emit (textEditorClosed() );
+	emit (windowClosed() );
     return;
 }
 
diff -r 658ad3bc0c8a -r dfbc371b7280 texteditor.h
--- a/texteditor.h	Sat Mar 31 09:28:27 2007 +0000
+++ b/texteditor.h	Sat Mar 31 09:28:27 2007 +0000
@@ -44,7 +44,7 @@
 
 signals:
 	void textHasChanged();
-	void textEditorClosed();
+	void windowClosed();
 	void fontFamilyHasChanged();
 	void fontSizeHasChanged();
 	
diff -r 658ad3bc0c8a -r dfbc371b7280 version.h
--- a/version.h	Sat Mar 31 09:28:27 2007 +0000
+++ b/version.h	Sat Mar 31 09:28:27 2007 +0000
@@ -4,8 +4,8 @@
 #include <QString>
 
 #define __VYM_NAME "VYM"
-#define __VYM_VERSION "1.8.69"
-#define __VYM_BUILD_DATE "March 21, 2007"
+#define __VYM_VERSION "1.8.70"
+#define __VYM_BUILD_DATE "March 31, 2007"
 
 
 bool checkVersion(const QString &);