From ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: 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/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kate/part/katesearch.h | 243 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 kate/part/katesearch.h (limited to 'kate/part/katesearch.h') diff --git a/kate/part/katesearch.h b/kate/part/katesearch.h new file mode 100644 index 000000000..3f2ce2ec6 --- /dev/null +++ b/kate/part/katesearch.h @@ -0,0 +1,243 @@ +/* This file is part of the KDE libraries + Copyright (C) 2004-2005 Anders Lund + Copyright (C) 2002 John Firebaugh + Copyright (C) 2001-2004 Christoph Cullmann + Copyright (C) 2001 Joseph Wenninger + Copyright (C) 1999 Jochen Wilhelmy + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License version 2 as published by the Free Software Foundation. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#ifndef __KATE_SEARCH_H__ +#define __KATE_SEARCH_H__ + +#include "katecursor.h" +#include "../interfaces/document.h" + +#include + +#include +#include +#include +#include + +class KateView; +class KateDocument; +class KateSuperRangeList; + +class KActionCollection; + +class KateSearch : public QObject +{ + Q_OBJECT + + friend class KateDocument; + + private: + class SearchFlags + { + public: + bool caseSensitive :1; + bool wholeWords :1; + bool fromBeginning :1; + bool backward :1; + bool selected :1; + bool prompt :1; + bool replace :1; + bool finished :1; + bool regExp :1; + bool useBackRefs :1; + }; + + class SConfig + { + public: + SearchFlags flags; + KateTextCursor cursor; + KateTextCursor wrappedEnd; // after wraping around, search/replace until here + bool wrapped; // have we allready wrapped around ? + bool showNotFound; // pop up annoying dialogs? + uint matchedLength; + KateTextCursor selBegin; + KateTextCursor selEnd; + }; + + public: + enum Dialog_results { + srCancel = KDialogBase::Cancel, + srAll = KDialogBase::User1, + srLast = KDialogBase::User2, + srNo = KDialogBase::User3, + srYes = KDialogBase::Ok + }; + + public: + KateSearch( KateView* ); + ~KateSearch(); + + void createActions( KActionCollection* ); + + public slots: + void find(); + /** + * Search for @p pattern given @p flags + * This is for the commandline "find", and is forwarded by + * KateView. + * @param pattern string or regex pattern to search for. + * @param flags a OR'ed combination of KFindDialog::Options + * @param add wether this string should be added to the recent search list + * @param shownotfound wether to pop up "Not round: PATTERN" when that happens. + * That must now be explicitly required -- the find dialog does, but the commandline + * incremental search does not. + */ + void find( const QString &pattern, long flags, bool add=true, bool shownotfound=false ); + void replace(); + /** + * Replace @p pattern with @p replacement given @p flags. + * This is for the commandline "replace" and is forwarded + * by KateView. + * @param pattern string or regular expression to search for + * @param replacement Replacement string. + * @param flags OR'd combination of KFindDialog::Options + */ + void replace( const QString &pattern, const QString &replacement, long flags ); + void findAgain( bool reverseDirection ); + + private slots: + void replaceSlot(); + void slotFindNext() { findAgain( false ); } + void slotFindPrev() { findAgain( true ); } + + private: + static void addToList( QStringList&, const QString& ); + static void addToSearchList( const QString& s ) { addToList( s_searchList, s ); } + static void addToReplaceList( const QString& s ) { addToList( s_replaceList, s ); } + static QStringList s_searchList; ///< recent patterns + static QStringList s_replaceList; ///< recent replacement strings + static QString s_pattern; ///< the string to search for + + void search( SearchFlags flags ); + void wrapSearch(); + bool askContinue(); + + void findAgain(); + void promptReplace(); + void replaceAll(); + void replaceOne(); + void skipOne(); + + QString getSearchText(); + KateTextCursor getCursor( SearchFlags flags ); + bool doSearch( const QString& text ); + void exposeFound( KateTextCursor &cursor, int slen ); + + inline KateView* view() { return m_view; } + inline KateDocument* doc() { return m_doc; } + + KateView* m_view; + KateDocument* m_doc; + + KateSuperRangeList* m_arbitraryHLList; + + SConfig s; + + QValueList m_searchResults; + int m_resultIndex; + + int replaces; + QDialog* replacePrompt; + QString m_replacement; + QRegExp m_re; +}; + +/** + * simple replace prompt dialog + */ +class KateReplacePrompt : public KDialogBase +{ + Q_OBJECT + + public: + /** + * Constructor + * @param parent parent widget for the dialog + */ + KateReplacePrompt(QWidget *parent); + + signals: + /** + * button clicked + */ + void clicked(); + + protected slots: + /** + * ok pressed + */ + void slotOk (); + + /** + * close pressed + */ + void slotClose (); + + /** + * replace all pressed + */ + void slotUser1 (); + + /** + * last pressed + */ + void slotUser2 (); + + /** + * Yes pressed + */ + void slotUser3 (); + + /** + * dialog done + * @param result dialog result + */ + void done (int result); +}; + +class SearchCommand : public Kate::Command, public Kate::CommandExtension +{ + public: + SearchCommand() : m_ifindFlags(0) {;} + bool exec(class Kate::View *view, const QString &cmd, QString &errorMsg); + bool help(class Kate::View *, const QString &, QString &); + QStringList cmds(); + bool wantsToProcessText( const QString &/*cmdname*/ ); + void processText( Kate::View *view, const QString& text ); + + private: + /** + * set up properties for incremental find + */ + void ifindInit( const QString &cmd ); + /** + * clear properties for incremental find + */ + void ifindClear(); + + long m_ifindFlags; +}; + +#endif + +// kate: space-indent on; indent-width 2; replace-tabs on; -- cgit v1.2.1