diff options
author | hjk <hjk121@nokiamail.com> | 2014-01-13 16:17:34 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2014-01-14 07:43:00 +0100 |
commit | 4d96fa7aba7be35800d61d8bed89d3f6c3ef9329 (patch) | |
tree | c9b102981cf81023e1488224a24758af18aa064e /src/plugins/find/ifindfilter.cpp | |
parent | 8b854270a6c214479b2cdf302072a3e74fa854da (diff) |
Core: Merge Find and Locator into Core plugin
Change-Id: I7053310272235d854c9f409670ff52a10a7add8b
Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Diffstat (limited to 'src/plugins/find/ifindfilter.cpp')
-rw-r--r-- | src/plugins/find/ifindfilter.cpp | 285 |
1 files changed, 0 insertions, 285 deletions
diff --git a/src/plugins/find/ifindfilter.cpp b/src/plugins/find/ifindfilter.cpp deleted file mode 100644 index bcd8e8d2c4..0000000000 --- a/src/plugins/find/ifindfilter.cpp +++ /dev/null @@ -1,285 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Digia gives you certain additional -** rights. These rights are described in the Digia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -****************************************************************************/ - -#include "ifindfilter.h" - -#include <QPainter> -#include <QPixmap> - -/*! - \class Find::IFindFilter - \brief The IFindFilter class is the base class for find implementations - that are invoked by selecting \gui Edit > \gui {Find/Replace} > - \gui {Advanced Find}. - - Implementations of this class add an additional \gui Scope to the \gui {Advanced - Find} dialog. That can be any search that requires the user to provide - a text based search term (potentially with find flags like - searching case sensitively or using regular expressions). Existing - scopes are \gui {All Projects} that searches from all files in all projects - and \gui {Files on File System} where the user provides a directory and file - patterns to search. - - To make your find scope available to the user, you need to implement this - class, and register an instance of your subclass in the plugin manager. - - A common way to present the search results to the user, is to use the - shared \gui{Search Results} panel. - - If you want to implement a find filter that is doing a file based text - search, you should use Find::BaseFileFind, which already implements all - the details for this kind of search, only requiring you to provide an - iterator over the file names of the files that should be searched. - - If you want to implement a more specialized find filter, you need to: - \list - \li Start your search in a separate thread - \li Make this known to the Core::ProgressManager, for a progress bar - and the ability to cancel the search - \li Interface with the shared \gui{Search Results} panel, to show - the search results, handle the event that the user click on one - of the search result items, and possible handle a global replace - of all or some of the search result items. - \endlist - - Luckily QtConcurrent and the search result panel provide the frameworks - that make it relatively easy to implement, - while ensuring a common way for the user. - - The common pattern is roughly this: - - Implement the actual search within a QtConcurrent based function, that is - a function that takes a \c{QFutureInterface<MySearchResult> &future} - as the first parameter and the other information needed for the search - as additional parameters. It should set useful progress information - on the QFutureInterface, regularly check for \c{future.isPaused()} - and \c{future.isCanceled()}, and report the search results - (possibly in chunks) via \c{future.reportResult}. - - In the find filter's find/replaceAll function, get the shared - \gui{Search Results} window, initiate a new search and connect the - signals for handling selection of results and the replace action - (see the Find::SearchResultWindow class for details). - Start your search implementation via the corresponding QtConcurrent - functions. Add the returned QFuture object to the Core::ProgressManager. - Use a QFutureWatcher on the returned QFuture object to receive a signal - when your search implementation reports search results, and add these - to the shared \gui{Search Results} window. -*/ - -/*! - \fn IFindFilter::~IFindFilter() - \internal -*/ - -/*! - \fn QString IFindFilter::id() const - Returns the unique string identifier for this find filter. - - Usually should be something like "MyPlugin.MyFindFilter". -*/ - -/*! - \fn QString IFindFilter::displayName() const - Returns the name of the find filter or scope as presented to the user. - - This is the name that appears in the scope selection combo box, for example. - Always return a translatable string (that is, use tr() for the return value). -*/ - -/*! - \fn bool IFindFilter::isEnabled() const - Returns whether the user should be able to select this find filter - at the moment. - - This is used for the \gui {Current Projects} scope, for example. If the user - has not - opened a project, the scope is disabled. - - \sa changed() -*/ - -/*! - \fn QKeySequence IFindFilter::defaultShortcut() const - Returns the shortcut that can be used to open the advanced find - dialog with this filter or scope preselected. - - Usually return an empty shortcut here, the user can still choose and - assign a specific shortcut to this find scope via the preferences. -*/ - -/*! - \fn bool IFindFilter::isReplaceSupported() const - Returns whether the find filter supports search and replace. - - The default value is false, override this function to return \c true, if - your find filter supports global search and replace. -*/ - -/*! - \fn void IFindFilter::findAll(const QString &txt, Find::FindFlags findFlags) - This function is called when the user selected this find scope and - initiated a search. - - You should start a thread which actually performs the search for \a txt - using the given \a findFlags - (add it to Core::ProgressManager for a progress bar!) and presents the - search results to the user (using the \gui{Search Results} output pane). - For more information, see the descriptions of this class, - Core::ProgressManager, and Find::SearchResultWindow. - - \sa replaceAll() - \sa Core::ProgressManager - \sa Find::SearchResultWindow -*/ - -/*! - \fn void IFindFilter::replaceAll(const QString &txt, Find::FindFlags findFlags) - Override this function if you want to support search and replace. - - This function is called when the user selected this find scope and - initiated a search and replace. - The default implementation does nothing. - - You should start a thread which actually performs the search for \a txt - using the given \a findFlags - (add it to Core::ProgressManager for a progress bar!) and presents the - search results to the user (using the \gui{Search Results} output pane). - For more information see the descriptions of this class, - Core::ProgressManager, and Find::SearchResultWindow. - - \sa findAll() - \sa Core::ProgressManager - \sa Find::SearchResultWindow -*/ - -/*! - \fn QWidget *IFindFilter::createConfigWidget() - Returns a widget that contains additional controls for options - for this find filter. - - The widget will be shown below the common options in the \gui {Advanced Find} - dialog. It will be reparented and deleted by the find plugin. -*/ - -/*! - \fn void IFindFilter::writeSettings(QSettings *settings) - Called at shutdown to write the state of the additional options - for this find filter to the \a settings. -*/ - -/*! - \fn void IFindFilter::readSettings(QSettings *settings) - Called at startup to read the state of the additional options - for this find filter from the \a settings. -*/ - -/*! - \fn void IFindFilter::enabledChanged(bool enabled) - - Signals that the enabled state of this find filter has changed. -*/ - -/*! - \fn Find::FindFlags BaseTextFind::supportedFindFlags() const - Returns the find flags, like whole words or regular expressions, - that this find filter supports. - - Depending on the returned value, the default find option widgets are - enabled or disabled. - The default is Find::FindCaseSensitively, Find::FindRegularExpression - and Find::FindWholeWords -*/ - -namespace Find { - -FindFlags IFindFilter::supportedFindFlags() const -{ - return FindCaseSensitively - | FindRegularExpression | FindWholeWords; -} - -QPixmap IFindFilter::pixmapForFindFlags(FindFlags flags) -{ - static const QPixmap casesensitiveIcon = QPixmap(QLatin1String(":/find/images/casesensitively.png")); - static const QPixmap regexpIcon = QPixmap(QLatin1String(":/find/images/regexp.png")); - static const QPixmap wholewordsIcon = QPixmap(QLatin1String(":/find/images/wholewords.png")); - static const QPixmap preservecaseIcon = QPixmap(QLatin1String(":/find/images/preservecase.png")); - bool casesensitive = flags & FindCaseSensitively; - bool wholewords = flags & FindWholeWords; - bool regexp = flags & FindRegularExpression; - bool preservecase = flags & FindPreserveCase; - int width = 0; - if (casesensitive) width += 6; - if (wholewords) width += 6; - if (regexp) width += 6; - if (preservecase) width += 6; - if (width > 0) --width; - QPixmap pixmap(width, 17); - pixmap.fill(Qt::transparent); - QPainter painter(&pixmap); - int x = 0; - - if (casesensitive) { - painter.drawPixmap(x - 6, 0, casesensitiveIcon); - x += 6; - } - if (wholewords) { - painter.drawPixmap(x - 6, 0, wholewordsIcon); - x += 6; - } - if (regexp) { - painter.drawPixmap(x - 6, 0, regexpIcon); - x += 6; - } - if (preservecase) - painter.drawPixmap(x - 6, 0, preservecaseIcon); - return pixmap; -} - -QString IFindFilter::descriptionForFindFlags(FindFlags flags) -{ - QStringList flagStrings; - if (flags & FindCaseSensitively) - flagStrings.append(tr("Case sensitive")); - if (flags & FindWholeWords) - flagStrings.append(tr("Whole words")); - if (flags & FindRegularExpression) - flagStrings.append(tr("Regular expressions")); - if (flags & FindPreserveCase) - flagStrings.append(tr("Preserve case")); - QString description = tr("Flags: %1"); - if (flagStrings.isEmpty()) - description = description.arg(tr("None")); - else - description = description.arg(flagStrings.join(tr(", "))); - return description; -} - -} // namespace Find |