You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdelibs/kate/part/katesearch.h

244 lines
6.4 KiB

/* This file is part of the KDE libraries
Copyright (C) 2004-2005 Anders Lund <anders@alweb.dk>
Copyright (C) 2002 John Firebaugh <jfirebaugh@kde.org>
Copyright (C) 2001-2004 Christoph Cullmann <cullmann@kde.org>
Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org>
Copyright (C) 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de>
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 <kdialogbase.h>
#include <tqstring.h>
#include <tqregexp.h>
#include <tqstringlist.h>
#include <tqvaluelist.h>
class KateView;
class KateDocument;
class KateSuperRangeList;
class KActionCollection;
class KateSearch : public TQObject
{
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 TQString &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 TQString &pattern, const TQString &replacement, long flags );
void findAgain( bool reverseDirection );
private slots:
void replaceSlot();
void slotFindNext() { findAgain( false ); }
void slotFindPrev() { findAgain( true ); }
private:
static void addToList( TQStringList&, const TQString& );
static void addToSearchList( const TQString& s ) { addToList( s_searchList, s ); }
static void addToReplaceList( const TQString& s ) { addToList( s_replaceList, s ); }
static TQStringList s_searchList; ///< recent patterns
static TQStringList s_replaceList; ///< recent replacement strings
static TQString 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();
TQString getSearchText();
KateTextCursor getCursor( SearchFlags flags );
bool doSearch( const TQString& 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;
TQValueList<SConfig> m_searchResults;
int m_resultIndex;
int replaces;
TQDialog* replacePrompt;
TQString m_replacement;
TQRegExp m_re;
};
/**
* simple replace prompt dialog
*/
class KateReplacePrompt : public KDialogBase
{
Q_OBJECT
public:
/**
* Constructor
* @param parent parent widget for the dialog
*/
KateReplacePrompt(TQWidget *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 TQString &cmd, TQString &errorMsg);
bool help(class Kate::View *, const TQString &, TQString &);
TQStringList cmds();
bool wantsToProcessText( const TQString &/*cmdname*/ );
void processText( Kate::View *view, const TQString& text );
private:
/**
* set up properties for incremental find
*/
void ifindInit( const TQString &cmd );
/**
* clear properties for incremental find
*/
void ifindClear();
long m_ifindFlags;
};
#endif
// kate: space-indent on; indent-width 2; replace-tabs on;