⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 searchwidget.cpp.svn-base

📁 okular
💻 SVN-BASE
字号:
/*************************************************************************** *   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 <qmenu.h>#include <qaction.h>#include <qapplication.h>#include <qsizepolicy.h>#include <qtimer.h>#include <qtoolbutton.h>#include <kicon.h>#include <klocale.h>#include <kiconloader.h>#include <klineedit.h>// local includes#include "searchwidget.h"#include "core/document.h"#include "settings.h"SearchWidget::SearchWidget( QWidget * parent, KPDFDocument * document )    : QToolBar( parent ), m_document( document ),    m_searchType( 0 ), m_caseSensitive( false ){    setObjectName( "iSearchBar" );    // change toolbar appearance    setIconSize(QSize(16, 16));    setMovable( false );    QSizePolicy sp = sizePolicy();    sp.setVerticalPolicy( QSizePolicy::Minimum );    setSizePolicy( sp );    // 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() ) );    // 1. clear button    QAction *clearAction = addAction(        KIcon( layoutDirection() == Qt::RightToLeft ? "clear_left" : "locationbar_erase"),        i18n( "Clear filter" ) );    // 2. text line    m_lineEdit = new KLineEdit(this);    m_lineEdit->setToolTip(i18n( "Enter at least 3 letters to filter pages" ));    connect(m_lineEdit, SIGNAL( textChanged(const QString &) ), this, SLOT( slotTextChanged(const QString &) ));    connect(clearAction, SIGNAL( triggered() ), m_lineEdit, SLOT( clear() ));    addWidget(m_lineEdit);    // 3.1. create the popup menu for changing filtering features    m_menu = new QMenu( this );    m_caseSensitiveAction = m_menu->addAction( i18n("Case Sensitive") );    m_menu->addSeparator();    m_matchPhraseAction = m_menu->addAction( i18n("Match Phrase") );    m_marchAllWordsAction = m_menu->addAction( i18n("Match All Words") );    m_marchAnyWordsAction = m_menu->addAction( i18n("Match Any Word") );    m_caseSensitiveAction->setCheckable( true );    QActionGroup *actgrp = new QActionGroup( this );    m_matchPhraseAction->setCheckable( true );    m_matchPhraseAction->setActionGroup( actgrp );    m_marchAllWordsAction->setCheckable( true );    m_marchAllWordsAction->setActionGroup( actgrp );    m_marchAnyWordsAction->setCheckable( true );    m_marchAnyWordsAction->setActionGroup( actgrp );    m_marchAllWordsAction->setChecked( true );    connect( m_menu, SIGNAL( triggered(QAction *) ), SLOT( slotMenuChaged(QAction*) ) );    // 3.2. create the toolbar button that spawns the popup menu    QToolButton *optionsMenuAction =  new QToolButton( this );    addWidget(optionsMenuAction);    optionsMenuAction->setIcon( KIcon( "okular" ) );    optionsMenuAction->setToolTip( i18n( "Filter Options" ) );    optionsMenuAction->setPopupMode( QToolButton::InstantPopup );    optionsMenuAction->setMenu( m_menu );}void SearchWidget::clearText(){    m_lineEdit->clear();}void SearchWidget::slotTextChanged( const QString & text ){    QPalette qAppPalette = QApplication::palette();    // if length<3 set 'red' text and send a blank string to document    QColor color = text.length() < 3 ? Qt::darkRed : qAppPalette.color( QPalette::Text );    QPalette pal = m_lineEdit->palette();    pal.setColor( QPalette::Base, qAppPalette.color( QPalette::Base ) );    pal.setColor( QPalette::Text, color );    m_lineEdit->setPalette( pal );    m_inputDelayTimer->stop();    m_inputDelayTimer->start(333);}void SearchWidget::slotMenuChaged( QAction * act ){    // update internal variables and checked state    if ( act == m_caseSensitiveAction )    {        m_caseSensitive = !m_caseSensitive;        m_caseSensitiveAction->setChecked( m_caseSensitive );    }    else if ( act == m_matchPhraseAction )    {        m_searchType = 0;    }    else if ( act == m_marchAllWordsAction )    {        m_searchType = 1;    }    else if ( act == m_marchAnyWordsAction )    {        m_searchType = 2;    }    else        return;    // update search    slotTextChanged( m_lineEdit->text() );}void SearchWidget::startSearch(){    // search text if have more than 3 chars or else clear search    QString text = m_lineEdit->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 )    {        QPalette pal = m_lineEdit->palette();        pal.setColor( QPalette::Base, Qt::red );        pal.setColor( QPalette::Text, Qt::white );        m_lineEdit->setPalette( pal );    }}#include "searchwidget.moc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -