]> git.sven.stormbind.net Git - sven/vym.git/blob - src/findresultwidget.cpp
Replace Pierre as the maintainer
[sven/vym.git] / src / findresultwidget.cpp
1 #include "findresultwidget.h"
2
3 #include <QTreeView>
4 #include <QVBoxLayout>
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(findWidget, SIGNAL(nextButtonPressed(QString, bool)), this,
22             SLOT(nextButtonPressed(QString, bool)));
23
24     QVBoxLayout *mainLayout = new QVBoxLayout;
25
26     mainLayout->addWidget(view);
27     mainLayout->addWidget(findWidget);
28
29     setLayout(mainLayout);
30
31     // Selection
32     connect(view->selectionModel(),
33             SIGNAL(selectionChanged(QItemSelection, QItemSelection)), this,
34             SLOT(updateSelection(QItemSelection, QItemSelection)));
35
36     connect(resultsModel, SIGNAL(layoutChanged()), view, SLOT(expandAll()));
37 }
38
39 void FindResultWidget::addItem(TreeItem *ti)
40 {
41     if (ti) {
42         QModelIndex index = view->selectionModel()->currentIndex();
43         // QAbstractItemModel *resultsModel = view->model();
44
45         if (!resultsModel->insertRow(index.row() + 1, index.parent()))
46             return;
47
48         for (int column = 0; column < resultsModel->columnCount(index.parent());
49              ++column) {
50             QModelIndex child =
51                 resultsModel->index(index.row() + 1, column, index.parent());
52             resultsModel->setData(child, QVariant(ti->getHeadingPlain()),
53                                   Qt::EditRole);
54             resultsModel->getItem(child)->setOriginal(ti);
55         }
56     }
57 }
58
59 void FindResultWidget::addItem(const QString &s)
60 {
61     if (!s.isEmpty()) {
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());
68              ++column) {
69             QModelIndex child =
70                 resultsModel->index(index.row() + 1, column, index.parent());
71             resultsModel->setData(child, QVariant(s), Qt::EditRole);
72         }
73     }
74 }
75
76 QString FindResultWidget::getFindText() { return findWidget->getFindText(); }
77
78 FindResultModel *FindResultWidget::getResultModel() { return resultsModel; }
79
80 void FindResultWidget::popup()
81 {
82     show();
83     parentWidget()->show();
84     findWidget->setFocus();
85 }
86
87 void FindResultWidget::cancelPressed() { emit(hideFindResultWidget()); }
88
89 void FindResultWidget::nextButtonPressed(QString s, bool searchNotesFlag)
90 {
91     emit(findPressed(s, searchNotesFlag));
92 }
93
94 void FindResultWidget::updateSelection(QItemSelection newsel, QItemSelection)
95 {
96     QModelIndex ix;
97     foreach (ix, newsel.indexes()) {
98         FindResultItem *fri =
99             static_cast<FindResultItem *>(ix.internalPointer());
100         if (fri->getOrgModel() && fri->getOriginalID() > 0) {
101             TreeItem *ti = fri->getOrgModel()->findID(fri->getOriginalID());
102             if (ti) {
103                 fri->getOrgModel()->select(ti);
104                 int i = fri->getOriginalIndex();
105                 if (i >= 0)
106                     emit(noteSelected(resultsModel->getSearchString(), i));
107             }
108         }
109     }
110 }
111
112 void FindResultWidget::setStatus(FindWidget::Status st)
113 {
114     findWidget->setStatus(st);
115 }