summaryrefslogtreecommitdiffstats
path: root/kutils/kfinddialog.h
diff options
context:
space:
mode:
Diffstat (limited to 'kutils/kfinddialog.h')
-rw-r--r--kutils/kfinddialog.h315
1 files changed, 315 insertions, 0 deletions
diff --git a/kutils/kfinddialog.h b/kutils/kfinddialog.h
new file mode 100644
index 000000000..ed63d5551
--- /dev/null
+++ b/kutils/kfinddialog.h
@@ -0,0 +1,315 @@
+/*
+ Copyright (C) 2001, S.R.Haque <srhaque@iee.org>.
+ Copyright (C) 2002, David Faure <david@mandrakesoft.com>
+ This file is part of the KDE project
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License version 2, as published by the Free Software Foundation.
+
+ 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 KFINDDIALOG_H
+#define KFINDDIALOG_H
+
+#include <kdialogbase.h>
+class KHistoryCombo;
+class QPushButton;
+class QPopupMenu;
+class QGridLayout;
+class QLabel;
+class QGroupBox;
+class QCheckBox;
+
+/**
+ * @ingroup main
+ * @ingroup findreplace
+ * @brief A generic "find" dialog.
+ *
+ * @author S.R.Haque <srhaque@iee.org>
+ *
+ * \b Detail:
+ *
+ * This widget inherits from KDialogBase and implements
+ * the following additional functionalities: a find string
+ * object and an area for a user-defined widget to extend the dialog.
+ *
+ * \b Example:
+ *
+ * To use the basic modal find dialog, and then run the search:
+ *
+ * \code
+ * KFindDialog dlg(....)
+ * if ( dlg.exec() != QDialog::Accepted )
+ * return;
+ *
+ * // proceed with KFind from here
+ * \endcode
+ *
+ * To create a non-modal find dialog:
+ * \code
+ * if ( m_findDia )
+ * KWin::setActiveWindow( m_findDia->winId() );
+ * else
+ * {
+ * m_findDia = new KFindDialog(false,...);
+ * connect( m_findDia, SIGNAL(okClicked()), this, SLOT(findTextNext()) );
+ * }
+ * \endcode
+ * Don't forget to delete and reset m_findDia when closed.
+ * (But do NOT delete your KFind object at that point, it's needed for "Find Next")
+ *
+ * To use your own extensions: see findExtension().
+ *
+ */
+class KUTILS_EXPORT KFindDialog:
+ public KDialogBase
+{
+ Q_OBJECT
+
+public:
+
+ // Options.
+
+ // KDE4: move to KFind
+ /**
+ * Options for the search
+ */
+ enum Options
+ {
+ WholeWordsOnly = 1, ///< Match whole words only.
+ FromCursor = 2, ///< Start from current cursor position.
+ SelectedText = 4, ///< Only search selected area.
+ CaseSensitive = 8, ///< Consider case when matching.
+ FindBackwards = 16, ///< Go backwards.
+ RegularExpression = 32, ///< Interpret the pattern as a regular expression.
+ FindIncremental = 64, ///< Find incremental.
+ // Note that KReplaceDialog uses 256 and 512
+ // User extensions can use boolean options above this value.
+ MinimumUserOption = 65536 ///< The first flag which can be used by extensions.
+ };
+
+ /**
+ * Construct a modal find dialog
+ *
+ * @param parent The parent object of this widget.
+ * @param name The name of this widget.
+ * @param options A bitfield of the Options to be checked.
+ * @param findStrings The find history, see findHistory()
+ * @param hasSelection Whether a selection exists
+ */
+ KFindDialog( QWidget *parent = 0, const char *name = 0, long options = 0,
+ const QStringList &findStrings = QStringList(), bool hasSelection = false );
+ // KDE4: fix ambiguity with private constructor
+ // Maybe remove options (there's setOptions) and findStrings (setFindHistory) and hasSelection (setHasSelection)
+
+ /**
+ * Construct a non-modal find dialog
+ *
+ * @param modal set to @c false to get a non-modal dialog
+ * @param parent The parent object of this widget.
+ * @param name The name of this widget.
+ * @param options A bitfield of the Options to be checked.
+ * @param findStrings The find history, see findHistory()
+ * @param hasSelection Whether a selection exists
+ */
+ KFindDialog( bool modal, QWidget *parent = 0, const char *name = 0, long options = 0,
+ const QStringList &findStrings = QStringList(), bool hasSelection = false );
+ // KDE4: consider simplifying
+
+ /**
+ * Destructor.
+ */
+ virtual ~KFindDialog();
+
+ /**
+ * Provide the list of @p strings to be displayed as the history
+ * of find strings. @p strings might get truncated if it is
+ * too long.
+ *
+ * @param history The find history.
+ * @see findHistory
+ */
+ void setFindHistory( const QStringList &history );
+
+ /**
+ * Returns the list of history items.
+ *
+ * @return The find history.
+ * @see setFindHistory
+ */
+ QStringList findHistory() const;
+
+ /**
+ * Enable/disable the 'search in selection' option, depending
+ * on whether there actually is a selection.
+ *
+ * @param hasSelection @c true if a selection exists
+ */
+ void setHasSelection( bool hasSelection );
+
+ /**
+ * Hide/show the 'from cursor' option, depending
+ * on whether the application implements a cursor.
+ *
+ * @param hasCursor @c true if the application features a cursor
+ * This is assumed to be the case by default.
+ */
+ void setHasCursor( bool hasCursor );
+
+ /**
+ * Enable/disable the 'Find backwards' option, depending
+ * on whether the application supports it.
+ *
+ * @param supports @c true if the application supports backwards find
+ * This is assumed to be the case by default.
+ * @since 3.4
+ */
+ void setSupportsBackwardsFind( bool supports );
+
+ /**
+ * Enable/disable the 'Case sensitive' option, depending
+ * on whether the application supports it.
+ *
+ * @param supports @c true if the application supports case sensitive find
+ * This is assumed to be the case by default.
+ * @since 3.4
+ */
+ void setSupportsCaseSensitiveFind( bool supports );
+
+ /**
+ * Enable/disable the 'Whole words only' option, depending
+ * on whether the application supports it.
+ *
+ * @param supports @c true if the application supports whole words only find
+ * This is assumed to be the case by default.
+ * @since 3.4
+ */
+ void setSupportsWholeWordsFind( bool supports );
+
+ /**
+ * Enable/disable the 'Regular expression' option, depending
+ * on whether the application supports it.
+ *
+ * @param supports @c true if the application supports regular expression find
+ * This is assumed to be the case by default.
+ * @since 3.4
+ */
+ void setSupportsRegularExpressionFind( bool supports );
+
+ /**
+ * Set the options which are checked.
+ *
+ * @param options The setting of the Options.
+ * @see Options
+ */
+ void setOptions( long options );
+
+ /**
+ * Returns the state of the options. Disabled options may be returned in
+ * an indeterminate state.
+ *
+ * @return The options.
+ * @see Options, setOptions
+ */
+ long options() const;
+
+ /**
+ * Returns the pattern to find.
+ * @return The search text.
+ */
+ QString pattern() const;
+
+ /**
+ * Sets the pattern to find.
+ * @param pattern The new search pattern.
+ */
+ void setPattern ( const QString &pattern );
+
+ /**
+ * Returns an empty widget which the user may fill with additional UI
+ * elements as required. The widget occupies the width of the dialog,
+ * and is positioned immediately below the regular expression support
+ * widgets for the pattern string.
+ * @return An extensible QWidget.
+ */
+ QWidget *findExtension();
+
+protected slots:
+
+ void slotOk();
+ void slotSelectedTextToggled(bool);
+ void showPatterns();
+ void showPlaceholders();
+ void textSearchChanged( const QString &);
+
+protected:
+ virtual void showEvent ( QShowEvent * );
+
+private slots:
+ /**
+ * connected to the aboutToShow of the placeholders menu,
+ * updates it according to the text in the pattern.
+ */
+ void slotPlaceholdersAboutToShow();
+
+private:
+
+ QGroupBox *m_findGrp;
+ QLabel *m_findLabel;
+ KHistoryCombo *m_find;
+ QCheckBox *m_regExp;
+ QPushButton *m_regExpItem;
+ QGridLayout *m_findLayout;
+ QWidget *m_findExtension;
+
+ QGroupBox *m_optionGrp;
+ QCheckBox *m_wholeWordsOnly;
+ QCheckBox *m_fromCursor;
+ QCheckBox *m_selectedText;
+ QCheckBox *m_caseSensitive;
+ QCheckBox *m_findBackwards;
+
+ QPopupMenu *m_patterns;
+
+ // Our dirty little secret is that we also implement the "replace" dialog. But we
+ // keep that fact hidden from all but our friends.
+
+ friend class KReplaceDialog;
+
+ /**
+ * Construct a find dialog with a parent object and a name. This version of the
+ * constructor is for use by friends only!
+ *
+ * @param forReplace Is this a replace dialog?
+ */
+ KFindDialog( QWidget *parent, const char *name, bool forReplace );
+ void init( bool forReplace, const QStringList &findStrings, bool hasSelection );
+
+ QGroupBox *m_replaceGrp;
+ QLabel *m_replaceLabel;
+ KHistoryCombo *m_replace;
+ QCheckBox* m_backRef;
+ QPushButton* m_backRefItem;
+ QGridLayout *m_replaceLayout;
+ QWidget *m_replaceExtension;
+
+ QCheckBox* m_promptOnReplace;
+
+ QPopupMenu *m_placeholders;
+
+ // Binary compatible extensibility.
+ class KFindDialogPrivate;
+ KFindDialogPrivate *d;
+};
+
+#endif // KFINDDIALOG_H