• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • tdeutils
 

tdeutils

kfinddialog.cpp

00001 /*
00002     Copyright (C) 2001, S.R.Haque <srhaque@iee.org>.
00003     Copyright (C) 2002, David Faure <david@mandrakesoft.com>
00004     This file is part of the KDE project
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 version 2, as published by the Free Software Foundation.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public License
00016     along with this library; see the file COPYING.LIB.  If not, write to
00017     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018     Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #include "kfinddialog.h"
00022 #include <tqcheckbox.h>
00023 #include <tqcursor.h>
00024 #include <tqgroupbox.h>
00025 #include <tqlabel.h>
00026 #include <tqlayout.h>
00027 #include <tqpopupmenu.h>
00028 #include <tqpushbutton.h>
00029 #include <tqregexp.h>
00030 #include <kcombobox.h>
00031 #include <kdebug.h>
00032 #include <tdelocale.h>
00033 #include <tdemessagebox.h>
00034 #include <assert.h>
00035 #include <tqwhatsthis.h>
00036 
00037 #include <kregexpeditorinterface.h>
00038 #include <tdeparts/componentfactory.h>
00039 
00040 class KFindDialog::KFindDialogPrivate
00041 {
00042 public:
00043     KFindDialogPrivate() : m_regexpDialog(0),
00044         m_regexpDialogQueryDone(false),
00045         m_enabled(WholeWordsOnly | FromCursor | SelectedText | CaseSensitive | FindBackwards | RegularExpression), m_initialShowDone(false) {}
00046     TQDialog* m_regexpDialog;
00047     bool m_regexpDialogQueryDone;
00048     long m_enabled; // uses Options to define which search options are enabled
00049     bool m_initialShowDone;
00050     TQStringList findStrings;
00051     TQString pattern;
00052 };
00053 
00054 KFindDialog::KFindDialog(TQWidget *parent, const char *name, long options, const TQStringList &findStrings, bool hasSelection) :
00055     KDialogBase(parent, name, true, i18n("Find Text"), Ok | Cancel, Ok),
00056     m_findExtension (0),
00057     m_replaceExtension (0)
00058 {
00059     d = new KFindDialogPrivate;
00060     init(false, findStrings, hasSelection);
00061     setOptions(options);
00062     setButtonCancel( KStdGuiItem::close() );
00063 }
00064 
00065 KFindDialog::KFindDialog(bool modal, TQWidget *parent, const char *name, long options, const TQStringList &findStrings, bool hasSelection) :
00066     KDialogBase(parent, name, modal, i18n("Find Text"), Ok | Cancel, Ok),
00067     m_findExtension (0),
00068     m_replaceExtension (0)
00069 {
00070     d = new KFindDialogPrivate;
00071     init(false, findStrings, hasSelection);
00072     setOptions(options);
00073     setButtonCancel( KStdGuiItem::close() );
00074 }
00075 
00076 KFindDialog::KFindDialog(TQWidget *parent, const char *name, bool /*forReplace*/) :
00077     KDialogBase(parent, name, true, i18n("Replace Text"), Ok | Cancel, Ok),
00078     m_findExtension (0),
00079     m_replaceExtension (0)
00080 {
00081     d = new KFindDialogPrivate;
00082     setButtonCancel( KStdGuiItem::close() );
00083 }
00084 
00085 KFindDialog::~KFindDialog()
00086 {
00087     delete d;
00088 }
00089 
00090 TQWidget *KFindDialog::findExtension()
00091 {
00092     if (!m_findExtension)
00093     {
00094       m_findExtension = new TQWidget(m_findGrp);
00095       m_findLayout->addMultiCellWidget(m_findExtension, 3, 3, 0, 1);
00096     }
00097 
00098     return m_findExtension;
00099 }
00100 
00101 TQStringList KFindDialog::findHistory() const
00102 {
00103     return m_find->historyItems();
00104 }
00105 
00106 void KFindDialog::init(bool forReplace, const TQStringList &findStrings, bool hasSelection)
00107 {
00108     TQVBoxLayout *topLayout;
00109     TQGridLayout *optionsLayout;
00110 
00111     // Create common parts of dialog.
00112     TQWidget *page = new TQWidget(this);
00113     setMainWidget(page);
00114 
00115     topLayout = new TQVBoxLayout(page);
00116     topLayout->setSpacing( KDialog::spacingHint() );
00117     topLayout->setMargin( 0 );
00118 
00119     m_findGrp = new TQGroupBox(0, Qt::Vertical, i18n("Find"), page);
00120     m_findGrp->layout()->setSpacing( KDialog::spacingHint() );
00121    // m_findGrp->layout()->setMargin( KDialog::marginHint() );
00122     m_findLayout = new TQGridLayout(m_findGrp->layout());
00123     m_findLayout->setSpacing( KDialog::spacingHint() );
00124    // m_findLayout->setMargin( KDialog::marginHint() );
00125 
00126     m_findLabel = new TQLabel(i18n("&Text to find:"), m_findGrp);
00127     m_find = new KHistoryCombo(true, m_findGrp);
00128     m_find->setMaxCount(10);
00129     m_find->setDuplicatesEnabled(false);
00130     m_regExp = new TQCheckBox(i18n("Regular e&xpression"), m_findGrp);
00131     m_regExpItem = new TQPushButton(i18n("&Edit..."), m_findGrp);
00132     m_regExpItem->setEnabled(false);
00133 
00134     m_findLayout->addWidget(m_findLabel, 0, 0);
00135     m_findLayout->addMultiCellWidget(m_find, 1, 1, 0, 1);
00136     m_findLayout->addWidget(m_regExp, 2, 0);
00137     m_findLayout->addWidget(m_regExpItem, 2, 1);
00138     topLayout->addWidget(m_findGrp);
00139 
00140     m_replaceGrp = new TQGroupBox(0, Qt::Vertical, i18n("Replace With"), page);
00141     m_replaceGrp->layout()->setSpacing( KDialog::spacingHint() );
00142   //  m_replaceGrp->layout()->setMargin( KDialog::marginHint() );
00143     m_replaceLayout = new TQGridLayout(m_replaceGrp->layout());
00144     m_replaceLayout->setSpacing( KDialog::spacingHint() );
00145 //    m_replaceLayout->setMargin( KDialog::marginHint() );
00146 
00147     m_replaceLabel = new TQLabel(i18n("Replace&ment text:"), m_replaceGrp);
00148     m_replace = new KHistoryCombo(true, m_replaceGrp);
00149     m_replace->setMaxCount(10);
00150     m_replace->setDuplicatesEnabled(false);
00151     m_backRef = new TQCheckBox(i18n("Use p&laceholders"), m_replaceGrp);
00152     m_backRef->setEnabled(m_regExp->isChecked());
00153     m_backRefItem = new TQPushButton(i18n("Insert Place&holder"), m_replaceGrp);
00154     m_backRefItem->setEnabled(m_regExp->isChecked() && m_backRef->isChecked());
00155 
00156     m_replaceLayout->addWidget(m_replaceLabel, 0, 0);
00157     m_replaceLayout->addMultiCellWidget(m_replace, 1, 1, 0, 1);
00158     m_replaceLayout->addWidget(m_backRef, 2, 0);
00159     m_replaceLayout->addWidget(m_backRefItem, 2, 1);
00160     topLayout->addWidget(m_replaceGrp);
00161 
00162     m_optionGrp = new TQGroupBox(0, Qt::Vertical, i18n("Options"), page);
00163     m_optionGrp->layout()->setSpacing(KDialog::spacingHint());
00164   //  m_optionGrp->layout()->setMargin(KDialog::marginHint());
00165     optionsLayout = new TQGridLayout(m_optionGrp->layout());
00166     optionsLayout->setSpacing( KDialog::spacingHint() );
00167    // optionsLayout->setMargin( KDialog::marginHint() );
00168 
00169     m_caseSensitive = new TQCheckBox(i18n("C&ase sensitive"), m_optionGrp);
00170     m_wholeWordsOnly = new TQCheckBox(i18n("&Whole words only"), m_optionGrp);
00171     m_fromCursor = new TQCheckBox(i18n("From c&ursor"), m_optionGrp);
00172     m_findBackwards = new TQCheckBox(i18n("Find &backwards"), m_optionGrp);
00173     m_selectedText = new TQCheckBox(i18n("&Selected text"), m_optionGrp);
00174     setHasSelection( hasSelection );
00175     // If we have a selection, we make 'find in selection' default
00176     // and if we don't, then the option has to be unchecked, obviously.
00177     m_selectedText->setChecked( hasSelection );
00178     slotSelectedTextToggled( hasSelection );
00179 
00180     m_promptOnReplace = new TQCheckBox(i18n("&Prompt on replace"), m_optionGrp);
00181     m_promptOnReplace->setChecked( true );
00182 
00183     optionsLayout->addWidget(m_caseSensitive, 0, 0);
00184     optionsLayout->addWidget(m_wholeWordsOnly, 1, 0);
00185     optionsLayout->addWidget(m_fromCursor, 2, 0);
00186     optionsLayout->addWidget(m_findBackwards, 0, 1);
00187     optionsLayout->addWidget(m_selectedText, 1, 1);
00188     optionsLayout->addWidget(m_promptOnReplace, 2, 1);
00189     topLayout->addWidget(m_optionGrp);
00190 
00191     // We delay creation of these until needed.
00192     m_patterns = 0L;
00193     m_placeholders = 0L;
00194 
00195     // signals and slots connections
00196     connect(m_selectedText, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotSelectedTextToggled(bool)));
00197     connect(m_regExp, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotRegexCheckBoxToggled(bool)));
00198     connect(m_backRef, TQT_SIGNAL(toggled(bool)), this, TQT_SLOT(slotPlaceholdersCheckBoxToggled(bool)));
00199     connect(m_regExpItem, TQT_SIGNAL(clicked()), this, TQT_SLOT(showPatterns()));
00200     connect(m_backRefItem, TQT_SIGNAL(clicked()), this, TQT_SLOT(showPlaceholders()));
00201 
00202     connect(m_find, TQT_SIGNAL(textChanged ( const TQString & )),this, TQT_SLOT(textSearchChanged( const TQString & )));
00203 
00204     // tab order
00205     setTabOrder(m_find, m_regExp);
00206     setTabOrder(m_regExp, m_regExpItem);
00207     setTabOrder(m_regExpItem, m_replace);
00208     setTabOrder(m_replace, m_backRef);
00209     setTabOrder(m_backRef, m_backRefItem);
00210     setTabOrder(m_backRefItem, m_caseSensitive);
00211     setTabOrder(m_caseSensitive, m_wholeWordsOnly);
00212     setTabOrder(m_wholeWordsOnly, m_fromCursor);
00213     setTabOrder(m_fromCursor, m_findBackwards);
00214     setTabOrder(m_findBackwards, m_selectedText);
00215     setTabOrder(m_selectedText, m_promptOnReplace);
00216 
00217     // buddies
00218     m_findLabel->setBuddy(m_find);
00219     m_replaceLabel->setBuddy(m_replace);
00220 
00221     if (!forReplace)
00222     {
00223         m_promptOnReplace->hide();
00224         m_replaceGrp->hide();
00225     }
00226 
00227     d->findStrings = findStrings;
00228     m_find->setFocus();
00229     enableButtonOK( !pattern().isEmpty() );
00230     if (forReplace)
00231     {
00232       setButtonOK(KGuiItem( i18n("&Replace"), TQString::null,
00233                     i18n("Start replace"),
00234                     i18n("<qt>If you press the <b>Replace</b> button, the text you entered "
00235                          "above is searched for within the document and any occurrence is "
00236                          "replaced with the replacement text.</qt>")));
00237     }
00238     else
00239     {
00240       setButtonOK(KGuiItem( i18n("&Find"), "edit-find",
00241                     i18n("Start searching"),
00242                     i18n("<qt>If you press the <b>Find</b> button, the text you entered "
00243                          "above is searched for within the document.</qt>")));
00244     }
00245 
00246     // QWhatsthis texts
00247     TQWhatsThis::add ( m_find, i18n(
00248             "Enter a pattern to search for, or select a previous pattern from "
00249             "the list.") );
00250     TQWhatsThis::add ( m_regExp, i18n(
00251             "If enabled, search for a regular expression.") );
00252     TQWhatsThis::add ( m_regExpItem, i18n(
00253             "Click here to edit your regular expression using a graphical editor.") );
00254     TQWhatsThis::add ( m_replace, i18n(
00255             "Enter a replacement string, or select a previous one from the list.") );
00256     TQWhatsThis::add( m_backRef, i18n(
00257             "<qt>When regular expressions are enabled, you can select part of the searched text by "
00258             "enclosing it within parenthesis. Placeholders allow you to insert such text in the "
00259             "replacement string, similar to how backreferences are used in sed. When enabled, "
00260             "any occurrence of <code><b>\\N</b></code> (where <code><b>N</b></code> "
00261             "is a integer number, e.g. \\1, \\2, ...), will be replaced with "
00262             "the corresponding capture (\"parenthesized substring\") from the "
00263             "pattern.<p>To include a literal <code><b>\\N</b></code> in your "
00264             "replacement, put an extra backslash in front of it, like "
00265             "<code><b>\\\\N</b></code>.</qt>") );
00266     TQWhatsThis::add ( m_backRefItem, i18n(
00267             "Click for a menu of available captures.") );
00268     TQWhatsThis::add ( m_wholeWordsOnly, i18n(
00269             "Require word boundaries in both ends of a match to succeed.") );
00270     TQWhatsThis::add ( m_fromCursor, i18n(
00271             "Start searching at the current cursor location rather than at the top.") );
00272     TQWhatsThis::add ( m_selectedText, i18n(
00273             "Only search within the current selection.") );
00274     TQWhatsThis::add ( m_caseSensitive, i18n(
00275             "Perform a case sensitive search: entering the pattern "
00276             "'Joe' will not match 'joe' or 'JOE', only 'Joe'.") );
00277     TQWhatsThis::add ( m_findBackwards, i18n(
00278             "Search backwards.") );
00279     TQWhatsThis::add ( m_promptOnReplace, i18n(
00280             "Ask before replacing each match found.") );
00281 }
00282 
00283 void KFindDialog::textSearchChanged(const TQString & text)
00284 {
00285     enableButtonOK( !text.isEmpty() );
00286 }
00287 
00288 void KFindDialog::slotRegexCheckBoxToggled(bool checked)
00289 {
00290     m_regExpItem->setEnabled(checked);    
00291     m_backRef->setEnabled(checked);
00292     m_backRefItem->setEnabled(checked && m_backRef->isChecked());
00293 }
00294 
00295 void KFindDialog::slotPlaceholdersCheckBoxToggled(bool checked)
00296 {
00297     m_backRefItem->setEnabled(checked && m_regExp->isChecked());
00298 }
00299 
00300 void KFindDialog::showEvent( TQShowEvent *e )
00301 {
00302     if ( !d->m_initialShowDone )
00303     {
00304         d->m_initialShowDone = true; // only once
00305         kdDebug() << "showEvent\n";
00306         if (!d->findStrings.isEmpty())
00307             setFindHistory(d->findStrings);
00308         d->findStrings = TQStringList();
00309         if (!d->pattern.isEmpty()) {
00310             m_find->lineEdit()->setText( d->pattern );
00311             m_find->lineEdit()->selectAll();
00312             d->pattern = TQString::null;
00313         }
00314     }
00315     KDialogBase::showEvent(e);
00316 }
00317 
00318 long KFindDialog::options() const
00319 {
00320     long options = 0;
00321 
00322     if (m_caseSensitive->isChecked())
00323         options |= CaseSensitive;
00324     if (m_wholeWordsOnly->isChecked())
00325         options |= WholeWordsOnly;
00326     if (m_fromCursor->isChecked())
00327         options |= FromCursor;
00328     if (m_findBackwards->isChecked())
00329         options |= FindBackwards;
00330     if (m_selectedText->isChecked())
00331         options |= SelectedText;
00332     if (m_regExp->isChecked())
00333         options |= RegularExpression;
00334     return options;
00335 }
00336 
00337 TQString KFindDialog::pattern() const
00338 {
00339     return m_find->currentText();
00340 }
00341 
00342 void KFindDialog::setPattern (const TQString &pattern)
00343 {
00344     m_find->lineEdit()->setText( pattern );
00345     m_find->lineEdit()->selectAll();
00346     d->pattern = pattern;
00347     kdDebug() << "setPattern " << pattern<<endl;
00348 }
00349 
00350 void KFindDialog::setFindHistory(const TQStringList &strings)
00351 {
00352     if (strings.count() > 0)
00353     {
00354         m_find->setHistoryItems(strings, true);
00355         m_find->lineEdit()->setText( strings.first() );
00356         m_find->lineEdit()->selectAll();
00357     }
00358     else
00359         m_find->clearHistory();
00360 }
00361 
00362 void KFindDialog::setHasSelection(bool hasSelection)
00363 {
00364     if (hasSelection) d->m_enabled |= SelectedText;
00365     else d->m_enabled &= ~SelectedText;
00366     m_selectedText->setEnabled( hasSelection );
00367     if ( !hasSelection )
00368     {
00369         m_selectedText->setChecked( false );
00370         slotSelectedTextToggled( hasSelection );
00371     }
00372 }
00373 
00374 void KFindDialog::slotSelectedTextToggled(bool selec)
00375 {
00376     // From cursor doesn't make sense if we have a selection
00377     m_fromCursor->setEnabled( !selec && (d->m_enabled & FromCursor) );
00378     if ( selec ) // uncheck if disabled
00379         m_fromCursor->setChecked( false );
00380 }
00381 
00382 void KFindDialog::setHasCursor(bool hasCursor)
00383 {
00384     if (hasCursor) d->m_enabled |= FromCursor;
00385     else d->m_enabled &= ~FromCursor;
00386     m_fromCursor->setEnabled( hasCursor );
00387     m_fromCursor->setChecked( hasCursor && (options() & FromCursor) );
00388 }
00389 
00390 void KFindDialog::setSupportsBackwardsFind( bool supports )
00391 {
00392     // ########## Shouldn't this hide the checkbox instead?
00393     if (supports) d->m_enabled |= FindBackwards;
00394     else d->m_enabled &= ~FindBackwards;
00395     m_findBackwards->setEnabled( supports );
00396     m_findBackwards->setChecked( supports && (options() & FindBackwards) );
00397 }
00398 
00399 void KFindDialog::setSupportsCaseSensitiveFind( bool supports )
00400 {
00401     // ########## This should hide the checkbox instead
00402     if (supports) d->m_enabled |= CaseSensitive;
00403     else d->m_enabled &= ~CaseSensitive;
00404     m_caseSensitive->setEnabled( supports );
00405     m_caseSensitive->setChecked( supports && (options() & CaseSensitive) );
00406 }
00407 
00408 void KFindDialog::setSupportsWholeWordsFind( bool supports )
00409 {
00410     // ########## This should hide the checkbox instead
00411     if (supports) d->m_enabled |= WholeWordsOnly;
00412     else d->m_enabled &= ~WholeWordsOnly;
00413     m_wholeWordsOnly->setEnabled( supports );
00414     m_wholeWordsOnly->setChecked( supports && (options() & WholeWordsOnly) );
00415 }
00416 
00417 void KFindDialog::setSupportsRegularExpressionFind( bool supports )
00418 {
00419     // ########## This should hide the checkbox instead
00420     if (supports) d->m_enabled |= RegularExpression;
00421     else d->m_enabled &= ~RegularExpression;
00422     m_regExp->setEnabled( supports );
00423     m_regExp->setChecked( supports && (options() & RegularExpression) );
00424 }
00425 
00426 void KFindDialog::setOptions(long options)
00427 {
00428     m_caseSensitive->setChecked((d->m_enabled & CaseSensitive) && (options & CaseSensitive));
00429     m_wholeWordsOnly->setChecked((d->m_enabled & WholeWordsOnly) && (options & WholeWordsOnly));
00430     m_fromCursor->setChecked((d->m_enabled & FromCursor) && (options & FromCursor));
00431     m_findBackwards->setChecked((d->m_enabled & FindBackwards) && (options & FindBackwards));
00432     m_selectedText->setChecked((d->m_enabled & SelectedText) && (options & SelectedText));
00433     m_regExp->setChecked((d->m_enabled & RegularExpression) && (options & RegularExpression));
00434 }
00435 
00436 // Create a popup menu with a list of regular expression terms, to help the user
00437 // compose a regular expression search pattern.
00438 void KFindDialog::showPatterns()
00439 {
00440     if ( !d->m_regexpDialogQueryDone )
00441     {
00442         d->m_regexpDialog = KParts::ComponentFactory::createInstanceFromQuery<TQDialog>( "KRegExpEditor/KRegExpEditor", TQString(), TQT_TQOBJECT(this) );
00443         d->m_regexpDialogQueryDone = true;
00444     }
00445 
00446     if ( d->m_regexpDialog )
00447     {
00448         KRegExpEditorInterface *iface = tqt_dynamic_cast<KRegExpEditorInterface *>( d->m_regexpDialog );
00449         assert( iface );
00450 
00451         iface->setRegExp( pattern() );
00452         if ( d->m_regexpDialog->exec() == TQDialog::Accepted )
00453             setPattern( iface->regExp() );
00454     }
00455     else // No complete regexp-editor available, bring up the old popupmenu
00456     {
00457         typedef struct
00458         {
00459             const char *description;
00460             const char *regExp;
00461             int cursorAdjustment;
00462         } term;
00463         static const term items[] =
00464             {
00465                 { I18N_NOOP("Any Character"),                 ".",        0 },
00466                 { I18N_NOOP("Start of Line"),                 "^",        0 },
00467                 { I18N_NOOP("End of Line"),                   "$",        0 },
00468                 { I18N_NOOP("Set of Characters"),             "[]",       -1 },
00469                 { I18N_NOOP("Repeats, Zero or More Times"),   "*",        0 },
00470                 { I18N_NOOP("Repeats, One or More Times"),    "+",        0 },
00471                 { I18N_NOOP("Optional"),                      "?",        0 },
00472                 { I18N_NOOP("Escape"),                        "\\",       0 },
00473                 { I18N_NOOP("TAB"),                           "\\t",      0 },
00474                 { I18N_NOOP("Newline"),                       "\\n",      0 },
00475                 { I18N_NOOP("Carriage Return"),               "\\r",      0 },
00476                 { I18N_NOOP("White Space"),                   "\\s",      0 },
00477                 { I18N_NOOP("Digit"),                         "\\d",      0 },
00478             };
00479         int i;
00480 
00481         // Populate the popup menu.
00482         if (!m_patterns)
00483         {
00484             m_patterns = new TQPopupMenu(this);
00485             for (i = 0; (unsigned)i < sizeof(items) / sizeof(items[0]); i++)
00486             {
00487                 m_patterns->insertItem(i18n(items[i].description), i, i);
00488             }
00489         }
00490 
00491         // Insert the selection into the edit control.
00492         i = m_patterns->exec(m_regExpItem->mapToGlobal(m_regExpItem->rect().bottomLeft()));
00493         if (i != -1)
00494         {
00495             TQLineEdit *editor = m_find->lineEdit();
00496 
00497             editor->insert(items[i].regExp);
00498             editor->setCursorPosition(editor->cursorPosition() + items[i].cursorAdjustment);
00499         }
00500     }
00501 }
00502 
00503 // Create a popup menu with a list of backreference terms, to help the user
00504 // compose a regular expression replacement pattern.
00505 void KFindDialog::showPlaceholders()
00506 {
00507     // Populate the popup menu.
00508     if (!m_placeholders)
00509     {
00510         m_placeholders = new TQPopupMenu(this);
00511         connect( m_placeholders, TQT_SIGNAL(aboutToShow()), this, TQT_SLOT(slotPlaceholdersAboutToShow()) );
00512     }
00513 
00514     // Insert the selection into the edit control.
00515     int i = m_placeholders->exec(m_backRefItem->mapToGlobal(m_backRefItem->rect().bottomLeft()));
00516     if (i != -1)
00517     {
00518         TQLineEdit *editor = m_replace->lineEdit();
00519         editor->insert( TQString("\\%1").arg( i ) );
00520     }
00521 }
00522 
00523 void KFindDialog::slotPlaceholdersAboutToShow()
00524 {
00525     m_placeholders->clear();
00526     m_placeholders->insertItem( i18n("Complete Match"), 0 );
00527 
00528     TQRegExp r( pattern() );
00529     uint n = r.numCaptures();
00530     for ( uint i=0; i < n; i++ )
00531         m_placeholders->insertItem( i18n("Captured Text (%1)").arg( i+1 ), i+1 );
00532 }
00533 
00534 void KFindDialog::slotOk()
00535 {
00536     // Nothing to find?
00537     if (pattern().isEmpty())
00538     {
00539         KMessageBox::error(this, i18n("You must enter some text to search for."));
00540         return;
00541     }
00542 
00543     if (m_regExp->isChecked())
00544     {
00545         // Check for a valid regular expression.
00546         TQRegExp regExp(pattern());
00547 
00548         if (!regExp.isValid())
00549         {
00550             KMessageBox::error(this, i18n("Invalid regular expression."));
00551             return;
00552         }
00553     }
00554     m_find->addToHistory(pattern());
00555     emit okClicked();
00556     if ( testWFlags( WShowModal ) )
00557         accept();
00558 }
00559 // kate: space-indent on; indent-width 4; replace-tabs on;
00560 #include "kfinddialog.moc"

tdeutils

Skip menu "tdeutils"
  • Main Page
  • Modules
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

tdeutils

Skip menu "tdeutils"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for tdeutils by doxygen 1.7.1
This website is maintained by Timothy Pearson.