diff options
Diffstat (limited to 'tqtinterface/qt4/tools/designer/editor/completion.cpp')
-rw-r--r-- | tqtinterface/qt4/tools/designer/editor/completion.cpp | 714 |
1 files changed, 0 insertions, 714 deletions
diff --git a/tqtinterface/qt4/tools/designer/editor/completion.cpp b/tqtinterface/qt4/tools/designer/editor/completion.cpp deleted file mode 100644 index d3a92b2..0000000 --- a/tqtinterface/qt4/tools/designer/editor/completion.cpp +++ /dev/null @@ -1,714 +0,0 @@ -/********************************************************************** -** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved. -** -** This file is part of TQt Designer. -** -** This file may be used under the terms of the GNU General -** Public License versions 2.0 or 3.0 as published by the Free -** Software Foundation and appearing in the files LICENSE.GPL2 -** and LICENSE.GPL3 included in the packaging of this file. -** Alternatively you may (at your option) use any later version -** of the GNU General Public License if such license has been -** publicly approved by Trolltech ASA (or its successors, if any) -** and the KDE Free TQt Foundation. -** -** Please review the following information to ensure GNU General -** Public Licensing requirements will be met: -** http://trolltech.com/products/qt/licenses/licensing/opensource/. -** If you are unsure which license is appropriate for your use, please -** review the following information: -** http://trolltech.com/products/qt/licenses/licensing/licensingoverview -** or contact the sales department at sales@trolltech.com. -** -** Licensees holding valid TQt Commercial licenses may use this file in -** accordance with the TQt Commercial License Agreement provided with -** the Software. -** -** This file is provided "AS IS" with NO WARRANTY OF ANY KIND, -** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted -** herein. -** -**********************************************************************/ - -#include "completion.h" -#include "paragdata.h" -#include "editor.h" -#include <tqlistbox.h> -#include <tqvbox.h> -#include <tqmap.h> -#include <private/tqrichtext_p.h> -#include <tqapplication.h> -#include <tqregexp.h> -#include "arghintwidget.h" -#include <tqsizegrip.h> -#include <tqtimer.h> - -static TQColor getColor( const TQString &type ) -{ - if ( type == "function" || type == "slot" || type == "package" ) - return TQt::blue; - else if ( type == "variable" || type == "widget" || type == "dir" ) - return TQt::darkRed; - else if ( type == "object" || type == "class" ) - return TQt::darkBlue; - else if ( type == "property" ) - return TQt::darkGreen; - else if ( type == "enum" ) - return TQt::darkYellow; - return TQt::black; -} - -class CompletionItem : public TQListBoxItem -{ -public: - CompletionItem( TQListBox *lb, const TQString &txt, const TQString &t, const TQString &p, - const TQString &pre, const TQString &p2 ) - : TQListBoxItem( lb ), type( t ), postfix( p ), prefix( pre ), postfix2( p2 ), - parag( 0 ), lastState( FALSE ) { setText( txt ); } - ~CompletionItem() { delete parag; } - void paint( TQPainter *painter ) { - if ( lastState != isSelected() ) { - delete parag; - parag = 0; - } - lastState = isSelected(); - if ( !parag ) - setupParagraph(); - parag->paint( *painter, listBox()->tqcolorGroup() ); - } - - int height( const TQListBox * ) const { - if ( !parag ) - ( (CompletionItem*)this )->setupParagraph(); - return parag->rect().height(); - } - int width( const TQListBox * ) const { - if ( !parag ) - ( (CompletionItem*)this )->setupParagraph(); - return parag->rect().width() - 2; - } - TQString text() const { return TQListBoxItem::text() + postfix; } - -private: - void setupParagraph(); - TQString type, postfix, prefix, postfix2; - TQTextParagraph *parag; - bool lastState; - -}; - -void CompletionItem::setupParagraph() { - if ( !parag ) { - TQTextFormatter *formatter; - formatter = new TQTextFormatterBreakWords; - formatter->setWrapEnabled( FALSE ); - parag = new TQTextParagraph( 0 ); - parag->setTabStops( listBox()->fontMetrics().width( "propertyXXXX" ) ); - parag->pseudoDocument()->pFormatter = formatter; - parag->insert( 0, " " + type + ( type.isEmpty() ? " " : "\t" ) + prefix + - TQListBoxItem::text() + postfix + postfix2 ); - bool selCol = isSelected() && listBox()->tqcolorGroup().highlightedText() != listBox()->tqcolorGroup().text(); - TQColor sc = selCol ? listBox()->tqcolorGroup().highlightedText() : getColor( type ); - TQTextFormat *f1 = parag->formatCollection()->format( listBox()->font(), sc ); - TQTextFormat *f3 = parag->formatCollection()->format( listBox()->font(), isSelected() ? - listBox()->tqcolorGroup().highlightedText() : - listBox()->tqcolorGroup().text() ); - TQFont f( listBox()->font() ); - f.setBold( TRUE ); - TQTextFormat *f2 = - parag->formatCollection()->format( f, isSelected() ? listBox()->tqcolorGroup().highlightedText() : - listBox()->tqcolorGroup().text() ); - parag->setFormat( 1, type.length() + 1, f1 ); - parag->setFormat( type.length() + 2, prefix.length() + TQListBoxItem::text().length(), f2 ); - if ( !postfix.isEmpty() ) - parag->setFormat( type.length() + 2 + prefix.length() + TQListBoxItem::text().length(), - postfix.length(), f3 ); - parag->setFormat( type.length() + 2 + prefix.length() + TQListBoxItem::text().length() + postfix.length(), - postfix2.length(), f3 ); - f1->removeRef(); - f2->removeRef(); - f3->removeRef(); - parag->format(); - } -} - - -EditorCompletion::EditorCompletion( Editor *e ) -{ - enabled = TRUE; - lastDoc = 0; - completionPopup = new TQVBox( e->tqtopLevelWidget(), 0, WType_Popup ); - completionPopup->setFrameStyle( TQFrame::Box | TQFrame::Plain ); - completionPopup->setLineWidth( 1 ); - functionLabel = new ArgHintWidget( e->tqtopLevelWidget(), "editor_function_lbl" ); - functionLabel->hide(); - completionListBox = new TQListBox( completionPopup, "editor_completion_lb" ); - completionListBox->setFrameStyle( TQFrame::NoFrame ); - completionListBox->installEventFilter( this ); - completionListBox->setHScrollBarMode( TQScrollView::AlwaysOn ); - completionListBox->setVScrollBarMode( TQScrollView::AlwaysOn ); - completionListBox->setCornerWidget( new TQSizeGrip( completionListBox, "editor_cornerwidget" ) ); - completionPopup->installEventFilter( this ); - functionLabel->installEventFilter( this ); - completionPopup->setFocusProxy( completionListBox ); - completionOffset = 0; - curEditor = e; - curEditor->installEventFilter( this ); -} - -EditorCompletion::~EditorCompletion() -{ - delete completionPopup; - delete functionLabel; -} - -void EditorCompletion::addCompletionEntry( const TQString &s, TQTextDocument *, bool strict ) -{ - TQChar key( s[ 0 ] ); - TQMap<TQChar, TQStringList>::Iterator it = completionMap.find( key ); - if ( it == completionMap.end() ) { - completionMap.insert( key, TQStringList( s ) ); - } else { - if ( strict ) { - TQStringList::Iterator sit; - for ( sit = (*it).begin(); sit != (*it).end(); ) { - TQStringList::Iterator it2 = sit; - ++sit; - if ( (*it2).length() > s.length() && (*it2).left( s.length() ) == s ) { - if ( (*it2)[ (int)s.length() ].isLetter() && (*it2)[ (int)s.length() ].upper() != (*it2)[ (int)s.length() ] ) - return; - } else if ( s.length() > (*it2).length() && s.left( (*it2).length() ) == *it2 ) { - if ( s[ (int)(*it2).length() ].isLetter() && s[ (int)(*it2).length() ].upper() != s[ (int)(*it2).length() ] ) - (*it).remove( it2 ); - } - } - } - (*it).append( s ); - } -} - -TQValueList<CompletionEntry> EditorCompletion::completionList( const TQString &s, TQTextDocument *doc ) const -{ - if ( doc ) - ( (EditorCompletion*)this )->updateCompletionMap( doc ); - - TQChar key( s[ 0 ] ); - TQMap<TQChar, TQStringList>::ConstIterator it = completionMap.find( key ); - if ( it == completionMap.end() ) - return TQValueList<CompletionEntry>(); - TQStringList::ConstIterator it2 = (*it).begin(); - TQValueList<CompletionEntry> lst; - int len = s.length(); - for ( ; it2 != (*it).end(); ++it2 ) { - CompletionEntry c; - c.type = ""; - c.text = *it2; - c.postfix = ""; - c.prefix = ""; - c.postfix2 = ""; - if ( (int)(*it2).length() > len && (*it2).left( len ) == s && lst.find( c ) == lst.end() ) - lst << c; - } - - return lst; -} - -void EditorCompletion::updateCompletionMap( TQTextDocument *doc ) -{ - bool strict = TRUE; - if ( doc != lastDoc ) - strict = FALSE; - lastDoc = doc; - TQTextParagraph *s = doc->firstParagraph(); - if ( !s->extraData() ) - s->setExtraData( new ParagData ); - while ( s ) { - if ( s->length() == ( (ParagData*)s->extraData() )->lastLengthForCompletion ) { - s = s->next(); - continue; - } - - TQChar c; - TQString buffer; - for ( int i = 0; i < s->length(); ++i ) { - c = s->at( i )->c; - if ( c.isLetter() || c.isNumber() || c == '_' || c == '#' ) { - buffer += c; - } else { - addCompletionEntry( buffer, doc, strict ); - buffer = TQString(); - } - } - if ( !buffer.isEmpty() ) - addCompletionEntry( buffer, doc, strict ); - - ( (ParagData*)s->extraData() )->lastLengthForCompletion = s->length(); - s = s->next(); - } -} - -bool EditorCompletion::doCompletion() -{ - searchString = ""; - if ( !curEditor ) - return FALSE; - - TQTextCursor *cursor = curEditor->textCursor(); - TQTextDocument *doc = curEditor->document(); - - if ( cursor->index() > 0 && cursor->paragraph()->at( cursor->index() - 1 )->c == '.' && - ( cursor->index() == 1 || cursor->paragraph()->at( cursor->index() - 2 )->c != '.' ) ) - return doObjectCompletion(); - - int idx = cursor->index(); - if ( idx == 0 ) - return FALSE; - TQChar c = cursor->paragraph()->at( idx - 1 )->c; - if ( !c.isLetter() && !c.isNumber() && c != '_' && c != '#' ) - return FALSE; - - TQString s; - idx--; - completionOffset = 1; - for (;;) { - s.prepend( TQString( cursor->paragraph()->at( idx )->c ) ); - idx--; - if ( idx < 0 ) - break; - if ( !cursor->paragraph()->at( idx )->c.isLetter() && - !cursor->paragraph()->at( idx )->c.isNumber() && - cursor->paragraph()->at( idx )->c != '_' && - cursor->paragraph()->at( idx )->c != '#' ) - break; - completionOffset++; - } - - searchString = s; - - TQValueList<CompletionEntry> lst( completionList( s, doc ) ); - if ( lst.count() > 1 ) { - TQTextStringChar *chr = cursor->paragraph()->at( cursor->index() ); - int h = cursor->paragraph()->lineHeightOfChar( cursor->index() ); - int x = cursor->paragraph()->rect().x() + chr->x; - int y, dummy; - cursor->paragraph()->lineHeightOfChar( cursor->index(), &dummy, &y ); - y += cursor->paragraph()->rect().y(); - completionListBox->clear(); - for ( TQValueList<CompletionEntry>::ConstIterator it = lst.begin(); it != lst.end(); ++it ) - (void)new CompletionItem( completionListBox, (*it).text, (*it).type, (*it).postfix, - (*it).prefix, (*it).postfix2 ); - cList = lst; - completionPopup->resize( completionListBox->tqsizeHint() + - TQSize( completionListBox->verticalScrollBar()->width() + 4, - completionListBox->horizontalScrollBar()->height() + 4 ) ); - completionListBox->setCurrentItem( 0 ); - completionListBox->setFocus(); - if ( curEditor->mapToGlobal( TQPoint( 0, y ) ).y() + h + completionPopup->height() < TQApplication::desktop()->height() ) - completionPopup->move( curEditor->mapToGlobal( curEditor-> - contentsToViewport( TQPoint( x, y + h ) ) ) ); - else - completionPopup->move( curEditor->mapToGlobal( curEditor-> - contentsToViewport( TQPoint( x, y - completionPopup->height() ) ) ) ); - completionPopup->show(); - } else if ( lst.count() == 1 ) { - curEditor->insert( lst.first().text.mid( completionOffset, 0xFFFFFF ), - (uint) ( TQTextEdit::RedoIndentation | - TQTextEdit::CheckNewLines | - TQTextEdit::RemoveSelected ) ); - } else { - return FALSE; - } - - return TRUE; -} - -bool EditorCompletion::eventFilter( TQObject *o, TQEvent *e ) -{ - if ( !enabled ) - return FALSE; - if ( e->type() == TQEvent::KeyPress && ::tqqt_cast<Editor*>(o)) { - curEditor = (Editor*)o; - TQKeyEvent *ke = (TQKeyEvent*)e; - if ( ke->key() == Key_Tab ) { - TQString s = curEditor->textCursor()->paragraph()->string()->toString(). - left( curEditor->textCursor()->index() ); - if ( curEditor->document()->hasSelection( TQTextDocument::Standard ) || - s.simplifyWhiteSpace().isEmpty() ) { - if ( curEditor->document()->indent() ) { - curEditor->indent(); - int i = 0; - for ( ; i < curEditor->textCursor()->paragraph()->length() - 1; ++i ) { - if ( curEditor->textCursor()->paragraph()->at( i )->c != ' ' && - curEditor->textCursor()->paragraph()->at( i )->c != '\t' ) - break; - } - curEditor->drawCursor( FALSE ); - curEditor->textCursor()->setIndex( i ); - curEditor->drawCursor( TRUE ); - } else { - curEditor->insert( "\t" ); - } - return TRUE; - } - } - - if ( functionLabel->isVisible() ) { - if ( ke->key() == Key_Up && ( ke->state() & ControlButton ) == ControlButton ) { - functionLabel->gotoPrev(); - return TRUE; - } else if ( ke->key() == Key_Down && ( ke->state() & ControlButton ) == ControlButton ) { - functionLabel->gotoNext(); - return TRUE; - } - } - - if ( ke->text().length() && !( ke->state() & AltButton ) && - ( !ke->ascii() || ke->ascii() >= 32 ) || - ( ke->text() == "\t" && !( ke->state() & ControlButton ) ) ) { - if ( ke->key() == Key_Tab ) { - if ( curEditor->textCursor()->index() == 0 && - curEditor->textCursor()->paragraph()->isListItem() ) - return FALSE; - if ( doCompletion() ) - return TRUE; - } else if ( ke->key() == Key_Period && - ( curEditor->textCursor()->index() == 0 || - curEditor->textCursor()->paragraph()->at( curEditor->textCursor()->index() - 1 )->c != '.' ) - || - ke->key() == Key_Greater && - curEditor->textCursor()->index() > 0 && - curEditor->textCursor()->paragraph()->at( curEditor->textCursor()->index() - 1 )->c == '-' ) { - doObjectCompletion(); - } else { - if ( !doArgumentHint( ke->text() == "(" ) ) - functionLabel->hide(); - } - } - } else if ( o == completionPopup || o == completionListBox || - o == completionListBox->viewport() ) { - if ( e->type() == TQEvent::KeyPress ) { - TQKeyEvent *ke = (TQKeyEvent*)e; - if ( ke->key() == Key_Enter || ke->key() == Key_Return || ke->key() == Key_Tab ) { - if ( ke->key() == Key_Tab && completionListBox->count() > 1 && - completionListBox->currentItem() < (int)completionListBox->count() - 1 ) { - completionListBox->setCurrentItem( completionListBox->currentItem() + 1 ); - return TRUE; - } - completeCompletion(); - return TRUE; - } else if ( ke->key() == Key_Left || ke->key() == Key_Right || - ke->key() == Key_Up || ke->key() == Key_Down || - ke->key() == Key_Home || ke->key() == Key_End || - ke->key() == Key_Prior || ke->key() == Key_Next ) { - return FALSE; - } else if ( ke->key() != Key_Shift && ke->key() != Key_Control && - ke->key() != Key_Alt ) { - int l = searchString.length(); - if ( ke->key() == Key_Backspace ) { - searchString.remove( searchString.length() - 1, 1 ); - } else { - searchString += ke->text(); - l = 1; - } - if ( !l || !continueComplete() ) { - completionPopup->close(); - curEditor->setFocus(); - } - TQApplication::sendEvent( curEditor, e ); - return TRUE; - } - } else if ( e->type() == TQEvent::MouseButtonDblClick ) { - completeCompletion(); - return TRUE; - } - } - if ( o == functionLabel || ::tqqt_cast<Editor*>(o) && functionLabel->isVisible() ) { - if ( e->type() == TQEvent::KeyPress ) { - TQKeyEvent *ke = (TQKeyEvent*)e; - if ( ke->key() == Key_Escape ) { - functionLabel->hide(); - } else { - if ( !doArgumentHint( ke->text() == "(" ) ) - functionLabel->hide(); - if ( o == functionLabel ) { - TQApplication::sendEvent( curEditor, e ); - return TRUE; - } - } - } - } - return FALSE; -} - -void EditorCompletion::completeCompletion() -{ - int idx = curEditor->textCursor()->index(); - TQString s = completionListBox->currentText().mid( searchString.length() ); - curEditor->insert( s, (uint) ( TQTextEdit::RedoIndentation | - TQTextEdit::CheckNewLines | - TQTextEdit::RemoveSelected ) ); - int i = s.find( '(' ); - completionPopup->close(); - curEditor->setFocus(); - if ( i != -1 && i < (int)s.length() ) { - curEditor->setCursorPosition( curEditor->textCursor()->paragraph()->paragId(), idx + i + 1 ); - doArgumentHint( FALSE ); - } -} - -void EditorCompletion::setCurrentEdior( Editor *e ) -{ - curEditor = e; - curEditor->installEventFilter( this ); -} - -void EditorCompletion::addEditor( Editor *e ) -{ - e->installEventFilter( this ); -} - -bool EditorCompletion::doObjectCompletion() -{ - searchString = ""; - TQString object; - int i = curEditor->textCursor()->index(); - i--; - TQTextParagraph *p = curEditor->textCursor()->paragraph(); - for (;;) { - if ( i < 0 ) - break; - if ( p->at( i )->c == ' ' || p->at( i )->c == '\t' ) - break; - object.prepend( p->at( i )->c ); - i--; - } - - if ( object[ (int)object.length() - 1 ] == '-' ) - object.remove( object.length() - 1, 1 ); - - if ( object.isEmpty() ) - return FALSE; - return doObjectCompletion( object ); -} - -bool EditorCompletion::doObjectCompletion( const TQString & ) -{ - return FALSE; -} - -static void strip( TQString &txt ) -{ - int i = txt.find( "(" ); - if ( i == -1 ) - return; - txt = txt.left( i ); -} - -bool EditorCompletion::continueComplete() -{ - if ( searchString.isEmpty() ) { - completionListBox->clear(); - for ( TQValueList<CompletionEntry>::ConstIterator it = cList.begin(); it != cList.end(); ++it ) - (void)new CompletionItem( completionListBox, (*it).text, (*it).type, - (*it).postfix, (*it).prefix, (*it).postfix2 ); - completionListBox->setCurrentItem( 0 ); - completionListBox->setSelected( completionListBox->currentItem(), TRUE ); - return TRUE; - } - - TQListBoxItem *i = completionListBox->findItem( searchString ); - if ( !i ) - return FALSE; - - TQString txt1 = i->text(); - TQString txt2 = searchString; - strip( txt1 ); - strip( txt2 ); - if ( txt1 == txt2 && !i->next() ) - return FALSE; - - TQValueList<CompletionEntry> res; - for ( TQValueList<CompletionEntry>::ConstIterator it = cList.begin(); it != cList.end(); ++it ) { - if ( (*it).text.left( searchString.length() ) == searchString ) - res << *it; - } - if ( res.isEmpty() ) - return FALSE; - completionListBox->clear(); - for ( TQValueList<CompletionEntry>::ConstIterator it2 = res.begin(); it2 != res.end(); ++it2 ) - (void)new CompletionItem( completionListBox, (*it2).text, (*it2).type, - (*it2).postfix, (*it2).prefix, (*it2).postfix2 ); - completionListBox->setCurrentItem( 0 ); - completionListBox->setSelected( completionListBox->currentItem(), TRUE ); - return TRUE; -} - -bool EditorCompletion::doArgumentHint( bool useIndex ) -{ - TQTextCursor *cursor = curEditor->textCursor(); - int i = cursor->index() ; - if ( !useIndex ) { - bool foundParen = FALSE; - int closeParens = 0; - while ( i >= 0 ) { - if ( cursor->paragraph()->at( i )->c == ')' && i != cursor->index() ) - closeParens++; - if ( cursor->paragraph()->at( i )->c == '(' ) { - closeParens--; - if ( closeParens == -1 ) { - foundParen = TRUE; - break; - } - } - --i; - } - - if ( !foundParen ) - return FALSE; - } - int j = i - 1; - bool foundSpace = FALSE; - bool foundNonSpace = FALSE; - while ( j >= 0 ) { - if ( foundNonSpace && ( cursor->paragraph()->at( j )->c == ' ' || cursor->paragraph()->at( j )->c == ',' ) ) { - foundSpace = TRUE; - break; - } - if ( !foundNonSpace && ( cursor->paragraph()->at( j )->c != ' ' || cursor->paragraph()->at( j )->c != ',' ) ) - foundNonSpace = TRUE; - --j; - } - if ( foundSpace ) - ++j; - j = TQMAX( j, 0 ); - TQString function( cursor->paragraph()->string()->toString().mid( j, i - j + 1 ) ); - TQString part = cursor->paragraph()->string()->toString().mid( j, cursor->index() - j + 1 ); - function = function.simplifyWhiteSpace(); - for (;;) { - if ( function[ (int)function.length() - 1 ] == '(' ) { - function.remove( function.length() - 1, 1 ); - function = function.simplifyWhiteSpace(); - } else if ( function[ (int)function.length() - 1 ] == ')' ) { - function.remove( function.length() - 1, 1 ); - function = function.simplifyWhiteSpace(); - } else { - break; - } - } - - TQChar sep; - TQString pre, post; - TQValueList<TQStringList> argl = functionParameters( function, sep, pre, post ); - if ( argl.isEmpty() ) - return FALSE; - - TQString label; - int w = 0; - int num = 0; - if ( !functionLabel->isVisible() ) - functionLabel->setNumFunctions( (int)argl.count() ); - for ( TQValueList<TQStringList>::Iterator vit = argl.begin(); vit != argl.end(); ++vit, ++num ) { - TQStringList args = *vit; - int argNum = 0; - int inParen = 0; - for ( int k = 0; k < (int)part.length(); ++k ) { - if ( part[ k ] == sep && inParen < 2 ) - argNum++; - if ( part[ k ] == '(' ) - inParen++; - if ( part[ k ] == ')' ) - inParen--; - } - - TQString func = function; - int pnt = -1; - pnt = func.findRev( '.' ); - if ( pnt == -1 ) - func.findRev( '>' ); - if ( pnt != -1 ) - func = func.mid( pnt + 1 ); - - TQString s = func + "( "; - if ( s[ 0 ] == '\"' ) - s.remove( (uint)0, 1 ); - i = 0; - for ( TQStringList::Iterator it = args.begin(); it != args.end(); ++it, ++i ) { - if ( i == argNum ) - s += "<b>" + *it + "</b>"; - else - s += *it; - if ( i < (int)args.count() - 1 ) - s += ", "; - else - s += " "; - } - s += ")"; - s.prepend( pre ); - s.append( post ); - label += "<p>" + s + "</p>"; - functionLabel->setFunctionText( num, s ); - w = TQMAX( w, functionLabel->fontMetrics().width( s ) + 10 ); - } - w += 16; - if ( label.isEmpty() ) - return FALSE; - if ( functionLabel->isVisible() ) { - functionLabel->resize( w + 50, TQMAX( functionLabel->fontMetrics().height(), 16 ) ); - } else { - TQTextStringChar *chr = cursor->paragraph()->at( cursor->index() ); - int h = cursor->paragraph()->lineHeightOfChar( cursor->index() ); - int x = cursor->paragraph()->rect().x() + chr->x; - int y, dummy; - cursor->paragraph()->lineHeightOfChar( cursor->index(), &dummy, &y ); - y += cursor->paragraph()->rect().y(); - functionLabel->resize( w + 50, TQMAX( functionLabel->fontMetrics().height(), 16 ) ); - functionLabel->move( curEditor->mapToGlobal( curEditor->contentsToViewport( TQPoint( x, y + h ) ) ) ); - if ( functionLabel->x() + functionLabel->width() > TQApplication::desktop()->width() ) - functionLabel->move( TQMAX( 0, TQApplication::desktop()->width() - functionLabel->width() ), - functionLabel->y() ); - functionLabel->show(); - curEditor->setFocus(); - } - TQTimer::singleShot( 0, functionLabel, TQT_SLOT( retqlayout() ) ); - - return TRUE; -} - -TQValueList<TQStringList> EditorCompletion::functionParameters( const TQString &, TQChar &, TQString &, TQString & ) -{ - return TQValueList<TQStringList>(); -} - -void EditorCompletion::setContext( TQObject * ) -{ -} - -void EditorCompletion::showCompletion( const TQValueList<CompletionEntry> &lst ) -{ - TQTextCursor *cursor = curEditor->textCursor(); - TQTextStringChar *chr = cursor->paragraph()->at( cursor->index() ); - int h = cursor->paragraph()->lineHeightOfChar( cursor->index() ); - int x = cursor->paragraph()->rect().x() + chr->x; - int y, dummy; - cursor->paragraph()->lineHeightOfChar( cursor->index(), &dummy, &y ); - y += cursor->paragraph()->rect().y(); - completionListBox->clear(); - for ( TQValueList<CompletionEntry>::ConstIterator it = lst.begin(); it != lst.end(); ++it ) - (void)new CompletionItem( completionListBox, (*it).text, (*it).type, - (*it).postfix, (*it).prefix, (*it).postfix2 ); - cList = lst; - completionPopup->resize( completionListBox->tqsizeHint() + - TQSize( completionListBox->verticalScrollBar()->width() + 4, - completionListBox->horizontalScrollBar()->height() + 4 ) ); - completionListBox->setCurrentItem( 0 ); - completionListBox->setFocus(); - if ( curEditor->mapToGlobal( TQPoint( 0, y ) ).y() + h + completionPopup->height() < TQApplication::desktop()->height() ) - completionPopup->move( curEditor->mapToGlobal( curEditor-> - contentsToViewport( TQPoint( x, y + h ) ) ) ); - else - completionPopup->move( curEditor->mapToGlobal( curEditor-> - contentsToViewport( TQPoint( x, y - completionPopup->height() ) ) ) ); - - completionPopup->show(); -} |