]> git.cworth.org Git - apitrace/blobdiff - gui/searchwidget.cpp
Add a search widget and fix go to.
[apitrace] / gui / searchwidget.cpp
diff --git a/gui/searchwidget.cpp b/gui/searchwidget.cpp
new file mode 100644 (file)
index 0000000..6f9bc94
--- /dev/null
@@ -0,0 +1,80 @@
+#include "searchwidget.h"
+
+#include <QDebug>
+#include <QKeyEvent>
+
+SearchWidget::SearchWidget(QWidget *parent)
+    : QWidget(parent)
+{
+    m_ui.setupUi(this);
+
+    m_ui.notFoundLabel->hide();
+    m_origPalette = m_ui.lineEdit->palette();
+
+    connect(m_ui.nextButton, SIGNAL(clicked()),
+            SLOT(slotSearchNext()));
+    connect(m_ui.prevButton, SIGNAL(clicked()),
+            SLOT(slotSearchPrev()));
+    connect(m_ui.closeButton, SIGNAL(clicked()),
+            SLOT(slotCancel()));
+    connect(m_ui.lineEdit, SIGNAL(returnPressed()),
+            SLOT(slotSearchNext()));
+
+    installEventFilter(this);
+}
+
+void SearchWidget::slotSearchNext()
+{
+    QString txt = m_ui.lineEdit->text();
+    if (!txt.isEmpty())
+        emit searchNext(txt, caseSensitivity());
+}
+
+void SearchWidget::slotSearchPrev()
+{
+    QString txt = m_ui.lineEdit->text();
+    if (!txt.isEmpty())
+        emit searchPrev(txt, caseSensitivity());
+}
+
+void SearchWidget::slotCancel()
+{
+    hide();
+}
+
+void SearchWidget::showEvent(QShowEvent *event)
+{
+    m_ui.lineEdit->selectAll();
+    m_ui.lineEdit->setFocus(Qt::ShortcutFocusReason);
+    m_ui.lineEdit->setPalette(m_origPalette);
+    return QWidget::showEvent(event);
+}
+
+Qt::CaseSensitivity SearchWidget::caseSensitivity() const
+{
+    if (m_ui.caseSensitiveBox->isChecked())
+        return Qt::CaseSensitive;
+    else
+        return Qt::CaseInsensitive;
+}
+
+bool SearchWidget::eventFilter(QObject *object, QEvent* event)
+{
+    if (event->type() == QEvent::KeyPress) {
+        if ((static_cast<QKeyEvent*>(event))->key() == Qt::Key_Escape) {
+            hide();
+        }
+    }
+    return QWidget::eventFilter(object, event);
+}
+
+void SearchWidget::setFound(bool found)
+{
+    QPalette pal = m_origPalette;
+    pal.setColor(QPalette::Active, QPalette::Base,
+                 found ? Qt::white : QColor(255, 102, 102));
+    m_ui.lineEdit->setPalette(pal);
+    m_ui.notFoundLabel->setVisible(!found);
+}
+
+#include "searchwidget.moc"