findresultwidget.cpp
author insilmaril
Tue, 30 Mar 2010 17:30:39 +0000
changeset 842 bec082472471
parent 829 832e96c9abb6
permissions -rw-r--r--
Much improved results in FindResultsWidget
insilmaril@825
     1
#include "findresultwidget.h"
insilmaril@825
     2
insilmaril@825
     3
#include <QVBoxLayout>
insilmaril@825
     4
#include <QTreeView>
insilmaril@825
     5
insilmaril@829
     6
#include "findresultitem.h"
insilmaril@825
     7
#include "findresultmodel.h"
insilmaril@829
     8
#include "vymmodel.h"
insilmaril@825
     9
insilmaril@825
    10
extern QString iconPath;
insilmaril@825
    11
insilmaril@829
    12
FindResultWidget::FindResultWidget(VymModel *m, QWidget *)
insilmaril@825
    13
{
insilmaril@829
    14
	model=m;
insilmaril@829
    15
insilmaril@829
    16
	// Create results model
insilmaril@829
    17
	resultsModel=new FindResultModel;
insilmaril@825
    18
insilmaril@825
    19
	// Create TreeView
insilmaril@829
    20
	view = new QTreeView (this);
insilmaril@829
    21
	view->setModel (resultsModel);
insilmaril@825
    22
insilmaril@825
    23
    QVBoxLayout* mainLayout = new QVBoxLayout;
insilmaril@825
    24
    
insilmaril@829
    25
	// FIXME-4 feature: show number of hits at bottom of FindResultWidget
insilmaril@825
    26
insilmaril@829
    27
	/* FIXME-3 testing QMenuBar *mb=new QMenuBar;
insilmaril@825
    28
	QAction *a=new  QAction ("Foo action",NULL);
insilmaril@825
    29
	mb->addAction (a);
insilmaril@825
    30
	mb->insertSeparator();
insilmaril@825
    31
	mainLayout->addWidget(mb);
insilmaril@829
    32
	*/
insilmaril@825
    33
	mainLayout->addWidget(view);
insilmaril@825
    34
insilmaril@825
    35
	setLayout (mainLayout);
insilmaril@829
    36
insilmaril@829
    37
	model=m;
insilmaril@829
    38
insilmaril@829
    39
	// Selection
insilmaril@829
    40
	connect (view->selectionModel(),SIGNAL (selectionChanged (QItemSelection,QItemSelection)),
insilmaril@829
    41
		this, SLOT (updateSelection (QItemSelection,QItemSelection)));
insilmaril@842
    42
insilmaril@842
    43
	connect (resultsModel, SIGNAL(layoutChanged() ), view, SLOT (expandAll() ));	
insilmaril@829
    44
}
insilmaril@829
    45
insilmaril@829
    46
void FindResultWidget::addItem (TreeItem *ti)
insilmaril@829
    47
{
insilmaril@829
    48
	if (ti)
insilmaril@829
    49
	{
insilmaril@829
    50
		QModelIndex index = view->selectionModel()->currentIndex();
insilmaril@829
    51
		//QAbstractItemModel *resultsModel = view->model();
insilmaril@829
    52
		
insilmaril@829
    53
		if (!resultsModel->insertRow(index.row()+1, index.parent()))
insilmaril@829
    54
			return;
insilmaril@829
    55
insilmaril@829
    56
		for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) {
insilmaril@829
    57
			QModelIndex child = resultsModel->index(index.row()+1, column, index.parent());
insilmaril@829
    58
			resultsModel->setData(child, QVariant(ti->getHeading()), Qt::EditRole);
insilmaril@829
    59
			resultsModel->getItem(child)->setOriginal (ti);
insilmaril@829
    60
		}
insilmaril@829
    61
	}
insilmaril@829
    62
}
insilmaril@829
    63
insilmaril@829
    64
void FindResultWidget::addItem (const QString &s)
insilmaril@829
    65
{
insilmaril@829
    66
	if (!s.isEmpty())
insilmaril@829
    67
	{
insilmaril@829
    68
		QModelIndex index = view->selectionModel()->currentIndex();
insilmaril@829
    69
		
insilmaril@829
    70
		if (!resultsModel->insertRow(index.row()+1, index.parent()))
insilmaril@829
    71
			return;
insilmaril@829
    72
insilmaril@829
    73
		for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) {
insilmaril@829
    74
			QModelIndex child = resultsModel->index(index.row()+1, column, index.parent());
insilmaril@829
    75
			resultsModel->setData(child, QVariant(s), Qt::EditRole);
insilmaril@829
    76
		}
insilmaril@829
    77
	}
insilmaril@829
    78
}
insilmaril@829
    79
insilmaril@829
    80
void FindResultWidget::setModel (VymModel *m)
insilmaril@829
    81
{
insilmaril@829
    82
	if (model !=NULL && m!=model)
insilmaril@829
    83
		qWarning ("FindResultWidget::setModel  m!=model");
insilmaril@829
    84
	model=m;	
insilmaril@829
    85
}
insilmaril@829
    86
insilmaril@829
    87
FindResultModel* FindResultWidget::getResultModel()
insilmaril@829
    88
{
insilmaril@829
    89
	return resultsModel;
insilmaril@829
    90
}
insilmaril@829
    91
insilmaril@825
    92
void FindResultWidget::popup()
insilmaril@825
    93
{
insilmaril@825
    94
	show();
insilmaril@829
    95
	parentWidget()->show();
insilmaril@825
    96
}
insilmaril@825
    97
insilmaril@825
    98
void FindResultWidget::cancelPressed()
insilmaril@825
    99
{
insilmaril@825
   100
	emit (hideFindResultWidget() );
insilmaril@825
   101
}
insilmaril@825
   102
insilmaril@829
   103
void FindResultWidget::updateSelection(QItemSelection newsel,QItemSelection)
insilmaril@825
   104
{
insilmaril@829
   105
	QModelIndex ix;
insilmaril@829
   106
	foreach (ix,newsel.indexes() )
insilmaril@829
   107
	{
insilmaril@829
   108
		FindResultItem *fri= static_cast<FindResultItem*>(ix.internalPointer());
insilmaril@842
   109
		if (fri->getOrgModel() && fri->getOriginalID()>0)
insilmaril@829
   110
		{
insilmaril@842
   111
			TreeItem *ti=fri->getOrgModel()->findID(fri->getOriginalID() );
insilmaril@829
   112
			if (ti)
insilmaril@842
   113
			{
insilmaril@829
   114
				fri->getOrgModel()->select (ti);
insilmaril@842
   115
				int i=fri->getOriginalIndex();
insilmaril@842
   116
				if (i>=0) emit (noteSelected (resultsModel->getSearchString(),i));
insilmaril@842
   117
			}	
insilmaril@829
   118
		}
insilmaril@829
   119
	}
insilmaril@825
   120
}
insilmaril@825
   121
insilmaril@829
   122