kate Library API Documentation

katesearch.h

00001 /* This file is part of the KDE libraries
00002    Copyright (C) 2002 John Firebaugh <jfirebaugh@kde.org>
00003    Copyright (C) 2001-2004 Christoph Cullmann <cullmann@kde.org>
00004    Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org>
00005    Copyright (C) 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de>
00006 
00007    This library is free software; you can redistribute it and/or
00008    modify it under the terms of the GNU Library General Public
00009    License version 2 as published by the Free Software Foundation.
00010 
00011    This library is distributed in the hope that it will be useful,
00012    but WITHOUT ANY WARRANTY; without even the implied warranty of
00013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014    Library General Public License for more details.
00015 
00016    You should have received a copy of the GNU Library General Public License
00017    along with this library; see the file COPYING.LIB.  If not, write to
00018    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00019    Boston, MA 02111-1307, USA.
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; // after wraping around, search/replace until here
00069         bool wrapped; // have we allready wrapped around ?
00070         bool showNotFound; // pop up annoying dialogs?
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 &/*cmdname*/ );
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 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Logo
This file is part of the documentation for kate Library Version 3.4.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Jul 20 12:57:23 2006 by doxygen 1.4.4 written by Dimitri van Heesch, © 1997-2003