1.1 --- a/findresultitem.cpp	Mon Mar 22 15:37:23 2010 +0000
     1.2 +++ b/findresultitem.cpp	Tue Mar 30 17:30:39 2010 +0000
     1.3 @@ -9,7 +9,9 @@
     1.4      parentItem = parent;
     1.5      itemData = data;
     1.6  	orgID=-1;
     1.7 +	orgIndex=-1;
     1.8  	orgModel=NULL;
     1.9 +	itemData.append(QVariant("empty"));
    1.10  }
    1.11  
    1.12  FindResultItem::~FindResultItem()
    1.13 @@ -53,7 +55,6 @@
    1.14      return 0;
    1.15  }
    1.16  
    1.17 -
    1.18  bool FindResultItem::insertChildren(int position, int count, int columns)
    1.19  {
    1.20      if (position < 0 || position > childItems.size())
    1.21 @@ -127,11 +128,21 @@
    1.22  	orgID=ti->getID();
    1.23  }
    1.24  
    1.25 -uint FindResultItem::getOrgID()
    1.26 +int FindResultItem::getOriginalID()
    1.27  {
    1.28  	return orgID;
    1.29  }
    1.30  
    1.31 +void FindResultItem::setOriginalIndex(int i)
    1.32 +{
    1.33 +	orgIndex=i;
    1.34 +}
    1.35 +
    1.36 +int FindResultItem::getOriginalIndex()
    1.37 +{
    1.38 +	return orgIndex;
    1.39 +}
    1.40 +
    1.41  VymModel* FindResultItem::getOrgModel()
    1.42  {
    1.43  	return orgModel;
     2.1 --- a/findresultitem.h	Mon Mar 22 15:37:23 2010 +0000
     2.2 +++ b/findresultitem.h	Tue Mar 30 17:30:39 2010 +0000
     2.3 @@ -27,7 +27,9 @@
     2.4      int childNumber() const;
     2.5      bool setData(int column, const QVariant &value);
     2.6  	void setOriginal (TreeItem *ti);
     2.7 -	uint getOrgID();
     2.8 +	int getOriginalID();
     2.9 +	void setOriginalIndex(int i);
    2.10 +	int getOriginalIndex ();
    2.11  	VymModel* getOrgModel();
    2.12  
    2.13  private:
    2.14 @@ -35,7 +37,8 @@
    2.15      QVector<QVariant> itemData;
    2.16      FindResultItem *parentItem;
    2.17  
    2.18 -	uint orgID;
    2.19 +	int orgID;
    2.20 +	int orgIndex;
    2.21  	VymModel *orgModel;
    2.22  };
    2.23  
     3.1 --- a/findresultmodel.cpp	Mon Mar 22 15:37:23 2010 +0000
     3.2 +++ b/findresultmodel.cpp	Tue Mar 30 17:30:39 2010 +0000
     3.3 @@ -180,7 +180,7 @@
     3.4      return result;
     3.5  }
     3.6  
     3.7 -FindResultItem *FindResultModel::getItem(const QModelIndex &index) const
     3.8 +FindResultItem* FindResultModel::getItem(const QModelIndex &index) const
     3.9  {
    3.10      if (index.isValid()) {
    3.11          FindResultItem *item = static_cast<FindResultItem*>(index.internalPointer());
    3.12 @@ -189,58 +189,80 @@
    3.13      return rootItem;
    3.14  }
    3.15  
    3.16 -FindResultItem *FindResultModel::findTreeItem(TreeItem *ti)
    3.17 +FindResultItem *FindResultModel::findTreeItem(TreeItem *)
    3.18  {
    3.19 +	return NULL;	// FIXME-3 not used so far
    3.20  }
    3.21  
    3.22 -void FindResultModel::addItem (TreeItem *ti)
    3.23 +FindResultItem*  FindResultModel::addItem (TreeItem *ti)
    3.24  {
    3.25 +	FindResultItem *ni=NULL;
    3.26  	if (ti)
    3.27  	{
    3.28 -		QModelIndex ix (index (rootItem));
    3.29 +		QModelIndex parix (index (rootItem));
    3.30  		
    3.31 -		if (!insertRow(ix.row()+1, ix.parent()))
    3.32 -			return;
    3.33 +		emit (layoutAboutToBeChanged() );
    3.34  
    3.35 -		for (int column = 0; column < columnCount(ix.parent()); ++column) 
    3.36 +		int n=rowCount (parix);
    3.37 +		beginInsertRows (parix,n,n);
    3.38 +		if (rootItem->insertChildren (n,1,0) )
    3.39  		{
    3.40 -			QModelIndex child = index(ix.row()+1, column, ix.parent());
    3.41 -			setData(child, QVariant(ti->getHeading()), Qt::EditRole);
    3.42 -			getItem(child)->setOriginal (ti);
    3.43 +			QModelIndex ix=index(n,0,QModelIndex());
    3.44 +			setData (ix,QVariant(ti->getHeading()),Qt::EditRole);
    3.45 +			ni=getItem(ix);
    3.46 +			ni->setOriginal (ti);
    3.47  		}
    3.48 +		endInsertRows ();
    3.49 +
    3.50 +		emit (layoutChanged() );
    3.51  	}
    3.52 +	return ni;
    3.53  }
    3.54  
    3.55 -void FindResultModel::addItem (const QString &s)
    3.56 +FindResultItem*  FindResultModel::addSubItem (FindResultItem *parent,const QString &s, TreeItem *pi, int i)
    3.57  {
    3.58 -	if (!s.isEmpty())
    3.59 +	FindResultItem *ni=NULL;
    3.60 +	if (pi && parent)
    3.61  	{
    3.62 -		QModelIndex ix ( index (rootItem));
    3.63 +		QModelIndex parix ( index (parent));
    3.64  		
    3.65 -		if (!insertRow(ix.row()+1, ix.parent()))
    3.66 -			return;
    3.67 +		emit (layoutAboutToBeChanged() );
    3.68  
    3.69 -		for (int column = 0; column < columnCount(ix.parent()); ++column) {
    3.70 -			QModelIndex child = index(ix.row()+1, column, ix.parent());
    3.71 -			setData(child, QVariant(s), Qt::EditRole);
    3.72 +		int n=rowCount (parix);
    3.73 +		beginInsertRows (parix,n,n);
    3.74 +
    3.75 +		QModelIndex ix;
    3.76 +		if (parent->insertChildren (n,1,0))
    3.77 +		{
    3.78 +			ix=index(n,0,parix);
    3.79 +			setData (ix,QVariant(s),Qt::EditRole);
    3.80 +			ni=getItem(ix);
    3.81 +			ni->setOriginal (pi);
    3.82 +			ni->setOriginalIndex (i);
    3.83  		}
    3.84 +		endInsertRows ();
    3.85 +		emit (layoutChanged() );
    3.86  	}
    3.87 +	return ni;
    3.88  }
    3.89  
    3.90 -void FindResultModel::addSubItem (TreeItem *parent,const QString &s, TreeItem *ti, int i)
    3.91 +void FindResultModel::setSearchString( const QString &s)
    3.92  {
    3.93 -	if (ti)
    3.94 -	{
    3.95 -		QModelIndex ix ( index (rootItem));
    3.96 -		
    3.97 -		if (!insertRow(ix.row()+1, ix.parent()))
    3.98 -			return;
    3.99 -
   3.100 -		for (int column = 0; column < columnCount(ix.parent()); ++column) {
   3.101 -			QModelIndex child = index(ix.row()+1, column, ix.parent());
   3.102 -			setData(child, QVariant("Note: "+ti->getHeading()), Qt::EditRole);
   3.103 -			getItem(child)->setOriginal (ti);
   3.104 -		}
   3.105 -	}
   3.106 +	searchString=s;
   3.107  }
   3.108  
   3.109 +QString FindResultModel::getSearchString()
   3.110 +{
   3.111 +	return searchString;
   3.112 +}
   3.113 +
   3.114 +void FindResultModel::setSearchFlags( QTextDocument::FindFlags f)
   3.115 +{
   3.116 +	searchFlags=f;
   3.117 +}
   3.118 +
   3.119 +QTextDocument::FindFlags FindResultModel::getSearchFlags()
   3.120 +{
   3.121 +	return searchFlags;
   3.122 +}
   3.123 +
     4.1 --- a/findresultmodel.h	Mon Mar 22 15:37:23 2010 +0000
     4.2 +++ b/findresultmodel.h	Tue Mar 30 17:30:39 2010 +0000
     4.3 @@ -3,6 +3,7 @@
     4.4  
     4.5  #include <QAbstractItemModel>
     4.6  #include <QModelIndex>
     4.7 +#include <QTextDocument>
     4.8  #include <QVariant>
     4.9  
    4.10  class FindResultItem;
    4.11 @@ -44,16 +45,23 @@
    4.12      bool removeRows(int position, int rows,
    4.13                      const QModelIndex &parent = QModelIndex());
    4.14  
    4.15 -    FindResultItem *getItem(const QModelIndex &index) const;
    4.16 -	FindResultItem *findTreeItem (TreeItem *ti);
    4.17 +    FindResultItem* getItem(const QModelIndex &index) const;
    4.18 +	FindResultItem* findTreeItem (TreeItem *ti);
    4.19  
    4.20 -	void addItem (TreeItem *ti);
    4.21 -	void addItem (const QString &s);
    4.22 -	void addSubItem (TreeItem *parent,const QString &s, TreeItem *ti, int i);
    4.23 +	FindResultItem* addItem (TreeItem *ti);
    4.24 +	FindResultItem* addSubItem (FindResultItem *parent,const QString &s, TreeItem *pi, int i);
    4.25 +
    4.26 +	void setSearchString( const QString &s);
    4.27 +	QString getSearchString();
    4.28 +	void setSearchFlags( QTextDocument::FindFlags f);
    4.29 +	QTextDocument::FindFlags getSearchFlags();
    4.30  
    4.31  private:
    4.32  
    4.33      FindResultItem *rootItem;
    4.34 +
    4.35 +	QString searchString;
    4.36 +	QTextDocument::FindFlags searchFlags;
    4.37  };
    4.38  
    4.39  #endif
     5.1 --- a/findresultwidget.cpp	Mon Mar 22 15:37:23 2010 +0000
     5.2 +++ b/findresultwidget.cpp	Tue Mar 30 17:30:39 2010 +0000
     5.3 @@ -39,6 +39,8 @@
     5.4  	// Selection
     5.5  	connect (view->selectionModel(),SIGNAL (selectionChanged (QItemSelection,QItemSelection)),
     5.6  		this, SLOT (updateSelection (QItemSelection,QItemSelection)));
     5.7 +
     5.8 +	connect (resultsModel, SIGNAL(layoutChanged() ), view, SLOT (expandAll() ));	
     5.9  }
    5.10  
    5.11  void FindResultWidget::addItem (TreeItem *ti)
    5.12 @@ -87,14 +89,6 @@
    5.13  	return resultsModel;
    5.14  }
    5.15  
    5.16 -void FindResultWidget::addResult (const QString &category, TreeItem *ti)
    5.17 -{
    5.18 -	if (!category.isEmpty())
    5.19 -		addItem (category);
    5.20 -	else	
    5.21 -		addItem (model->getSelectedItem());
    5.22 -}
    5.23 -
    5.24  void FindResultWidget::popup()
    5.25  {
    5.26  	show();
    5.27 @@ -112,11 +106,15 @@
    5.28  	foreach (ix,newsel.indexes() )
    5.29  	{
    5.30  		FindResultItem *fri= static_cast<FindResultItem*>(ix.internalPointer());
    5.31 -		if (fri->getOrgModel() && fri->getOrgID()>0)
    5.32 +		if (fri->getOrgModel() && fri->getOriginalID()>0)
    5.33  		{
    5.34 -			TreeItem *ti=fri->getOrgModel()->findID(fri->getOrgID() );
    5.35 +			TreeItem *ti=fri->getOrgModel()->findID(fri->getOriginalID() );
    5.36  			if (ti)
    5.37 +			{
    5.38  				fri->getOrgModel()->select (ti);
    5.39 +				int i=fri->getOriginalIndex();
    5.40 +				if (i>=0) emit (noteSelected (resultsModel->getSearchString(),i));
    5.41 +			}	
    5.42  		}
    5.43  	}
    5.44  }
     6.1 --- a/findresultwidget.h	Mon Mar 22 15:37:23 2010 +0000
     6.2 +++ b/findresultwidget.h	Tue Mar 30 17:30:39 2010 +0000
     6.3 @@ -20,7 +20,6 @@
     6.4  	FindResultModel* getResultModel();
     6.5  	void addItem (TreeItem *ti);
     6.6  	void addItem (const QString &s);
     6.7 -	void addResult (const QString &category, TreeItem *ti);
     6.8  
     6.9  public slots:	
    6.10  	void popup();
    6.11 @@ -29,6 +28,7 @@
    6.12  
    6.13  signals:
    6.14  	void hideFindResultWidget();
    6.15 +	void noteSelected (QString , int );
    6.16  
    6.17  private:
    6.18  	VymModel *model;
     7.1 --- a/main.cpp	Mon Mar 22 15:37:23 2010 +0000
     7.2 +++ b/main.cpp	Tue Mar 30 17:30:39 2010 +0000
     7.3 @@ -72,13 +72,15 @@
     7.4  
     7.5  	// Reading and initializing options commandline options
     7.6  	options.add ("debug", Option::Switch, "d", "debug");
     7.7 -	options.add ("version", Option::Switch, "v","version");
     7.8 +	options.add ("help", Option::Switch, "h", "help");
     7.9  	options.add ("local", Option::Switch, "l", "local");
    7.10  	options.add ("name", Option::String, "n", "name");
    7.11 -	options.add ("help", Option::Switch, "h", "help");
    7.12  	options.add ("quit", Option::Switch, "q", "quit");
    7.13  	options.add ("run", Option::String, "r", "run");
    7.14 +	options.add ("shortcuts", Option::Switch, "s", "shortcuts");
    7.15 +	options.add ("shortcutsLaTeX", Option::Switch, "sl", "shortcutsLaTeX");
    7.16  	options.add ("test", Option::String, "t", "test");
    7.17 +	options.add ("version", Option::Switch, "v","version");
    7.18  	options.setHelpText (
    7.19  		"VYM - View Your Mind\n"
    7.20  		"--------------------\n\n"
     8.1 --- a/mainwindow.cpp	Mon Mar 22 15:37:23 2010 +0000
     8.2 +++ b/mainwindow.cpp	Tue Mar 30 17:30:39 2010 +0000
     8.3 @@ -23,6 +23,7 @@
     8.4  #include "settings.h"
     8.5  #include "shortcuts.h"
     8.6  #include "texteditor.h"
     8.7 +#include "treeeditor.h"
     8.8  #include "warningdialog.h"
     8.9  #include "xlinkitem.h"
    8.10  
    8.11 @@ -138,6 +139,8 @@
    8.12  	dw->setObjectName ("FindResultWidget");
    8.13  	dw->hide();	
    8.14  	addDockWidget (Qt::RightDockWidgetArea,dw);
    8.15 +	connect (findResultWidget, SIGNAL (noteSelected (QString, int)),this, SLOT (selectInNoteEditor (QString, int)));
    8.16 +
    8.17  
    8.18  	// Satellite windows //////////////////////////////////////////
    8.19  	// history window
    8.20 @@ -234,7 +237,8 @@
    8.21  	setupSettingsActions();
    8.22  	setupContextMenus();
    8.23  	setupMacros();
    8.24 -	if (debug) switchboard.print();
    8.25 +	if (options.isOn("shortcuts")) switchboard.print();
    8.26 +	if (options.isOn("shortcutsLaTeX")) switchboard.printLaTeX();
    8.27  
    8.28  	if (settings.value( "/mainwindow/showTestMenu",false).toBool()) setupTestActions();
    8.29  	setupHelpActions();
    8.30 @@ -628,9 +632,12 @@
    8.31  
    8.32  	// Shortcut to add attribute
    8.33  	a= new QAction(tr( "Add attribute" ), this);
    8.34 -	a->setShortcut ( Qt::Key_Q);	
    8.35 -	a->setShortcutContext (Qt::WindowShortcut);
    8.36 -	switchboard.addConnection(a,tr("Edit","Shortcut group"));
    8.37 +	if (settings.value( "/mainwindow/showTestMenu",false).toBool() )
    8.38 +	{
    8.39 +		a->setShortcut ( Qt::Key_Q);	
    8.40 +		a->setShortcutContext (Qt::WindowShortcut);
    8.41 +		switchboard.addConnection(a,tr("Edit","Shortcut group"));
    8.42 +	}
    8.43  	addAction (a);
    8.44  	connect( a, SIGNAL( triggered() ), this, SLOT( editAddAttribute() ) );
    8.45  	actionAddAttribute= a;
    8.46 @@ -719,7 +726,7 @@
    8.47  
    8.48  	a = new QAction(QPixmap(iconPath+"up.png" ), tr( "Move up","Edit menu" ), this);
    8.49  	a->setStatusTip ( tr( "Move branch up" ) );
    8.50 -	a->setShortcut (Qt::Key_PageUp );				// Move branch up
    8.51 +	a->setShortcut (Qt::Key_PageUp );				// Move branch up	//FIXME-2 If already on top, GraphicsView scrolls up, probably because this action is disabled?!
    8.52  	a->setEnabled (false);
    8.53  	switchboard.addConnection(a,tr("Edit","Shortcut group"));
    8.54  	tb->addAction (a);
    8.55 @@ -1224,7 +1231,8 @@
    8.56  	connect( a, SIGNAL( triggered() ), this, SLOT(windowToggleNoteEditor() ) );
    8.57  	actionViewToggleNoteEditor=a;
    8.58  
    8.59 -	a = new QAction(QPixmap(), tr( "Show tree editor","View action" ),this);
    8.60 +	// Original icon is "category" from KDE
    8.61 +	a = new QAction(QPixmap(iconPath+"treeeditor.png"), tr( "Show tree editor","View action" ),this);
    8.62  	a->setStatusTip ( tr( "Show tree editor" ));
    8.63  	a->setShortcut ( Qt::CTRL + Qt::Key_T );	// Toggle Tree Editor // FIXME-3 originally: color subtree
    8.64  	switchboard.addConnection(a,tr("View shortcuts","Shortcut group"));
    8.65 @@ -2730,13 +2738,12 @@
    8.66  void Main::editFindNext(QString s)  
    8.67  {
    8.68  	Qt::CaseSensitivity cs=Qt::CaseInsensitive;
    8.69 -	QTextCursor cursor;
    8.70  	VymModel *m=currentModel();
    8.71  	if (m) 
    8.72  	{
    8.73  		m->findAll (findResultWidget->getResultModel(),s,cs);
    8.74  
    8.75 -		BranchItem *bi=m->findText(s, cs,cursor);
    8.76 +		BranchItem *bi=m->findText(s, cs);
    8.77  		if (bi)
    8.78  		{
    8.79  			findWidget->setStatus (FindWidget::Success);
    8.80 @@ -3636,6 +3643,13 @@
    8.81  	textEditor->setNote (ti->getNoteObj() );
    8.82  }
    8.83  
    8.84 +void Main::selectInNoteEditor(QString s,int i)
    8.85 +{
    8.86 +	// TreeItem is already selected at this time, therefor
    8.87 +	// the note is already in the editor
    8.88 +	textEditor->findText (s,0,i);
    8.89 +}
    8.90 +
    8.91  void Main::changeSelection (VymModel *model, const QItemSelection &newsel, const QItemSelection &oldsel)
    8.92  {
    8.93  	branchPropertyWindow->setModel (model ); //FIXME-3 this used to be called from BranchObj::select(). Maybe use signal now...
    8.94 @@ -3681,6 +3695,10 @@
    8.95  	actionViewToggleNoteEditor->setChecked (textEditor->isVisible());
    8.96  	actionViewToggleHistoryWindow->setChecked (historyWindow->isVisible());
    8.97  	actionViewTogglePropertyWindow->setChecked (branchPropertyWindow->isVisible());
    8.98 +	if ( tabWidget->currentPage())
    8.99 +		actionViewToggleTreeEditor->setChecked (
   8.100 +			vymViews.at(tabWidget->currentIndex())->getTreeEditor()->isVisible()
   8.101 +		);
   8.102  
   8.103  	VymModel  *m =currentModel();
   8.104  	if (m) 
     9.1 --- a/mainwindow.h	Mon Mar 22 15:37:23 2010 +0000
     9.2 +++ b/mainwindow.h	Tue Mar 30 17:30:39 2010 +0000
     9.3 @@ -227,6 +227,7 @@
     9.4  	void windowToggleSmoothPixmap();
     9.5  	void updateNoteFlag();
     9.6  	void updateNoteEditor (QModelIndex index);
     9.7 +	void selectInNoteEditor (QString s, int i);
     9.8  	void changeSelection (VymModel *model,const QItemSelection &newSel, const QItemSelection &delSel);
     9.9  
    9.10  	void updateActions();
    10.1 --- a/mapeditor.cpp	Mon Mar 22 15:37:23 2010 +0000
    10.2 +++ b/mapeditor.cpp	Tue Mar 30 17:30:39 2010 +0000
    10.3 @@ -985,8 +985,10 @@
    10.4  
    10.5  void MapEditor::keyPressEvent(QKeyEvent* e)
    10.6  {
    10.7 -	//qDebug()<<"ME::keyPressed";
    10.8 -	//return;
    10.9 +	if (e->key()==Qt::Key_PageUp || e->key()==Qt::Key_PageDown)
   10.10 +		// Ignore PageUP/Down to avoid scrolling with keys
   10.11 +		return;
   10.12 +
   10.13  	if (e->modifiers() & Qt::ControlModifier)
   10.14  	{
   10.15  		switch (mainWindow->getModMode())
    11.1 --- a/noteobj.cpp	Mon Mar 22 15:37:23 2010 +0000
    11.2 +++ b/noteobj.cpp	Tue Mar 30 17:30:39 2010 +0000
    11.3 @@ -1,9 +1,7 @@
    11.4 -#include <qfile.h>
    11.5 -#include <qtextstream.h>
    11.6 -#include <qmessagebox.h>
    11.7 -#include <qregexp.h>
    11.8 +#include "noteobj.h"
    11.9  
   11.10 -#include "noteobj.h"
   11.11 +#include <QRegExp>
   11.12 +#include <QDebug>
   11.13  
   11.14  /////////////////////////////////////////////////////////////////
   11.15  // NoteObj
   11.16 @@ -51,12 +49,12 @@
   11.17  
   11.18  QString NoteObj::getNoteASCII()
   11.19  {
   11.20 -	return getNoteASCII (QString(""),80);
   11.21 +	return getNoteASCII ("",80);
   11.22  }
   11.23  
   11.24 -QString NoteObj::getNoteASCII(const QString &indent, const int &width)
   11.25 +QString NoteObj::getNoteASCII(QString indent, const int &width)
   11.26  {
   11.27 -	// FIXME-3 make use of width
   11.28 +	if (note.isEmpty()) return note;
   11.29  	QString r=note;
   11.30  
   11.31  	// Remove all <style...> ...</style>
   11.32 @@ -95,7 +93,7 @@
   11.33  	r.replace (rx,indent);
   11.34  	r=indent + r;	// Don't forget first line
   11.35  
   11.36 -/* FIXME-5	wrap text at width
   11.37 +/* FIXME-3	wrap text at width
   11.38  	if (fonthint !="fixed")
   11.39  	{
   11.40  	}
    12.1 --- a/noteobj.h	Mon Mar 22 15:37:23 2010 +0000
    12.2 +++ b/noteobj.h	Tue Mar 30 17:30:39 2010 +0000
    12.3 @@ -21,7 +21,7 @@
    12.4  	void setNote (const QString&);
    12.5  	QString getNote() const;
    12.6  	QString getNoteASCII();
    12.7 -	QString getNoteASCII(const QString &indent, const int &width=0);
    12.8 +	QString getNoteASCII(QString igdent, const int &width=0);
    12.9  	QString getNoteOpenDoc();
   12.10  	void setFontHint (const QString&);
   12.11  	QString getFontHint () const;
    13.1 --- a/shortcuts.cpp	Mon Mar 22 15:37:23 2010 +0000
    13.2 +++ b/shortcuts.cpp	Tue Mar 30 17:30:39 2010 +0000
    13.3 @@ -41,3 +41,19 @@
    13.4  		cout <<endl;
    13.5  	}
    13.6  }
    13.7 +
    13.8 +void Switchboard::printLaTeX ()
    13.9 +{
   13.10 +	QString g;
   13.11 +	foreach (g,actions.uniqueKeys())
   13.12 +	{
   13.13 +		cout <<"Group: "<<g.toStdString()<<endl;
   13.14 +		QList <QAction*> values=actions.values(g);
   13.15 +		for (int i=0;i<values.size();++i)
   13.16 +			if (!values.at(i)->shortcut().toString().isEmpty())
   13.17 +				cout<<QString ("  %1& %2\\\\ ") 
   13.18 +					.arg(values.at(i)->text().left(30),30)
   13.19 +					.arg(values.at(i)->shortcut().toString()).toStdString()<<endl;
   13.20 +		cout <<endl;
   13.21 +	}
   13.22 +}
    14.1 --- a/shortcuts.h	Mon Mar 22 15:37:23 2010 +0000
    14.2 +++ b/shortcuts.h	Tue Mar 30 17:30:39 2010 +0000
    14.3 @@ -23,6 +23,7 @@
    14.4      Switchboard ();
    14.5  	void addConnection(QAction *a,const QString &s);
    14.6  	void print();
    14.7 +	void printLaTeX();
    14.8  protected:  
    14.9  	QMultiMap <QString,QAction*> actions;
   14.10  };
    15.1 --- a/texteditor.cpp	Mon Mar 22 15:37:23 2010 +0000
    15.2 +++ b/texteditor.cpp	Tue Mar 30 17:30:39 2010 +0000
    15.3 @@ -232,18 +232,40 @@
    15.4  	setFontHint (note.getFontHint() );
    15.5  }
    15.6  
    15.7 -bool TextEditor::findText(const QString &t, const QTextDocument::FindFlags &flags, QTextCursor &cursor)
    15.8 +bool TextEditor::findText(const QString &t, const QTextDocument::FindFlags &flags)
    15.9  {
   15.10  	if (e->find (t,flags))
   15.11 +		return true;
   15.12 +	else	
   15.13 +		return false;
   15.14 +}
   15.15 +
   15.16 +bool TextEditor::findText(const QString &t, const QTextDocument::FindFlags &flags, int i)
   15.17 +{
   15.18 +	// Position at beginning
   15.19 +	QTextCursor c=e->textCursor();
   15.20 +	c.setPosition (0,QTextCursor::MoveAnchor);
   15.21 +	e->setTextCursor (c);
   15.22 +
   15.23 +	// Search for t
   15.24 +	int j=0;
   15.25 +	while (j<=i)
   15.26  	{
   15.27 -		cursor=e->textCursor();
   15.28 -		return true;
   15.29 -	}	
   15.30 -	else	
   15.31 -	{
   15.32 -		cursor=QTextCursor();
   15.33 -		return false;
   15.34 +		if (!e->find (t,flags)) return false;
   15.35 +		j++;
   15.36  	}
   15.37 +	return true;
   15.38 +
   15.39 +}
   15.40 +
   15.41 +void TextEditor::setTextCursor (const QTextCursor &cursor)
   15.42 +{
   15.43 +	e->setTextCursor (cursor);
   15.44 +}
   15.45 +
   15.46 +QTextCursor TextEditor::getTextCursor()
   15.47 +{
   15.48 +	return e->textCursor();
   15.49  }
   15.50  
   15.51  void TextEditor::setupFileActions()
   15.52 @@ -808,6 +830,11 @@
   15.53  
   15.54  void TextEditor::textAlign( QAction *a )
   15.55  {
   15.56 +	qDebug()<<"TE::textAlign";
   15.57 +	QTextCursor c=e->textCursor();
   15.58 +	c.setPosition (3,QTextCursor::MoveAnchor);
   15.59 +	e->setTextCursor (c);
   15.60 +
   15.61      if ( a == actionAlignLeft )
   15.62  		e->setAlignment( Qt::AlignLeft );
   15.63      else if ( a == actionAlignCenter )
    16.1 --- a/texteditor.h	Mon Mar 22 15:37:23 2010 +0000
    16.2 +++ b/texteditor.h	Tue Mar 30 17:30:39 2010 +0000
    16.3 @@ -28,7 +28,10 @@
    16.4  	NoteObj getNoteObj();
    16.5  	void setNote(const NoteObj ¬e);
    16.6  
    16.7 -	bool findText(const QString &, const QTextDocument::FindFlags &,QTextCursor &cursor); 
    16.8 +	bool findText(const QString &, const QTextDocument::FindFlags &); 
    16.9 +	bool findText(const QString &, const QTextDocument::FindFlags &,int i); 
   16.10 +	void setTextCursor (const QTextCursor & cursor );
   16.11 +	QTextCursor getTextCursor();
   16.12  
   16.13  protected:
   16.14  	void setupFileActions();
    17.1 --- a/version.h	Mon Mar 22 15:37:23 2010 +0000
    17.2 +++ b/version.h	Tue Mar 30 17:30:39 2010 +0000
    17.3 @@ -7,7 +7,7 @@
    17.4  #define __VYM_VERSION "1.13.1"
    17.5  //#define __VYM_CODENAME "Codename: RC-1"
    17.6  #define __VYM_CODENAME "Codename: development version, not for production!"
    17.7 -#define __VYM_BUILD_DATE "2010-03-18"
    17.8 +#define __VYM_BUILD_DATE "2010-03-30"
    17.9  
   17.10  
   17.11  bool checkVersion(const QString &);
    18.1 --- a/vym.changelog	Mon Mar 22 15:37:23 2010 +0000
    18.2 +++ b/vym.changelog	Tue Mar 30 17:30:39 2010 +0000
    18.3 @@ -1,9 +1,22 @@
    18.4 +-------------------------------------------------------------------
    18.5 +Tue Mar 30 19:29:43 CEST 2010 - vym@insilmaril.de
    18.6 +
    18.7 +- Bugfix: Much improved overview of search results, now also for notes
    18.8 +
    18.9 +-------------------------------------------------------------------
   18.10 +Tue Mar 23 22:36:19 CET 2010 - vym@insilmaril.de
   18.11 +
   18.12 +- Feature: Added commandline options to list keyboard shortcuts
   18.13 +- Bugfix: (Regression) Scrolling with PageUp/Down disabled, moving
   18.14 +          branches instead
   18.15 +- Bugfix: update scene after load, required user interaction before
   18.16  -------------------------------------------------------------------
   18.17  Mon Mar 22 08:37:42 CET 2010 - vym@insilmaril.de
   18.18  
   18.19  - Bugfix: Segfault when undoing deleting of MapCenter
   18.20  - Bugfix: Workaround for Qt bug, where cursor of embedded QLineEdits
   18.21            in 2nd tab was not shown
   18.22 +- Bugfix: Icon of TreeEditor now shows correct state
   18.23  
   18.24  -------------------------------------------------------------------
   18.25  Thu Mar 18 12:45:45 CET 2010 - vym@insilmaril.de
    19.1 --- a/vymmodel.cpp	Mon Mar 22 15:37:23 2010 +0000
    19.2 +++ b/vymmodel.cpp	Tue Mar 30 17:30:39 2010 +0000
    19.3 @@ -503,6 +503,9 @@
    19.4  	updateActions();
    19.5  
    19.6  	if (mapEditor) mapEditor->setZoomFactorTarget (zoomFactor);
    19.7 +
    19.8 +	//Update view (scene()->update() is not enough)
    19.9 +	qApp->processEvents();	// Update view (scene()->update() is not enough)
   19.10  	return err;
   19.11  }
   19.12  
   19.13 @@ -1650,22 +1653,41 @@
   19.14  void  VymModel::findAll (FindResultModel *rmodel, QString s, Qt::CaseSensitivity cs)   
   19.15  {
   19.16  	rmodel->clear();
   19.17 +	rmodel->setSearchString (s);
   19.18 +	rmodel->setSearchFlags (0);	//FIXME-2 translate cs to QTextDocument::FindFlag
   19.19  	BranchItem *cur=NULL;
   19.20  	BranchItem *prev=NULL;
   19.21  	nextBranch(cur,prev);
   19.22 +
   19.23 +	FindResultItem *lastParent=NULL;
   19.24  	while (cur) 
   19.25  	{
   19.26 +		lastParent=NULL;
   19.27  		if (cur->getHeading().contains (s,cs))
   19.28 +			lastParent=rmodel->addItem (cur);
   19.29 +		QString n=cur->getNoteASCII();
   19.30 +		int i=0;
   19.31 +		int j=0;
   19.32 +		while ( i>=0)
   19.33  		{
   19.34 -			rmodel->addItem (cur);
   19.35 -		}	
   19.36 -		int i=0;
   19.37 -		while (i>=0)
   19.38 -		{
   19.39 -			i=cur->getNote().indexOf (s,i,cs); //FIXME-2 add subitems to rmodel
   19.40 +			i=n.indexOf (s,i,cs); //FIXME-2 add subitems to rmodel
   19.41  			if (i>=0) 
   19.42  			{
   19.43 -				rmodel->addSubItem (cur,"Note",cur,i);
   19.44 +				// If not there yet, add "parent" item
   19.45 +				if (!lastParent)
   19.46 +				{
   19.47 +					lastParent=rmodel->addItem (cur);
   19.48 +					if (!lastParent)
   19.49 +						qWarning()<<"VymModel::findAll still no lastParent?!";
   19.50 +					/*
   19.51 +					else
   19.52 +						lastParent->setSelectable (false);
   19.53 +					*/	
   19.54 +				}	
   19.55 +
   19.56 +				// save index of occurence
   19.57 +				rmodel->addSubItem (lastParent,QString(tr("Note","FindAll in VymModel")+" "+s),cur,j);
   19.58 +				j++;
   19.59  				i++;
   19.60  			}
   19.61  		} 
   19.62 @@ -1673,7 +1695,7 @@
   19.63  	}
   19.64  }
   19.65  
   19.66 -BranchItem* VymModel::findText (QString s,Qt::CaseSensitivity cs,QTextCursor &cursor)   
   19.67 +BranchItem* VymModel::findText (QString s,Qt::CaseSensitivity cs)
   19.68  {
   19.69  	if (!s.isEmpty() && s!=findString)
   19.70  	{
   19.71 @@ -1703,7 +1725,7 @@
   19.72  			if (findCurrent->getNote().contains(findString,cs))
   19.73  			{
   19.74  				select (findCurrent);
   19.75 -				if (textEditor->findText(findString,flags,cursor)) 
   19.76 +				if (textEditor->findText(findString,flags)) 
   19.77  				{
   19.78  					searching=false;
   19.79  					foundNote=true;
   19.80 @@ -5064,6 +5086,20 @@
   19.81  	return false;
   19.82  }
   19.83  
   19.84 +bool VymModel::select (TreeItem *ti, int i)
   19.85 +{
   19.86 +	if (!ti || i<0) return false;
   19.87 +	if (select (index(ti)))
   19.88 +	{
   19.89 +		qDebug ()<<"VM::select with index: "<<i<<" Trying to find text in note ";
   19.90 +		QTextCursor c=textEditor->getTextCursor();
   19.91 +		c.setPosition (i-1,QTextCursor::MoveAnchor);
   19.92 +		textEditor->setTextCursor (c);
   19.93 +	} else	
   19.94 +		qDebug ()<<"VM::select with index: "<<i<<" Giving up to find text in note ";
   19.95 +	return true;	
   19.96 +}
   19.97 +
   19.98  bool VymModel::select (const QModelIndex &index)
   19.99  {
  19.100  	if (index.isValid() )
    20.1 --- a/vymmodel.h	Mon Mar 22 15:37:23 2010 +0000
    20.2 +++ b/vymmodel.h	Tue Mar 30 17:30:39 2010 +0000
    20.3 @@ -27,7 +27,6 @@
    20.4  	Q_OBJECT
    20.5  	Q_CLASSINFO("D-Bus Interface", "org.insilmaril.vym.VymModel-h")
    20.6  
    20.7 -
    20.8  ////////////////////////////////////////////
    20.9  // General housekeeping
   20.10  ////////////////////////////////////////////
   20.11 @@ -275,7 +274,7 @@
   20.12  public:
   20.13  	void findDuplicateURLs();				// find duplicate URLs, testing only so far
   20.14      void findAll (FindResultModel*, QString s, Qt::CaseSensitivity cs);	// Search all objects at once, also notes
   20.15 -    BranchItem* findText(QString s,Qt::CaseSensitivity cs,QTextCursor &cursor);	// Find object, also in note
   20.16 +    BranchItem* findText(QString s,Qt::CaseSensitivity cs);	// Find object, also in note
   20.17      void findReset();						// Reset Search
   20.18  private:	
   20.19  	QString findString;
   20.20 @@ -606,6 +605,7 @@
   20.21  	bool select (const QString &);			//! Select by string
   20.22  	bool select (LinkableMapObj *lmo);		//! Select by pointer to LMO
   20.23  	bool select (TreeItem *ti );			//! Select by pointer to TreeItem
   20.24 +	bool select (TreeItem *ti,int i );		//! Select by pointer to TreeItem and index in note
   20.25  	bool select (const QModelIndex &index);	//! Select by ModelIndex
   20.26  	void unselect();
   20.27  	bool reselect();
    21.1 --- a/vymview.cpp	Mon Mar 22 15:37:23 2010 +0000
    21.2 +++ b/vymview.cpp	Tue Mar 30 17:30:39 2010 +0000
    21.3 @@ -117,6 +117,11 @@
    21.4  	return mapEditor;
    21.5  }
    21.6  
    21.7 +TreeEditor* VymView::getTreeEditor()
    21.8 +{
    21.9 +	return treeEditor;
   21.10 +}
   21.11 +
   21.12  void VymView::initFocus()
   21.13  {
   21.14  	mapEditor->setFocus();
    22.1 --- a/vymview.h	Mon Mar 22 15:37:23 2010 +0000
    22.2 +++ b/vymview.h	Tue Mar 30 17:30:39 2010 +0000
    22.3 @@ -18,6 +18,7 @@
    22.4  	~VymView();
    22.5  	VymModel* getModel();
    22.6  	MapEditor* getMapEditor();
    22.7 +	TreeEditor* getTreeEditor();
    22.8  	void initFocus();
    22.9  
   22.10  public slots: