You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
146 lines
4.3 KiB
146 lines
4.3 KiB
/*************************************************************************** |
|
* Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> * |
|
* Copyright (C) 2007 by Pino Toscano <pino@kde.org> * |
|
* * |
|
* This program is free software; you can redistribute it and/or modify * |
|
* it under the terms of the GNU General Public License as published by * |
|
* the Free Software Foundation; either version 2 of the License, or * |
|
* (at your option) any later version. * |
|
***************************************************************************/ |
|
|
|
#include "searchlineedit.h" |
|
|
|
// local includes |
|
#include "core/document.h" |
|
|
|
// qt/kde includes |
|
#include <qapplication.h> |
|
#include <qtimer.h> |
|
|
|
SearchLineEdit::SearchLineEdit( QWidget * parent, Okular::Document * document ) |
|
: KLineEdit( parent ), m_document( document ), m_minLength( 0 ), |
|
m_caseSensitivity( Qt::CaseInsensitive ), |
|
m_searchType( Okular::Document::AllDocument ), m_id( -1 ), |
|
m_moveViewport( false ), m_changed( false ) |
|
{ |
|
setObjectName( "SearchLineEdit" ); |
|
setClearButtonShown( true ); |
|
|
|
// a timer to ensure that we don't flood the document with requests to search |
|
m_inputDelayTimer = new QTimer(this); |
|
m_inputDelayTimer->setSingleShot(true); |
|
connect( m_inputDelayTimer, SIGNAL( timeout() ), |
|
this, SLOT( startSearch() ) ); |
|
|
|
connect(this, SIGNAL( textChanged(const QString &) ), this, SLOT( slotTextChanged(const QString &) )); |
|
connect(document, SIGNAL( searchFinished(int, Okular::Document::SearchStatus) ), this, SLOT( searchFinished(int, Okular::Document::SearchStatus) )); |
|
} |
|
|
|
void SearchLineEdit::clearText() |
|
{ |
|
clear(); |
|
} |
|
|
|
void SearchLineEdit::setSearchCaseSensitivity( Qt::CaseSensitivity cs ) |
|
{ |
|
m_caseSensitivity = cs; |
|
m_changed = true; |
|
} |
|
|
|
void SearchLineEdit::setSearchMinimumLength( int length ) |
|
{ |
|
m_minLength = length; |
|
m_changed = true; |
|
} |
|
|
|
void SearchLineEdit::setSearchType( Okular::Document::SearchType type ) |
|
{ |
|
m_searchType = type; |
|
m_changed = true; |
|
} |
|
|
|
void SearchLineEdit::setSearchId( int id ) |
|
{ |
|
m_id = id; |
|
m_changed = true; |
|
} |
|
|
|
void SearchLineEdit::setSearchColor( const QColor &color ) |
|
{ |
|
m_color = color; |
|
m_changed = true; |
|
} |
|
|
|
void SearchLineEdit::setSearchMoveViewport( bool move ) |
|
{ |
|
m_moveViewport = move; |
|
} |
|
|
|
void SearchLineEdit::restartSearch() |
|
{ |
|
m_inputDelayTimer->stop(); |
|
m_inputDelayTimer->start( 500 ); |
|
m_changed = true; |
|
} |
|
|
|
void SearchLineEdit::findNext() |
|
{ |
|
if ( m_id == -1 || m_searchType != Okular::Document::NextMatch ) |
|
return; |
|
|
|
if ( !m_changed ) |
|
m_document->continueSearch( m_id ); |
|
else |
|
startSearch(); |
|
} |
|
|
|
void SearchLineEdit::slotTextChanged( const QString & text ) |
|
{ |
|
QPalette qAppPalette = QApplication::palette(); |
|
// if 0<length<minLength set 'red' text and send a blank string to document |
|
QColor color = text.length() < m_minLength && text.length() > 0 ? Qt::darkRed : qAppPalette.color( QPalette::Text ); |
|
QPalette pal = palette(); |
|
pal.setColor( QPalette::Base, qAppPalette.color( QPalette::Base ) ); |
|
pal.setColor( QPalette::Text, color ); |
|
setPalette( pal ); |
|
restartSearch(); |
|
} |
|
|
|
void SearchLineEdit::startSearch() |
|
{ |
|
if ( m_id == -1 || !m_color.isValid() ) |
|
return; |
|
|
|
if ( m_changed && m_searchType == Okular::Document::NextMatch ) |
|
{ |
|
m_document->resetSearch( m_id ); |
|
} |
|
m_changed = false; |
|
// search text if have more than 3 chars or else clear search |
|
QString thistext = text(); |
|
if ( thistext.length() >= qMax( m_minLength, 1 ) ) |
|
{ |
|
m_document->searchText( m_id, thistext, true, m_caseSensitivity, |
|
m_searchType, m_moveViewport, m_color ); |
|
} |
|
else |
|
m_document->resetSearch( m_id ); |
|
} |
|
|
|
void SearchLineEdit::searchFinished( int id, Okular::Document::SearchStatus endStatus ) |
|
{ |
|
// ignore the searches not started by this search edit |
|
if ( id != m_id ) |
|
return; |
|
|
|
// if not found, use warning colors |
|
if ( endStatus == Okular::Document::NoMatchFound ) |
|
{ |
|
QPalette pal = palette(); |
|
pal.setColor( QPalette::Base, Qt::red ); |
|
pal.setColor( QPalette::Text, Qt::white ); |
|
setPalette( pal ); |
|
} |
|
} |
|
|
|
#include "searchlineedit.moc"
|
|
|