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@829
|
42 |
}
|
insilmaril@829
|
43 |
|
insilmaril@829
|
44 |
void FindResultWidget::addItem (TreeItem *ti)
|
insilmaril@829
|
45 |
{
|
insilmaril@829
|
46 |
if (ti)
|
insilmaril@829
|
47 |
{
|
insilmaril@829
|
48 |
QModelIndex index = view->selectionModel()->currentIndex();
|
insilmaril@829
|
49 |
//QAbstractItemModel *resultsModel = view->model();
|
insilmaril@829
|
50 |
|
insilmaril@829
|
51 |
if (!resultsModel->insertRow(index.row()+1, index.parent()))
|
insilmaril@829
|
52 |
return;
|
insilmaril@829
|
53 |
|
insilmaril@829
|
54 |
for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) {
|
insilmaril@829
|
55 |
QModelIndex child = resultsModel->index(index.row()+1, column, index.parent());
|
insilmaril@829
|
56 |
resultsModel->setData(child, QVariant(ti->getHeading()), Qt::EditRole);
|
insilmaril@829
|
57 |
resultsModel->getItem(child)->setOriginal (ti);
|
insilmaril@829
|
58 |
}
|
insilmaril@829
|
59 |
}
|
insilmaril@829
|
60 |
}
|
insilmaril@829
|
61 |
|
insilmaril@829
|
62 |
void FindResultWidget::addItem (const QString &s)
|
insilmaril@829
|
63 |
{
|
insilmaril@829
|
64 |
if (!s.isEmpty())
|
insilmaril@829
|
65 |
{
|
insilmaril@829
|
66 |
QModelIndex index = view->selectionModel()->currentIndex();
|
insilmaril@829
|
67 |
|
insilmaril@829
|
68 |
if (!resultsModel->insertRow(index.row()+1, index.parent()))
|
insilmaril@829
|
69 |
return;
|
insilmaril@829
|
70 |
|
insilmaril@829
|
71 |
for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) {
|
insilmaril@829
|
72 |
QModelIndex child = resultsModel->index(index.row()+1, column, index.parent());
|
insilmaril@829
|
73 |
resultsModel->setData(child, QVariant(s), Qt::EditRole);
|
insilmaril@829
|
74 |
}
|
insilmaril@829
|
75 |
}
|
insilmaril@829
|
76 |
}
|
insilmaril@829
|
77 |
|
insilmaril@829
|
78 |
void FindResultWidget::setModel (VymModel *m)
|
insilmaril@829
|
79 |
{
|
insilmaril@829
|
80 |
if (model !=NULL && m!=model)
|
insilmaril@829
|
81 |
qWarning ("FindResultWidget::setModel m!=model");
|
insilmaril@829
|
82 |
model=m;
|
insilmaril@829
|
83 |
}
|
insilmaril@829
|
84 |
|
insilmaril@829
|
85 |
FindResultModel* FindResultWidget::getResultModel()
|
insilmaril@829
|
86 |
{
|
insilmaril@829
|
87 |
return resultsModel;
|
insilmaril@829
|
88 |
}
|
insilmaril@829
|
89 |
|
insilmaril@829
|
90 |
void FindResultWidget::addResult (const QString &category, TreeItem *ti)
|
insilmaril@829
|
91 |
{
|
insilmaril@829
|
92 |
if (!category.isEmpty())
|
insilmaril@829
|
93 |
addItem (category);
|
insilmaril@829
|
94 |
else
|
insilmaril@829
|
95 |
addItem (model->getSelectedItem());
|
insilmaril@825
|
96 |
}
|
insilmaril@825
|
97 |
|
insilmaril@825
|
98 |
void FindResultWidget::popup()
|
insilmaril@825
|
99 |
{
|
insilmaril@825
|
100 |
show();
|
insilmaril@829
|
101 |
parentWidget()->show();
|
insilmaril@825
|
102 |
}
|
insilmaril@825
|
103 |
|
insilmaril@825
|
104 |
void FindResultWidget::cancelPressed()
|
insilmaril@825
|
105 |
{
|
insilmaril@825
|
106 |
emit (hideFindResultWidget() );
|
insilmaril@825
|
107 |
}
|
insilmaril@825
|
108 |
|
insilmaril@829
|
109 |
void FindResultWidget::updateSelection(QItemSelection newsel,QItemSelection)
|
insilmaril@825
|
110 |
{
|
insilmaril@829
|
111 |
QModelIndex ix;
|
insilmaril@829
|
112 |
foreach (ix,newsel.indexes() )
|
insilmaril@829
|
113 |
{
|
insilmaril@829
|
114 |
FindResultItem *fri= static_cast<FindResultItem*>(ix.internalPointer());
|
insilmaril@829
|
115 |
if (fri->getOrgModel() && fri->getOrgID()>0)
|
insilmaril@829
|
116 |
{
|
insilmaril@829
|
117 |
TreeItem *ti=fri->getOrgModel()->findID(fri->getOrgID() );
|
insilmaril@829
|
118 |
if (ti)
|
insilmaril@829
|
119 |
fri->getOrgModel()->select (ti);
|
insilmaril@829
|
120 |
}
|
insilmaril@829
|
121 |
}
|
insilmaril@825
|
122 |
}
|
insilmaril@825
|
123 |
|
insilmaril@829
|
124 |
|