summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/findbar.cpp26
-rw-r--r--src/findbar.h4
-rw-r--r--src/mainwindow.cpp20
-rw-r--r--src/mainwindow.h1
4 files changed, 44 insertions, 7 deletions
diff --git a/src/findbar.cpp b/src/findbar.cpp
index 4c780aca..94def263 100644
--- a/src/findbar.cpp
+++ b/src/findbar.cpp
@@ -52,9 +52,13 @@
FindBar::FindBar(QWidget *parent)
: QWidget(parent)
, m_lineEdit(new KLineEdit(this))
- , m_matchCase(new QCheckBox(i18n("&Match case"), this))
, m_hideTimer(new QTimer(this))
-{
+ , m_matchCase(new QCheckBox(i18n("&Match case"), this))
+ , m_highlightAll(new QCheckBox(i18n("&Highlight All"), this))
+{
+ // mainwindow pointer
+ MainWindow *window = qobject_cast<MainWindow *>(parent);
+
QHBoxLayout *layout = new QHBoxLayout;
// cosmetic
@@ -65,6 +69,7 @@ FindBar::FindBar(QWidget *parent)
hideButton->setAutoRaise(true);
hideButton->setIcon(KIcon("dialog-close"));
connect(hideButton, SIGNAL(clicked()), this, SLOT(hide()));
+ connect(hideButton, SIGNAL(clicked()), window, SLOT(highlightAll()));
layout->addWidget(hideButton);
layout->setAlignment(hideButton, Qt::AlignLeft | Qt::AlignTop);
@@ -75,9 +80,6 @@ FindBar::FindBar(QWidget *parent)
QLabel *label = new QLabel(i18n("Find:"));
layout->addWidget(label);
- // mainwindow pointer
- MainWindow *window = qobject_cast<MainWindow *>(parent);
-
// lineEdit, focusProxy
setFocusProxy(m_lineEdit);
m_lineEdit->setMaximumWidth(250);
@@ -92,13 +94,19 @@ FindBar::FindBar(QWidget *parent)
connect(findPrev, SIGNAL(clicked()), window, SLOT(findPrevious()));
layout->addWidget(findNext);
layout->addWidget(findPrev);
-
+
// Case sensitivity. Deliberately set so this is off by default.
m_matchCase->setCheckState(Qt::Unchecked);
m_matchCase->setTristate(false);
connect(m_matchCase, SIGNAL(toggled(bool)), window, SLOT(matchCaseUpdate()));
layout->addWidget(m_matchCase);
+ // Hightlight All. On by default
+ m_highlightAll->setCheckState(Qt::Checked);
+ m_highlightAll->setTristate(false);
+ connect(m_highlightAll, SIGNAL(toggled(bool)), window, SLOT(highlightAll()));
+ layout->addWidget(m_highlightAll);
+
// stretching widget on the left
layout->addStretch();
@@ -126,6 +134,12 @@ bool FindBar::matchCase() const
}
+bool FindBar::highlightAllState() const
+{
+ return m_highlightAll->isChecked();
+}
+
+
void FindBar::show()
{
// show findbar if not visible
diff --git a/src/findbar.h b/src/findbar.h
index 7a4efc59..78615f9a 100644
--- a/src/findbar.h
+++ b/src/findbar.h
@@ -53,6 +53,7 @@ public:
KLineEdit *lineEdit() const;
bool matchCase() const;
void notifyMatch(bool match);
+ bool highlightAllState() const;
public slots:
void show();
@@ -63,8 +64,9 @@ signals:
private:
KLineEdit *m_lineEdit;
- QCheckBox *m_matchCase;
QTimer *m_hideTimer;
+ QCheckBox *m_matchCase;
+ QCheckBox *m_highlightAll;
};
#endif
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 4b48157b..a459cc78 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -797,6 +797,8 @@ void MainWindow::findNext()
return;
}
+ highlightAll();
+
QWebPage::FindFlags options = QWebPage::FindWrapsAroundDocument;
if (m_findBar->matchCase())
options |= QWebPage::FindCaseSensitively;
@@ -826,6 +828,24 @@ void MainWindow::findPrevious()
m_findBar->notifyMatch(found);
}
+void MainWindow::highlightAll()
+{
+ if (!currentTab())
+ return;
+
+ QWebPage::FindFlags options = QWebPage::HighlightAllOccurrences;
+
+ currentTab()->view()->findText("", options); //Clear an existing highlight
+
+ if(m_findBar->highlightAllState() && !m_findBar->isHidden())
+ {
+ if (m_findBar->matchCase())
+ options |= QWebPage::FindCaseSensitively;
+
+ currentTab()->view()->findText(m_lastSearch, options);
+ }
+}
+
void MainWindow::zoomIn()
{
diff --git a/src/mainwindow.h b/src/mainwindow.h
index b693fec1..4ccd7bf3 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -130,6 +130,7 @@ private slots:
void matchCaseUpdate();
void findNext();
void findPrevious();
+ void highlightAll();
// Zoom slots
void zoomIn();