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 06:54:18 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003