diff options
| author | Darrell Anderson <humanreadable@yahoo.com> | 2014-03-02 20:05:33 +0100 | 
|---|---|---|
| committer | Slávek Banko <slavek.banko@axis.cz> | 2014-03-02 20:05:33 +0100 | 
| commit | 722ce1efbac31c61b1d4b13f7e075c9f311e3e73 (patch) | |
| tree | db1b6b28566e5fe9accb4a688f7257673cecb080 /tdevdesigner/designer/qcompletionedit.cpp | |
| parent | afb74575caf7dd8ccb6c235b1c8d788e320c19da (diff) | |
| download | tdevelop-722ce1efbac31c61b1d4b13f7e075c9f311e3e73.tar.gz tdevelop-722ce1efbac31c61b1d4b13f7e075c9f311e3e73.zip | |
Finish renaming tdevelop components
Diffstat (limited to 'tdevdesigner/designer/qcompletionedit.cpp')
| -rw-r--r-- | tdevdesigner/designer/qcompletionedit.cpp | 210 | 
1 files changed, 210 insertions, 0 deletions
| diff --git a/tdevdesigner/designer/qcompletionedit.cpp b/tdevdesigner/designer/qcompletionedit.cpp new file mode 100644 index 00000000..ed0c986e --- /dev/null +++ b/tdevdesigner/designer/qcompletionedit.cpp @@ -0,0 +1,210 @@ +/********************************************************************** +** Copyright (C) 2001 Trolltech AS.  All rights reserved. +** +** This file is part of TQt Designer. +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License version 2 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. +** +** Licensees holding valid TQt Enterprise Edition or TQt Professional Edition +** 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 +** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +** +** See http://www.trolltech.com/gpl/ for GPL licensing information. +** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for +**   information about TQt Commercial License Agreements. +** +** Contact info@trolltech.com if any conditions of this licensing are +** not clear to you. +** +**********************************************************************/ + +#include "qcompletionedit.h" +#include <tqlistbox.h> +#include <tqsizegrip.h> +#include <tqapplication.h> +#include <tqvbox.h> + +QCompletionEdit::QCompletionEdit( TQWidget *parent, const char *name ) +    : TQLineEdit( parent, name ), aAdd( FALSE ), caseSensitive( FALSE ) +{ +    popup = new TQVBox( 0, 0, WType_Popup ); +    popup->setFrameStyle( TQFrame::Box | TQFrame::Plain ); +    popup->setLineWidth( 1 ); +    popup->hide(); + +    listbox = new TQListBox( popup ); +    listbox->setFrameStyle( TQFrame::NoFrame ); +    listbox->setLineWidth( 1 ); +    listbox->installEventFilter( this ); +    listbox->setHScrollBarMode( TQScrollView::AlwaysOn ); +    listbox->setVScrollBarMode( TQScrollView::AlwaysOn ); +    listbox->setCornerWidget( new TQSizeGrip( listbox, "completion sizegrip" ) ); +    connect( this, TQT_SIGNAL( textChanged( const TQString & ) ), +	     this, TQT_SLOT( textDidChange( const TQString & ) ) ); +    popup->setFocusProxy( listbox ); +    installEventFilter( this ); +} + +bool QCompletionEdit::autoAdd() const +{ +    return aAdd; +} + +TQStringList QCompletionEdit::completionList() const +{ +    return compList; +} + +void QCompletionEdit::setCompletionList( const TQStringList &l ) +{ +    compList = l; +} + +void QCompletionEdit::setAutoAdd( bool add ) +{ +    aAdd = add; +} + +void QCompletionEdit::textDidChange( const TQString &text ) +{ +    if ( text.isEmpty() ) { +	popup->close(); +	return; +    } +    updateListBox(); +    placeListBox(); +} + +void QCompletionEdit::placeListBox() +{ +    if ( listbox->count() == 0 ) { +	popup->close(); +	return; +    } + +    popup->resize( TQMAX( listbox->sizeHint().width() + listbox->verticalScrollBar()->width() + 4, width() ), +		   listbox->sizeHint().height() + listbox->horizontalScrollBar()->height() + 4 ); + +    TQPoint p( mapToGlobal( TQPoint( 0, 0 ) ) ); +    if ( p.y() + height() + popup->height() <= TQApplication::desktop()->height() ) +	popup->move( p.x(), p.y() + height() ); +    else +	popup->move( p.x(), p.y() - listbox->height() ); +    popup->show(); +    listbox->setCurrentItem( 0 ); +    listbox->setSelected( 0, TRUE ); +    setFocus(); +} + +void QCompletionEdit::updateListBox() +{ +    listbox->clear(); +    if ( compList.isEmpty() ) +	return; +    for ( TQStringList::Iterator it = compList.begin(); it != compList.end(); ++it ) { +	if ( caseSensitive && (*it).left( text().length() ) == text() || +	     !caseSensitive && (*it).left( text().length() ).lower() == text().lower() ) +	    listbox->insertItem( *it ); +    } +} + +bool QCompletionEdit::eventFilter( TQObject *o, TQEvent *e ) +{ +    if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(popup) || TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(listbox) || TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(listbox->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 && listbox->count() > 1 && +		     listbox->currentItem() < (int)listbox->count() - 1 ) { +		    listbox->setCurrentItem( listbox->currentItem() + 1 ); +		    return TRUE; +		} +		popup->close(); +		setFocus(); +		blockSignals( TRUE ); +		setText( listbox->currentText() ); +		blockSignals( FALSE ); +		emit chosen( text() ); +		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_Escape ) { +		popup->close(); +		setFocus(); +	    } else if ( ke->key() != Key_Shift && ke->key() != Key_Control && +			ke->key() != Key_Alt ) { +		updateListBox(); +		if ( listbox->count() == 0 || text().length() == 0 ) { +		    popup->close(); +		    setFocus(); +		} +		TQApplication::sendEvent( this, e ); +		return TRUE; +	    } +	} else if ( e->type() == TQEvent::MouseButtonDblClick ) { +	    popup->close(); +	    setFocus(); +	    blockSignals( TRUE ); +	    setText( listbox->currentText() ); +	    blockSignals( FALSE ); +	    emit chosen( text() ); +	    return TRUE; +	} +    } else if ( TQT_BASE_OBJECT(o) == TQT_BASE_OBJECT(this) ) { +	if ( e->type() == TQEvent::KeyPress ) { +	    TQKeyEvent *ke = (TQKeyEvent*)e; +	    if ( ke->key() == Key_Up || +		 ke->key() == Key_Down || +		 ke->key() == Key_Prior || +		 ke->key() == Key_Next || +		 ke->key() == Key_Return || +		 ke->key() == Key_Enter || +		 ke->key() == Key_Tab || +		 ke->key() ==  Key_Escape ) { +		TQApplication::sendEvent( listbox, e ); +		return TRUE; +	    } +	} +    } +    return TQLineEdit::eventFilter( o, e ); +} + +void QCompletionEdit::addCompletionEntry( const TQString &entry ) +{ +    if ( compList.find( entry ) == compList.end() ) { +	compList << entry; +	compList.sort(); +    } +} + +void QCompletionEdit::removeCompletionEntry( const TQString &entry ) +{ +    TQStringList::Iterator it = compList.find( entry ); +    if ( it != compList.end() ) +	compList.remove( it ); +} + +void QCompletionEdit::setCaseSensitive( bool b ) +{ +    caseSensitive = b; +} + +bool QCompletionEdit::isCaseSensitive() const +{ +    return caseSensitive; +} + +void QCompletionEdit::clear() +{ +    TQLineEdit::clear(); +    compList.clear(); +} | 
