QString OCompletion::makeCompletion( const QString& string ) { if ( myCompletionMode == OGlobalSettings::CompletionNone ) return QString::null; //qDebug( "OCompletion: completing: %s", string ); d->matches.clear(); myRotationIndex = 0; myHasMultipleMatches = false; myLastMatch = myCurrentMatch; // in Shell-completion-mode, emit all matches when we get the same // complete-string twice if ( myCompletionMode == OGlobalSettings::CompletionShell && string == myLastString ) { // Don't use d->matches since calling postProcessMatches() // on d->matches here would interfere with call to // postProcessMatch() during rotation findAllCompletions( string, &d->matches, myHasMultipleMatches ); QStringList l = d->matches.list(); postProcessMatches( &l ); emit matches( l ); if ( l.isEmpty() ) doBeep( NoMatch ); return QString::null; } QString completion; // in case-insensitive popup mode, we search all completions at once if ( myCompletionMode == OGlobalSettings::CompletionPopup || myCompletionMode == OGlobalSettings::CompletionPopupAuto ) { findAllCompletions( string, &d->matches, myHasMultipleMatches ); if ( !d->matches.isEmpty() ) completion = d->matches.first(); } else completion = findCompletion( string ); if ( myHasMultipleMatches ) emit multipleMatches(); myLastString = string; myCurrentMatch = completion; postProcessMatch( &completion ); if ( !string.isEmpty() ) { // only emit match when string != "" //qDebug( "OCompletion: Match: %s", completion ); emit match( completion ); } if ( completion.isNull() ) doBeep( NoMatch ); return completion; }
OCompletionMatches OCompletion::allWeightedMatches( const QString &string ) { OCompletionMatchesWrapper matches( myOrder == Weighted ); bool dummy; findAllCompletions( string, &matches, dummy ); OCompletionMatches ret( matches ); postProcessMatches( &ret ); return ret; }
QStringList OCompletion::allMatches( const QString &string ) { OCompletionMatchesWrapper matches( myOrder == Weighted ); bool dummy; findAllCompletions( string, &matches, dummy ); QStringList l = matches.list(); postProcessMatches( &l ); return l; }
OCompletionMatches OCompletion::allWeightedMatches() { // Don't use d->matches since calling postProcessMatches() // on d->matches here would interfere with call to // postProcessMatch() during rotation OCompletionMatchesWrapper matches( myOrder == Weighted ); bool dummy; findAllCompletions( myLastString, &matches, dummy ); OCompletionMatches ret( matches ); postProcessMatches( &ret ); return ret; }
QStringList OCompletion::allMatches() { // Don't use d->matches since calling postProcessMatches() // on d->matches here would interfere with call to // postProcessMatch() during rotation OCompletionMatchesWrapper matches( myOrder == Weighted ); bool dummy; findAllCompletions( myLastString, &matches, dummy ); QStringList l = matches.list(); postProcessMatches( &l ); return l; }
QStringList KCompletion::substringCompletion( const QString& string ) const { // get all items in the tree, possibly in sorted order bool sorted = (myOrder == Weighted); KCompletionMatchesWrapper allItems( sorted ); extractStringsFromNode( myTreeRoot, QString::null, &allItems, false ); QStringList list = allItems.list(); // subStringMatches is invoked manually, via a shortcut, so we should // beep here, if necessary. if ( list.isEmpty() ) { doBeep( NoMatch ); return list; } if ( string.isEmpty() ) { // shortcut postProcessMatches( &list ); return list; } QStringList matches; QStringList::ConstIterator it = list.begin(); for( ; it != list.end(); ++it ) { QString item = *it; if ( item.find( string, 0, false ) != -1 ) { // always case insensitive matches.append( item ); } } postProcessMatches( &matches ); if ( matches.isEmpty() ) doBeep( NoMatch ); return matches; }