kate Library API Documentation

katesearch.cpp

00001 /* This file is part of the KDE libraries 00002 Copyright (C) 2003 Clarence Dang <dang@kde.org> 00003 Copyright (C) 2002 John Firebaugh <jfirebaugh@kde.org> 00004 Copyright (C) 2001 Christoph Cullmann <cullmann@kde.org> 00005 Copyright (C) 2001 Joseph Wenninger <jowenn@kde.org> 00006 Copyright (C) 1999 Jochen Wilhelmy <digisnap@cs.tu-berlin.de> 00007 00008 This library is free software; you can redistribute it and/or 00009 modify it under the terms of the GNU Library General Public 00010 License version 2 as published by the Free Software Foundation. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Library General Public License for more details. 00016 00017 You should have received a copy of the GNU Library General Public License 00018 along with this library; see the file COPYING.LIB. If not, write to 00019 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00020 Boston, MA 02111-1307, USA. 00021 */ 00022 00023 #include "katesearch.h" 00024 #include "katesearch.moc" 00025 00026 #include "kateview.h" 00027 #include "katedocument.h" 00028 #include "katesupercursor.h" 00029 #include "katearbitraryhighlight.h" 00030 #include "kateconfig.h" 00031 00032 #include <klocale.h> 00033 #include <kstdaction.h> 00034 #include <kmessagebox.h> 00035 #include <kstringhandler.h> 00036 #include <kdebug.h> 00037 #include <kfinddialog.h> 00038 #include <kreplacedialog.h> 00039 00040 #include <qlayout.h> 00041 #include <qlabel.h> 00042 00043 QStringList KateSearch::s_searchList = QStringList(); 00044 QStringList KateSearch::s_replaceList = QStringList(); 00045 static const bool arbitraryHLExample = false; 00046 00047 KateSearch::KateSearch( KateView* view ) 00048 : QObject( view, "kate search" ) 00049 , m_view( view ) 00050 , m_doc( view->doc() ) 00051 , replacePrompt( new ReplacePrompt( view ) ) 00052 { 00053 m_arbitraryHLList = new KateSuperRangeList(); 00054 if (arbitraryHLExample) m_doc->arbitraryHL()->addHighlightToView(m_arbitraryHLList, m_view); 00055 00056 connect(replacePrompt,SIGNAL(clicked()),this,SLOT(replaceSlot())); 00057 } 00058 00059 KateSearch::~KateSearch() 00060 { 00061 delete m_arbitraryHLList; 00062 } 00063 00064 void KateSearch::createActions( KActionCollection* ac ) 00065 { 00066 KStdAction::find( this, SLOT(find()), ac )->setWhatsThis( 00067 i18n("Look up the first occurrence of a piece of text or regular expression.")); 00068 KStdAction::findNext( this, SLOT(slotFindNext()), ac )->setWhatsThis( 00069 i18n("Look up the next occurrence of the search phrase.")); 00070 KStdAction::findPrev( this, SLOT(slotFindPrev()), ac, "edit_find_prev" )->setWhatsThis( 00071 i18n("Look up the previous occurrence of the search phrase.")); 00072 KStdAction::replace( this, SLOT(replace()), ac )->setWhatsThis( 00073 i18n("Look up a piece of text or regular expression and replace the result with some given text.")); 00074 } 00075 00076 void KateSearch::addToList( QStringList& list, const QString& s ) 00077 { 00078 if( list.count() > 0 ) { 00079 QStringList::Iterator it = list.find( s ); 00080 if( *it != 0L ) 00081 list.remove( it ); 00082 if( list.count() >= 16 ) 00083 list.remove( list.fromLast() ); 00084 } 00085 list.prepend( s ); 00086 } 00087 00088 void KateSearch::find() 00089 { 00090 KFindDialog *findDialog = new KFindDialog ( m_view, "", KateViewConfig::global()->searchFlags(), 00091 s_searchList, m_doc->hasSelection() ); 00092 00093 findDialog->setPattern (getSearchText()); 00094 00095 if( findDialog->exec() == QDialog::Accepted ) { 00096 s_searchList = findDialog->findHistory () ; 00097 KateViewConfig::global()->setSearchFlags(findDialog->options ()); 00098 00099 SearchFlags searchFlags; 00100 00101 searchFlags.caseSensitive = KateViewConfig::global()->searchFlags() & KFindDialog::CaseSensitive; 00102 searchFlags.wholeWords = KateViewConfig::global()->searchFlags() & KFindDialog::WholeWordsOnly; 00103 searchFlags.fromBeginning = !(KateViewConfig::global()->searchFlags() & KFindDialog::FromCursor) 00104 && !(KateViewConfig::global()->searchFlags() & KFindDialog::SelectedText); 00105 searchFlags.backward = KateViewConfig::global()->searchFlags() & KFindDialog::FindBackwards; 00106 searchFlags.selected = KateViewConfig::global()->searchFlags() & KFindDialog::SelectedText; 00107 searchFlags.prompt = false; 00108 searchFlags.replace = false; 00109 searchFlags.finished = false; 00110 searchFlags.regExp = KateViewConfig::global()->searchFlags() & KFindDialog::RegularExpression; 00111 00112 if ( searchFlags.selected ) 00113 { 00114 s.selBegin = KateTextCursor( doc()->selStartLine(), doc()->selStartCol() ); 00115 s.selEnd = KateTextCursor( doc()->selEndLine(), doc()->selEndCol() ); 00116 s.cursor = s.flags.backward ? s.selEnd : s.selBegin; 00117 } else { 00118 s.cursor = getCursor(); 00119 } 00120 00121 s.wrappedEnd = s.cursor; 00122 s.wrapped = false; 00123 00124 search( searchFlags ); 00125 } 00126 00127 delete findDialog; 00128 m_view->repaintText (); 00129 } 00130 00131 void KateSearch::replace() 00132 { 00133 if (!doc()->isReadWrite()) return; 00134 00135 KReplaceDialog *replaceDialog = new KReplaceDialog ( m_view, "", KateViewConfig::global()->searchFlags(), 00136 s_searchList, s_replaceList, m_doc->hasSelection() ); 00137 00138 replaceDialog->setPattern (getSearchText()); 00139 00140 if( replaceDialog->exec() == QDialog::Accepted ) { 00141 m_replacement = replaceDialog->replacement(); 00142 s_searchList = replaceDialog->findHistory () ; 00143 s_replaceList = replaceDialog->replacementHistory () ; 00144 KateViewConfig::global()->setSearchFlags(replaceDialog->options ()); 00145 00146 SearchFlags searchFlags; 00147 searchFlags.caseSensitive = KateViewConfig::global()->searchFlags() & KFindDialog::CaseSensitive; 00148 searchFlags.wholeWords = KateViewConfig::global()->searchFlags() & KFindDialog::WholeWordsOnly; 00149 searchFlags.fromBeginning = !(KateViewConfig::global()->searchFlags() & KFindDialog::FromCursor) 00150 && !(KateViewConfig::global()->searchFlags() & KFindDialog::SelectedText); 00151 searchFlags.backward = KateViewConfig::global()->searchFlags() & KFindDialog::FindBackwards; 00152 searchFlags.selected = KateViewConfig::global()->searchFlags() & KFindDialog::SelectedText; 00153 searchFlags.prompt = KateViewConfig::global()->searchFlags() & KReplaceDialog::PromptOnReplace; 00154 searchFlags.replace = true; 00155 searchFlags.finished = false; 00156 searchFlags.regExp = KateViewConfig::global()->searchFlags() & KFindDialog::RegularExpression; 00157 if ( searchFlags.selected ) 00158 { 00159 s.selBegin = KateTextCursor( doc()->selStartLine(), doc()->selStartCol() ); 00160 s.selEnd = KateTextCursor( doc()->selEndLine(), doc()->selEndCol() ); 00161 s.cursor = s.flags.backward ? s.selEnd : s.selBegin; 00162 } else { 00163 s.cursor = getCursor(); 00164 } 00165 00166 s.wrappedEnd = s.cursor; 00167 s.wrapped = false; 00168 00169 search( searchFlags ); 00170 } 00171 00172 delete replaceDialog; 00173 m_view->update (); 00174 } 00175 00176 void KateSearch::findAgain( bool back ) 00177 { 00178 SearchFlags searchFlags; 00179 searchFlags.caseSensitive = KateViewConfig::global()->searchFlags() & KFindDialog::CaseSensitive; 00180 searchFlags.wholeWords = KateViewConfig::global()->searchFlags() & KFindDialog::WholeWordsOnly; 00181 searchFlags.fromBeginning = !(KateViewConfig::global()->searchFlags() & KFindDialog::FromCursor) 00182 && !(KateViewConfig::global()->searchFlags() & KFindDialog::SelectedText); 00183 searchFlags.backward = KateViewConfig::global()->searchFlags() & KFindDialog::FindBackwards; 00184 searchFlags.selected = KateViewConfig::global()->searchFlags() & KFindDialog::SelectedText; 00185 searchFlags.prompt = KateViewConfig::global()->searchFlags() & KReplaceDialog::PromptOnReplace; 00186 searchFlags.replace = false; 00187 searchFlags.finished = false; 00188 searchFlags.regExp = KateViewConfig::global()->searchFlags() & KFindDialog::RegularExpression; 00189 00190 searchFlags.backward = searchFlags.backward != back; 00191 searchFlags.fromBeginning = false; 00192 searchFlags.prompt = true; 00193 s.cursor = getCursor(); 00194 00195 search( searchFlags ); 00196 } 00197 00198 void KateSearch::search( SearchFlags flags ) 00199 { 00200 s.flags = flags; 00201 00202 if( s.flags.fromBeginning ) { 00203 if( !s.flags.backward ) { 00204 s.cursor.setPos(0, 0); 00205 } else { 00206 s.cursor.setLine(doc()->numLines() - 1); 00207 s.cursor.setCol(doc()->lineLength( s.cursor.line() )); 00208 } 00209 } 00210 00211 if((!s.flags.backward && 00212 s.cursor.col() == 0 && 00213 s.cursor.line() == 0 ) || 00214 ( s.flags.backward && 00215 s.cursor.col() == doc()->lineLength( s.cursor.line() ) && 00216 s.cursor.line() == (((int)doc()->numLines()) - 1) ) ) { 00217 s.flags.finished = true; 00218 } 00219 00220 if( s.flags.replace ) { 00221 replaces = 0; 00222 if( s.flags.prompt ) 00223 promptReplace(); 00224 else 00225 replaceAll(); 00226 } else { 00227 findAgain(); 00228 } 00229 } 00230 00231 void KateSearch::wrapSearch() 00232 { 00233 if( s.flags.selected ) 00234 { 00235 s.cursor = s.flags.backward ? s.selEnd : s.selBegin; 00236 } 00237 else 00238 { 00239 if( !s.flags.backward ) { 00240 s.cursor.setPos(0, 0); 00241 } else { 00242 s.cursor.setLine(doc()->numLines() - 1); 00243 s.cursor.setCol(doc()->lineLength( s.cursor.line() )); 00244 } 00245 } 00246 00247 // oh, we wrapped around one time allready now ! 00248 // only check that on replace 00249 s.wrapped = s.flags.replace; 00250 00251 replaces = 0; 00252 s.flags.finished = true; 00253 } 00254 00255 void KateSearch::findAgain() 00256 { 00257 QString searchFor = s_searchList.first(); 00258 00259 if( searchFor.isEmpty() ) { 00260 find(); 00261 return; 00262 } 00263 00264 if ( doSearch( searchFor ) ) { 00265 exposeFound( s.cursor, s.matchedLength ); 00266 } else if( !s.flags.finished ) { 00267 if( askContinue() ) { 00268 wrapSearch(); 00269 findAgain(); 00270 } else { 00271 if (arbitraryHLExample) m_arbitraryHLList->clear(); 00272 } 00273 } else { 00274 if (arbitraryHLExample) m_arbitraryHLList->clear(); 00275 KMessageBox::sorry( view(), 00276 i18n("Search string '%1' not found!") 00277 .arg( KStringHandler::csqueeze( searchFor ) ), 00278 i18n("Find")); 00279 } 00280 } 00281 00282 void KateSearch::replaceAll() 00283 { 00284 QString searchFor = s_searchList.first(); 00285 00286 doc()->editStart (); 00287 00288 while( doSearch( searchFor ) ) 00289 replaceOne(); 00290 00291 doc()->editEnd (); 00292 00293 if( !s.flags.finished ) { 00294 if( askContinue() ) { 00295 wrapSearch(); 00296 replaceAll(); 00297 } 00298 } else { 00299 KMessageBox::information( view(), 00300 i18n("%n replacement made.","%n replacements made.",replaces), 00301 i18n("Replace") ); 00302 } 00303 } 00304 00305 void KateSearch::promptReplace() 00306 { 00307 QString searchFor = s_searchList.first(); 00308 if ( doSearch( searchFor ) ) { 00309 exposeFound( s.cursor, s.matchedLength ); 00310 replacePrompt->show(); 00311 replacePrompt->setFocus(); 00312 } else if( !s.flags.finished && askContinue() ) { 00313 wrapSearch(); 00314 promptReplace(); 00315 } else { 00316 if (arbitraryHLExample) m_arbitraryHLList->clear(); 00317 replacePrompt->hide(); 00318 KMessageBox::information( view(), 00319 i18n("%n replacement made.","%n replacements made.",replaces), 00320 i18n("Replace") ); 00321 } 00322 } 00323 00324 void KateSearch::replaceOne() 00325 { 00326 QString replaceWith = m_replacement; 00327 if ( s.flags.regExp ) { 00328 // replace each "(?!\)\d+" with the corresponding capture 00329 QRegExp br("\\\\(\\d+)"); 00330 int pos = br.search( replaceWith ); 00331 int ncaps = m_re.numCaptures(); 00332 while ( pos >= 0 ) { 00333 QString sc; 00334 if ( !pos || replaceWith.at( pos-1) != '\\' ) { 00335 int ccap = br.cap(1).toInt(); 00336 if (ccap <= ncaps ) { 00337 sc = m_re.cap( ccap ); 00338 replaceWith.replace( pos, br.matchedLength(), sc ); 00339 } 00340 else { 00341 // TODO add a sanity check at some point prior to this 00342 kdDebug()<<"KateSearch::replaceOne(): you don't have "<<ccap<<" backreferences in regexp '"<<m_re.pattern()<<"'"<<endl; 00343 } 00344 } 00345 pos = br.search( replaceWith, pos+QMAX(br.matchedLength(), (int)sc.length()) ); 00346 } 00347 } 00348 00349 doc()->editStart(); 00350 doc()->removeText( s.cursor.line(), s.cursor.col(), 00351 s.cursor.line(), s.cursor.col() + s.matchedLength ); 00352 doc()->insertText( s.cursor.line(), s.cursor.col(), replaceWith ); 00353 doc()->editEnd(), 00354 00355 replaces++; 00356 00357 if( s.flags.selected && s.cursor.line() == s.selEnd.line() ) 00358 { 00359 s.selEnd.setCol(s.selEnd.col() + replaceWith.length() - s.matchedLength ); 00360 } 00361 00362 if( !s.flags.backward ) { 00363 s.cursor.setCol(s.cursor.col() + replaceWith.length()); 00364 } else if( s.cursor.col() > 0 ) { 00365 s.cursor.setCol(s.cursor.col() - 1); 00366 } else { 00367 s.cursor.setLine(s.cursor.line() - 1); 00368 if( s.cursor.line() >= 0 ) { 00369 s.cursor.setCol(doc()->lineLength( s.cursor.line() )); 00370 } 00371 } 00372 } 00373 00374 void KateSearch::skipOne() 00375 { 00376 if( !s.flags.backward ) { 00377 s.cursor.setCol(s.cursor.col() + s.matchedLength); 00378 } else if( s.cursor.col() > 0 ) { 00379 s.cursor.setCol(s.cursor.col() - 1); 00380 } else { 00381 s.cursor.setLine(s.cursor.line() - 1); 00382 if( s.cursor.line() >= 0 ) { 00383 s.cursor.setCol(doc()->lineLength(s.cursor.line())); 00384 } 00385 } 00386 } 00387 00388 void KateSearch::replaceSlot() { 00389 switch( (Dialog_results)replacePrompt->result() ) { 00390 case srCancel: replacePrompt->hide(); break; 00391 case srAll: replacePrompt->hide(); replaceAll(); break; 00392 case srYes: replaceOne(); promptReplace(); break; 00393 case srLast: replacePrompt->hide(), replaceOne(); break; 00394 case srNo: skipOne(); promptReplace(); break; 00395 } 00396 } 00397 00398 bool KateSearch::askContinue() 00399 { 00400 QString made = 00401 i18n( "%n replacement made.", 00402 "%n replacements made.", 00403 replaces ); 00404 00405 QString reached = !s.flags.backward ? 00406 i18n( "End of document reached." ) : 00407 i18n( "Beginning of document reached." ); 00408 00409 if (KateViewConfig::global()->searchFlags() & KFindDialog::SelectedText) 00410 { 00411 reached = !s.flags.backward ? 00412 i18n( "End of selection reached." ) : 00413 i18n( "Beginning of selection reached." ); 00414 } 00415 00416 QString question = !s.flags.backward ? 00417 i18n( "Continue from the beginning?" ) : 00418 i18n( "Continue from the end?" ); 00419 00420 QString text = s.flags.replace ? 00421 made + "\n" + reached + "\n" + question : 00422 reached + "\n" + question; 00423 00424 return KMessageBox::Yes == KMessageBox::questionYesNo( 00425 view(), text, s.flags.replace ? i18n("Replace") : i18n("Find"), 00426 KStdGuiItem::cont(), i18n("&Stop") ); 00427 } 00428 00429 QString KateSearch::getSearchText() 00430 { 00431 // SelectionOnly: use selection 00432 // WordOnly: use word under cursor 00433 // SelectionWord: use selection if available, else use word under cursor 00434 // WordSelection: use word if available, else use selection 00435 QString str; 00436 00437 int getFrom = view()->config()->textToSearchMode(); 00438 switch (getFrom) 00439 { 00440 case KateViewConfig::SelectionOnly: // (Windows) 00441 //kdDebug() << "getSearchText(): SelectionOnly" << endl; 00442 if( doc()->hasSelection() ) 00443 str = doc()->selection(); 00444 break; 00445 00446 case KateViewConfig::SelectionWord: // (classic Kate behavior) 00447 //kdDebug() << "getSearchText(): SelectionWord" << endl; 00448 if( doc()->hasSelection() ) 00449 str = doc()->selection(); 00450 else 00451 str = view()->currentWord(); 00452 break; 00453 00454 case KateViewConfig::WordOnly: // (weird?) 00455 //kdDebug() << "getSearchText(): WordOnly" << endl; 00456 str = view()->currentWord(); 00457 break; 00458 00459 case KateViewConfig::WordSelection: // (persistent selection lover) 00460 //kdDebug() << "getSearchText(): WordSelection" << endl; 00461 str = view()->currentWord(); 00462 if (str.isEmpty() && doc()->hasSelection() ) 00463 str = doc()->selection(); 00464 break; 00465 00466 default: // (nowhere) 00467 //kdDebug() << "getSearchText(): Nowhere" << endl; 00468 break; 00469 } 00470 00471 str.replace( QRegExp("^\\n"), "" ); 00472 str.replace( QRegExp("\\n.*"), "" ); 00473 00474 return str; 00475 } 00476 00477 KateTextCursor KateSearch::getCursor() 00478 { 00479 return KateTextCursor(view()->cursorLine(), view()->cursorColumnReal()); 00480 } 00481 00482 bool KateSearch::doSearch( const QString& text ) 00483 { 00484 /* 00485 rodda: Still Working on this... :) 00486 00487 bool result = false; 00488 00489 if (m_searchResults.count()) { 00490 m_resultIndex++; 00491 if (m_resultIndex < (int)m_searchResults.count()) { 00492 s = m_searchResults[m_resultIndex]; 00493 result = true; 00494 } 00495 00496 } else { 00497 int temp = 0; 00498 do {*/ 00499 00500 #if 0 00501 static int oldLine = -1; 00502 static int oldCol = -1; 00503 #endif 00504 00505 uint line = s.cursor.line(); 00506 uint col = s.cursor.col();// + (result ? s.matchedLength : 0); 00507 bool backward = s.flags.backward; 00508 bool caseSensitive = s.flags.caseSensitive; 00509 bool regExp = s.flags.regExp; 00510 bool wholeWords = s.flags.wholeWords; 00511 uint foundLine, foundCol, matchLen; 00512 bool found = false; 00513 //kdDebug() << "Searching at " << line << ", " << col << endl; 00514 if( regExp ) { 00515 m_re = QRegExp( text, caseSensitive ); 00516 found = doc()->searchText( line, col, m_re, 00517 &foundLine, &foundCol, 00518 &matchLen, backward ); 00519 } else if ( wholeWords ) { 00520 QRegExp re( "\\b" + text + "\\b", caseSensitive ); 00521 found = doc()->searchText( line, col, re, 00522 &foundLine, &foundCol, 00523 &matchLen, backward ); 00524 } else { 00525 found = doc()->searchText( line, col, text, 00526 &foundLine, &foundCol, 00527 &matchLen, caseSensitive, backward ); 00528 } 00529 if ( found && s.flags.selected ) 00530 { 00531 if ( !s.flags.backward && KateTextCursor( foundLine, foundCol ) >= s.selEnd 00532 || s.flags.backward && KateTextCursor( foundLine, foundCol ) < s.selBegin ) 00533 found = false; 00534 } 00535 if( !found ) return false; //break; 00536 00537 //result = true; 00538 00539 // save the search result 00540 s.cursor.setPos(foundLine, foundCol); 00541 s.matchedLength = matchLen; 00542 00543 // we allready wrapped around one time 00544 if (s.wrapped) 00545 { 00546 if (s.flags.backward) 00547 { 00548 if (s.cursor < s.wrappedEnd) 00549 return false; 00550 } 00551 else 00552 { 00553 if ( (s.cursor.line() > s.wrappedEnd.line()) 00554 || ( (s.cursor.line() == s.wrappedEnd.line()) && ((s.cursor.col()+matchLen) > uint(s.wrappedEnd.col())) ) ) 00555 return false; 00556 } 00557 } 00558 00559 //kdDebug() << "Found at " << s.cursor.line() << ", " << s.cursor.col() << endl; 00560 00561 00562 //m_searchResults.append(s); 00563 00564 if (arbitraryHLExample) { 00565 ArbitraryHighlightRange* hl = new ArbitraryHighlightRange(new KateSuperCursor(m_doc, true, s.cursor), new KateSuperCursor(m_doc, true, s.cursor.line(), s.cursor.col() + s.matchedLength), this); 00566 hl->setBold(); 00567 hl->setTextColor(Qt::white); 00568 hl->setBGColor(Qt::black); 00569 // destroy the highlight upon change 00570 connect(hl, SIGNAL(contentsChanged()), hl, SIGNAL(eliminated())); 00571 m_arbitraryHLList->append(hl); 00572 } 00573 00574 return true; 00575 00576 /* rodda: more of my search highlighting work 00577 00578 } while (++temp < 100); 00579 00580 if (result) { 00581 s = m_searchResults.first(); 00582 m_resultIndex = 0; 00583 } 00584 } 00585 00586 return result;*/ 00587 } 00588 00589 void KateSearch::exposeFound( KateTextCursor &cursor, int slen ) 00590 { 00591 view()->setCursorPositionInternal ( cursor.line(), cursor.col() + slen, 1 ); 00592 doc()->setSelection( cursor.line(), cursor.col(), cursor.line(), cursor.col() + slen ); 00593 } 00594 00595 //BEGIN ReplacePrompt 00596 // this dialog is not modal 00597 ReplacePrompt::ReplacePrompt( QWidget *parent ) 00598 : KDialogBase(parent, 0L, false, i18n( "Replace Text" ), 00599 User3 | User2 | User1 | Close | Ok , Ok, true, 00600 i18n("&All"), i18n("&Last"), i18n("&No") ) { 00601 00602 setButtonOK( KStdGuiItem::yes() ); 00603 QWidget *page = new QWidget(this); 00604 setMainWidget(page); 00605 00606 QBoxLayout *topLayout = new QVBoxLayout( page, 0, spacingHint() ); 00607 QLabel *label = new QLabel(i18n("Replace this occurrence?"),page); 00608 topLayout->addWidget(label ); 00609 } 00610 00611 void ReplacePrompt::slotOk( void ) { // Yes 00612 done(KateSearch::srYes); 00613 } 00614 00615 void ReplacePrompt::slotClose( void ) { // Close 00616 done(KateSearch::srCancel); 00617 } 00618 00619 void ReplacePrompt::slotUser1( void ) { // All 00620 done(KateSearch::srAll); 00621 } 00622 00623 void ReplacePrompt::slotUser2( void ) { // Last 00624 done(KateSearch::srLast); 00625 } 00626 00627 void ReplacePrompt::slotUser3( void ) { // No 00628 done(KateSearch::srNo); 00629 } 00630 00631 void ReplacePrompt::done(int r) { 00632 setResult(r); 00633 emit clicked(); 00634 } 00635 //END ReplacePrompt 00636 00637 // kate: space-indent on; indent-width 2; replace-tabs on;
KDE Logo
This file is part of the documentation for kate Library Version 3.2.3.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 20 09:50:53 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003