]> git.sven.stormbind.net Git - sven/vym.git/blobdiff - src/findresultwidget.cpp
New upstream version 2.9.22
[sven/vym.git] / src / findresultwidget.cpp
diff --git a/src/findresultwidget.cpp b/src/findresultwidget.cpp
new file mode 100644 (file)
index 0000000..980860d
--- /dev/null
@@ -0,0 +1,115 @@
+#include "findresultwidget.h"
+
+#include <QTreeView>
+#include <QVBoxLayout>
+
+#include "findresultitem.h"
+#include "findresultmodel.h"
+#include "vymmodel.h"
+
+FindResultWidget::FindResultWidget(QWidget *)
+{
+    // Create results model
+    resultsModel = new FindResultModel;
+
+    // Create TreeView
+    view = new QTreeView(this);
+    view->setModel(resultsModel);
+
+    // Create FindWidget
+    findWidget = new FindWidget(this);
+    connect(findWidget, SIGNAL(nextButtonPressed(QString, bool)), this,
+            SLOT(nextButtonPressed(QString, bool)));
+
+    QVBoxLayout *mainLayout = new QVBoxLayout;
+
+    mainLayout->addWidget(view);
+    mainLayout->addWidget(findWidget);
+
+    setLayout(mainLayout);
+
+    // Selection
+    connect(view->selectionModel(),
+            SIGNAL(selectionChanged(QItemSelection, QItemSelection)), this,
+            SLOT(updateSelection(QItemSelection, QItemSelection)));
+
+    connect(resultsModel, SIGNAL(layoutChanged()), view, SLOT(expandAll()));
+}
+
+void FindResultWidget::addItem(TreeItem *ti)
+{
+    if (ti) {
+        QModelIndex index = view->selectionModel()->currentIndex();
+        // QAbstractItemModel *resultsModel = view->model();
+
+        if (!resultsModel->insertRow(index.row() + 1, index.parent()))
+            return;
+
+        for (int column = 0; column < resultsModel->columnCount(index.parent());
+             ++column) {
+            QModelIndex child =
+                resultsModel->index(index.row() + 1, column, index.parent());
+            resultsModel->setData(child, QVariant(ti->getHeadingPlain()),
+                                  Qt::EditRole);
+            resultsModel->getItem(child)->setOriginal(ti);
+        }
+    }
+}
+
+void FindResultWidget::addItem(const QString &s)
+{
+    if (!s.isEmpty()) {
+        QModelIndex index = view->selectionModel()->currentIndex();
+
+        if (!resultsModel->insertRow(index.row() + 1, index.parent()))
+            return;
+
+        for (int column = 0; column < resultsModel->columnCount(index.parent());
+             ++column) {
+            QModelIndex child =
+                resultsModel->index(index.row() + 1, column, index.parent());
+            resultsModel->setData(child, QVariant(s), Qt::EditRole);
+        }
+    }
+}
+
+QString FindResultWidget::getFindText() { return findWidget->getFindText(); }
+
+FindResultModel *FindResultWidget::getResultModel() { return resultsModel; }
+
+void FindResultWidget::popup()
+{
+    show();
+    parentWidget()->show();
+    findWidget->setFocus();
+}
+
+void FindResultWidget::cancelPressed() { emit(hideFindResultWidget()); }
+
+void FindResultWidget::nextButtonPressed(QString s, bool searchNotesFlag)
+{
+    emit(findPressed(s, searchNotesFlag));
+}
+
+void FindResultWidget::updateSelection(QItemSelection newsel, QItemSelection)
+{
+    QModelIndex ix;
+    foreach (ix, newsel.indexes()) {
+        FindResultItem *fri =
+            static_cast<FindResultItem *>(ix.internalPointer());
+        if (fri->getOrgModel() && fri->getOriginalID() > 0) {
+            TreeItem *ti = fri->getOrgModel()->findID(fri->getOriginalID());
+            if (ti) {
+                fri->getOrgModel()->select(ti);
+                int i = fri->getOriginalIndex();
+                if (i >= 0)
+                    emit(noteSelected(resultsModel->getSearchString(), i));
+            }
+        }
+    }
+}
+
+void FindResultWidget::setStatus(FindWidget::Status st)
+{
+    findWidget->setStatus(st);
+}