mirror of
https://invent.kde.org/graphics/okular
synced 2024-11-05 18:34:53 +00:00
a0b2ad4a4c
svn path=/trunk/KDE/kdegraphics/okular/; revision=712501
146 lines
4.3 KiB
C++
146 lines
4.3 KiB
C++
/***************************************************************************
|
|
* 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"
|