summaryrefslogtreecommitdiffstats
path: root/lib/kotext/KoSearchDia.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kotext/KoSearchDia.h')
-rw-r--r--lib/kotext/KoSearchDia.h338
1 files changed, 338 insertions, 0 deletions
diff --git a/lib/kotext/KoSearchDia.h b/lib/kotext/KoSearchDia.h
new file mode 100644
index 000000000..c83d235d2
--- /dev/null
+++ b/lib/kotext/KoSearchDia.h
@@ -0,0 +1,338 @@
+/* This file is part of the KDE project
+ Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
+ Copyright (C) 2001, S.R.Haque <srhaque@iee.org>
+ Copyright (C) 2001, David Faure <faure@kde.org>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ 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 kosearchdia_h
+#define kosearchdia_h
+
+#include <kfind.h>
+#include <kfinddialog.h>
+#include <kreplace.h>
+#include <kreplacedialog.h>
+#include "KoTextIterator.h"
+#include "KoTextFormat.h"
+
+#include <qcolor.h>
+#include <qstring.h>
+#include <qstringlist.h>
+#include <koffice_export.h>
+
+class QPushButton;
+class QRadioButton;
+class QGridLayout;
+class QCheckBox;
+class QComboBox;
+class QSpinBox;
+class KColorButton;
+class KMacroCommand;
+class KoTextView;
+class KoTextObject;
+class KCommand;
+class KoTextDocument;
+class KoFindReplace;
+class KFontCombo;
+class KoTextCursor;
+//
+// This class represents the KWord-specific search extension items, and also the
+// corresponding replace items.
+//
+class KOTEXT_EXPORT KoSearchContext
+{
+public:
+
+ // Options.
+
+ typedef enum
+ {
+ Family = 1 * KFindDialog::MinimumUserOption,
+ Color = 2 * KFindDialog::MinimumUserOption,
+ Size = 4 * KFindDialog::MinimumUserOption,
+ Bold = 8 * KFindDialog::MinimumUserOption,
+ Italic = 16 * KFindDialog::MinimumUserOption,
+ Underline = 32 * KFindDialog::MinimumUserOption,
+ VertAlign = 64 * KFindDialog::MinimumUserOption,
+ StrikeOut = 128 * KFindDialog::MinimumUserOption,
+ BgColor = 256 * KFindDialog::MinimumUserOption,
+ Shadow = 512 * KFindDialog::MinimumUserOption,
+ WordByWord = 1024 * KFindDialog::MinimumUserOption,
+ Attribute = 2048 * KFindDialog::MinimumUserOption,
+ Language = 4096 * KFindDialog::MinimumUserOption
+ } Options;
+
+ KoSearchContext();
+ ~KoSearchContext();
+
+ QString m_family;
+ QColor m_color;
+ QColor m_backGroundColor;
+ int m_size;
+ KoTextFormat::VerticalAlignment m_vertAlign;
+ KoTextFormat::UnderlineType m_underline;
+ KoTextFormat::StrikeOutType m_strikeOut;
+ KoTextFormat::AttributeStyle m_attribute;
+
+ QStringList m_strings; // history
+ long m_optionsMask;
+ long m_options;
+ QString m_language;
+};
+
+//
+// This class represents the GUI elements that correspond to KWSearchContext.
+//
+class KoSearchContextUI : public QObject
+{
+ Q_OBJECT
+public:
+ KoSearchContextUI( KoSearchContext *ctx, QWidget *parent );
+ void setCtxOptions( long options );
+ void setCtxHistory( const QStringList & history );
+ KoSearchContext *context() const { return m_ctx;}
+ bool optionSelected() const { return m_bOptionsShown;}
+private slots:
+ void slotShowOptions();
+
+private:
+ KoSearchContext *m_ctx;
+ QGridLayout *m_grid;
+ bool m_bOptionsShown;
+ QPushButton *m_btnShowOptions;
+ QWidget *m_parent;
+};
+
+//
+// This class is the KWord search dialog.
+//
+class KOTEXT_EXPORT KoSearchDia:
+ public KFindDialog
+{
+ Q_OBJECT
+
+public:
+ KoSearchDia( QWidget *parent, const char *name, KoSearchContext *find, bool hasSelection, bool hasCursor );
+ KoSearchContext * searchContext() {
+ return m_findUI->context();
+ }
+ bool optionSelected() const { return m_findUI->optionSelected();}
+
+protected slots:
+ void slotOk();
+
+private:
+ KoSearchContextUI *m_findUI;
+};
+
+//
+// This class is the kotext replace dialog.
+//
+class KOTEXT_EXPORT KoReplaceDia:
+ public KReplaceDialog
+{
+ Q_OBJECT
+
+public:
+
+ KoReplaceDia( QWidget *parent, const char *name, KoSearchContext *find, KoSearchContext *replace, bool hasSelection, bool hasCursor );
+ KoSearchContext * searchContext() {
+ return m_findUI->context();
+ }
+ KoSearchContext * replaceContext() {
+ return m_replaceUI->context();
+ }
+ bool optionFindSelected() const { return m_findUI->optionSelected();}
+ bool optionReplaceSelected() const { return m_replaceUI->optionSelected();}
+protected slots:
+ void slotOk();
+
+private:
+
+ KoSearchContextUI *m_findUI;
+ KoSearchContextUI *m_replaceUI;
+};
+
+/**
+ * Reimplement KFind to provide our own validateMatch - for the formatting options
+ */
+class KoTextFind : public KFind
+{
+ Q_OBJECT
+public:
+ KoTextFind(const QString &pattern, long options, KoFindReplace *_findReplace, QWidget *parent = 0);
+ ~KoTextFind();
+ virtual bool validateMatch( const QString &text, int index, int matchedlength );
+private:
+ KoFindReplace * m_findReplace;
+};
+
+/**
+ * Reimplement KoReplace to provide our own validateMatch - for the formatting options
+ */
+class KoTextReplace : public KReplace
+{
+ Q_OBJECT
+public:
+ KoTextReplace(const QString &pattern, const QString &replacement, long options, KoFindReplace *_findReplace, QWidget *parent = 0);
+ ~KoTextReplace();
+ virtual bool validateMatch( const QString &text, int index, int matchedlength );
+private:
+ KoFindReplace * m_findReplace;
+};
+
+/**
+ * This class implements the 'find' functionality ( the "search next, prompt" loop )
+ * and the 'replace' functionality. Same class, to allow centralizing the findNext() code.
+ */
+class KOTEXT_EXPORT KoFindReplace : public QObject
+{
+ Q_OBJECT
+public:
+ KoFindReplace( QWidget * parent, KoSearchDia * dialog, const QValueList<KoTextObject *> & lstObject, KoTextView* textView );
+ KoFindReplace( QWidget * parent, KoReplaceDia * dialog, const QValueList<KoTextObject *> & lstObject, KoTextView* textView );
+ ~KoFindReplace();
+
+ KoTextParag *currentParag() {
+ return m_textIterator.currentParag();
+ }
+
+ bool isReplace() const { return m_replace != 0L; }
+
+ bool shouldRestart();
+
+ //int numMatches() const;
+ //int numReplacements() const;
+
+ /** Look for the next match. Returns false if we're finished. */
+ bool findNext();
+
+ /** Look for the previous match. Returns false if we're finished. */
+ bool findPrevious();
+
+ /** Bring to front (e.g. when menuitem called twice) */
+ void setActiveWindow();
+
+ /** Emit undo/redo command for the last replacements made. */
+ void emitUndoRedo();
+
+ virtual void emitNewCommand(KCommand *) = 0;
+
+ /**
+ * Highlight a match.
+ */
+ virtual void highlightPortion(KoTextParag * parag, int index, int length, KoTextDocument *textdoc, KDialogBase* dialog) = 0;
+
+ /** For KoTextFind and KoTextReplace */
+ bool validateMatch( const QString &text, int index, int matchedlength );
+
+protected:
+ void replaceWithAttribut( KoTextCursor * cursor, int index );
+ KMacroCommand* macroCommand();
+ long options() const;
+ void setOptions(long opt);
+ void removeHighlight();
+ bool needData() const { return m_find ? m_find->needData() : m_replace->needData(); }
+ void setData( const QString& data, int startPos = -1 ) {
+ if ( m_find ) m_find->setData( data, startPos );
+ else m_replace->setData( data, startPos );
+ }
+
+protected slots:
+ void slotFindNext();
+ void optionsChanged();
+ void dialogClosed();
+ void highlight( const QString &text, int matchingIndex, int matchingLength );
+ void replace( const QString &text, int replacementIndex, int replacedLength, int searchLength );
+ void slotCurrentParagraphModified( int, int, int );
+
+private:
+ void connectFind( KFind* find );
+
+ // Only one of those two will be set
+ KoTextFind * m_find;
+ KoTextReplace * m_replace;
+
+ KoSearchContext m_searchContext;
+ KoSearchContext m_replaceContext;
+ bool m_searchContextEnabled;
+ bool m_doCounting;
+ bool m_bInit;
+ bool m_currentParagraphModified;
+
+ KMacroCommand *m_macroCmd;
+ int m_offset;
+ int m_matchingIndex; // can be removed once we use kde-3.2 (for kfind::index())
+
+ KoTextIterator m_textIterator;
+
+ // For removing the last highlight
+ KoTextObject* m_lastTextObjectHighlighted;
+};
+
+/**
+ * The separate dialog that pops up to ask for which formatting options
+ * should be used to match text, or when replacing text.
+ */
+class KoFormatDia: public KDialogBase
+{
+ Q_OBJECT
+public:
+ KoFormatDia( QWidget* parent, const QString & _caption, KoSearchContext *_ctx, const char* name=0L);
+ //apply to parameter to context !
+ void ctxOptions( );
+
+protected slots:
+ void slotReset();
+ void slotClear();
+private:
+ QCheckBox *m_checkFamily;
+ QCheckBox *m_checkSize;
+ QCheckBox *m_checkColor;
+ QCheckBox *m_checkBgColor;
+ QCheckBox *m_checkBold;
+ QCheckBox *m_checkItalic;
+ QCheckBox *m_checkShadow;
+ QCheckBox *m_checkWordByWord;
+ QCheckBox *m_checkUnderline;
+ QCheckBox *m_checkVertAlign;
+ QCheckBox *m_checkStrikeOut;
+ QCheckBox *m_checkFontAttribute;
+ QCheckBox *m_checkLanguage;
+
+ KFontCombo *m_familyItem;
+ QSpinBox *m_sizeItem;
+ KColorButton *m_colorItem;
+ KColorButton *m_bgColorItem;
+ QRadioButton *m_boldYes;
+ QRadioButton *m_boldNo;
+ QRadioButton *m_italicYes;
+ QRadioButton *m_italicNo;
+ QRadioButton *m_shadowYes;
+ QRadioButton *m_shadowNo;
+ QRadioButton *m_wordByWordYes;
+ QRadioButton *m_wordByWordNo;
+
+ QComboBox *m_vertAlignItem;
+ QComboBox *m_underlineItem;
+ QComboBox *m_strikeOutItem;
+ QComboBox *m_fontAttributeItem;
+ QComboBox *m_languageItem;
+ KoSearchContext *m_ctx;
+};
+
+#endif