summaryrefslogtreecommitdiffstats
path: root/tools/designer/plugins/cppeditor/cppcompletion.cpp
diff options
context:
space:
mode:
authorTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-07-10 15:24:15 -0500
committerTimothy Pearson <kb9vqf@pearsoncomputing.net>2011-07-10 15:24:15 -0500
commitbd0f3345a938b35ce6a12f6150373b0955b8dd12 (patch)
tree7a520322212d48ebcb9fbe1087e7fca28b76185c /tools/designer/plugins/cppeditor/cppcompletion.cpp
downloadqt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.tar.gz
qt3-bd0f3345a938b35ce6a12f6150373b0955b8dd12.zip
Add Qt3 development HEAD version
Diffstat (limited to 'tools/designer/plugins/cppeditor/cppcompletion.cpp')
-rw-r--r--tools/designer/plugins/cppeditor/cppcompletion.cpp220
1 files changed, 220 insertions, 0 deletions
diff --git a/tools/designer/plugins/cppeditor/cppcompletion.cpp b/tools/designer/plugins/cppeditor/cppcompletion.cpp
new file mode 100644
index 0000000..464aedb
--- /dev/null
+++ b/tools/designer/plugins/cppeditor/cppcompletion.cpp
@@ -0,0 +1,220 @@
+/**********************************************************************
+**
+** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of Qt 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 Qt 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 Qt Commercial licenses may use this file in
+** accordance with the Qt 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 <qobject.h>
+#include <qmetaobject.h>
+#include <qobjectlist.h>
+#include <qregexp.h>
+
+CppEditorCompletion::CppEditorCompletion( Editor *e )
+ : EditorCompletion( e )
+{
+}
+
+bool CppEditorCompletion::doObjectCompletion( const QString &objName )
+{
+ if ( !ths )
+ return FALSE;
+ QString object( objName );
+ int i = -1;
+ if ( ( i = object.findRev( "->" ) ) != -1 )
+ object = object.mid( i + 2 );
+ if ( ( i = object.findRev( "." ) ) != -1 )
+ object = object.mid( i + 1 );
+ object = object.simplifyWhiteSpace();
+ QObject *obj = 0;
+ if ( ths->name() == object || object == "this" ) {
+ obj = ths;
+ } else {
+ obj = ths->child( object );
+ }
+
+ if ( !obj )
+ return FALSE;
+
+ QValueList<CompletionEntry> lst;
+
+ if ( obj->children() ) {
+ for ( QObjectListIt cit( *obj->children() ); cit.current(); ++cit ) {
+ QString s( cit.current()->name() );
+ if ( s.find( " " ) == -1 && s.find( "qt_" ) == -1 && s.find( "unnamed" ) == -1 ) {
+ CompletionEntry c;
+ c.type = "variable";
+ c.text = s;
+ c.prefix = "";
+ lst << c;
+ }
+ }
+ }
+
+ QStrList props = obj->metaObject()->propertyNames( TRUE );
+ for ( QPtrListIterator<char> pit( props ); pit.current(); ++pit ) {
+ QString f( pit.current() );
+ QChar 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.find( ce ) == lst.end() )
+ lst << ce;
+ }
+
+ QStrList slts = obj->metaObject()->slotNames( TRUE );
+ for ( QPtrListIterator<char> sit( slts ); sit.current(); ++sit ) {
+ QString f( sit.current() );
+ f = f.left( f.find( "(" ) );
+ CompletionEntry c;
+ c.type = "slot";
+ c.text = f;
+ c.postfix = "()";
+ if ( lst.find( c ) == lst.end() )
+ lst << c;
+ }
+
+ if ( lst.isEmpty() )
+ return FALSE;
+
+ showCompletion( lst );
+ return TRUE;
+}
+
+QValueList<QStringList> CppEditorCompletion::functionParameters( const QString &expr, QChar &separator,
+ QString &prefix, QString &postfix )
+{
+ Q_UNUSED( prefix );
+ Q_UNUSED( postfix );
+ separator = ',';
+ if ( !ths )
+ return QValueList<QStringList>();
+ QString func;
+ QString objName;
+ int i = -1;
+
+ i = expr.findRev( "->" );
+ if ( i == -1 )
+ i = expr.findRev( "." );
+ else
+ ++i;
+ if ( i == -1 ) {
+ i = expr.findRev( " " );
+
+ if ( i == -1 )
+ i = expr.findRev( "\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();
+ QString ex( expr );
+ ex.remove( i, 0xFFFFFF );
+ if ( ex[ (int)ex.length() - 1 ] == '-' )
+ ex.remove( ex.length() - 1, 1 );
+ int j = -1;
+ j = ex.findRev( "->" );
+ if ( j == -1 )
+ j = ex.findRev( "." );
+ else
+ ++j;
+ if ( j == -1 ) {
+ j = ex.findRev( " " );
+
+ if ( j == -1 )
+ j = ex.findRev( "\t" );
+ else
+ objName = ths->name();
+
+ if ( j == -1 )
+ objName = ths->name();
+ }
+ objName = ex.mid( j + 1 );
+ objName = objName.simplifyWhiteSpace();
+ }
+
+ QObject *obj = 0;
+ if ( ths->name() == objName || objName == "this" ) {
+ obj = ths;
+ } else {
+ obj = ths->child( objName );
+ }
+
+ if ( !obj )
+ return QValueList<QStringList>();
+
+ QStrList slts = obj->metaObject()->slotNames( TRUE );
+ for ( QPtrListIterator<char> sit( slts ); sit.current(); ++sit ) {
+ QString f( sit.current() );
+ f = f.left( f.find( "(" ) );
+ if ( f == func ) {
+ f = QString( sit.current() );
+ f.remove( (uint)0, f.find( "(" ) + 1 );
+ f = f.left( f.find( ")" ) );
+ QStringList lst = QStringList::split( ',', f );
+ if ( !lst.isEmpty() ) {
+ QValueList<QStringList> l;
+ l << lst;
+ return l;
+ }
+ }
+ }
+
+ const QMetaProperty *prop =
+ obj->metaObject()->
+ property( obj->metaObject()->findProperty( func[ 3 ].lower() + func.mid( 4 ), TRUE ), TRUE );
+ if ( prop ) {
+ QValueList<QStringList> l;
+ l << QStringList( prop->type() );
+ return l;
+ }
+
+ return QValueList<QStringList>();
+}
+
+void CppEditorCompletion::setContext( QObject *this_ )
+{
+ ths = this_;
+}