diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | 47d455dd55be855e4cc691c32f687f723d9247ee (patch) | |
tree | 52e236aaa2576bdb3840ebede26619692fed6d7d /kpdf/ui/searchwidget.cpp | |
download | tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.tar.gz tdegraphics-47d455dd55be855e4cc691c32f687f723d9247ee.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdegraphics@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kpdf/ui/searchwidget.cpp')
-rw-r--r-- | kpdf/ui/searchwidget.cpp | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/kpdf/ui/searchwidget.cpp b/kpdf/ui/searchwidget.cpp new file mode 100644 index 00000000..30a5bcf2 --- /dev/null +++ b/kpdf/ui/searchwidget.cpp @@ -0,0 +1,135 @@ +/*************************************************************************** + * Copyright (C) 2004 by Enrico Ros <eros.kde@email.it> * + * * + * 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. * + ***************************************************************************/ + +// qt/kde includes +#include <qtooltip.h> +#include <qapplication.h> +#include <qtimer.h> +#include <kaction.h> +#include <kactioncollection.h> +#include <klocale.h> +#include <kiconloader.h> +#include <klineedit.h> +#include <kpopupmenu.h> +#include <ktoolbarbutton.h> + +// local includes +#include "searchwidget.h" +#include "core/document.h" +#include "conf/settings.h" + +#define CLEAR_ID 1 +#define LEDIT_ID 2 +#define FIND_ID 3 + +SearchWidget::SearchWidget( QWidget * parent, KPDFDocument * document ) + : KToolBar( parent, "iSearchBar" ), m_document( document ), + m_searchType( 0 ), m_caseSensitive( false ) +{ + // change toolbar appearance + setMargin( 3 ); + setFlat( true ); + setIconSize( 16 ); + setMovingEnabled( false ); + + // a timer to ensure that we don't flood the document with requests to search + m_inputDelayTimer = new QTimer(this); + connect( m_inputDelayTimer, SIGNAL( timeout() ), + this, SLOT( startSearch() ) ); + + // 1. text line + insertLined( QString::null, LEDIT_ID, SIGNAL( textChanged(const QString &) ), + this, SLOT( slotTextChanged(const QString &) ), true, + i18n( "Enter at least 3 letters to filter pages" ), 0/*size*/, 1 ); + + // 2. clear button (uses a lineEdit slot, so it must be created after) + insertButton( QApplication::reverseLayout() ? "clear_left" : "locationbar_erase", + CLEAR_ID, SIGNAL( clicked() ), + getLined( LEDIT_ID ), SLOT( clear() ), true, + i18n( "Clear filter" ), 0/*index*/ ); + + // 3.1. create the popup menu for changing filtering features + m_menu = new KPopupMenu( this ); + m_menu->insertItem( i18n("Case Sensitive"), 1 ); + m_menu->insertSeparator( 2 ); + m_menu->insertItem( i18n("Match Phrase"), 3 ); + m_menu->insertItem( i18n("Match All Words"), 4 ); + m_menu->insertItem( i18n("Match Any Word"), 5 ); + m_menu->setItemChecked( 3, true ); + connect( m_menu, SIGNAL( activated(int) ), SLOT( slotMenuChaged(int) ) ); + + // 3.2. create the toolbar button that spawns the popup menu + insertButton( "kpdf", FIND_ID, m_menu, true, i18n( "Filter Options" ), 2/*index*/ ); + + // always maximize the text line + setItemAutoSized( LEDIT_ID ); +} + +void SearchWidget::clearText() +{ + getLined( LEDIT_ID )->clear(); +} + +void SearchWidget::slotTextChanged( const QString & text ) +{ + // if 0<length<3 set 'red' text and send a blank string to document + QColor color = text.length() > 0 && text.length() < 3 ? Qt::darkRed : palette().active().text(); + KLineEdit * lineEdit = getLined( LEDIT_ID ); + lineEdit->setPaletteForegroundColor( color ); + lineEdit->setPaletteBackgroundColor( palette().active().base() ); + m_inputDelayTimer->stop(); + m_inputDelayTimer->start(333, true); +} + +void SearchWidget::slotMenuChaged( int index ) +{ + // update internal variables and checked state + if ( index == 1 ) + { + m_caseSensitive = !m_caseSensitive; + m_menu->setItemChecked( 1, m_caseSensitive ); + } + else if ( index >= 3 && index <= 5 ) + { + m_searchType = index - 3; + for ( int i = 0; i < 3; i++ ) + m_menu->setItemChecked( i + 3, m_searchType == i ); + } + else + return; + + // update search + slotTextChanged( getLined( LEDIT_ID )->text() ); +} + +void SearchWidget::startSearch() +{ + // search text if have more than 3 chars or else clear search + QString text = getLined( LEDIT_ID )->text(); + bool ok = true; + if ( text.length() >= 3 ) + { + KPDFDocument::SearchType type = !m_searchType ? KPDFDocument::AllDoc : + ( (m_searchType > 1) ? KPDFDocument::GoogleAny : + KPDFDocument::GoogleAll ); + ok = m_document->searchText( SW_SEARCH_ID, text, true, m_caseSensitive, + type, false, qRgb( 0, 183, 255 ) ); + } + else + m_document->resetSearch( SW_SEARCH_ID ); + // if not found, use warning colors + if ( !ok ) + { + KLineEdit * lineEdit = getLined( LEDIT_ID ); + lineEdit->setPaletteForegroundColor( Qt::white ); + lineEdit->setPaletteBackgroundColor( Qt::red ); + } +} + +#include "searchwidget.moc" |