[Libreoffice-commits] core.git: Branch 'feature/gsoc-basic-ide-completion-and-other-bits' - basctl/source

Gergo Mocsi gmocsi91 at gmail.com
Wed Aug 7 00:41:19 PDT 2013


 basctl/source/basicide/baside2.hxx  |    5 
 basctl/source/basicide/baside2b.cxx |  518 ++++++++++++++++++------------------
 2 files changed, 272 insertions(+), 251 deletions(-)

New commits:
commit 8f008f0d810068bb9b663fc73177883c3918b6f5
Author: Gergo Mocsi <gmocsi91 at gmail.com>
Date:   Wed Aug 7 09:32:36 2013 +0200

    GSOC work, code fixes
    
    Small fix in the listbox size: I'm using GetOptimalSize to set the correct width.
    EditorWindow::KeyInput: autocomplete/codecomplete functions have been placed into separate functions.
    Function autoclose sub/functions: duplicate code removal.
    
    Change-Id: I44678753fc9737fd7a0913af3caa4f1f565aca28

diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx
index 20d4217..99822c4 100644
--- a/basctl/source/basicide/baside2.hxx
+++ b/basctl/source/basicide/baside2.hxx
@@ -122,6 +122,11 @@ private:
     OUString GetActualSubName( sal_uLong nLine ); // gets the actual subroutine name according to line number
     std::vector< OUString > GetXIdlClassMethods( ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XIdlClass > xClass ) const;
     std::vector< OUString > GetXIdlClassFields( ::com::sun::star::uno::Reference< ::com::sun::star::reflection::XIdlClass > xClass ) const;
+    void HandleAutoCorrect();
+    void HandleAutoCloseParen();
+    void HandleAutoCloseDoubleQuotes();
+    void HandleCodeCompletition();
+    void HandleProcedureCompletition();
 
 protected:
     virtual void    Paint( const Rectangle& );
diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx
index 95bac25..2481b88 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -516,149 +516,207 @@ void EditorWindow::KeyInput( const KeyEvent& rKEvt )
         rKEvt.GetKeyCode().GetCode() == KEY_TAB ||
         rKEvt.GetKeyCode().GetCode() == KEY_RETURN ) && CodeCompleteOptions::IsAutoCorrectKeywordsOn() )
     {
-        TextSelection aSel = GetEditView()->GetSelection();
-        sal_uLong nLine =  aSel.GetStart().GetPara();
-        OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
+        HandleAutoCorrect();
+    }
 
-        HighlightPortions aPortions;
-        aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
-        if( aPortions.size() > 0 )
+    if( rKEvt.GetCharCode() == '"' && CodeCompleteOptions::IsAutoCloseQuotesOn() )
+    {//autoclose double quotes
+        HandleAutoCloseDoubleQuotes();
+    }
+
+    if( rKEvt.GetCharCode() == '(' && CodeCompleteOptions::IsAutoCloseParenthesisOn() )
+    {//autoclose parenthesis
+        HandleAutoCloseParen();
+    }
+
+    if( rKEvt.GetKeyCode().GetCode() == KEY_RETURN && CodeCompleteOptions::IsProcedureAutoCompleteOn() )
+    {//autoclose implementation
+       HandleProcedureCompletition();
+    }
+
+    if( rKEvt.GetKeyCode().GetCode() == KEY_POINT &&
+        (CodeCompleteOptions::IsCodeCompleteOn() || CodeCompleteOptions::IsExtendedTypeDeclaration()) )
+    {
+        HandleCodeCompletition();
+    }
+    if ( !bDone && ( !TextEngine::DoesKeyChangeText( rKEvt ) || ImpCanModify()  ) )
+    {
+        if ( ( rKEvt.GetKeyCode().GetCode() == KEY_TAB ) && !rKEvt.GetKeyCode().IsMod1() &&
+              !rKEvt.GetKeyCode().IsMod2() && !GetEditView()->IsReadOnly() )
         {
-            HighlightPortion& r = aPortions[aPortions.size()-1];
-            if( r.tokenType == 9 ) // correct the last entered keyword
+            TextSelection aSel( pEditView->GetSelection() );
+            if ( aSel.GetStart().GetPara() != aSel.GetEnd().GetPara() )
             {
-                OUString sStr = aLine.copy(r.nBegin, r.nEnd - r.nBegin);
-                if( !sStr.isEmpty() )
-                {
-                    //capitalize first letter and replace
-                    sStr = sStr.toAsciiLowerCase();
-                    sStr = sStr.replaceAt( 0, 1, OUString(sStr[0]).toAsciiUpperCase() );
-
-                    TextPaM aStart(nLine, aSel.GetStart().GetIndex() - sStr.getLength() );
-                    TextSelection sTextSelection(aStart, TextPaM(nLine, aSel.GetStart().GetIndex()));
-                    pEditEngine->ReplaceText( sTextSelection, sStr );
-                    pEditView->SetSelection( aSel );
-                }
+                bDelayHighlight = false;
+                if ( !rKEvt.GetKeyCode().IsShift() )
+                    pEditView->IndentBlock();
+                else
+                    pEditView->UnindentBlock();
+                bDelayHighlight = true;
+                bDone = true;
+            }
+        }
+        if ( !bDone )
+            bDone = pEditView->KeyInput( rKEvt );
+    }
+    if ( !bDone )
+    {
+            Window::KeyInput( rKEvt );
+    }
+    else
+    {
+        if (SfxBindings* pBindings = GetBindingsPtr())
+        {
+            pBindings->Invalidate( SID_BASICIDE_STAT_POS );
+            if ( rKEvt.GetKeyCode().GetGroup() == KEYGROUP_CURSOR )
+                pBindings->Update( SID_BASICIDE_STAT_POS );
+            if ( !bWasModified && pEditEngine->IsModified() )
+            {
+                pBindings->Invalidate( SID_SAVEDOC );
+                pBindings->Invalidate( SID_DOC_MODIFIED );
+                pBindings->Invalidate( SID_UNDO );
             }
+            if ( rKEvt.GetKeyCode().GetCode() == KEY_INSERT )
+                pBindings->Invalidate( SID_ATTR_INSERT );
         }
     }
+}
 
-    if( rKEvt.GetCharCode() == '"' && CodeCompleteOptions::IsAutoCloseQuotesOn() )
-    {//autoclose double quotes
-        TextSelection aSel = GetEditView()->GetSelection();
-        sal_uLong nLine =  aSel.GetStart().GetPara();
-        OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
+void EditorWindow::HandleAutoCorrect()
+{
+    TextSelection aSel = GetEditView()->GetSelection();
+    sal_uLong nLine =  aSel.GetStart().GetPara();
+    OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
 
-        HighlightPortions aPortions;
-        aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
-        if( aPortions.size() != 0 )
+    HighlightPortions aPortions;
+    aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
+    if( aPortions.size() > 0 )
+    {
+        HighlightPortion& r = aPortions[aPortions.size()-1];
+        if( r.tokenType == 9 ) // correct the last entered keyword
         {
-            if( aLine.getLength() > 0 && aLine[aLine.getLength()-1] != '"' && (aPortions[aPortions.size()-1].tokenType != 4) )
+            OUString sStr = aLine.copy(r.nBegin, r.nEnd - r.nBegin);
+            if( !sStr.isEmpty() )
             {
-                GetEditView()->InsertText(OUString("\""));
-                //leave the cursor on it's place: inside the two double quotes
-                TextPaM aEnd(nLine, aSel.GetEnd().GetIndex());
-                GetEditView()->SetSelection( TextSelection( aEnd, aEnd ) );
+                //capitalize first letter and replace
+                sStr = sStr.toAsciiLowerCase();
+                sStr = sStr.replaceAt( 0, 1, OUString(sStr[0]).toAsciiUpperCase() );
+
+                TextPaM aStart(nLine, aSel.GetStart().GetIndex() - sStr.getLength() );
+                TextSelection sTextSelection(aStart, TextPaM(nLine, aSel.GetStart().GetIndex()));
+                pEditEngine->ReplaceText( sTextSelection, sStr );
+                pEditView->SetSelection( aSel );
             }
         }
     }
+}
 
-    if( rKEvt.GetCharCode() == '(' && CodeCompleteOptions::IsAutoCloseParenthesisOn() )
-    {//autoclose parenthesis
-        TextSelection aSel = GetEditView()->GetSelection();
-        sal_uLong nLine =  aSel.GetStart().GetPara();
-        OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
+void EditorWindow::HandleAutoCloseParen()
+{
+    TextSelection aSel = GetEditView()->GetSelection();
+    sal_uLong nLine =  aSel.GetStart().GetPara();
+    OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
+
+    if( aLine.getLength() > 0 && aLine[aSel.GetEnd().GetIndex()-1] != '(' )
+    {
+        GetEditView()->InsertText(OUString(")"));
+        //leave the cursor on it's place: inside the parenthesis
+        TextPaM aEnd(nLine, aSel.GetEnd().GetIndex());
+        GetEditView()->SetSelection( TextSelection( aEnd, aEnd ) );
+    }
+}
+
+void EditorWindow::HandleAutoCloseDoubleQuotes()
+{
+    TextSelection aSel = GetEditView()->GetSelection();
+    sal_uLong nLine =  aSel.GetStart().GetPara();
+    OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
 
-        if( aLine.getLength() > 0 && aLine[aSel.GetEnd().GetIndex()-1] != '(' )
+    HighlightPortions aPortions;
+    aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
+    if( aPortions.size() != 0 )
+    {
+        if( aLine.getLength() > 0 && aLine[aLine.getLength()-1] != '"' && (aPortions[aPortions.size()-1].tokenType != 4) )
         {
-            GetEditView()->InsertText(OUString(")"));
-            //leave the cursor on it's place: inside the parenthesis
+            GetEditView()->InsertText(OUString("\""));
+            //leave the cursor on it's place: inside the two double quotes
             TextPaM aEnd(nLine, aSel.GetEnd().GetIndex());
             GetEditView()->SetSelection( TextSelection( aEnd, aEnd ) );
         }
     }
+}
 
-    if( rKEvt.GetKeyCode().GetCode() == KEY_RETURN && CodeCompleteOptions::IsProcedureAutoCompleteOn() )
-    {//autoclose implementation
-        TextSelection aSel = GetEditView()->GetSelection();
-        sal_uLong nLine = aSel.GetStart().GetPara();
-        OUString aLine( pEditEngine->GetText( nLine ) );
-        OUString sActSub = GetActualSubName( nLine );
+void EditorWindow::HandleProcedureCompletition()
+{
+    TextSelection aSel = GetEditView()->GetSelection();
+    sal_uLong nLine = aSel.GetStart().GetPara();
+    OUString aLine( pEditEngine->GetText( nLine ) );
+    OUString sActSub = GetActualSubName( nLine );
 
-        HighlightPortions aPortions;
-        aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
-        OUString sProcType;
-        OUString sProcName;
-        bool bFoundType = false;
-        bool bFoundName = false;
-        if( aPortions.size() != 0 )
+    HighlightPortions aPortions;
+    aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
+    OUString sProcType;
+    OUString sProcName;
+    bool bFoundType = false;
+    bool bFoundName = false;
+    if( aPortions.size() != 0 )
+    {
+        for ( size_t i = 0; i < aPortions.size(); i++ )
         {
-            for ( size_t i = 0; i < aPortions.size(); i++ )
+            HighlightPortion& r = aPortions[i];
+            OUString sTokStr = aLine.copy(r.nBegin, r.nEnd - r.nBegin);
+            if( r.tokenType == 9 && ( sTokStr.equalsIgnoreAsciiCase("sub")
+                || sTokStr.equalsIgnoreAsciiCase("function")) )
             {
-                HighlightPortion& r = aPortions[i];
-                OUString sTokStr = aLine.copy(r.nBegin, r.nEnd - r.nBegin);
-                if( r.tokenType == 9 && ( sTokStr.equalsIgnoreAsciiCase("sub")
-                    || sTokStr.equalsIgnoreAsciiCase("function")) )
-                {
-                    sProcType = sTokStr;
-                    bFoundType = true;
-                }
-                if( r.tokenType == 1 && bFoundType )
-                {
-                    sProcName = sTokStr;
-                    bFoundName = true;
-                    break;
-                }
+                sProcType = sTokStr;
+                bFoundType = true;
             }
-            if( bFoundType && bFoundName )
-            {// found, search for end
-                if( nLine+1 == pEditEngine->GetParagraphCount() )
-                { //append to the end
-                    OUString sText("\nEnd ");
-                    if( sProcType.equalsIgnoreAsciiCase("function") )
-                        sText += OUString( "Function\n" );
-                    if( sProcType.equalsIgnoreAsciiCase("sub") )
-                        sText += OUString( "Sub\n" );
-                    pEditView->InsertText( sText );
-                }
-                else
+            if( r.tokenType == 1 && bFoundType )
+            {
+                sProcName = sTokStr;
+                bFoundName = true;
+                break;
+            }
+        }
+        if( bFoundType && bFoundName )
+        {// found, search for end
+            OUString sText("\nEnd ");
+            if( sProcType.equalsIgnoreAsciiCase("function") )
+                sText += OUString( "Function\n" );
+            if( sProcType.equalsIgnoreAsciiCase("sub") )
+                sText += OUString( "Sub\n" );
+
+            if( nLine+1 == pEditEngine->GetParagraphCount() )
+            { //append to the end
+                pEditView->InsertText( sText );
+            }
+            else
+            {
+                for( sal_uLong i = nLine+1; i < pEditEngine->GetParagraphCount(); ++i )
                 {
-                    for( sal_uLong i = nLine+1; i < pEditEngine->GetParagraphCount(); ++i )
+                    OUString aCurrLine = pEditEngine->GetText( i );
+                    HighlightPortions aCurrPortions;
+                    aHighlighter.getHighlightPortions( i, aCurrLine, aCurrPortions );
+                    if( aCurrPortions.size() >= 3 )
                     {
-                        OUString aCurrLine = pEditEngine->GetText( i );
-                        HighlightPortions aCurrPortions;
-                        aHighlighter.getHighlightPortions( i, aCurrLine, aCurrPortions );
-                        if( aCurrPortions.size() >= 3 )
-                        {
-                            HighlightPortion& r1 = aCurrPortions[0];
-                            OUString sStr1 = aCurrLine.copy(r1.nBegin, r1.nEnd - r1.nBegin);
+                        HighlightPortion& r1 = aCurrPortions[0];
+                        OUString sStr1 = aCurrLine.copy(r1.nBegin, r1.nEnd - r1.nBegin);
 
-                            if( r1.tokenType == 9 )
+                        if( r1.tokenType == 9 )
+                        {
+                            if( sStr1.equalsIgnoreAsciiCase("sub") )
                             {
-                                if( sStr1.equalsIgnoreAsciiCase("sub") )
-                                {
-                                    OUString sText("\nEnd ");
-                                    if( sProcType.equalsIgnoreAsciiCase("function") )
-                                        sText += OUString( "Function\n" );
-                                    if( sProcType.equalsIgnoreAsciiCase("sub") )
-                                        sText += OUString( "Sub\n" );
-                                    pEditView->InsertText( sText );
-                                    break;
-                                }
-                                if( sStr1.equalsIgnoreAsciiCase("function") )
-                                {
-                                    OUString sText("\nEnd ");
-                                    if( sProcType.equalsIgnoreAsciiCase("function") )
-                                        sText += OUString( "Function\n" );
-                                    if( sProcType.equalsIgnoreAsciiCase("sub") )
-                                        sText += OUString( "Sub\n" );
-                                    pEditView->InsertText( sText );
-                                    break;
-                                }
-                                if( sStr1.equalsIgnoreAsciiCase("end") )
-                                {
-                                    break;
-                                }
+                                pEditView->InsertText( sText );
+                                break;
+                            }
+                            if( sStr1.equalsIgnoreAsciiCase("function") )
+                            {
+                                pEditView->InsertText( sText );
+                                break;
+                            }
+                            if( sStr1.equalsIgnoreAsciiCase("end") )
+                            {
+                                break;
                             }
                         }
                     }
@@ -666,171 +724,129 @@ void EditorWindow::KeyInput( const KeyEvent& rKEvt )
             }
         }
     }
+}
 
-    if( rKEvt.GetKeyCode().GetCode() == KEY_POINT &&
-        (CodeCompleteOptions::IsCodeCompleteOn() || CodeCompleteOptions::IsExtendedTypeDeclaration()) )
-    {
-        rModulWindow.UpdateModule();
-        rModulWindow.GetSbModule()->GetCodeCompleteDataFromParse(aCodeCompleteCache);
-        TextSelection aSel = GetEditView()->GetSelection();
-        sal_uLong nLine =  aSel.GetStart().GetPara();
-        OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
-        std::vector< OUString > aVect;
+void EditorWindow::HandleCodeCompletition()
+{
+    rModulWindow.UpdateModule();
+    rModulWindow.GetSbModule()->GetCodeCompleteDataFromParse(aCodeCompleteCache);
+    TextSelection aSel = GetEditView()->GetSelection();
+    sal_uLong nLine =  aSel.GetStart().GetPara();
+    OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
+    std::vector< OUString > aVect;
 
-        HighlightPortions aPortions;
-        aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
-        if( aPortions.size() != 0 )
+    HighlightPortions aPortions;
+    aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
+    if( aPortions.size() != 0 )
+    {
+        for ( size_t i = 0; i < aPortions.size(); i++ )
         {
-            for ( size_t i = 0; i < aPortions.size(); i++ )
-            {
-                HighlightPortion& r = aPortions[i];
-                if( r.tokenType == 1 || r.tokenType == 9) // extract the identifers(methods, base variable)
-                /* an example: Dim aLocVar2 as com.sun.star.beans.PropertyValue
-                 * here, aLocVar2.Name, and PropertyValue's Name field is treated as a keyword(?!)
-                 * */
-                    aVect.push_back( aLine.copy(r.nBegin, r.nEnd - r.nBegin) );
-            }
+            HighlightPortion& r = aPortions[i];
+            if( r.tokenType == 1 || r.tokenType == 9) // extract the identifers(methods, base variable)
+            /* an example: Dim aLocVar2 as com.sun.star.beans.PropertyValue
+             * here, aLocVar2.Name, and PropertyValue's Name field is treated as a keyword(?!)
+             * */
+                aVect.push_back( aLine.copy(r.nBegin, r.nEnd - r.nBegin) );
+        }
 
-            OUString sBaseName = aVect[0];//variable name
-            OUString sVarType = aCodeCompleteCache.GetVarType( sBaseName );
-            if( !sVarType.isEmpty() && CodeCompleteOptions::IsAutoCorrectKeywordsOn() )//correct variable name
-            {
-                TextPaM aStart(nLine, aSel.GetStart().GetIndex() - sBaseName.getLength() );
-                TextSelection sTextSelection(aStart, TextPaM(nLine, aSel.GetStart().GetIndex()));
-                pEditEngine->ReplaceText( sTextSelection, aCodeCompleteCache.GetCorrectCaseVarName(sBaseName) );
-                pEditView->SetSelection( aSel );
-            }
+        OUString sBaseName = aVect[0];//variable name
+        OUString sVarType = aCodeCompleteCache.GetVarType( sBaseName );
+        if( !sVarType.isEmpty() && CodeCompleteOptions::IsAutoCorrectKeywordsOn() )//correct variable name
+        {
+            TextPaM aStart(nLine, aSel.GetStart().GetIndex() - sBaseName.getLength() );
+            TextSelection sTextSelection(aStart, TextPaM(nLine, aSel.GetStart().GetIndex()));
+            pEditEngine->ReplaceText( sTextSelection, aCodeCompleteCache.GetCorrectCaseVarName(sBaseName) );
+            pEditView->SetSelection( aSel );
+        }
 
-            Reference< lang::XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory(), UNO_SET_THROW );
-            Reference< reflection::XIdlReflection > xRefl( xFactory->createInstance("com.sun.star.reflection.CoreReflection"), UNO_QUERY_THROW );
+        Reference< lang::XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory(), UNO_SET_THROW );
+        Reference< reflection::XIdlReflection > xRefl( xFactory->createInstance("com.sun.star.reflection.CoreReflection"), UNO_QUERY_THROW );
 
-            if( xRefl.is() )
+        if( xRefl.is() )
+        {
+            Reference< reflection::XIdlClass > xClass = xRefl->forName(sVarType);//get the base class for reflection
+            if( xClass != NULL )
             {
-                Reference< reflection::XIdlClass > xClass = xRefl->forName(sVarType);//get the base class for reflection
-                if( xClass != NULL )
+                unsigned int j = 1;
+                OUString sMethName;
+                bool bReflect = true;
+                while( j != aVect.size() )
                 {
-                    unsigned int j = 1;
-                    OUString sMethName;
-                    bool bReflect = true;
-                    while( j != aVect.size() )
+                    sMethName = aVect[j];
+                    Reference< reflection::XIdlField> xField = xClass->getField( sMethName );
+                    if( xField != NULL )
                     {
-                        sMethName = aVect[j];
-                        Reference< reflection::XIdlField> xField = xClass->getField( sMethName );
-                        if( xField != NULL )
+                        xClass = xField->getType();
+                        if( xClass == NULL )
                         {
-                            xClass = xField->getType();
-                            if( xClass == NULL )
-                            {
-                                break;
-                            }
+                            break;
                         }
-                        else
+                    }
+                    else
+                    {
+                        if( CodeCompleteOptions::IsExtendedTypeDeclaration() )
                         {
-                            if( CodeCompleteOptions::IsExtendedTypeDeclaration() )
+                            Reference< reflection::XIdlMethod> xMethod = xClass->getMethod( sMethName );
+                            if( xMethod != NULL ) //method OK
                             {
-                                Reference< reflection::XIdlMethod> xMethod = xClass->getMethod( sMethName );
-                                if( xMethod != NULL ) //method OK
+                                xClass = xMethod->getReturnType();
+                                if( xClass == NULL )
                                 {
-                                    xClass = xMethod->getReturnType();
-                                    if( xClass == NULL )
-                                    {
-                                        break;
-                                    }
-                                }
-                                else
-                                {//nothing to reflect
-                                    bReflect = false;
                                     break;
                                 }
                             }
                             else
-                            {// no extended types allowed
+                            {//nothing to reflect
                                 bReflect = false;
                                 break;
                             }
                         }
-                        j++;
+                        else
+                        {// no extended types allowed
+                            bReflect = false;
+                            break;
+                        }
+                    }
+                    j++;
+                }
+                if( bReflect )
+                {
+                    std::vector< OUString > aEntryVect;//entries to be inserted into the list
+                    std::vector< OUString > aMethVect = GetXIdlClassMethods(xClass);//methods
+                    std::vector< OUString > aFieldVect = GetXIdlClassFields(xClass);//fields
+                    aEntryVect.insert(aEntryVect.end(), aFieldVect.begin(), aFieldVect.end() );
+                    if( CodeCompleteOptions::IsExtendedTypeDeclaration() )
+                    {// if extended types on, reflect classes, else just the structs (XIdlClass without methods)
+                        aEntryVect.insert(aEntryVect.end(), aMethVect.begin(), aMethVect.end() );
                     }
-                    if( bReflect )
+                    if( aEntryVect.size() > 0 )
                     {
-                        std::vector< OUString > aEntryVect;//entries to be inserted into the list
-                        std::vector< OUString > aMethVect = GetXIdlClassMethods(xClass);//methods
-                        std::vector< OUString > aFieldVect = GetXIdlClassFields(xClass);//fields
-                        aEntryVect.insert(aEntryVect.end(), aFieldVect.begin(), aFieldVect.end() );
-                        if( CodeCompleteOptions::IsExtendedTypeDeclaration() )
-                        {// if extended types on, reflect classes, else just the structs (XIdlClass without methods)
-                            aEntryVect.insert(aEntryVect.end(), aMethVect.begin(), aMethVect.end() );
-                        }
-                        if( aEntryVect.size() > 0 )
+                        // calculate position
+                        Rectangle aRect = ( (TextEngine*) GetEditEngine() )->PaMtoEditCursor( aSel.GetEnd() , false );
+                        long nViewYOffset = pEditView->GetStartDocPos().Y();
+                        Point aPoint = aRect.BottomRight();
+                        aPoint.Y() = aPoint.Y() - nViewYOffset;
+                        aPoint.Y() += 2;
+                        aSel.GetStart().GetIndex() += 1;
+                        aSel.GetEnd().GetIndex() += 1;
+                        pCodeCompleteWnd->ClearListBox();
+                        pCodeCompleteWnd->SetTextSelection(aSel);
+                        //fill the listbox
+                        for(unsigned int l = 0; l < aEntryVect.size(); ++l)
                         {
-                            // calculate position
-                            Rectangle aRect = ( (TextEngine*) GetEditEngine() )->PaMtoEditCursor( aSel.GetEnd() , false );
-                            long nViewYOffset = pEditView->GetStartDocPos().Y();
-                            Point aPoint = aRect.BottomRight();
-                            aPoint.Y() = aPoint.Y() - nViewYOffset;
-                            aPoint.Y() += 2;
-                            aSel.GetStart().GetIndex() += 1;
-                            aSel.GetEnd().GetIndex() += 1;
-                            pCodeCompleteWnd->ClearListBox();
-                            pCodeCompleteWnd->SetTextSelection(aSel);
-                            //fill the listbox
-                            for(unsigned int l = 0; l < aEntryVect.size(); ++l)
-                            {
-                                pCodeCompleteWnd->InsertEntry( aEntryVect[l] );
-                            }
-                            //show it
-                            pCodeCompleteWnd->SetPosPixel( aPoint );
-                            pCodeCompleteWnd->Show();
-                            pCodeCompleteWnd->ResizeListBox();
-                            pCodeCompleteWnd->SelectFirstEntry();
-                            pEditView->GetWindow()->GrabFocus();
+                            pCodeCompleteWnd->InsertEntry( aEntryVect[l] );
                         }
+                        //show it
+                        pCodeCompleteWnd->SetPosPixel( aPoint );
+                        pCodeCompleteWnd->Show();
+                        pCodeCompleteWnd->ResizeListBox();
+                        pCodeCompleteWnd->SelectFirstEntry();
+                        pEditView->GetWindow()->GrabFocus();
                     }
                 }
             }
         }
     }
-    if ( !bDone && ( !TextEngine::DoesKeyChangeText( rKEvt ) || ImpCanModify()  ) )
-    {
-        if ( ( rKEvt.GetKeyCode().GetCode() == KEY_TAB ) && !rKEvt.GetKeyCode().IsMod1() &&
-              !rKEvt.GetKeyCode().IsMod2() && !GetEditView()->IsReadOnly() )
-        {
-            TextSelection aSel( pEditView->GetSelection() );
-            if ( aSel.GetStart().GetPara() != aSel.GetEnd().GetPara() )
-            {
-                bDelayHighlight = false;
-                if ( !rKEvt.GetKeyCode().IsShift() )
-                    pEditView->IndentBlock();
-                else
-                    pEditView->UnindentBlock();
-                bDelayHighlight = true;
-                bDone = true;
-            }
-        }
-        if ( !bDone )
-            bDone = pEditView->KeyInput( rKEvt );
-    }
-    if ( !bDone )
-    {
-            Window::KeyInput( rKEvt );
-    }
-    else
-    {
-        if (SfxBindings* pBindings = GetBindingsPtr())
-        {
-            pBindings->Invalidate( SID_BASICIDE_STAT_POS );
-            if ( rKEvt.GetKeyCode().GetGroup() == KEYGROUP_CURSOR )
-                pBindings->Update( SID_BASICIDE_STAT_POS );
-            if ( !bWasModified && pEditEngine->IsModified() )
-            {
-                pBindings->Invalidate( SID_SAVEDOC );
-                pBindings->Invalidate( SID_DOC_MODIFIED );
-                pBindings->Invalidate( SID_UNDO );
-            }
-            if ( rKEvt.GetKeyCode().GetCode() == KEY_INSERT )
-                pBindings->Invalidate( SID_ATTR_INSERT );
-        }
-    }
 }
 
 std::vector< OUString > EditorWindow::GetXIdlClassMethods( Reference< reflection::XIdlClass > xClass ) const
@@ -2653,7 +2669,6 @@ void CodeCompleteListBox::SetVisibleEntries()
 
 void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt )
 {
-    //std::cerr << "CodeCompleteListBox::KeyInput" << std::endl;
     sal_Unicode aChar = rKeyEvt.GetKeyCode().GetCode();
     if( ( aChar >= KEY_A ) && ( aChar <= KEY_Z ) )
     {
@@ -2762,8 +2777,9 @@ void CodeCompleteWindow::ResizeListBox()
         const Font& aFont = pListBox->GetUnzoomedControlPointFont();
 
         Rectangle aVisArea( pParent->GetEditView()->GetStartDocPos(), pParent->GetOutputSizePixel() );
-        Size aSize = pListBox->CalcSize( nColumns+1, nLines );
-        aSize.setWidth(nWidth+5);
+        Size aSize = pListBox->GetOptimalSize();//this sets the correct width
+        aSize.setHeight( pListBox->CalcSize( nColumns, nLines ).getHeight() );
+
         Point aBottomPoint = aVisArea.BottomRight();
         Point aTopPoint = aVisArea.TopRight();
         long nYDiff = std::abs((aBottomPoint.Y() - aTopPoint.Y()) - GetPosPixel().Y());


More information about the Libreoffice-commits mailing list