]> git.sven.stormbind.net Git - sven/vym.git/blob - findresultwidget.cpp
cc2143d6a94b0863b53c87f69c498c26d8deb345
[sven/vym.git] / findresultwidget.cpp
1 #include "findresultwidget.h"
2
3 #include <QVBoxLayout>
4 #include <QTreeView>
5
6 #include "findresultitem.h"
7 #include "findresultmodel.h"
8 #include "vymmodel.h"
9
10 FindResultWidget::FindResultWidget(QWidget *)
11 {
12     // Create results model
13     resultsModel=new FindResultModel;
14
15     // Create TreeView
16     view = new QTreeView (this);
17     view->setModel (resultsModel);
18
19     // Create FindWidget
20     findWidget = new FindWidget (this);
21     connect (
22         findWidget, SIGNAL (nextButton (QString) ), 
23         this, SLOT (nextButtonPressed (QString) ) );
24
25
26     QVBoxLayout* mainLayout = new QVBoxLayout;
27     
28     mainLayout->addWidget(view);
29     mainLayout->addWidget(findWidget);
30
31     setLayout (mainLayout);
32
33     // Selection
34     connect (view->selectionModel(),SIGNAL (selectionChanged (QItemSelection,QItemSelection)),
35         this, SLOT (updateSelection (QItemSelection,QItemSelection)));
36
37     connect (resultsModel, SIGNAL(layoutChanged() ), view, SLOT (expandAll() ));    
38 }
39
40 void FindResultWidget::addItem (TreeItem *ti)
41 {
42     if (ti)
43     {
44         QModelIndex index = view->selectionModel()->currentIndex();
45         //QAbstractItemModel *resultsModel = view->model();
46         
47         if (!resultsModel->insertRow(index.row()+1, index.parent()))
48             return;
49
50         for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) {
51             QModelIndex child = resultsModel->index(index.row()+1, column, index.parent());
52         resultsModel->setData(child, QVariant(ti->getHeadingPlain()), Qt::EditRole);
53             resultsModel->getItem(child)->setOriginal (ti);
54         }
55     }
56 }
57
58 void FindResultWidget::addItem (const QString &s)
59 {
60     if (!s.isEmpty())
61     {
62         QModelIndex index = view->selectionModel()->currentIndex();
63         
64         if (!resultsModel->insertRow(index.row()+1, index.parent()))
65             return;
66
67         for (int column = 0; column < resultsModel->columnCount(index.parent()); ++column) {
68             QModelIndex child = resultsModel->index(index.row()+1, column, index.parent());
69             resultsModel->setData(child, QVariant(s), Qt::EditRole);
70         }
71     }
72 }
73
74 QString FindResultWidget::getFindText()
75 {
76     return findWidget->getFindText();
77 }
78
79 FindResultModel* FindResultWidget::getResultModel()
80 {
81     return resultsModel;
82 }
83
84 void FindResultWidget::popup()
85 {
86     show();
87     parentWidget()->show();
88     findWidget->setFocus();
89 }
90
91 void FindResultWidget::cancelPressed()
92 {
93     emit (hideFindResultWidget() );
94 }
95
96 void FindResultWidget::nextButtonPressed(QString s)
97 {
98     emit (findPressed(s) );
99 }
100
101 void FindResultWidget::updateSelection(QItemSelection newsel,QItemSelection)
102 {
103     QModelIndex ix;
104     foreach (ix,newsel.indexes() )
105     {
106         FindResultItem *fri= static_cast<FindResultItem*>(ix.internalPointer());
107         if (fri->getOrgModel() && fri->getOriginalID()>0)
108         {
109             TreeItem *ti=fri->getOrgModel()->findID(fri->getOriginalID() );
110             if (ti)
111             {
112                 fri->getOrgModel()->select (ti);
113                 int i=fri->getOriginalIndex();
114                 if (i>=0) emit (noteSelected (resultsModel->getSearchString(),i));
115             }   
116         }
117     }
118 }
119
120 void FindResultWidget::setStatus (FindWidget::Status st)
121 {
122     findWidget->setStatus (st);
123 }
124
125