00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef __KATE_SEARCH_H__
00023
#define __KATE_SEARCH_H__
00024
00025
#include "katecursor.h"
00026
#include "../interfaces/document.h"
00027
00028
#include <kdialogbase.h>
00029
00030
#include <qstring.h>
00031
#include <qregexp.h>
00032
#include <qstringlist.h>
00033
#include <qvaluelist.h>
00034
00035
class KateView;
00036
class KateDocument;
00037
class KateSuperRangeList;
00038
00039
class KActionCollection;
00040
00041
class KateSearch :
public QObject
00042 {
00043 Q_OBJECT
00044
00045
friend class KateDocument;
00046
00047
private:
00048
class SearchFlags
00049 {
00050
public:
00051
bool caseSensitive :1;
00052
bool wholeWords :1;
00053
bool fromBeginning :1;
00054
bool backward :1;
00055
bool selected :1;
00056
bool prompt :1;
00057
bool replace :1;
00058
bool finished :1;
00059
bool regExp :1;
00060
bool useBackRefs :1;
00061 };
00062
00063
class SConfig
00064 {
00065
public:
00066 SearchFlags flags;
00067
KateTextCursor cursor;
00068
KateTextCursor wrappedEnd;
00069
bool wrapped;
00070
bool showNotFound;
00071 uint matchedLength;
00072
KateTextCursor selBegin;
00073
KateTextCursor selEnd;
00074 };
00075
00076
public:
00077
enum Dialog_results {
00078 srCancel = KDialogBase::Cancel,
00079 srAll = KDialogBase::User1,
00080 srLast = KDialogBase::User2,
00081 srNo = KDialogBase::User3,
00082 srYes = KDialogBase::Ok
00083 };
00084
00085
public:
00086 KateSearch( KateView* );
00087 ~KateSearch();
00088
00089
void createActions(
KActionCollection* );
00090
00091
public slots:
00092
void find();
00104
void find(
const QString &pattern,
long flags,
bool add=
true,
bool shownotfound=
false );
00105
void replace();
00114
void replace(
const QString &pattern,
const QString &replacement,
long flags );
00115
void findAgain(
bool back );
00116
00117
private slots:
00118
void replaceSlot();
00119
void slotFindNext() { findAgain(
false ); }
00120
void slotFindPrev() { findAgain(
true ); }
00121
00122
private:
00123
static void addToList(
QStringList&,
const QString& );
00124
static void addToSearchList(
const QString& s ) { addToList( s_searchList, s ); }
00125
static void addToReplaceList(
const QString& s ) { addToList( s_replaceList, s ); }
00126
static QStringList s_searchList;
00127
static QStringList s_replaceList;
00128
static QString s_pattern;
00129
00130
void search( SearchFlags flags );
00131
void wrapSearch();
00132
bool askContinue();
00133
00134
void findAgain();
00135
void promptReplace();
00136
void replaceAll();
00137
void replaceOne();
00138
void skipOne();
00139
00140
QString getSearchText();
00141
KateTextCursor getCursor();
00142
bool doSearch(
const QString& text );
00143
void exposeFound(
KateTextCursor &cursor,
int slen );
00144
00145
inline KateView* view() {
return m_view; }
00146
inline KateDocument* doc() {
return m_doc; }
00147
00148 KateView* m_view;
00149 KateDocument* m_doc;
00150
00151 KateSuperRangeList* m_arbitraryHLList;
00152
00153 SConfig s;
00154
00155
QValueList<SConfig> m_searchResults;
00156
int m_resultIndex;
00157
00158
int replaces;
00159
QDialog* replacePrompt;
00160
QString m_replacement;
00161
QRegExp m_re;
00162 };
00163
00167 class KateReplacePrompt :
public KDialogBase
00168 {
00169 Q_OBJECT
00170
00171
public:
00176
KateReplacePrompt(
QWidget *parent);
00177
00178 signals:
00182
void clicked();
00183
00184
protected slots:
00188
void slotOk ();
00189
00193
void slotClose ();
00194
00198
void slotUser1 ();
00199
00203
void slotUser2 ();
00204
00208
void slotUser3 ();
00209
00214
void done (
int result);
00215 };
00216
00217
class SearchCommand :
public Kate::Command,
public Kate::CommandExtension
00218 {
00219
public:
00220 SearchCommand() : m_ifindFlags(0) {;}
00221
bool exec(
class Kate::View *view,
const QString &cmd,
QString &errorMsg);
00222
bool help(
class Kate::View *,
const QString &,
QString &);
00223
QStringList cmds();
00224
bool wantsToProcessText(
const QString & );
00225
void processText(
Kate::View *,
const QString& );
00226
00227
private:
00231
void ifindInit(
const QString &cmd );
00235
void ifindClear();
00236
00237
long m_ifindFlags;
00238 };
00239
00240
#endif
00241
00242