lib Library API Documentation

koSearchDia.h

00001 /* This file is part of the KDE project
00002    Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
00003    Copyright (C) 2001, S.R.Haque <srhaque@iee.org>
00004    Copyright (C) 2001, David Faure <david@mandrakesoft.com>
00005 
00006    This library is free software; you can redistribute it and/or
00007    modify it under the terms of the GNU Library General Public
00008    License as published by the Free Software Foundation; either
00009    version 2 of the License, or (at your option) any later version.
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 kosearchdia_h
00023 #define kosearchdia_h
00024 
00025 #include <kfind.h>
00026 #include <kfinddialog.h>
00027 #include <kreplace.h>
00028 #include <kreplacedialog.h>
00029 #include "kotextiterator.h"
00030 #include "kotextformat.h"
00031 
00032 #include <qcolor.h>
00033 #include <qstring.h>
00034 #include <qstringlist.h>
00035 
00036 class QPushButton;
00037 class QRadioButton;
00038 class QGridLayout;
00039 class QCheckBox;
00040 class QComboBox;
00041 class QSpinBox;
00042 class KColorButton;
00043 class KMacroCommand;
00044 class KoTextView;
00045 class KoTextObject;
00046 class KCommand;
00047 class KoTextDocument;
00048 class KoFindReplace;
00049 class KFontCombo;
00050 class KoTextCursor;
00051 //
00052 // This class represents the KWord-specific search extension items, and also the
00053 // corresponding replace items.
00054 //
00055 class KoSearchContext
00056 {
00057 public:
00058 
00059     // Options.
00060 
00061     typedef enum
00062     {
00063         Family = 1 * KFindDialog::MinimumUserOption,
00064         Color = 2 * KFindDialog::MinimumUserOption,
00065         Size = 4 * KFindDialog::MinimumUserOption,
00066         Bold = 8 * KFindDialog::MinimumUserOption,
00067         Italic = 16 * KFindDialog::MinimumUserOption,
00068         Underline = 32 * KFindDialog::MinimumUserOption,
00069         VertAlign = 64 * KFindDialog::MinimumUserOption,
00070         StrikeOut = 128 * KFindDialog::MinimumUserOption,
00071         BgColor = 256 * KFindDialog::MinimumUserOption,
00072         Shadow = 512 * KFindDialog::MinimumUserOption,
00073         WordByWord = 1024 * KFindDialog::MinimumUserOption,
00074         Attribute = 2048 * KFindDialog::MinimumUserOption,
00075         Language = 4096 * KFindDialog::MinimumUserOption
00076     } Options;
00077 
00078     KoSearchContext();
00079     ~KoSearchContext();
00080 
00081     QString m_family;
00082     QColor m_color;
00083     QColor m_backGroundColor;
00084     int m_size;
00085     KoTextFormat::VerticalAlignment m_vertAlign;
00086     KoTextFormat::UnderlineType m_underline;
00087     KoTextFormat::StrikeOutType m_strikeOut;
00088     KoTextFormat::AttributeStyle m_attribute;
00089 
00090     QStringList m_strings; // history
00091     long m_optionsMask;
00092     long m_options;
00093     QString m_language;
00094 };
00095 
00096 //
00097 // This class represents the GUI elements that correspond to KWSearchContext.
00098 //
00099 class KoSearchContextUI : public QObject
00100 {
00101     Q_OBJECT
00102 public:
00103     KoSearchContextUI( KoSearchContext *ctx, QWidget *parent );
00104     void setCtxOptions( long options );
00105     void setCtxHistory( const QStringList & history );
00106     KoSearchContext *context() const { return m_ctx;}
00107     bool optionSelected() const { return m_bOptionsShown;}
00108 private slots:
00109     void slotShowOptions();
00110 
00111 private:
00112     KoSearchContext *m_ctx;
00113     QGridLayout *m_grid;
00114     bool m_bOptionsShown;
00115     QPushButton *m_btnShowOptions;
00116     QWidget *m_parent;
00117 };
00118 
00119 //
00120 // This class is the KWord search dialog.
00121 //
00122 class KoSearchDia:
00123     public KFindDialog
00124 {
00125     Q_OBJECT
00126 
00127 public:
00128     KoSearchDia( QWidget *parent, const char *name, KoSearchContext *find, bool hasSelection, bool hasCursor );
00129     KoSearchContext * searchContext() {
00130         return m_findUI->context();
00131     }
00132     bool optionSelected() const { return m_findUI->optionSelected();}
00133 
00134 protected slots:
00135     void slotOk();
00136 
00137 private:
00138     KoSearchContextUI *m_findUI;
00139 };
00140 
00141 //
00142 // This class is the kotext replace dialog.
00143 //
00144 class KoReplaceDia:
00145     public KReplaceDialog
00146 {
00147     Q_OBJECT
00148 
00149 public:
00150 
00151     KoReplaceDia( QWidget *parent, const char *name, KoSearchContext *find, KoSearchContext *replace, bool hasSelection, bool hasCursor );
00152     KoSearchContext * searchContext() {
00153         return m_findUI->context();
00154     }
00155     KoSearchContext * replaceContext() {
00156         return m_replaceUI->context();
00157     }
00158     bool optionFindSelected() const { return m_findUI->optionSelected();}
00159     bool optionReplaceSelected() const { return m_replaceUI->optionSelected();}
00160 protected slots:
00161     void slotOk();
00162 
00163 private:
00164 
00165     KoSearchContextUI *m_findUI;
00166     KoSearchContextUI *m_replaceUI;
00167 };
00168 
00172 class KoTextFind : public KFind
00173 {
00174     Q_OBJECT
00175 public:
00176     KoTextFind(const QString &pattern, long options, KoFindReplace *_findReplace, QWidget *parent = 0);
00177     ~KoTextFind();
00178     virtual bool validateMatch( const QString &text, int index, int matchedlength );
00179 private:
00180     KoFindReplace * m_findReplace;
00181 };
00182 
00186 class KoTextReplace : public KReplace
00187 {
00188     Q_OBJECT
00189 public:
00190     KoTextReplace(const QString &pattern, const QString &replacement, long options, KoFindReplace *_findReplace, QWidget *parent = 0);
00191     ~KoTextReplace();
00192     virtual bool validateMatch( const QString &text, int index, int matchedlength );
00193 private:
00194     KoFindReplace * m_findReplace;
00195 };
00196 
00201 class KoFindReplace : public QObject
00202 {
00203     Q_OBJECT
00204 public:
00205     KoFindReplace( QWidget * parent, KoSearchDia * dialog, const QValueList<KoTextObject *> & lstObject, KoTextView* textView );
00206     KoFindReplace( QWidget * parent, KoReplaceDia * dialog, const QValueList<KoTextObject *> & lstObject, KoTextView* textView );
00207     ~KoFindReplace();
00208 
00209     KoTextParag *currentParag() {
00210         return m_textIterator.currentParag();
00211     }
00212 
00213     bool isReplace() const { return m_replace != 0L; }
00214 
00215     bool shouldRestart();
00216 
00217     //int numMatches() const;
00218     //int numReplacements() const;
00219 
00221     bool findNext();
00222 
00224     bool findPrevious();
00225 
00227     void setActiveWindow();
00228 
00230     void emitUndoRedo();
00231 
00232     virtual void emitNewCommand(KCommand *) = 0;
00233 
00237     virtual void highlightPortion(KoTextParag * parag, int index, int length, KoTextDocument *textdoc, KDialogBase* dialog) = 0;
00238 
00240     bool validateMatch( const QString &text, int index, int matchedlength );
00241 
00242 protected:
00243     void replaceWithAttribut( KoTextCursor * cursor, int index );
00244     KMacroCommand* macroCommand();
00245     long options() const;
00246     void setOptions(long opt);
00247     void removeHighlight();
00248     bool needData() const { return m_find ? m_find->needData() : m_replace->needData(); }
00249     void setData( const QString& data, int startPos = -1 ) {
00250         if ( m_find ) m_find->setData( data, startPos );
00251         else m_replace->setData( data, startPos );
00252     }
00253 
00254 protected slots:
00255     void slotFindNext();
00256     void optionsChanged();
00257     void dialogClosed();
00258     void highlight( const QString &text, int matchingIndex, int matchingLength );
00259     void replace( const QString &text, int replacementIndex, int replacedLength, int searchLength );
00260     void slotCurrentParagraphModified( int, int, int );
00261 
00262 private:
00263     void connectFind( KFind* find );
00264 
00265     // Only one of those two will be set
00266     KoTextFind * m_find;
00267     KoTextReplace * m_replace;
00268 
00269     KoSearchContext m_searchContext;
00270     KoSearchContext m_replaceContext;
00271     bool m_searchContextEnabled;
00272     bool m_doCounting;
00273     bool m_bInit;
00274     bool m_currentParagraphModified;
00275 
00276     KMacroCommand *m_macroCmd;
00277     int m_offset;
00278     int m_matchingIndex; // can be removed once we use kde-3.2 (for kfind::index())
00279 
00280     KoTextIterator m_textIterator;
00281 
00282     // For removing the last highlight
00283     KoTextObject* m_lastTextObjectHighlighted;
00284 };
00285 
00290 class KoFormatDia: public KDialogBase
00291 {
00292     Q_OBJECT
00293 public:
00294     KoFormatDia( QWidget* parent, const QString & _caption, KoSearchContext *_ctx, const char* name=0L);
00295     //apply to parameter to context !
00296     void ctxOptions( );
00297 
00298 protected slots:
00299     void slotReset();
00300     void slotClear();
00301 private:
00302     QCheckBox *m_checkFamily;
00303     QCheckBox *m_checkSize;
00304     QCheckBox *m_checkColor;
00305     QCheckBox *m_checkBgColor;
00306     QCheckBox *m_checkBold;
00307     QCheckBox *m_checkItalic;
00308     QCheckBox *m_checkShadow;
00309     QCheckBox *m_checkWordByWord;
00310     QCheckBox *m_checkUnderline;
00311     QCheckBox *m_checkVertAlign;
00312     QCheckBox *m_checkStrikeOut;
00313     QCheckBox *m_checkFontAttribute;
00314     QCheckBox *m_checkLanguage;
00315 
00316     KFontCombo *m_familyItem;
00317     QSpinBox *m_sizeItem;
00318     KColorButton *m_colorItem;
00319     KColorButton *m_bgColorItem;
00320     QRadioButton *m_boldYes;
00321     QRadioButton *m_boldNo;
00322     QRadioButton *m_italicYes;
00323     QRadioButton *m_italicNo;
00324     QRadioButton *m_shadowYes;
00325     QRadioButton *m_shadowNo;
00326     QRadioButton *m_wordByWordYes;
00327     QRadioButton *m_wordByWordNo;
00328 
00329     QComboBox *m_vertAlignItem;
00330     QComboBox *m_underlineItem;
00331     QComboBox *m_strikeOutItem;
00332     QComboBox *m_fontAttributeItem;
00333     QComboBox *m_languageItem;
00334     KoSearchContext *m_ctx;
00335 };
00336 
00337 #endif
KDE Logo
This file is part of the documentation for lib Library Version 1.3.5.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Nov 17 13:19:25 2004 by doxygen 1.3.5 written by Dimitri van Heesch, © 1997-2003