diff options
Diffstat (limited to 'src/findbar.cpp')
-rw-r--r-- | src/findbar.cpp | 91 |
1 files changed, 51 insertions, 40 deletions
diff --git a/src/findbar.cpp b/src/findbar.cpp index bd1a5137..f89cde60 100644 --- a/src/findbar.cpp +++ b/src/findbar.cpp @@ -2,8 +2,8 @@ * * This file is a part of the rekonq project * -* Copyright (C) 2008-2009 by Andrea Diamantini <adjam7 at gmail dot com> -* Copyright (C) 2009 by Lionel Chauvin <megabigbug@yahoo.fr> +* Copyright (C) 2008-2010 by Andrea Diamantini <adjam7 at gmail dot com> +* Copyright (C) 2009-2010 by Lionel Chauvin <megabigbug@yahoo.fr> * * * This program is free software; you can redistribute it and/or @@ -11,9 +11,9 @@ * published by the Free Software Foundation; either version 2 of * the License or (at your option) version 3 or any later version * accepted by the membership of KDE e.V. (or its successor approved -* by the membership of KDE e.V.), which shall act as a proxy +* by the membership of KDE e.V.), which shall act as a proxy * defined in Section 14 of version 3 of the license. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -29,12 +29,14 @@ #include "findbar.h" #include "findbar.moc" +// Local Includes +#include "mainwindow.h" + // KDE Includes #include <KLineEdit> #include <KIcon> #include <KPushButton> #include <klocalizedstring.h> -#include <KMainWindow> #include <KApplication> // Qt Includes @@ -43,17 +45,20 @@ #include <QtGui/QToolButton> #include <QtGui/QLabel> #include <QtGui/QColor> -#include <QtGui/QKeyEvent> #include <QtCore/QString> #include <QtCore/QTimer> -FindBar::FindBar(KMainWindow *mainwindow) - : QWidget(mainwindow) +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 @@ -64,10 +69,11 @@ FindBar::FindBar(KMainWindow *mainwindow) 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); - // hide timer + // hide timer connect(m_hideTimer, SIGNAL(timeout()), this, SLOT(hide())); // label @@ -77,27 +83,35 @@ FindBar::FindBar(KMainWindow *mainwindow) // lineEdit, focusProxy setFocusProxy(m_lineEdit); m_lineEdit->setMaximumWidth(250); - connect(m_lineEdit, SIGNAL(textChanged(const QString &)), mainwindow, SLOT(find(const QString &))); + connect(m_lineEdit, SIGNAL(textChanged(const QString &)), window, SLOT(find(const QString &))); + connect(m_lineEdit, SIGNAL(returnPressed()), window, SLOT(findNext())); layout->addWidget(m_lineEdit); // buttons KPushButton *findNext = new KPushButton(KIcon("go-down"), i18n("&Next"), this); KPushButton *findPrev = new KPushButton(KIcon("go-up"), i18n("&Previous"), this); - connect(findNext, SIGNAL(clicked()), mainwindow, SLOT(findNext())); - connect(findPrev, SIGNAL(clicked()), mainwindow, SLOT(findPrevious())); + connect(findNext, SIGNAL(clicked()), window, SLOT(findNext())); + 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(); setLayout(layout); - + // we start off hidden hide(); } @@ -105,6 +119,10 @@ FindBar::FindBar(KMainWindow *mainwindow) FindBar::~FindBar() { + delete m_lineEdit; + delete m_hideTimer; + delete m_matchCase; + delete m_highlightAll; } @@ -120,44 +138,29 @@ bool FindBar::matchCase() const } -void FindBar::clear() +bool FindBar::highlightAllState() const { - m_lineEdit->setText(QString()); + return m_highlightAll->isChecked(); } void FindBar::show() { - // set focus to findbar if user select showFindBar shortcut - m_lineEdit->setFocus(); - m_lineEdit->selectAll(); - // show findbar if not visible - if (isVisible()) - return; - - QWidget::show(); - m_hideTimer->start(60000); -} - - -void FindBar::keyPressEvent(QKeyEvent* event) -{ - if (event->key() == Qt::Key_Escape) - { - hide(); - m_hideTimer->stop(); - return; - } - if (event->key() == Qt::Key_Return && !m_lineEdit->text().isEmpty()) + if (isHidden()) { + QWidget::show(); emit searchString(m_lineEdit->text()); - return; } - QWidget::keyPressEvent(event); + m_hideTimer->start(60000); + + // set focus to findbar if user select showFindBar shortcut + m_lineEdit->setFocus(); + m_lineEdit->selectAll(); } + void FindBar::notifyMatch(bool match) { QPalette p = m_lineEdit->palette(); @@ -166,7 +169,7 @@ void FindBar::notifyMatch(bool match) { p.setColor(QPalette::Base, QColor(KApplication::palette().color(QPalette::Active, QPalette::Base))); } - else + else { if (match) { @@ -180,3 +183,11 @@ void FindBar::notifyMatch(bool match) m_lineEdit->setPalette(p); m_hideTimer->start(60000); } + + +void FindBar::hide() +{ + m_hideTimer->stop(); + QWidget::hide(); + emit(searchString(m_lineEdit->text())); +} |