diff options
Diffstat (limited to 'experimental/tqtinterface/qt4/tools/designer/plugins/cppeditor/cppcompletion.cpp')
-rw-r--r-- | experimental/tqtinterface/qt4/tools/designer/plugins/cppeditor/cppcompletion.cpp | 220 |
1 files changed, 220 insertions, 0 deletions
diff --git a/experimental/tqtinterface/qt4/tools/designer/plugins/cppeditor/cppcompletion.cpp b/experimental/tqtinterface/qt4/tools/designer/plugins/cppeditor/cppcompletion.cpp new file mode 100644 index 000000000..46cd56ec5 --- /dev/null +++ b/experimental/tqtinterface/qt4/tools/designer/plugins/cppeditor/cppcompletion.cpp @@ -0,0 +1,220 @@ +/********************************************************************** +** +** 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 "cppcompletion.h" +#include <tqobject.h> +#include <tqmetaobject.h> +#include <tqobjectlist.h> +#include <tqregexp.h> + +CppEditorCompletion::CppEditorCompletion( Editor *e ) + : EditorCompletion( e ) +{ +} + +bool CppEditorCompletion::doObjectCompletion( const TQString &objName ) +{ + if ( !ths ) + return FALSE; + TQString object( objName ); + int i = -1; + if ( ( i = object.tqfindRev( "->" ) ) != -1 ) + object = object.mid( i + 2 ); + if ( ( i = object.tqfindRev( "." ) ) != -1 ) + object = object.mid( i + 1 ); + object = object.simplifyWhiteSpace(); + TQObject *obj = 0; + if ( ths->name() == object || object == "this" ) { + obj = ths; + } else { + obj = ths->child( object ); + } + + if ( !obj ) + return FALSE; + + TQValueList<CompletionEntry> lst; + + if ( !obj->childrenListObject().isEmpty() ) { + for ( TQObjectListIt cit( obj->childrenListObject() ); cit.current(); ++cit ) { + TQString s( cit.current()->name() ); + if ( s.tqfind( " " ) == -1 && s.tqfind( "qt_" ) == -1 && s.tqfind( "unnamed" ) == -1 ) { + CompletionEntry c; + c.type = "variable"; + c.text = s; + c.prefix = ""; + lst << c; + } + } + } + + TQStrList props = obj->tqmetaObject()->propertyNames( TRUE ); + for ( TQPtrListIterator<char> pit( props ); pit.current(); ++pit ) { + TQString f( pit.current() ); + TQChar c = f[ 0 ]; + f.remove( (uint)0, 1 ); + f.prepend( c.upper() ); + f.prepend( "set" ); + + CompletionEntry ce; + ce.type = "property"; + ce.text = f; + ce.postfix = "()"; + + if ( lst.tqfind( ce ) == lst.end() ) + lst << ce; + } + + TQStrList slts = obj->tqmetaObject()->slotNames( TRUE ); + for ( TQPtrListIterator<char> sit( slts ); sit.current(); ++sit ) { + TQString f( sit.current() ); + f = f.left( f.tqfind( "(" ) ); + CompletionEntry c; + c.type = "slot"; + c.text = f; + c.postfix = "()"; + if ( lst.tqfind( c ) == lst.end() ) + lst << c; + } + + if ( lst.isEmpty() ) + return FALSE; + + showCompletion( lst ); + return TRUE; +} + +TQValueList<TQStringList> CppEditorCompletion::functionParameters( const TQString &expr, TQChar &separator, + TQString &prefix, TQString &postfix ) +{ + TQ_UNUSED( prefix ); + TQ_UNUSED( postfix ); + separator = ','; + if ( !ths ) + return TQValueList<TQStringList>(); + TQString func; + TQString objName; + int i = -1; + + i = expr.tqfindRev( "->" ); + if ( i == -1 ) + i = expr.tqfindRev( "." ); + else + ++i; + if ( i == -1 ) { + i = expr.tqfindRev( " " ); + + if ( i == -1 ) + i = expr.tqfindRev( "\t" ); + else + objName = ths->name(); + + if ( i == -1 && expr[ 0 ] != ' ' && expr[ 0 ] != '\t' ) + objName = ths->name(); + } + + if ( !objName.isEmpty() ) { + func = expr.mid( i + 1 ); + func = func.simplifyWhiteSpace(); + } else { + func = expr.mid( i + 1 ); + func = func.simplifyWhiteSpace(); + TQString ex( expr ); + ex.remove( i, 0xFFFFFF ); + if ( ex[ (int)ex.length() - 1 ] == '-' ) + ex.remove( ex.length() - 1, 1 ); + int j = -1; + j = ex.tqfindRev( "->" ); + if ( j == -1 ) + j = ex.tqfindRev( "." ); + else + ++j; + if ( j == -1 ) { + j = ex.tqfindRev( " " ); + + if ( j == -1 ) + j = ex.tqfindRev( "\t" ); + else + objName = ths->name(); + + if ( j == -1 ) + objName = ths->name(); + } + objName = ex.mid( j + 1 ); + objName = objName.simplifyWhiteSpace(); + } + + TQObject *obj = 0; + if ( ths->name() == objName || objName == "this" ) { + obj = ths; + } else { + obj = ths->child( objName ); + } + + if ( !obj ) + return TQValueList<TQStringList>(); + + TQStrList slts = obj->tqmetaObject()->slotNames( TRUE ); + for ( TQPtrListIterator<char> sit( slts ); sit.current(); ++sit ) { + TQString f( sit.current() ); + f = f.left( f.tqfind( "(" ) ); + if ( f == func ) { + f = TQString( sit.current() ); + f.remove( (uint)0, f.tqfind( "(" ) + 1 ); + f = f.left( f.tqfind( ")" ) ); + TQStringList lst = TQStringList::split( ',', f ); + if ( !lst.isEmpty() ) { + TQValueList<TQStringList> l; + l << lst; + return l; + } + } + } + + const TQMetaProperty *prop = + obj->tqmetaObject()-> + property( obj->tqmetaObject()->tqfindProperty( func[ 3 ].lower() + func.mid( 4 ), TRUE ), TRUE ); + if ( prop ) { + TQValueList<TQStringList> l; + l << TQStringList( prop->type() ); + return l; + } + + return TQValueList<TQStringList>(); +} + +void CppEditorCompletion::setContext( TQObject *this_ ) +{ + ths = this_; +} |